gpt4 book ai didi

openai-api - 使用 langchain 时,map_reduce 无法按预期工作

转载 作者:行者123 更新时间:2023-12-02 05:48:59 27 4
gpt4 key购买 nike

我正在尝试使用 langchain 和 chatgpt 提取有关 csv 的信息。

如果我只使用几行代码并使用“stuff”方法,它就可以完美地工作。但是当我将整个 csv 与 map_reduce 一起使用时,大多数问题都会失败。

我当前的代码如下:

queries = ["Tell me the name of every driver who is German","how many german drivers are?",  "which driver uses the number 14?", "which driver has the oldest birthdate?"]

import os

from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv()) # read local .env file

from langchain.document_loaders import CSVLoader
from langchain.callbacks import get_openai_callback
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.vectorstores import Chroma

files = ['drivers.csv','drivers_full.csv']

for file in files:
print("=====================================")
print(file)
print("=====================================")
with get_openai_callback() as cb:

loader = CSVLoader(file_path=file,encoding='utf-8')
docs = loader.load()

from langchain.embeddings.openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

# create the vectorestore to use as the index
db = Chroma.from_documents(docs, embeddings)
# expose this index in a retriever interface
retriever = db.as_retriever(search_type="similarity", search_kwargs={"k":1000, "score_threshold":"0.2"})

for query in queries:
qa_stuff = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0,batch_size=20),
chain_type="map_reduce",
retriever=retriever,
verbose=True
)

print(query)
result = qa_stuff.run(query)

print(result)

print(cb)

如果无法回答有多少德国司机,则司机号码为 14,出生日期最长。而且成本也很大(8美元!!!)

这里有代码: https://github.com/pablocastilla/langchain-embeddings/blob/main/langchain-embedding-full.ipynb

最佳答案

“map_reduce”的工作方式是,它首先在每个文档上调用 llm 函数(“map”部分),然后收集每个调用的答案以产生最终答案(“reduce”部分)。请参阅LangChain Map Reduce type

LangChain的CSVLoader以这样的方式分割CSV数据源,使得每一行都成为一个单独的文档。这意味着如果您的 CSV 有 10000 行,那么它将调用 OpenAI API 10001 次(map 10000 次,reduce 1 次)。而且,并不是所有的问题都可以用map-reduce的方式来回答,比如“有多少”,“最大的是什么”等,这需要数据聚合。

我认为你必须使用“stuff”链类型。 “gpt-3.5-turbo-16k”很好用,它支持 16K 上下文窗口,而且比您选择的 OpenAI 便宜得多。

注意 gpt-3.5-turbo-16k 是一个聊天模型,因此您必须使用 ChatOpenAI 而不是 OpenAI。

关于openai-api - 使用 langchain 时,map_reduce 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76456041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com