当前位置: 首页 > news >正文

[智能体-166]:Langchain有哪些结构化地方和对应的方法?代码示例

LangChain 全场景结构化能力 + 对应方法 + 代码示例

提示词结构化、流程链路结构化、模型输出结构化、数据传递结构化四大核心场景划分,每个场景说明作用、组件、用法 + 可运行代码。

前置依赖

bash

运行

pip install langchain langchain-openai

python

运行

from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import ( StrOutputParser, PydanticOutputParser, JsonOutputParser ) from langchain_core.runnables import RunnableLambda, RunnablePassthrough, RunnableMap from pydantic import BaseModel, Field from typing import List import json # 初始化模型(示例通用) llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

一、提示词结构化(Prompt 层:输入)

作用

统一提示词格式、角色分层、固定指令框架,约束模型上下文与指令结构。

对应组件

  1. ChatPromptTemplate角色结构化(system/human/ai 分层)
  2. 模板内固定排版、字段、格式要求:文本结构约束

示例 1:多角色结构化对话模板

python

运行

# 按角色结构化组织提示词,固定系统人设 + 用户提问 prompt = ChatPromptTemplate.from_messages([ ("system", "你是专业数据分析师,回答必须分点说明,语言简洁"), ("human", "请分析:{content}") ]) # 渲染查看结构化后的提示内容 print(prompt.format(content="本月订单量上涨30%,客单价小幅下降"))

示例 2:自定义固定段落结构

在模板中强行规定段落、标题、区块,属于纯文本结构化:

python

运行

template = """ 【问题】{question} 【分析】请简要分析原因 【结论】给出最终总结 """ prompt = ChatPromptTemplate.from_template(template) res = prompt.format(question="为什么夏季销量更高?") print(res)

二、执行流程结构化(LCEL 管道 Chain)

作用

把多个组件按固定顺序串联,形成标准化执行链路,流程可复用、可拆解、可维护。

对应组件

  • 管道符|:串行结构化流程
  • RunnableMap:并行结构化(多分支同时执行)
  • RunnablePassthrough:透传字段,保持数据结构

示例 1:标准串行结构化链路(最常用)

固定流程:提示词 → 大模型 → 解析器

python

运行

# 结构化流程:prompt | llm | 字符串解析器 chain = prompt | llm | StrOutputParser() # 统一入口调用 result = chain.invoke({"content": "线上流量环比上升20%"}) print(result)

示例 2:并行结构化(RunnableMap 多分支)

同一输入多路并行处理再汇总结果,典型分支结构化

python

运行

# 定义两个分支任务 branch1 = ChatPromptTemplate.from_template("总结:{text}") | llm | StrOutputParser() branch2 = ChatPromptTemplate.from_template("提取关键词:{text}") | llm | StrOutputParser() # RunnableMap 实现并行结构化 parallel_chain = RunnableMap({ "总结": branch1, "关键词": branch2, "原文": RunnablePassthrough() # 透传原始数据 }) out = parallel_chain.invoke({"text": "人工智能正在赋能各行各业,提升生产效率"}) print(json.dumps(out, ensure_ascii=False, indent=2))

三、模型输出结构化(Output 层,核心高频)

作用

强制大模型输出JSON、对象、固定字段、数组等结构化数据,避免自由文本。

对应组件

  1. JsonOutputParser输出标准 JSON 字符串 / 字典
  2. PydanticOutputParser:基于 Pydantic 模型强类型结构化(推荐)

示例 1:JSON 结构化输出(JsonOutputParser)

python

运行

# 1. 定义模板,要求输出JSON prompt = ChatPromptTemplate.from_template(""" 请把下面人物信息转为JSON格式,仅返回JSON: 姓名、年龄、职业 内容:{info} """) # 2. JSON解析器 json_parser = JsonOutputParser() # 3. 组装链路 chain = prompt | llm | json_parser # 4. 调用,直接得到字典结构化数据 data = chain.invoke({"info": "张三,28岁,软件工程师"}) print(type(data)) # <class 'dict'> print(data)

示例 2:强类型结构化(PydanticOutputParser)

通过模型定义字段名、类型、描述,严格约束输出结构,企业级首选。

python

运行

# 1. 定义Pydantic结构化模型 class UserInfo(BaseModel): name: str = Field(description="用户姓名") age: int = Field(description="用户年龄") hobby: List[str] = Field(description="爱好列表") # 2. 初始化解析器 + 自动获取格式说明 parser = PydanticOutputParser(pydantic_object=UserInfo) format_instructions = parser.get_format_instructions() # 3. 提示词嵌入结构化格式要求 prompt = ChatPromptTemplate.from_template(""" 解析人物信息,严格按照指定格式输出。 {format_instructions} 信息内容:{content} """).partial(format_instructions=format_instructions) # 4. 链路组装 chain = prompt | llm | parser # 5. 调用,直接得到结构化对象 result = chain.invoke({"content": "李四,25岁,喜欢游泳、读书、爬山"}) print(result.name, result.age, result.hobby) print(type(result)) # <class '__main__.UserInfo'>

四、数据传递结构化(输入 / 字段透传)

作用

在链式调用中保留、拆分、重组输入字典结构,保证上下游数据字段对齐。

对应组件

  • RunnablePassthrough:原样透传字段
  • RunnableLambda:自定义转换数据结构
  • 字典映射:重组 Key

示例 1:字段透传 + 结构重组

python

运行

# 原始输入是字典,链路中保留原有字段,同时新增处理后字段 def upper_text(data: dict) -> str: # 自定义结构转换逻辑 return data["raw_text"].upper() chain = ( RunnablePassthrough.assign( upper_text=RunnableLambda(upper_text) # 新增结构化字段 ) | ChatPromptTemplate.from_template(""" 原文:{raw_text} 大写:{upper_text} 请简要评价内容 """) | llm | StrOutputParser() ) # 输入结构化字典 res = chain.invoke({"raw_text": "LangChain 结构化开发"}) print(res)

五、结构化场景总览表

结构化场景核心组件用途简述
提示词结构化ChatPromptTemplate角色分层、固定指令 / 段落框架
流程串行结构管道符 ``按顺序串联组件,标准化执行链路
流程并行结构RunnableMap多分支并行执行,结果汇总
输出 JSON 结构化JsonOutputParser强制模型输出标准 JSON 字典
输出强类型结构化PydanticOutputParser基于数据模型约束字段、类型、数组
数据透传 / 重组RunnablePassthrough/RunnableLambda链路中保留、转换、新增数据字段

六、核心总结

  1. 提示词结构化:靠模板分层、固定文本框架,规范输入给大模型的内容;
  2. 流程结构化:靠 LCEL 管道、Runnable 系列组件,编排执行顺序与分支;
  3. 输出结构化:靠各类 OutputParser,把模型自由文本转为 JSON / 对象等规范数据;
  4. 数据结构化:靠透传、Lambda 转换,保证全链路字段格式统一。
http://www.jsqmd.com/news/920938/

相关文章:

  • 保姆级教程:用Unity UGUI与World Space Canvas搞定3D游戏中的动态血条与摇杆控制
  • GRBL算法调参避坑指南:如何根据你的步进电机和机械结构优化STM32运动性能
  • Studio Library:Maya动画师的终极姿势与动画管理神器
  • 保姆级教程:用Operator模式在K8s集群里部署Calico网络插件(附VXLAN配置避坑)
  • 从用户情绪到系统智能:构建情感自适应系统的设计哲学与实践路径
  • 大语言模型行为根源:从语义理解到结构触发的范式转变
  • 从数据手册的V-I曲线到实际板级测试:手把手教你验证TVS管的真实钳位性能
  • 如何永久保存B站视频:解密m4s-converter的跨平台转换方案
  • VASP过渡态计算避坑指南:CI-NEB方法中INCAR参数设置与收敛性诊断实战
  • 手把手调优:如何榨干寒武纪MLU的算力?从Cluster到Core的并发与流水线实战
  • 告别Arduino IDE!用VSCode+PlatformIO给ESP32点灯,保姆级避坑指南
  • 从零到部署:在Linux服务器上为你的.NET 8.0应用配置生产环境
  • 2026年4月市场评价好的付费投放公司推荐,IP人设运营/新媒体代运营/千川投放/本地推投放,付费投放广告公司口碑推荐 - 品牌推荐师
  • 新手别慌!一文拆解SMIC 180nm工艺库里的那些文件夹都是干啥的
  • WizTree vs. 传统工具:实测它如何秒杀TreeSize,成为磁盘分析新王者
  • 用STM32CubeMX和HAL库5分钟搞定HC-SR04超声波测距(附避坑指南)
  • 别再手动看波形了!用Quartus Prime 22.1和Modelsim SE 2022.1实现自动化联合仿真(附完整脚本)
  • 智慧城市如何注入“人心”:从管理思维到服务体验的技术实践
  • 别再傻傻分不清!TVS管选型必懂的三个电压:VRWM、VBR、VCL实战解析
  • 法律文书智能生成系统失效真相(2024司法部备案工具实测报告)
  • Flutter VLC播放RTSP流媒体,从卡顿到流畅:一份保姆级的低延迟配置清单
  • 从调度脚本到自主决策,AI-ETL整合全路径拆解,手把手落地4类高危场景改造方案
  • 别再只用IForest了!用Python手把手教你实现LOF算法,搞定信用卡欺诈检测
  • 低成本语音AI实战:本地部署TTS与大模型集成方案
  • 程序员如何通过自动化与系统思维实现高效工作
  • 别再只会用红色了!LaTeX中xcolor宏包的5种高级文本高亮与标注技巧
  • 华为交换机配置备份与恢复的‘安全’与‘省事’之道:FTP、TFTP还是SFTP?一次讲清
  • 别再手动画封装了!用AD的IPC向导5分钟搞定SOP-8封装(附详细参数填写避坑指南)
  • 线性系统理论学不动了?手把手带你用格拉姆矩阵判据搞定能控性证明
  • 用Flask+Python搞定m3u8视频下载与Cloudflare R2上传,保姆级配置避坑指南