金融培训网站源码,个人网站页面设计需要那些步骤,网站淘客宝怎么做,长春网站开发senluowx介绍基于 LangChain 框架的文档检索与问答功能#xff0c;目标是通过查询存储的向量数据库#xff08;VectorDB#xff09;#xff0c;为用户的问题检索相关内容#xff0c;并生成自然语言的答案。以下是代码逻辑的详细解析#xff1a; 代码结构与功能
初始化环境与加载…介绍基于 LangChain 框架的文档检索与问答功能目标是通过查询存储的向量数据库VectorDB为用户的问题检索相关内容并生成自然语言的答案。以下是代码逻辑的详细解析 代码结构与功能
初始化环境与加载配置from dotenv import load_dotenv
load_dotenv()os.environ[OPENAI_API_KEY] os.getenv(OPENAI_API_KEY)使用 dotenv 加载 .env 文件中的环境变量如 OPENAI_API_KEY 和 OPENAI_API_BASE。将 OpenAI API 密钥设置为环境变量供后续使用。 加载向量数据库VECTORDB_DIR data/airline_policy_vectordb
K 2vectordb Chroma(collection_namerag-chroma,persist_directorystr(here(VECTORDB_DIR)),embedding_functionOpenAIEmbeddings()
)
print(Number of vectors in vectordb:, vectordb._collection.count(), \n\n)VECTORDB_DIR向量数据库的存储目录。K2设置检索时返回的文档数。使用 Chroma 加载向量数据库 collection_name 指定集合名称。persist_directory 指向存储数据库的目录。embedding_function 使用 OpenAIEmbeddings 生成向量嵌入。 打印向量数据库中存储的向量数量。 检索文档并生成提示message What is the cancelation rule for a flight ticket at swiss airline policy?docs vectordb.similarity_search(message, kK)question # User new question:\n message
retrieved_content
for doc in docs:retrieved_content f{doc.page_content}\n\n
prompt f# Content:\n{retrieved_content}\n\n{question}pprint(prompt)定义用户问题 message这是需要检索和回答的问题。检索文档 使用 vectordb.similarity_search 在向量数据库中查找与问题最相似的文档返回 K 个相关文档。 生成提示 将用户问题和检索到的文档内容整合为一个提示prompt格式如下# Content:
检索到的文档内容# User new question:
用户问题部分代码执行结果如下 调用聊天模型生成答案from langchain_openai import ChatOpenAIchat ChatOpenAI(openai_api_baseos.getenv(OPENAI_API_BASE),openai_api_keyos.getenv(OPENAI_API_KEY),temperature0
)messages [{role: system, content: You will receive a users query and possible content where the answer might be. If the answer is found, provide it, if not, state that the answer does not exist.},{role: user, content: prompt}
]response chat.invoke(messages)
print(response)使用 ChatOpenAI 调用 OpenAI 的聊天模型。定义对话上下文 系统消息告诉模型用户会提供问题和可能的内容要求模型判断答案是否存在。用户消息将生成的提示作为输入。 调用 chat.invoke 生成回答并打印。 定义工具函数from langchain_core.tools import tooltool
def lookup_swiss_airline_policy(query: str) - str:Search within the Swiss Airlines company policies to check whether certain options are permitted. Input should be a search query.vectordb Chroma(collection_namerag-chroma,persist_directorystr(here(VECTORDB_DIR)),embedding_functionOpenAIEmbeddings())docs vectordb.similarity_search(query, kK)return \n\n.join([doc.page_content for doc in docs])使用 tool 装饰器创建一个可复用工具函数。功能 接受查询 query。从向量数据库中检索相关文档。返回检索到的文档内容。 说明信息提供关于工具功能的描述供其他程序或用户调用时参考。 工具函数的调用print(lookup_swiss_airline_policy.name)
print(lookup_swiss_airline_policy.args)
print(lookup_swiss_airline_policy.description)pprint(lookup_swiss_airline_policy.invoke(can I cancel my ticket?))打印工具的元信息名称、参数、描述。调用 lookup_swiss_airline_policy.invoke检索 “can I cancel my ticket?” 的相关内容并打印结果。
工具函数的执行结果 运行流程总结
加载向量数据库并初始化嵌入模型。用户输入问题。从数据库中检索与问题相关的文档。将问题和文档内容发送至聊天模型生成答案。定义工具函数供后续复用。 用途与适用场景
用途实现基于文档的问答系统用于快速查询特定文档的内容。适用场景 公司政策文档检索如航空政策。产品说明文档或技术支持文档查询。法律条款、合同内容等信息的检索与问答。