资讯动态

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 16 课 | LangChain 入门:Chain、Prompt 与 Output Parser

发布时间:2026/9/10 23:33:33 来源:尧图企业网站定制
第 16 课 | LangChain 入门Chain、Prompt 与 Output Parser前 15 课我们搭好了所有基础设施LLM 部署、RAG 检索、数据管道。从这节课开始我们用 LangChain 把它们串起来——像搭积木一样构建 AI 应用。一、业务价值为什么需要 LangChain1.1 从零写的痛点前 15 课我们一直在从零写手写 LLM 调用、手写 Prompt 拼接、手写 JSON 解析。来看一个真实场景需求输入一条新闻输出分类、摘要、关键词、情感倾向。# 从零写的代码第 15 课风格text苹果发布iOS 19AI功能大幅升级promptf分析以下新闻返回JSON{text}输出格式{{category: ..., summary: ..., keywords: [...], sentiment: ...}} responsellm.chat(prompt)try:resultjson.loads(response)exceptjson.JSONDecodeError:result{category:其他,summary:text[:50],keywords:[],sentiment:中性}这段代码能跑但问题明显问题说明Prompt 散落各处每次都要手写 Prompt格式不统一解析逻辑重复每个函数都要写 try/except json.loads无法复用换个任务就要重写 80% 的代码难以调试不知道是 Prompt 有问题还是解析有问题链路不透明多个步骤串起来后中间状态看不到1.2 LangChain 的解法LangChain 把从零写变成了搭积木fromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportJsonOutputParserfromlangchain_core.runnablesimportRunnablePassthrough# 定义 Prompt 模板一次定义到处复用promptChatPromptTemplate.from_template( 分析以下新闻返回 JSON {text} 输出格式{{category: ..., summary: ..., keywords: [...], sentiment: ...}} )# 定义解析器自动处理 JSON 解析和异常parserJsonOutputParser()# 串联成链chainprompt|llm|parser# 调用resultchain.invoke({text:苹果发布iOS 19AI功能大幅升级})# result {category: 手机, summary: 苹果发布iOS 19..., ...}三行代码搭好一个链复用只需改invoke的参数。二、LangChain 核心三件套2.1 架构全景Chain PT | LLM | OP用户输入新闻文本Prompt Template模板化 Prompt 管理LLM模型推理Output Parser结构化输出结构化结果JSON/dict整条链可复用可嵌套、可组合2.2 Prompt Template模板化 Prompt 管理痛点Prompt 散落在代码各处难以维护和优化。方案把 Prompt 抽象成模板变量用{variable}占位。fromlangchain_core.promptsimportChatPromptTemplate# 基础模板promptChatPromptTemplate.from_template( 你是一个专业的{role}请对以下内容进行分析。 内容{text} 请从{aspects}角度进行分析用中文回答。 )# 不同场景复用同一模板# 场景1新闻分析prompt.invoke({role:科技新闻编辑,text:...,aspects:技术创新和商业价值})# 场景2竞品分析prompt.invoke({role:市场分析师,text:...,aspects:竞争格局和市场策略})模板的优势对比字符串拼接Prompt Template可读性分析 text 返回JSON完整模板所见即所得复用性每次复制粘贴定义一次传入不同变量版本管理散落各处集中在模板文件变量校验无自动检查缺失变量2.3 Output Parser结构化输出痛点LLM 返回的是字符串需要手动解析 JSON格式不稳定。方案Output Parser 自动解析 格式修复。fromlangchain_core.output_parsersimportJsonOutputParserfrompydanticimportBaseModel,Field# 1. 定义输出结构Pydantic 模型classNewsAnalysis(BaseModel):category:strField(description新闻分类AI/芯片/手机/汽车/互联网/其他)summary:strField(description一句话摘要不超过50字)keywords:list[str]Field(description3-5个关键词)sentiment:strField(description情感倾向正面/负面/中性)# 2. 创建解析器parserJsonOutputParser(pydantic_objectNewsAnalysis)# 3. 解析器自动生成格式说明注入到 Promptformat_instructionsparser.get_format_instructions()# 4. LLM 返回后自动解析resultparser.parse(llm_response)# result {category: 手机, summary: 苹果发布iOS 19..., ...}三种常用 ParserParser输入输出场景StrOutputParser任意文本str简单对话JsonOutputParserJSON 文本dict/Pydantic结构化提取CommaSeparatedListOutputParser逗号分隔list[str]关键词提取2.4 Chain串联一切痛点多个步骤之间的数据传递靠临时变量逻辑混乱。方案LCELLangChain Expression Language用|管道符串联。# LCEL 语法前一个的输出 后一个的输入chainprompt|llm|parser# 等价于# output parser(llm(prompt(input)))链式组合示例输入新闻文本Step 1: Prompt Template构造分析 PromptStep 2: LLM模型推理Step 3: Output ParserJSON → Python dictStep 4: 后处理存数据库/发通知chain step1 | step2 | step3 | step4三、实战新闻自动分析器3.1 场景用 LangChain 构建一个新闻分析器输入一条新闻自动输出分类、摘要、关键词、情感倾向。结合第 15 课的清洗数据批量分析。3.2 安装uv pip install langchain langchain-core langchain-community3.3 完整代码code/news_analyzer.py实现了完整的新闻分析链fromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportJsonOutputParserfrompydanticimportBaseModel,Field# 1. 定义输出结构classNewsAnalysis(BaseModel):category:strField(description分类)summary:strField(description摘要)keywords:list[str]Field(description关键词)sentiment:strField(description情感)# 2. 构建 Prompt 模板promptChatPromptTemplate.from_messages([(system,你是专业的科技新闻分析师。),(human,分析以下新闻返回 JSON {text} {format_instructions}),])# 3. 创建解析器parserJsonOutputParser(pydantic_objectNewsAnalysis)# 4. 串联成链chainprompt|llm|parser# 5. 调用resultchain.invoke({text:苹果发布iOS 19AI功能大幅升级,format_instructions:parser.get_format_instructions(),})3.4 批量处理fromlangchain_core.runnablesimportRunnableLambdadefanalyze_batch(texts:list[str])-list[dict]:批量分析新闻results[]fortextintexts:resultchain.invoke({text:text,format_instructions:parser.get_format_instructions(),})results.append(result)returnresults# 从第 15 课的清洗数据库加载news_listload_from_db(cleaned_news.db)resultsanalyze_batch(news_list[:20])# 分析前 20 条3.5 运行cdcode/lesson-16-langchain-basic uv run news_analyzer.py输出示例分析结果: [手机] 苹果发布iOS 19开发者预览版AI功能大幅升级 摘要: 苹果iOS 19首个开发者预览版发布深度整合AI功能 关键词: iOS 19, 苹果, AI, Apple Intelligence 情感: 正面 [芯片] 华为Mate 80系列曝光搭载麒麟9100芯片 摘要: 华为Mate 80将搭载3nm麒麟9100芯片性能提升40% 关键词: 华为, Mate 80, 麒麟9100, 3nm 情感: 正面四、LangChain 生态速览LangChain 是一个庞大的生态系统本节只介绍了最核心的部分。快速了解其他组件组件作用我们何时用到langchain-core核心抽象Prompt, Chain, Parser本节课 ✅langchain-community社区集成各种 LLM/工具第 17 课langchain-chains高级链ConversationChain 等第 18 课langchain-agentsAgent 核心ReAct 等第 19 课langgraph状态图编排替代 Chain第 22 课五、总结这节课我们完成了从手写代码到框架化开发的转变概念解决的问题核心 APIPrompt TemplatePrompt 散落、难复用ChatPromptTemplate.from_template()Output Parser手动解析 JSON 易出错JsonOutputParser(pydantic_object...)ChainLCEL步骤串联混乱prompt | llm | parser三个概念加起来不到 20 行代码但构建了一个完整的、可复用的新闻分析流水线。这就是 LangChain 的价值——把 LLM 应用的开发效率提升 10 倍。下一课我们将深入 LangChain 的工具系统Tools让 LLM 学会调用外部能力搜索、计算、数据库查询。本课代码code/lesson-16-langchain-basic/news_analyzer.py

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价