如何向 RetrievalQA.from_chain_type 添加内存?或者,如何向 ConversationalRetrievalChain 添加自定义提示?
在过去的两周里,我一直在尝试制作一个可以通过文档聊天的聊天机器人(因此不仅仅是语义搜索/质量保证,因此需要记忆),而且还可以使用自定义提示。我已经尝试了所有链的每种组合,到目前为止,我得到的最接近的是 ConversationalRetrievalChain,但没有自定义提示,以及 RetrievalQA.from_chain_type 但没有内存
我已经使用 Chroma DB 编写了 LangChain 代码来矢量存储网站 URL 中的数据。目前,它可以从 URL 获取数据,将其存储到项目文件夹中,然后使用该数据来响应用户提示。我弄清楚了如何使该数据在运行后保留/存储,但我不知道如何加载该数据以供将来提示。目标是接收用户输入,使用 OpenAI LLM 的程序将根据现有数据库文件生成响应,而不是程序需要在每次运行时创建/写入这些数据库文件。如何才能做到这一点?
我应该怎么办?
我尝试了这个,因为这可能是理想的解决方案:
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", vectorstore=vectordb)
Run Code Online (Sandbox Code Playgroud)
但该from_chain_type()函数不接受vectorstore数据库作为输入,因此这不起作用。
我正在使用 langchain 来处理 Mongo 数据库中的一大堆文档。
我可以使用 langchain 将所有文档加载到 chromadb 矢量存储中。这里没有什么花哨的事情。这是我的代码:
from langchain.embeddings.openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
from langchain.vectorstores import Chroma
db = Chroma.from_documents(docs, embeddings, persist_directory='db')
db.persist()
Run Code Online (Sandbox Code Playgroud)
现在,存储数据后,我想获取所有带有 id 的文档和嵌入的列表。
这样我就可以将它们存储回 MongoDb 中。
我还想将它们通过 Bertopic 来获取主题类别。
问题1:如何获取刚刚存储在Chroma 数据库中的所有文档?我想要文档和所有元数据。
非常感谢您的帮助!
我在 langchain 中编写了一个应用程序,它将多个链传递给顺序链来运行。我遇到的问题是提示太大,超出了 4K 令牌限制大小。我看到 OpenAI 为 ChatGPT 发布了一个新的 16K 令牌窗口大小的模型,但我似乎无法从 API 访问它。当我尝试时,出现以下错误:
openai.error.InvalidRequestError:这是一个聊天模型,v1/completions 端点不支持。您的意思是使用 v1/chat/completions 吗?
这是我尝试实例化模型的方式:
self.llm = OpenAI(model='gpt-3.5-turbo-16k',temperature = self.config.llm.temperature,
openai_api_key = self.config.llm.openai_api_key,
max_tokens=self.config.llm.max_tokens
)
Run Code Online (Sandbox Code Playgroud)
有人知道我该如何解决这个问题吗?
我正在尝试在 Langchain 中加载 JSON 文件的文件夹,如下所示:
loader = DirectoryLoader(r'C:...')
documents = loader.load()
Run Code Online (Sandbox Code Playgroud)
但我收到这样的错误消息:
ValueError:Json 架构与非结构化架构不匹配
谁能告诉我如何解决这个问题?
我尝试使用glob='**/*.json',但它不起作用。Langchain 网站上的文档也很有限。
我正在使用Langchainversion 0.218,并且想知道是否有人能够在运行时动态过滤种子向量库?例如当由代理运行时。
我的动机是将这个动态过滤器放入对话检索 QA 链中,在其中我使用filename从对话输入中提取的内容来过滤检索器并检索其所有块(使用映射器文件k设置为属于search_kwargs中文件名的块的计数)。
我可以手动过滤种子向量库(如 Chroma) ,例如:
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
# init a vectorstore and seed documents
vectorstore = Chroma.from_documents(..)
# 'somehow' I get hands on the filename from user input or chat history
found_filename = "report.pdf"
# filter using a search arg, such as 'filename' provided in the metadata of all chunks
file_chunk_mapper = {"report.pdf" : ["chunk1", "chunk2", ... ] …Run Code Online (Sandbox Code Playgroud) information-retrieval artificial-intelligence chaining large-language-model py-langchain
我正在尝试构建一个可以讨论 pdf 的聊天机器人,并且我让它与内存一起使用ConversationBufferMemory,ConversationalRetrievalChain就像本例中一样。https://python.langchain.com/en/latest/modules/chains/index_examples/chat_vector_db.html
现在我试图给人工智能一些特殊的指令,让它像海盗一样说话(只是为了测试它是否收到指令)。我认为这应该是一个SystemMessage,或者带有提示模板的东西?
我已经尝试了我发现的所有内容,但文档中的所有示例都是针对的ConversationChain,但我最终遇到了问题。到目前为止,唯一没有出现任何错误的是:
template = """Given the following conversation respond to the best of your ability in a pirate voice and end every sentence with Ay Ay Matey
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""
PROMPT = PromptTemplate(
input_variables=["chat_history", "question"], template=template
)
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True, output_key='answer')
qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0), vectorstore.as_retriever(), PROMPT, memory=memory, return_source_documents=True)
Run Code Online (Sandbox Code Playgroud)
它仍然对结果没有任何影响,所以我不知道它是否有任何作用。我还认为这是错误的方法,我应该使用SystemMessages (也许在内存上,而不是在 qa 上),但我从文档中尝试的任何操作都不起作用,我不知道该怎么做。
请耐心等待,因为这确实是我编写的第一个主要代码,并且是针对 OpenAI 的 ChatGPT API 的。
我打算用这段代码做的是加载一个pdf文档或一组pdf文档。然后把它们分开,以免用完我的代币。然后,用户会提出与所述文档相关的问题,机器人会做出回应。我遇到的问题是,我希望机器人在我提出新问题时能够理解上下文。例如: Q1:什么是瓢虫?A1:瓢虫是甲虫的一种等等等等...... Q2:它们是什么颜色的?A2:它们可以有各种颜色等等等等... Q3:在哪里可以找到它们?A3:瓢虫遍布世界各地......
但我似乎无法启动并运行我的代码。相反,这是我得到的输出: 当我提出需要机器人了解上下文的后续问题时我得到什么
**这是代码:**
import os
import platform
import openai
import gradio as gr
import chromadb
import langchain
from langchain.chat_models import ChatOpenAI
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import TokenTextSplitter
from langchain.document_loaders import PyPDFLoader
from langchain.prompts.prompt import PromptTemplate
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
#OpenAI API Key goes here
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxx'
#load the data here.
def get_document():
loader = PyPDFLoader('docs/ladybug.pdf')
data = loader.load()
return …Run Code Online (Sandbox Code Playgroud) 我正在使用文档加载器执行微服务,当尝试导入 langchain 的 UnstructedMarkdownLoader 时,应用程序无法在导入级别启动
\n$ flask --app main run --debug\nTraceback (most recent call last):\n File "venv/bin/flask", line 8, in <module>\n sys.exit(main())\n File "venv/lib/python3.9/site-packages/flask/cli.py", line 1063, in main\n cli.main()\n File "venv/lib/python3.9/site-packages/click/core.py", line 1055, in main\n rv = self.invoke(ctx)\n File "venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke\n return _process_result(sub_ctx.command.invoke(sub_ctx))\n File "venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke\n return ctx.invoke(self.callback, **ctx.params)\n File "venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke\n return __callback(*args, **kwargs)\n File "venv/lib/python3.9/site-packages/click/decorators.py", line 84, in new_func\n return ctx.invoke(f, obj, *args, **kwargs)\n File "venv/lib/python3.9/site-packages/click/core.py", line 760, …Run Code Online (Sandbox Code Playgroud) 我是 LangChain 的新手,我正在尝试创建一个简单的问答机器人(通过文档)。按照他们网站上的文档和指南,我创建了一个简单的工作机器人,但我很难理解代码的某些部分。
template = """Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Use three sentences maximum and keep the answer as concise as possible.
Always say "thanks for asking!" at the end of the answer.
{context}
Question: {question}
Helpful Answer:"""
QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context", "question"], template=template)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
qa = RetrievalQA.from_chain_type(llm,
chain_type='stuff',
retriever=vectorstore.as_retriever(),
chain_type_kwargs={"prompt": …Run Code Online (Sandbox Code Playgroud) py-langchain ×10
langchain ×7
python ×5
openai-api ×3
chatgpt-api ×2
chromadb ×2
chaining ×1
flask ×1
pydantic ×1
python-3.x ×1