LangChain 多任务应用实战案例

发布时间:2026/7/14 19:18:28
LangChain 多任务应用实战案例 LangChain 多任务应用实战从客服到自动化全覆盖一、前言2024年以来大语言模型的能力已经毋庸置疑但真正让开发者头疼的问题从模型行不行变成了怎么把它用起来——单次问答谁都会可一旦涉及多轮对话、多个数据源、多步骤决策代码复杂度就指数级上升。LangChain 正是为解决这个痛点而生的。它的核心价值不是让你写更少的代码而是让你用更清晰的结构去组织复杂的 AI 应用逻辑。本文不讲Hello World只讲真实可落地的多任务实战案例每个案例都附上核心代码片段读完就能直接上手改造。二、五分钟回顾LangChain 的乐高积木在进入案例之前先用一张表快速回顾 LangChain 的核心组件这些组件会在后续案例中反复出现组件一句话解释解决什么问题Prompt Template提示词模板把变量塞进固定话术里提示词复用告别字符串拼接Chain把多个组件串成流水线多步骤任务的线性编排Memory记住对话历史多轮对话的上下文连贯Retriever从向量数据库检索相关内容本地知识库问答RAGAgent让 LLM 自己决定调哪个工具非固定流程的自主决策Tool外部能力封装搜索、计算、API突破 LLM 自身能力边界这些组件就像乐高积木单个看功能有限组合起来却能搭建出复杂系统。下面的案例就是不同积木组合的实战演示。三、案例一电商智能客服——多轮对话 知识检索 实时查询3.1 业务场景某电商平台每天产生 5000 条客服咨询其中 60% 是重复性问题退货政策、物流查询、优惠券使用客服团队 30 人人均日处理 160 条压力巨大。3.2 技术架构这个案例的核心难点在于客服机器人需要同时具备三种能力——记住上下文用户刚才说了什么、检索知识库退货政策是什么、查询实时数据订单现在到哪了。单一能力都能实现但三合一才是难点。LangChain 的解决方案用 Memory 管上下文用 Retriever 管知识检索用 Agent 管工具调用三者协同工作。3.3 核心代码实现fromlangchain.memoryimportConversationBufferMemoryfromlangchain.chainsimportConversationalRetrievalChainfromlangchain_community.vectorstoresimportChromafromlangchain_community.embeddingsimportOpenAIEmbeddingsfromlangchain.chat_modelsimportChatOpenAIfromlangchain.toolsimportToolfromlangchain.agentsimportinitialize_agent,AgentType# 第一步构建知识库一次性操作 # 将退货政策、保修条款等文档向量化存入 ChromavectorstoreChroma.from_documents(documentsdocs,# 已加载的文档列表embeddingOpenAIEmbeddings())retrievervectorstore.as_retriever(search_kwargs{k:3})# 第二步创建带记忆的对话链 llmChatOpenAI(modelgpt-4o-mini,temperature0.3)memoryConversationBufferMemory(memory_keychat_history,return_messagesTrue)qa_chainConversationalRetrievalChain.from_llm(llmllm,retrieverretriever,memorymemory,verboseTrue)# 第三步定义实时查询工具 defquery_order_status(order_id:str)-str:根据订单号查询物流状态实际项目中对接ERP接口# 这里模拟返回数据returnf订单{order_id}当前状态已发货预计7月10日送达defcheck_coupon_validity(coupon_code:str)-str:验证优惠券是否有效returnf优惠券{coupon_code}有效期至2026年12月31日满200减30tools[Tool(namequery_order_status,funcquery_order_status,description根据订单号查询物流状态输入订单号字符串),Tool(namecheck_coupon_validity,funccheck_coupon_validity,description验证优惠券是否有效输入优惠券代码)]# 第四步创建 Agent自主决策调用哪个工具 agentinitialize_agent(toolstools,llmllm,agentAgentType.OPENAI_FUNCTIONS,verboseTrue)# 第五步对话示例 # 第一轮知识库检索response1qa_chain.invoke({question:买了东西不满意可以退货吗})print(response1[answer])# 输出根据我们的退货政策自签收之日起7天内可以申请无理由退货...# 第二轮继承上下文response2qa_chain.invoke({question:那退货之后多久能收到退款})print(response2[answer])# 输出退款将在我们收到退货商品后的3-5个工作日内原路返回...# 第三轮需要实时数据时转交 Agent 处理response3agent.invoke(帮我查一下订单 ORD20260701 的物流状态)print(response3[output])# 输出订单 ORD20260701 当前状态已发货预计7月10日送达3.4 多任务协同流程这个案例中一个用户对话实际上触发了三种任务类型的协作用户提问 │ ├── 是知识类问题退货政策 │ └── RetrievalQA Chain → 向量检索 → 生成回答 │ ├── 是实时数据问题订单状态 │ └── Agent → 调用工具 → 返回结果 │ └── 需要上下文记忆多轮对话 └── Memory → 拼接历史 → 生成连贯回答3.5 落地效果上线三个月后该客服系统替代了 62% 的人工咨询量问题一次解决率从规则引擎时代的 41% 提升至 79%客服团队从 30 人缩减至 12 人剩余人员专注于处理复杂纠纷和 VIP 客户服务。四、案例二RAG 文档问答——从 1000 份产品手册中秒级检索4.1 业务场景某家电企业积累了 1000 多份产品手册PDF Word客服人员每天需要翻找数十份手册来回答客户关于产品参数、使用说明、故障排查的咨询。平均每次查询耗时 8 分钟且经常遗漏关键信息。4.2 技术方案用 LangChain 的 LCEL 表达式语言串联 RAG 流程实现提问 → 检索 → 生成的端到端问答。4.3 核心代码实现fromlangchain_community.document_loadersimportPyPDFLoader,Docx2txtLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain_community.vectorstoresimportChromafromlangchain_community.embeddingsimportOpenAIEmbeddingsfromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatefromlangchain_core.runnablesimportRunnablePassthroughfromlangchain_core.output_parsersimportStrOutputParserimportosimportglob# 第一步批量加载文档 documents[]# 加载所有 PDFforpdf_fileinglob.glob(manuals/*.pdf):loaderPyPDFLoader(pdf_file)documents.extend(loader.load())# 加载所有 Word 文档fordocx_fileinglob.glob(manuals/*.docx):loaderDocx2txtLoader(docx_file)documents.extend(loader.load())print(f共加载{len(documents)}个文档片段)# 第二步文本切割 text_splitterRecursiveCharacterTextSplitter(chunk_size500,# 每个文本块 500 字符chunk_overlap50,# 相邻块重叠 50 字符避免语义断裂separators[\n\n,\n,。,., ,]# 优先按段落分割)docstext_splitter.split_documents(documents)print(f切割后共{len(docs)}个文本块)# 第三步向量化存储 vectorstoreChroma.from_documents(documentsdocs,embeddingOpenAIEmbeddings(),persist_directory./chroma_db# 持久化存储下次直接加载)retrievervectorstore.as_retriever(search_typesimilarity,# 相似度检索search_kwargs{k:4}# 返回最相关的 4 个文本块)# 第四步构建 RAG Prompt 模板 template 你是一个专业的产品客服助手请根据以下产品手册内容回答用户问题。 要求 1. 如果手册中有明确答案请直接引用并标注来源 2. 如果手册中没有相关信息请诚实告知用户并建议联系人工客服 3. 回答要简洁明了避免冗长 产品手册内容 {context} 用户问题{question} 你的回答 promptChatPromptTemplate.from_template(template)# 第五步用 LCEL 串联整个 RAG 流程 llmChatOpenAI(modelgpt-4o-mini,temperature0.1)rag_chain({context:retriever,# 检索相关文档question:RunnablePassthrough()# 原样传递用户问题}|prompt# 注入 Prompt 模板|llm# 调用 LLM 生成回答|StrOutputParser()# 解析输出为纯文本)# 第六步测试问答 questionXH-200 型空气炸锅的最高温度是多少怎么设置responserag_chain.invoke(question)print(response)# 输出# 根据 XH-200 产品手册第12页该型号空气炸锅的最高温度为200℃。# 设置方法旋转温控旋钮至所需温度长按3秒确认。建议首次使用前先空烧10分钟去除异味。# 如果问手册中没有的内容question2这个空气炸锅支持语音控制吗response2rag_chain.invoke(question2)print(response2)# 输出根据现有产品手册未找到关于语音控制功能的说明。# 建议您联系人工客服400-xxx-xxxx获取更详细的产品信息。4.4 搭配 LangSmith 监控生产环境部署时5 行代码接入 LangSmith 实现全链路追踪importos os.environ[LANGCHAIN_TRACING_V2]trueos.environ[LANGCHAIN_API_KEY]ls__你的API密钥os.environ[LANGCHAIN_PROJECT]product-manual-qa接入后每次问答的完整链路都会被记录——LLM 调用耗时、Token 消耗、检索命中率、回答忠实度——哪里慢了、哪里检索不准一目了然。4.5 落地效果1000 份手册的检索时间从人工平均 8 分钟降至 3 秒以内回答准确率达到 92%日均处理咨询量从 200 条提升至 1500 条且支持 7×24 小时不间断服务。五、案例三AI 代码助手——生成、解释、调试三合一5.1 业务场景开发团队在日常工作中需要频繁切换于代码编写、Bug 排查、代码审查和技术文档编写之间。每个任务都需要不同的工具和思路但本质上都围绕代码这个核心对象。5.2 技术方案用 LangChain Agent 将代码生成、代码解释、错误调试三个能力封装为独立工具由 LLM 自主判断用户意图并调用对应工具。5.3 核心代码实现fromlangchain.chat_modelsimportChatOpenAIfromlangchain.agentsimportinitialize_agent,AgentType,Toolfromlangchain.promptsimportPromptTemplate llmChatOpenAI(modelgpt-4o-mini,temperature0)# 工具1代码生成 defgenerate_code(requirement:str)-str:根据需求描述生成代码promptPromptTemplate(input_variables[requirement],template 请根据以下需求生成 Python 代码要求 1. 代码完整可运行包含必要的 import 语句 2. 添加适当的注释 3. 遵循 PEP 8 规范 4. 包含一个简单的使用示例 需求{requirement} )chainprompt|llmreturnchain.invoke({requirement:requirement}).content# 工具2代码解释 defexplain_code(code:str)-str:逐行解释代码逻辑promptPromptTemplate(input_variables[code],template 请用通俗易懂的语言逐段解释以下代码的功能和逻辑。 对关键函数和复杂逻辑要详细说明。 代码 {code} )chainprompt|llmreturnchain.invoke({code:code}).content# 工具3错误调试 defdebug_error(error_info:str)-str:分析错误信息给出修复建议promptPromptTemplate(input_variables[error_info],template 请分析以下错误信息给出 1. 错误原因分析 2. 具体的修复方案 3. 修复后的代码示例 错误信息 {error_info} )chainprompt|llmreturnchain.invoke({error_info:error_info}).content# 组装 Agent tools[Tool(namegenerate_code,funcgenerate_code,description根据需求描述生成 Python 代码。当用户要求写代码、实现功能时使用此工具。),Tool(nameexplain_code,funcexplain_code,description解释代码的逻辑和功能。当用户要求解释代码、分析代码时使用此工具。),Tool(namedebug_error,funcdebug_error,description分析错误信息并给出修复建议。当用户提供报错信息、询问如何修复Bug时使用此工具。)]agentinitialize_agent(toolstools,llmllm,agentAgentType.OPENAI_FUNCTIONS,verboseTrue)# 测试Agent 自主判断调用哪个工具 # 场景1生成代码agent.invoke(帮我写一个函数实现斐波那契数列的生成要求能指定生成前N项)# Agent 自动调用 generate_code 工具# 场景2解释代码用户粘贴一段代码agent.invoke( 帮我解释这段代码在做什么 def process_data(data): result {} for item in data: key item.get(category, other) if key not in result: result[key] [] result[key].append(item.get(value, 0)) return {k: sum(v)/len(v) for k, v in result.items()} )# Agent 自动调用 explain_code 工具# 场景3调试错误agent.invoke( 代码报错了帮我看看怎么修 TypeError: unsupported operand type(s) for : int and str 代码第15行total count price )# Agent 自动调用 debug_error 工具5.4 多任务协同这个案例的精妙之处在于Agent 就像一个技术主管用户提需求后它自己判断该找谁干活——是让写代码的同事上还是让做代码审查的同事上还是让排查 Bug 的同事上。用户不需要关心内部的分工逻辑。六、案例四多步骤业务流程自动化——LangGraph 编排6.1 业务场景电商售后流程涉及查询订单 → 验证库存 → 判断退货条件 → 生成退款单 → 调用支付接口 → 发送通知等多个步骤每个步骤有分支判断和循环依赖。用传统 if-else 代码实现逻辑稍复杂就变成难以维护的意大利面代码。6.2 技术方案LangChain 生态中的 LangGraph 专门解决这类问题用图结构编排步骤间的逻辑分支和循环。这里用 LangGraph 构建一个简化版的售后处理流程。6.3 核心代码实现fromtypingimportTypedDict,Optionalfromlanggraph.graphimportStateGraph,ENDfromlangchain.chat_modelsimportChatOpenAI llmChatOpenAI(modelgpt-4o-mini,temperature0)# 定义状态结构 classOrderState(TypedDict):order_id:strstatus:str# 订单状态delivered / returned / cancelledis_returnable:bool# 是否可退货refund_amount:floatmessage:str# 最终返回给用户的消息# 定义各处理节点 defcheck_order_status(state:OrderState)-OrderState:节点1查询订单状态# 实际项目对接 ERP 系统state[status]delivered# 模拟查询结果returnstatedefcheck_return_eligibility(state:OrderState)-OrderState:节点2判断是否满足退货条件# 已签收7天内可退货ifstate[status]delivered:state[is_returnable]Truestate[message]订单符合退货条件else:state[is_returnable]Falsestate[message]订单状态不符合退货要求returnstatedefcalculate_refund(state:OrderState)-OrderState:节点3计算退款金额state[refund_amount]299.0# 模拟计算returnstatedefgenerate_refund_order(state:OrderState)-OrderState:节点4生成退款单state[message]f退款单已生成金额{state[refund_amount]}元预计3-5个工作日到账returnstatedefreject_return(state:OrderState)-OrderState:节点5拒绝退货state[message]f订单{state[order_id]}不符合退货条件请联系客服returnstate# 定义路由逻辑 defshould_refund(state:OrderState)-str:判断是否执行退款流程ifstate[is_returnable]:returncalculate_refundelse:returnreject_return# 构建状态图 workflowStateGraph(OrderState)# 添加节点workflow.add_node(check_order,check_order_status)workflow.add_node(check_eligibility,check_return_eligibility)workflow.add_node(calculate_refund,calculate_refund)workflow.add_node(generate_refund,generate_refund_order)workflow.add_node(reject_return,reject_return)# 添加边定义执行顺序workflow.set_entry_point(check_order)workflow.add_edge(check_order,check_eligibility)workflow.add_conditional_edges(check_eligibility,should_refund,{calculate_refund:calculate_refund,reject_return:reject_return})workflow.add_edge(calculate_refund,generate_refund)workflow.add_edge(generate_refund,END)workflow.add_edge(reject_return,END)# 编译并执行appworkflow.compile()# 测试正常退货流程resultapp.invoke({order_id:ORD20260701})print(result[message])# 输出退款单已生成金额299.0元预计3-5个工作日到账6.4 流程可视化LangGraph 的执行流程可以用图表示开始 → 查询订单状态 → 判断退货条件 ├── 符合条件 → 计算退款金额 → 生成退款单 → 结束 └── 不符合 → 拒绝退货 → 结束每个节点是一个独立的处理单元节点间的流转逻辑由路由函数控制。当业务规则变化时比如退货条件从7天改为15天只需修改对应节点的逻辑不影响整体流程结构。七、技巧总结三个让你的 LangChain 应用更稳的实践7.1 错误处理与降级策略生产环境中最怕 LLM 返回格式不对或者超时导致整个流程中断。建议为每个 Chain 加上错误处理fromlangchain_core.runnablesimportRunnableLambdadefsafe_invoke(chain,input_data,default抱歉服务暂时不可用请稍后重试):try:returnchain.invoke(input_data)exceptExceptionase:print(f调用失败:{e})returndefault7.2 缓存策略对于高频重复的问题如退货政策是什么可以用 LangChain 的缓存机制避免重复调用 LLM节省 Token 成本fromlangchain.cacheimportInMemoryCachefromlangchain.globalsimportset_llm_cache set_llm_cache(InMemoryCache())# 开启后相同问题第二次调用直接从缓存返回不消耗 Token7.3 流式输出对于长文本生成场景使用流式输出避免用户长时间等待# 流式输出逐字返回forchunkinchain.stream({question:解释一下量子计算}):print(chunk,end,flushTrue)八、总结LangChain 多任务应用的核心思路可以浓缩为一句话用组件拆解业务用编排串联流程。案例核心组件适用场景电商智能客服Memory Retriever Agent多轮对话 知识库 实时查询RAG 文档问答LCEL Retriever大规模文档的秒级检索AI 代码助手Agent 多 Tool多工具自主决策调用业务流程自动化LangGraph多步骤分支编排如果你正在规划一个 LangChain 项目建议从数据量最大、规则最清晰、重复性最高的那个任务开始——比如客服知识库问答用一个 RAG 应用跑通最小闭环验证效果后再逐步扩展为多任务系统。永远不要一上来就追求大而全先让一个场景跑起来比什么都重要。