from langchain.vectorstores import Chromafrom langchain.embeddings.openai import OpenAIEmbeddings#将切割好的文件块嵌入到向量数据库中,chroma dbdb = Chroma.from_documents(texts, OpenAIEmbeddings(disallowed_special=()))#定义如何查询代码retriever = db.as_retriever(#Maximal Marginal Relevance (最大边际相关性)= 相关性 + 多样性search_type="mmr",# Also test "similarity"#控制在检索中返回的文档数量search_kwargs={"k":8},)不仅如此,还针对向量数据库创建了Retriever 作为索引器,帮助后续查找 。其中有两个参数,第一个search_type定义的是mmr,这个是Maximal Marginal Relevance (最大边际相关性)的缩写 。它是一种相关性查询的方式,同时考虑了查询目标的相关性和多样性 。还有一个参数search_kwargs 定义了k 为8 , 这个是匹配相关文档的数量 。
利用大模型进行查询经过上面的步骤离我们的目标已经不远了 。创建GPT-3.5-Turbo模型的查询是当务之急 。如下代码所示,引入ChatOpenAI函数创建GPT-3.5-Turbo的模型实体 。接着使用ConversationSummaryMemory创建有记忆的对话,最重要的是使用ConversationalRetrievalChain,从名字上可以看出来是基于对话的索引器,它以Chain的方式存在 。Chain是LangChain的核心组件,用来将其他组件,例如:Model I/O,DataConnection,Agent等组合使用 。这里它将大模型(LLM),索引器(Retriever)以及记忆组件(Memory)整合在一起进行问答响应 。
#调用llm gpt-3.5-turbo 进行查询from langchain.chat_models import ChatOpenAIfrom langchain.memory import ConversationSummaryMemoryfrom langchain.chains import ConversationalRetrievalChainllm = ChatOpenAI(model_name="gpt-3.5-turbo")memory = ConversationSummaryMemory(llm=llm,memory_key="chat_history",return_messages=True)#定义大语言模型 , 查询方式 , 记忆方式qa = ConversationalRetrievalChain.from_llm(llm,retriever=retriever,memory=memory)返回查询结果万事俱备只欠东风 , 我们通过如下代码开始提问 。
question ="我如何处初始化 ReAct agent?"result = qa(question)result['answer']GPT-3.5-Turbo的回复如下:
要初始化 ReAct agent , 您可以使用以下代码:from langchain.agents.react_agent import ReActDocstoreAgentfrom langchain.tools import LookupTool, SearchTool# 创建 LookupTool 和 SearchToollookup_tool = LookupTool()search_tool = SearchTool()# 创建 ReAct agentreact_agent =ReActDocstoreAgent(tools=[lookup_tool, search_tool])在上述代码中,我们首先导入 ReActDocstoreAgent 类和所需的工具类 LookupTool 和 SearchTool 。然后,我们创建了这些工具的实例,并将它们作为参数传递给 ReActDocstoreAgent 的构造函数,从而初始化了 ReAct agent 。回复中告诉我们要引入哪些类,以及ReAct Agent初始化需要依赖的类以及函数,把类和函数之间的依赖关系说清楚了 。
总结本文介绍了如何利用LangChain和GPT-3.5-Turbo来理解大型代码库 。首先,我们下载了LangChain代码库并在VS Code中导入 。然后,通过安装必要的依赖包,如OpenAI、Tiktoken、ChromaDB和LangChain,为后续操作做准备 。接着,我们加载LangChain的源代码文件,包括使用LanguageParser进行解析 。随后,我们将代码文件切割成小块,以满足大模型的输入要求 。这些切割后的代码块被嵌入到Chroma向量数据库中,并创建了一个用于查询的Retriever,它使用Maximal Marginal Relevance进行相关性查询,并限制返回的文档数量 。最后,我们使用GPT-3.5-Turbo来进行代码库的查询,实现了代码的问答和解释,使代码库的理解变得更加容易 。
作者介绍崔皓,51CTO社区编辑,资深架构师 , 拥有18年的软件开发和架构经验,10年分布式架构经验 。
推荐阅读
- Docker优秀实践:掌握这七个技巧让你成为容器化大师
- 17名医生都没能诊断出的病,竟被ChatGPT破解,AI医疗的潜力有多大?
- 大白话说明白K8S的PV / PVC / StorageClass
- 手镯大小、形状与材质:和谐搭配的关键
- 曝霍启山和何超欣联姻,差三辈被质疑,三大因素注定霍家门不易进
- 28岁男星否认出轨!狗仔偷拍导致大乌龙,直指女友是出轨对象
- 于和伟这位大器晚成的演员备受欢迎,祝福他越来越好
- 大厨绝招 巧用蚝油添鲜味
- 大厨醒你 煮食秘籍
- 秋喝“大枣姜汤”暖手脚!
