资讯详情

资讯详情

个人工作中对于LangChain的学习

​对于一个技术框架来说我们进行学习时的第一步是是什么?有什么作用怎么用接下来的内容将根据这三个问题展开来说一下我个人的一些看法。官方文档https://langchain-doc.cn/​LangChain的概念LangChain是一个基于大语言模型用于构建一个端到端语言模型应用的框架它提供了一系列工具、套件和接口、让开发者使用语言模型来实现各种复杂的任务如文本到图像的生成、文档问答、聊天机器人等。简单的来说就是一个开发由大型语言模型LLMs驱动的应用程序的框架。LangChain的作用LangChain对于一名AI应用工程师的作用体现在大幅减少重复造轮子原生调用大模型 API你要自己手写大量通用逻辑什么文档加载、文本切分、对话历史存储与拼接、向量检索逻辑、提示词管理、结果格式化、常捕获、多步骤任务调度。LangChain 是把这些通用组件全部封装好的。对于我来说LangChain的作用如下几点1.封装 RAG、对话记忆、任务编排、Agent 等通用能力避免重复开发2.提供统一接口抽象便捷切换各类公有、私有化大模型3.标准化实现知识库问答、智能工具代理等主流 AI 业务场景4.支持业务流程模块化编排便于调试、维护与团队协作帮助工程师快速把 LLM 落地为可 用的业务系统。我的学习也将围绕LangChain的核心组件展开模型Models提示模版Prompts数据检索Indexes记忆Memory链Chains代理Agents。LangChain的安装安装指定版本的LangChain(这里我使用的是condaPyCharm使用清华源下载)pip install langchain0.3.7-i https://pypi.tuna.tsinghua.edu.cn/simple pip install langchain-openai0.2.3-i//https:pypi.tuna.tsinghua.edu.cn/simple说明新版 LangChain 采用分包设计各大模型的对接包独立拆分出去langchain-openai是专门对接 OpenAI 兼容接口的包后续如果接入智谱、通义千问等模型还需要安装对应的langchain-xxx适配包。我的学习中使用的是智谱完成对LangChain的安装了我觉得对模型的使用我们可以概括为三个部分输出提示format、调用模型predict、输出解析parse。也是LingChain中的model I/O。补充说明langchain-openai 是独立的集成包在新版 LangChain 中各个大模型的对接包都做了拆分不再内置在 langchain 主包内。如果后续要接入智谱、通义千问等其他模型还需要安装对应的langchain-xxx适配包。Model I/O模型输入输出提示词 → 调用 → 解析Model I/O 是 LangChain 最基础、最底层的一条链路所有上层组件不管是 Chain 还是 Agent底层都离不开这套流程。它把和大模型交互这件事拆成三层职责清晰1.Prompt提示模板格式化提示词不能硬写在代码里。PromptTemplate可以定义模板字符串预留变量占位符运行时传入参数自动填充生成发给大模型的完整 prompt。好处是提示词统一管理、方便修改、支持多语言、支持动态传入上下文。fromlangchain_core.promptsimportPromptTemplate promptPromptTemplate(input_variables[question],template你是一名AI助手请简洁回答用户问题{question})formatted_promptprompt.format(questionLangChain是什么)print(formatted_prompt)2.Model调用大模型LangChain 把 LLM、ChatModel 做了抽象。在LangChain中LLM用于文本补全模型输入字符串返回字符串。ChatModel对话模型输入消息列表SystemMessage、HumanMessage、AIMessage返回对话消息更适合聊天场景。只需要更换模型实例上层提示词代码几乎不用改动这就是前面提到的统一抽象能力。fromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4o-mini,api_key你的key,base_url接口地址)responsellm.invoke(formatted_prompt)print(response.content)Output Parser输出解析器大模型返回的是自然文本不稳定。很多场景我们想要结构化结果JSON、列表、布尔值。输出解析器用来约束、提取、转换模型返回内容自动校验格式失败时还能让模型重试。常用StrOutputParser拿到纯文本、JsonOutputParser输出 JSON。fromlangchain_core.output_parsersimportStrOutputParser parserStrOutputParser()resultparser.parse(response)print(result)这三个组件还可以用|管道符串联起来也就是 LangChain 的LCELLangChain Expression Language这是新版推荐的写法替代老旧 Chainchainprompt|llm|parser reschain.invoke({question:LCEL是什么})print(res)一行链路清晰直观支持流式输出、异步、批处理是现在开发的主流方式。那么LangChain与其他技术的区别也就是它的特点我们就差不多学习完了。接下来来了解一下LangChain的四大核心组件核心组件一Indexes 数据检索RAG 基础单纯调用大模型有两个痛点知识滞后、不能读取私有文档。Indexes 模块就是为检索增强生成RAG服务的。整套流程文档加载 → 文档分割 → 向量化 → 存入向量库 → 检索。Document Loaders加载器读取 pdf、md、docx、网页等文件统一转成Document对象Text Splitters文本切分器按字符、递归字符、语义切割避免上下文超长Embeddings嵌入模型把文本转为向量VectorStore向量数据库持久化向量支持相似度检索Retriever检索器对外提供统一查询接口拿到相关片段塞到提示词里交给大模型。RAG 的核心思路先查相关资料再把资料 用户问题一起发给大模型让模型基于资料回答而不是靠模型自身的参数记忆。核心组件二Memory 对话记忆大模型本身是无状态的单次调用互不认识不知道上一轮聊了什么。Memory 组件负责保存对话历史。常见几种记忆ConversationBufferMemory完整保存全部对话ConversationSummaryMemory自动总结历史节省 tokenConversationBufferWindowMemory只保留最近 N 轮对话持久化记忆把对话存在数据库、Redis多轮会话、多用户隔离。记忆本质就是在每次调用模型前把历史对话拼接进 prompt让模型拥有上下文感知。在做聊天机器人时是必用组件。核心组件三Chains 链Chain 代表一串有序执行的任务把多个组件按顺序串起来输入传给第一个组件输出交给下一个。早期 LangChain 大量使用内置 ChainRetrievalQA、ConversationChain等。现在官方更推荐 LCEL 管道写法灵活度远高于固定 Chain。简单链单轮问答顺序链多个任务依次执行A 的输出是 B 的输入并行链多个分支同时执行结果合并Chain 解决的是把单一步骤组装成一条业务流水线。核心组件四Agents 代理Chain 是流程固定的代码写死执行顺序Agent 不一样让大模型自己思考下一步要做什么、调用哪个工具。Agent 包含大模型、工具列表、Agent 执行器。工具可以是搜索引擎、计算器、查询数据库、调用自定义接口。运行逻辑用户提问Agent 思考我能不能直接回答信息不足我需要调用哪个工具调用工具拿到结果把工具返回结果再交给模型整理答案返回用户Agent 适合开放式、不确定步骤的任务缺点是不可控容易无限循环、误调用工具生产环境要做好限制、校验、超时控制。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →