Skip to content

第五章 课程中期综合实践:智能体应用设计与实现

前言

经过前四章的学习,我们已经掌握了LangChain的核心组件和基础工作流设计方法。

本章作为中期综合实践,不引入任何新的框架知识,核心目标是帮助大家完成一次关键的能力跃迁——从“单独使用组件”过渡到“整合组件构建应用级系统”,通过完整的项目实践,实现前四章知识的融会贯通与落地验证。

本章的核心产出是一个“可运行、有实际用途”的LangChain智能体项目。

通过项目实践,你需要验证自己是否具备以下能力:

  1. 清晰拆解实际问题并转化为LangChain可实现的任务流程;
  2. 合理选择LangChain组件并实现协同工作;
  3. 解决组件整合过程中的工程化问题;
  4. 规范输出项目成果并完成自我验证。

那我们开始吧~

5.1 中期综合实践项目说明

5.1.1 核心目标:构建可运行的智能体应用

项目必须是“可直接运行”的完整应用,而非零散的代码片段。 这里的“智能体”核心特征是:具备“接收需求→处理需求→输出结果”的完整链路,能利用LangChain组件实现“上下文感知”或“外部交互”,而非简单的单轮文本生成。

5.1.2 价值目标:解决一个相对完整、真实问题场景

项目需贴合实际使用场景,避免“无意义的功能堆砌”。

例如:“帮助学生快速查询课程资料的问答机器人”“自动整理Excel数据并生成分析报告的助手”“简化版的客服问答系统”等。

要求你能清晰说明:项目解决了哪类用户的什么问题、核心使用场景是什么。

5.2 功能与技术要求(完成参考线)

本节明确项目的“最低完成标准”,所有要求均基于前四章知识。

请大家以此为基础构建项目,确保核心能力达标;在此之上,可根据自身能力添加优化功能(非必需)。

5.2.1 模型与提示层

模型与提示是智能体的“核心输入层”,要求实现“提示标准化”和“灵活适配需求”:

  • 建议使用提示词模板标准化管理

  • 建议至少实现一次参数化提示或少样本提示:参数化提示需支持动态传入用户输入、上下文等变量(如将“用户问题”“历史对话”作为参数传入模板);少样本提示可用于优化模型输出(如在模板中加入“示例输入-示例输出”引导模型)。

提示:根据项目场景选择合适的提示模板类型。例如,多轮对话场景适合用ChatPromptTemplate,固定格式输出场景适合用参数化的PromptTemplate。

5.2.2 链式工作流

链式工作流是实现“多步骤处理”的核心,最好能体现“流程化思维”:

  • 建议使用Runnable / | 运算符组织流程:不建议用“线性脚本堆砌”的方式实现多步骤(如先写一段代码处理提示,再写一段代码调用模型),需通过LangChain的Runnable或|运算符构建结构化的链式流程;

  • 建议至少包含两个以上步骤的链式调用:例如“提示模板生成提示 → 模型调用生成结果”“文档加载 → 文本分割 → 检索 → 提示生成 → 模型调用”等,体现步骤间的流转逻辑。

5.2.3 状态与行动能力(核心能力)

这是智能体区别于“单轮文本生成”的关键,要求实现“上下文感知”或“外部交互”:

  • 二选一要求:要么使用至少一种Memory(窗口记忆、摘要记忆、全量记忆均可),实现多轮对话的上下文保存与复用;要么使用至少一个Tool(内置Tool或自定义Tool均可),实现与外部系统的交互(如查询文件、调用API、处理数据等);

  • 核心原则:Memory/Tool需真正为功能服务,避免“形式化使用”(如添加了Memory但未在后续步骤中复用上下文,或添加了Tool但从未调用)。

5.2.4 输出可控性(基础要求)

要求智能体的输出“结构化、可复用”,避免纯自由文本输出:

  • 建议使用OutputParser或结构化输出:可选择使用LangChain内置的OutputParser(如JsonOutputParser、CommaSeparatedListOutputParser),或通过提示模板约束模型输出固定格式(如“输出JSON格式,包含result和explanation两个字段”);

  • 核心目标:输出结果需便于后续使用或展示,例如JSON格式可直接被程序解析,列表格式可清晰呈现多条结果。

5.3 项目选题方向(建议参考)

对于不知道做什么的同学,这里列举了一些方向供大家参考实践:

5.3.1 智能问答类

5.3.1.1 基于文档的问答机器人(RAG)

核心场景:帮助用户快速查询指定文档中的信息(如课程资料、企业制度、技术手册等)。

核心流程参考:用户上传文档→文档加载(Document Loading)→文本分割(Text Splitting)→向量存储(VectorStore)→用户输入查询→检索相关文本→PromptTemplate生成提示(整合查询和检索结果)→模型调用→OutputParser解析输出→反馈答案。

组件适配:可使用PromptTemplate(整合查询与检索结果)、Runnable构建链式流程、RAG相关组件(Loader、Splitter、VectorStore、Retriever)、JsonOutputParser(结构化输出答案和来源)。

5.3.1.2 支持多轮上下文理解与追问的问答助手

核心场景:模拟客服或咨询场景,支持用户多轮追问,智能体可记住历史对话并精准回应。

核心流程参考:用户输入问题→Memory加载历史对话→ChatPromptTemplate生成提示(整合历史对话和当前问题)→模型调用→OutputParser解析输出→反馈结果→更新Memory。

组件适配:可使用ChatPromptTemplate、ConversationBufferWindowMemory(窗口记忆,避免上下文过长)、Runnable构建流程、结构化输出(如分点呈现回答)。

5.3.2 助手工具类

5.3.2.1 文本处理助手(总结/改写/分类)

核心场景:帮助用户处理文本(如生成论文摘要、改写文案、对文本进行分类标签等)。

核心流程参考:用户输入文本和处理需求(如“总结”“改写为正式语气”)→PromptTemplate生成参数化提示(传入文本和需求)→模型调用→OutputParser解析输出(如分类结果用JSON格式,摘要用结构化段落)→反馈处理结果。

组件适配:可使用PromptTemplate(参数化传入文本和需求)、少样本提示(加入优秀的总结/改写示例)、Runnable构建流程、OutputParser(结构化输出)。若需处理文件中的文本,可添加“读取文件”Tool。

5.3.2.2 文件操作或数据整理助手

核心场景:帮助用户自动化处理文件或数据(如批量整理Excel表格数据、生成数据报告、批量重命名文件等)。

核心流程参考:用户输入需求(如“统计Excel中各部门的人数”)→自定义Tool读取Excel文件→Tool处理数据(如统计、筛选)→PromptTemplate生成提示(传入处理后的数据,要求生成报告)→模型调用→OutputParser解析输出(如结构化报告)→反馈结果(可生成新文件保存报告)。

组件适配:可使用自定义Tool(文件读取、数据处理)、PromptTemplate、Runnable构建流程、Memory(保存用户的历史操作需求)。

5.3.3 业务流程类

适合有一定逻辑设计能力的同学

5.3.3.1 简化版客服问答系统

核心场景:模拟企业客服,能识别用户意图(如“查询订单”“投诉问题”“咨询售后”),并根据不同意图提供对应回应。

核心流程参考:用户输入问题→PromptTemplate生成提示(引导模型识别意图)→模型调用→OutputParser解析意图→基于意图选择不同的处理Chain(如“查询订单”Chain、“咨询售后”Chain)→各Chain执行对应逻辑→反馈结果。

组件适配:可使用ChatPromptTemplate、JsonOutputParser(解析意图)、RouterChain(条件分支,根据意图分发任务)、Memory(保存用户的订单号等关键信息)。

5.3.3.2 意图识别 + 不同处理链路

核心场景:识别用户的具体需求类型,并调用不同的处理逻辑(如用户输入“写一篇散文”和“计算1+1”对应不同的处理链路)。

核心流程参考:用户输入需求→意图识别Chain(PromptTemplate+模型+OutputParser)→RouterChain根据意图分发到对应处理Chain(如文本生成Chain、计算工具Chain)→处理Chain执行→反馈结果。

组件适配:可使用RouterChain(条件分支)、多个子Chain(对应不同意图)、PromptTemplate(分场景设计提示)、Tool(如计算工具、文本生成工具)。

5.3.4 自定义选题

符合技术边界即可

若以上方向不符合你的兴趣,可自拟选题,只需满足以下条件:① 基于LangChain;② 符合“3-6个核心步骤”的规模;③ 满足5.2节的功能与技术要求。例如:“面试问题生成助手”“论文参考文献整理工具”“外语学习单词记忆助手”等。

5.4 项目设计与实现指导

本节将提供“需求拆解→流程设计→组件选择→代码实现”的全流程指导,帮助大家规避常见误区,高效完成项目٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ

5.4.1 需求拆解方法:从用户问题到子任务划分

需求拆解是项目成功的核心,避免“边写代码边想需求”。

正确的拆解步骤:

  1. 明确核心需求:用一句话描述“用户是谁?需要解决什么问题?期望得到什么结果?”。例如:“学生用户,需要快速查询课程资料中的知识点,期望得到清晰的答案和知识点来源”。
  2. 拆解核心步骤:将核心需求拆解为“可执行的子任务”,每个子任务对应一个明确的目标。例如,上述需求可拆解为:① 接收用户上传的课程资料;② 处理资料(加载、分割、向量化);③ 接收用户的知识点查询;④ 检索资料中与查询相关的内容;⑤ 生成包含查询和检索内容的提示;⑥ 调用模型生成答案;⑦ 解析答案并反馈给用户。
  3. 判断子任务实现方式:思考每个子任务“用LangChain的哪个组件/功能实现”。例如:“处理资料”可用Loader、Splitter、VectorStore组件;“生成提示”可用PromptTemplate;“调用模型+解析答案”可用模型调用组件+OutputParser。

关键提醒:拆解后的子任务需“逻辑连贯”,每个步骤的输出需能作为下一个步骤的输入(如“检索结果”需能传入“提示生成”步骤)。

5.4.2 常见误区提醒:避开这些“坑”

  • 把所有逻辑塞进一个Prompt:避免编写“大而全”的Prompt,试图让模型一次性完成所有任务(如同时实现意图识别、文本处理、格式输出)。正确做法:拆分任务,用多个组件/步骤协同完成,降低单个Prompt的复杂度。
  • Memory / Tool形式存在但不产生实际价值:例如,添加了ConversationMemory,但在后续的PromptTemplate中未引用历史对话变量;或定义了Tool,但从未在Chain中调用。解决方法:在设计阶段就明确“Memory/Tool的作用”,确保每个组件都有对应的使用场景。
  • 忽视代码工程化:代码杂乱无章、无注释、无模块拆分,导致后续调试困难或他人无法复用。解决方法:按“组件定义、链构建、运行逻辑”拆分代码,关键步骤添加注释,明确每个函数/组件的作用。
  • 过度追求功能复杂:试图在一个项目中实现多个无关功能(如同时做文档问答、代码生成、数据处理),导致每个功能都不扎实。解决方法:聚焦一个核心功能,把3-6个核心步骤做透。

5.5 项目成果交付建议

规范的成果交付是“工程化能力”的重要体现,也是企业非常看重的点,如果有希望后续把项目写到简历上的同学,建议参考以下规范要求:

5.5.1 代码成果

  • 可直接运行的完整项目代码:确保代码能“一键运行”,若有依赖包需提供requirements.txt文件(列出依赖包名称及版本,如langchain==0.1.10、openai==1.14.3)。
  • 合理的模块拆分与注释:建议按功能拆分代码文件(如prompt_utils.py存放提示模板、chain_utils.py存放链构建逻辑、main.py存放主运行逻辑);关键代码段添加注释,说明“该步骤的作用”“组件的选择理由”等。

5.5.2 项目说明文档(README)

README是项目的“说明书”,需清晰、全面,让他人能快速了解并使用你的项目。建议包含以下内容:

  • 项目背景与使用场景:说明项目解决了什么问题、目标用户是谁、核心使用场景是什么。
  • 系统流程与核心逻辑说明:用文字或流程图(推荐用Mermaid绘制简单流程图)描述项目的核心处理步骤,说明各步骤之间的流转关系。
  • 使用到的LangChain关键组件清单:列出项目中使用的核心组件(如PromptTemplate、ConversationBufferWindowMemory、JsonOutputParser等),并简要说明每个组件的作用。
  • 环境配置与运行步骤:说明运行项目所需的环境(如Python版本)、配置步骤(如设置OpenAI API Key)、运行命令(如python main.py)。

5.6 自我检查清单

项目完成后,建议对照以下清单进行自我检查,确保项目符合要求且质量达标:

  • 是否清楚每一个Chain / Runnable在做什么:能清晰说明项目中每个链、每个步骤的核心作用,以及组件选择的理由。
  • 是否能画出自己的系统流程图:能通过流程图直观呈现项目的核心步骤、组件协同关系和数据流转逻辑。
  • 如果去掉Memory / Tool,系统能力是否明显下降:若去掉后,系统无法实现多轮对话或外部交互,说明Memory/Tool真正产生了价值;若去掉后无影响,则需优化组件使用。
  • 是否能向他人清楚说明设计取舍:能解释“为什么选择这个组件而非另一个”“为什么设计这样的流程”“放弃了哪些功能及其原因”(如“选择窗口记忆而非全量记忆,是为了避免上下文过长导致模型响应变慢”)。
  • 代码是否可直接运行、文档是否完整:他人可根据你的文档快速配置环境并运行项目,无需额外询问。

5.7 本章总结

本章作为中期综合实践,核心是一次“能力整合练习”——不追求新知识点,而是聚焦前四章LangChain核心知识的融会贯通与落地验证。通过本次项目,你需要完成从“组件使用者”到“应用设计者”的过渡,掌握“需求拆解→流程设计→组件整合→工程落地”的完整思路。

坚持到这里,相信你应该是完成了自己独有的智能体项目,项目完成后,你应具备“独立构建LangChain应用的能力”,能针对简单的实际场景,设计并实现对应的智能体系统,这也是很多企业AI开发工程师需要掌握的技能。

同时,本次项目中遇到的“复杂流程设计”“多步骤状态管理”等痛点,也将为后续学习LangGraph与复杂智能体系统做好认知铺垫——LangGraph的核心价值就是解决LangChain在复杂分支、状态持久化等场景下的不足,让我们带着本次实践的思考,进入后续进阶内容的学习。