AI大模型(LLMs)学习笔记——LangChain开源框架和智能Agent

📅 2026/8/27 14:04:28
AI大模型(LLMs)学习笔记——LangChain开源框架和智能Agent
一.LangChain简介1.什么是 LangChain?LangChain是一个强大的框架旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互将多个组件链接在一起 并集成额外的资源例如 API 和数据库。2.LangChain 核心概念1Components and ChainsComponent 模块化的构建块可以组合起来创建强大的应用程序Chain 组合在一起以完成特定任务的一系列 Components。2LangChain 中 Prompt Templates and ValuesPrompt Template 作用负责创建 PromptValue这是最终传递给语言模型的内容 。Prompt Template 特点有助于将用户输入和其他动态信息转换为适合语言模型的格式。PromptValues 是具有方法的类这些方 法可以转换为每个模型类型期望的确切输入类型如文本或聊天消息。注一个 Chain 可能包括一个 Prompt 模板、一个语言模型和一个输出解析器它们一起工作以处理用户输入、生成 响应并处理输出。3Example Selectors接受用户输入并返回一个示例列表以在提示中使用使其更强大和特定于上下文。4 Output Parsers作用负责将语言模型响应构建为更有用的格式。实现方法一种用于提供格式化指令另一种用于将语言模型的响应解析为结构化格式 。特点使得在您的应用程序中处理输出数据变得更加容易。5 Indexes and RetrieversIndex 一种组织文档的方式使语言模型更容易与它们交互Retrievers用于获取相关文档并将它们与语言模型组合的接口注LangChain 提供了用于处理不同类型的索引和检索器的工具和功能例如矢量数据库和文本拆分器。6 Chat Message HistoryChat Message History 作用负责记住所有以前的聊天交互数据然后可以将这些交互数据传递回模型、汇总或以其他方式组合。优点有助于维护上下文并提高模型对对话的理解。7 Agents and ToolkitsAgent 在 LangChain 中推动决策制定的实体。他们可以访问一套工具并可以根据用户输入决定调用哪个工具。Tookits 一组工具当它们一起使用时可以完成特定的任务。代理执行器负责使用适当的工具运行代理。通过理解和利用这些核心概念可以利用 LangChain 的强大功能来构建适应性强、高效且能够处理复杂用例的高级语言模型应用程 序。3.什么是 LangChain Agent?介绍LangChain Agent 是框架中驱动决策制定的实体。它可以访问一组工具并可以根据用户的输入决定调用哪个工具。优点LangChain Agent 帮助构建复杂的应用程序这些应用程序需要自适应和特定于上下文的响应。当存在取决于用户输入和其 他因素的未知交互链时它们特别有用。4. 如何使用 LangChain要使用 LangChain开发人员首先要导入必要的组件和工具例如 LLMs, chat models, agents, chains, 内存功能。这些组件组合起来 创建一个可以理解、处理和响应用户输入的应用程序。5. LangChain 支持哪些功能针对特定文档的问答根据给定的文档回答问题使用这些文档中的信息来创建答案。聊天机器人构建可以利用 LLM 的功能生成文本的聊天机器人。Agents开发可以决定行动、采取这些行动、观察结果并继续执行直到完成的代理。6. 什么是 LangChain modelLangChain model 是一种抽象表示框架中使用的不同类型的模型。LangChain 中的模型主要分为三类1LLM大型语言模型这些模型将文本字符串作为输入并返回文本字符串作为输出。它们是许多语言模型应用程序的支柱。2聊天模型( Chat Model)聊天模型由语言模型支持但具有更结构化的 API。他们将聊天消息列表作为输入并返回聊天消息。这使 得管理对话历史记录和维护上下文变得容易。3文本嵌入模型(Text Embedding Models)这些模型将文本作为输入并返回表示文本嵌入的浮点列表。这些嵌入可用于文档检索、 聚类和相似性比较等任务。开发人员可以为他们的用例选择合适的 LangChain 模型并利用提供的组件来构建他们的应用程序。7. LangChain 包含哪些特点?1LLM 和提示LangChain 使管理提示、优化它们以及为所有 LLM 创建通用界面变得容易。此外它还包括一些用于处理 LLM 的便 捷实用程序。2链(Chain)这些是对 LLM 或其他实用程序的调用序列。LangChain 为链提供标准接口与各种工具集成为流行应用提供端到端 的链。3数据增强生成LangChain 使链能够与外部数据源交互以收集生成步骤的数据。例如它可以帮助总结长文本或使用特定数据源回 答问题。4AgentsAgents 让 LLM 做出有关行动的决定采取这些行动检查结果并继续前进直到工作完成。LangChain 提供了代理的标 准接口多种代理可供选择以及端到端的代理示例。5内存LangChain 有一个标准的内存接口有助于维护链或代理调用之间的状态。它还提供了一系列内存实现和使用内存的链或代 理的示例。6评估很难用传统指标评估生成模型。这就是为什么 LangChain 提供提示和链来帮助开发者自己使用 LLM 评估他们的模型。8. LangChain的使用1LangChain调用 LLMs 生成回复# 官方llm使用OPENAI 接口fromlangchain.llmsimportOpenAI llmOpenAI(model_nametext-davinci-003)prompt你好responsellm(prompt)# 你好我是chatGPT,很高兴能够和你聊天。有什么我可以帮助你的吗# 用chatglm来演示该过程封装一下即可fromtransformersimportAutoTokenizer,AutoModelclasschatGLM():definit(self,model_name)-None:self.tokenizerAutoTokenizer.from_pretrained(model_name,trust_remote_codeTrue)self.modelAutoModel.from_pretrained(model_name,trust_remote_codeTrue).half().cuda().eval()defcall(self,prompt)-Any:response,_self.model.chat(self.tokenizer,prompt)# 这里演示未使用流式接口. stream_chat()returnresponse llmchatGLM(model_nameTHUDM/chatglm-6b)prompt你好responsellm(prompt)print(response: %s%response)“”“ response:你好 我是人工智能助手 ChatGLM-6B很高兴见到你欢迎问我任何问题。”“”2LangChain 修改提示模板fromlangchainimportPromptTemplate template Explain the concept of {concept} in couple of lines promptPromptTemplate(input_variables[concept],templatetemplate)promptprompt.format(conceptregularization)print(“prompt%s”%prompt)#\nExplain the concept of regularization in couple of lines\ntemplate请给我解释一下{concept}的意思promptPromptTemplate(input_variables[concept],templatetemplate)promptprompt.format(concept人工智能)print(prompt%s%prompt)# 请给我解释一下人工智能的意思3LangChain 链接多个组件处理一个特定的下游任务#chains ---------fromlangchain.chainsimportLLMChain chainLLMChain(llmopenAI(),promptpromptTem)print(chain.run(你好))#chains Chatglm对象不符合LLMChain类llm对象要求模仿一下classDemoChain():definit(self,llm,prompt)None:self.llmllm self.promptpromptdefrun(self,query)Any:promptself.prompt.format(conceptquery)print(query%s prompt%s%(query,prompt))responseself.llm(prompt)returnresponse chainDemoChain(llmllm,promptpromptTem)print(chain.run(query天道酬勤))“”“ query天道酬勤prompt请给我解释一下天道酬勤的意思 天道酬勤是指自然界的规律认为只要一个人勤奋努力就有可能会获得成功。这个成语的意思是说尽管一个人可能需要付出很多努力才能取得成功但只要他/她坚持不懈地努力就有可 能会得到回报。 ”“”4LangChain Embedding vector store# 官方示例代码用的OpenAI的ada的文本Embedding模型# 1 Embeding modelfromlangchain.embeddingsimportOpenAIEmbeddings embeddingsOpenAIEmbeddings(model_nameada)query_resultembeddings.embed_query(你好)# 2) 文本切割fromlangchain.text_splitterimportRecursiveCharacterTextSplitter text_splitterRecursiveCharacterTextSplitter(chunk_size100,chunk_overlap0)texts天道酬勤并不是鼓励人们不劳而获而是提醒人们要遵循自然规律通过不断的努力和付出来追求自己的目标。\n这种努力不仅仅是指身体上的劳动 也包括精神上的努力和思考以及学习和适应变化的能力。\n只要一个人具备这些能力他就有可能会获得成功。textstext_splitter.create_documents([texts])print(texts[0].page_content)# 3)入库检索官方使用的Pinecone,他提供一个后台管理界面 | 用户需求太大不好用了已经一直加载中....importpineconefromlangchain.vectorstoresimportPinecone pinecone.init(api_keyos.getenv(),enviromentos.getenv())index_namedemosearchPinecone.from_documents(textstexts,embeddings,index_nameindex_name)queryWhat is magical about an autoencoder?resultsearch.similarity_search(query)# 这里参考langchain-chatglm代码# 1 Embedding model: text2vec-large-chinesefromlangchain.embeddings.huggingfaceimportHuggingFaceEmbeddings embeddingsHuggingFaceEmbeddings(model_nameGanymedeNil/text2vec-large-chinese,model_kwargs{device:cuda})query_resultembeddings.embed_query(你好)# 2)文本分割 这里仅为了方便快速看流程实际应用的会复杂一些texts天道酬勤并不是鼓励人们不劳而获而是提醒人们要遵循自然规律通过不断的努力和付出来追求自己的目标。\n这种努力不仅仅是指身体上的劳动 也包括精神上的努力和思考以及学习和适应变化的能力。\n只要一个人具备这些能力他就有可能会获得成功。fromlangchain.text_splitterimportCharacterTextSplitterfromlangchain.docstore.documentimportDocumentclassTextSpliter(CharacterTextSplitter):def__init__(self,separator:str\n\n,**kwargs:Any):super().__init__(separator,**kwargs)defsplit_text(self,text:str)-List[str]:textstext.split(\n)texts[Document(page_contenttext,metadata{”from“:知识库.txt})fortextintexts]returntexts text_splitterTextSpliter()textstext_splitter.split_text(texts)#3) 直接本地存储vs_path./demo-vsfromlangchain.vectorstoresimportFAISS docsembeddings.embed_documents(sentences)vector_storeFAISS.from_documents(texts,embeddings)vector_store.save_local(vs_path)vector_storeFAISS.load_local(vs_path,embeddings)related_docs_with_scorevector_store.similarity_search_with_score(query,k2)9. LangChain存在哪些问题及方法1 LangChain 低效的令牌使用问题问题Langchain的一个重要问题是它的令牌计数功能对于小数据集来说它的效率很低。虽然一些开发人员选择创建自己的令 牌计数函数但也有其他解决方案可以解决这个问题。解决方案Tiktoken是OpenAI开发的Python库用于更有效地解决令牌计数问题。它提供了一种简单的方法来计算文本字符串中的 令牌而不需要使用像Langchain这样的框架来完成这项特定任务。2LangChain 文档的问题• 问题文档是任何框架可用性的基石而Langchain因其不充分且经常不准确的文档而受到指责。误导性的文档可能导致开发项目 中代价高昂的错误并且还经常有404错误页面。这可能与Langchain还在快速发展有关作为快速的版本迭代文档的延后性问题3LangChain 太多概念容易混淆过多的“辅助”函数问题问题Langchain的代码库因很多概念让人混淆而备受批评这使得开发人员很难理解和使用它。这种问题的一个方面是存在大量 的“helper”函数仔细检查就会发现它们本质上是标准Python函数的包装器。开发人员可能更喜欢提供更清晰和直接访问核心功能的 框架而不需要复杂的中间功能。4LangChain 行为不一致并且隐藏细节问题问题LangChain因隐藏重要细节和行为不一致而受到批评这可能导致生产系统出现意想不到的问题。eg: Langchain ConversationRetrievalChain的一个有趣的方面它涉及到输入问题的重新措辞。这种重复措辞有时会非常广泛甚至破 坏了对话的自然流畅性使对话脱离了上下文。5LangChain 缺乏标准的可互操作数据类型问题问题缺乏表示数据的标准方法。这种一致性的缺乏可能会阻碍与其他框架和工具的集成使其在更广泛的机器学习工具生态系统 中工作具有挑战性。6LangChain 替代方案LlamaIndex是一个数据框架它可以很容易地将大型语言模型连接到自定义数据源。它可用于存储、查询和索引数据还提供了各 种数据可视化和分析工具。Deepset Haystack是另外一个开源框架用于使用大型语言模型构建搜索和问答应用程序。它基于Hugging Face Transformers提供了多种查询和理解文本数据的工具。二.Agent简介1.获取全量历史对话以一般客服场景为例 在电信公司的客服聊天机器人场景中如果用户在对话中先是询问了账单问题接着又谈到了网络连接问题 ConversationBufferMemory 可以用来记住整个与用户的对话历史可以帮助 AI 在回答网络问题时还记得账单问题的相关细 节从而提供更连贯的服务。fromlangchain.memoryimportConversationBufferMemory memoryConversationBufferMemory()memory.save_context({input:你好},{output:怎么了})variablesmemory.load_memory_variables({})2.滑动窗口获取最近部分对话内容以商品咨询场景为例 在一个电商平台上如果用户询问关于特定产品的问题如手机的电池续航时间然后又问到了配送方式 ConversationBufferWindowMemory 可以帮助 AI 只专注于最近的一两个问题如配送方式而不是整个对话历史以提供 更快速和专注的答复。fromlangchain.memoryimportConversationBufferWindowMemory# 只保留最后1次互动的记忆memoryConversationBufferWindowMemory(k1)3.获取历史对话中实体信息在法律咨询的场景中客户可能会提到特定的案件名称、相关法律条款或个人信息如“我在去年的交通事故中受了伤想了解 关于赔偿的法律建议”。ConversationEntityMemory 可以帮助 AI 记住这些关键实体和实体关系细节从而在整个对话过程中 提供更准确、更个性化的法律建议llmChatOpenAI(modelgpt-3.5-turbo,temperature0)memoryConversationEntityMemory(llmllm)_input{input:公众号《LLM应用全栈开发》的作者是莫尔索}memory.load_memory_variables(_input)memory.save_context(_input,{output:是吗这个公众号是干嘛的})print(memory.load_memory_variables({input:莫尔索是谁}))# 输出可以看到提取了实体关系{history:Human: 公众号《LLM应用全栈开发》的作者是莫尔索 \n AI: 是吗这个公众号是干嘛的,entities:{莫尔索:《LLM应用全栈开发》的作者。}}4.利用知识图谱获取历史对话中的实体及其联系医疗咨询场景为例 在医疗咨询中一个病人可能会描述多个症状和过去的医疗历史如“我有糖尿病史最近觉得经常口渴和疲劳”。ConversationKGMemory 可以构建一个包含病人症状、疾病历史和可能的健康关联的知识图谱从而帮助 AI 提供更全面和深 入的医疗建议。fromlangchain.memoryimportConversationKGMemoryfromlangchain.llmsimportOpenAI llmOpenAI(temperature0)memoryConversationKGMemory(llmllm)memory.save_context({input:小李是程序员},{output:知道了小李是程序员})memory.save_context({input:莫尔索是小李的笔名},{output:明白莫尔索是小李的笔名})variablesmemory.load_memory_variables({input:告诉我关于小李的信息})print(variables)# 输出{history:On 小李: 小李 is 程序员. 小李 的笔名 莫尔索.}5.对历史对话进行阶段性总结摘要以教育辅导场景为例 在一系列的教育辅导对话中学生可能会提出不同的数学问题或理解难题如“我不太理解二次方程的求解方法”。ConversationSummaryMemory 可以帮助 AI 总结之前的辅导内容和学生的疑问点以便在随后的辅导中提供更针对性的解释 和练习6.需要获取最新对话又要兼顾较早历史对话以技术支持场景为例 在处理一个长期的技术问题时如软件故障排查用户可能会在多次对话中提供不同的错误信息和反馈。ConversationSummaryBufferMemory 可以帮助 AI 保留最近几次交互的详细信息同时提供历史问题处理的摘要以便于更有 效地识别和解决问题.7.回溯最近和最关键的对话信息以金融咨询场景为例 在金融咨询聊天机器人中客户可能会提出多个问题涉及投资、市场动态或个人财务规划如“我想了解股市最近的趋势以及 如何分配我的投资组合”。ConversationTokenBufferMemory 可以帮助 AI 聚焦于最近和最关键的几个问题同时避免由于记 忆过多而导致的信息混淆。8.基于向量检索对话信息以了解最新新闻事件为例 用户可能会对特定新闻事件提出问题如“最近的经济峰会有什么重要决策” VectorStoreRetrieverMemory 能够快速从大量历 史新闻数据中检索出与当前问题最相关的信息即使这些信息在整个对话历史中不是最新的也能提供及时准确的背景信息和 详细报道。vectorstoreChroma(embedding_functionOpenAIEmbeddings())retrievervectorstore.as_retriever(search_kwargsdict(k1))memoryVectorStoreRetrieverMemory(retrieverretriever)memory.save_context({input:我喜欢吃火锅},{output:听起来很好吃})memory.save_context({input:我不喜欢看摔跤比赛},{output:我也是})PROMPT_TEMPLATE以下是人类和 AI 之间的友好对话。AI 话语多且提供了许多来自其上 下文的具体细节。如果 AI 不知道问题的答案它会诚实地说不知道。 以前对话的相关片段 {history} 如果不相关你不需要使用这些信息 当前对话 人类{input} AIpromptPromptTemplate(input_variables[history,input],templatePROMPT_TEMPLATE)conversation_with_summaryConversationChain(llmllm,promptprompt,memorymemory,verboseTrue)print(conversation_with_summary.predict(input你好我是莫尔索你叫什么))print(conversation_with_summary.predict(input我喜欢的食物是什么))print(conversation_with_summary.predict(input我提到了哪些运动))最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】