鱼C论坛

 找回密码
 立即注册
查看: 19|回复: 3

[AI工作流] 19. LangChain组件——JsonoutputParser和多模型执行链

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. JsonoutputParser在多模型执行链中的作用?
下载 (36).png
下载 (37).png
下载 (38).png
下载 (39).png






2. 代码实战
  1. from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
  2. from langchain_community.chat_models.tongyi import ChatTongyi
  3. from langchain_core.prompts import PromptTemplate

  4. # 创建所需的解析器
  5. str_parser = StrOutputParser()
  6. json_parser = JsonOutputParser()

  7. # 模型创建
  8. model = ChatTongyi(model="qwen3-max")

  9. # 第一个提示词模板
  10. first_prompt = PromptTemplate.from_template(
  11.     "我邻居姓:{lastname},刚生了{gender},请帮忙起名字,"
  12.     "并封装为JSON格式返回给我。要求key是name,value就是你起的名字,请严格遵守格式要求。" #保证输出的是json格式
  13. )

  14. # 第二个提示词模板
  15. second_prompt = PromptTemplate.from_template(
  16.     "姓名:{name},请帮我解析含义。"
  17. )

  18. # 构建链   (AIMessage("{name: 张若曦}")
  19. chain = first_prompt | model | json_parser | second_prompt | model | str_parser

  20. for chunk in chain.stream({"lastname": "张", "gender": "女儿"}):
  21.     print(chunk, end="", flush=True)
复制代码



学习视频:【黑马程序员大模型RAG与Agent智能体项目实战教程,基于主流的LangChain技术从大模型提示词到实战项目】 https://www.bilibili.com/video/BV1yjz5BLEoY/?p=35&share_source=copy_web&vd_source=792a2cb63a1882bff4ed856eadc41a71

评分

参与人数 2荣誉 +7 鱼币 +5 贡献 +3 C币 +3 收起 理由
不二如是 + 2 + 3 + 3 鱼C有你更精彩^_^
player-none + 5 + 5

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
1. JsonoutputParser在多模型执行链中的作用?


JsonOutputParser 在多模型执行链中的核心作用是将上游模型输出的非结构化文本,按照预定格式解析成结构化的 JSON 对象。这就像是两个模型对话之间的“翻译官”或“格式转换器”。

具体作用包括:
  • 标准化输出格式:它确保第一个模型的输出是严格、可预测的 JSON 格式,为链中的下一个环节(如下一个提示词模板)提供结构清晰、可直接引用的数据。
  • 实现数据流转:在多步处理中,前一步的结果需要作为后一步的输入。JsonOutputParser 将文本(如:“{“name”: “张若曦”}”)解析成Python字典(如:{‘name’: ‘张若曦’}),这样下一个提示词模板才能通过变量(如 {name})正确获取到这个值。
  • 提升链的可靠性:通过强制和验证JSON格式,减少了因模型输出格式随意而导致链中断的风险,使整个执行流程更稳定。


2. 代码实战


您提供的代码是一个典型的多模型执行链,展示了数据如何在不同模型和处理步骤间流转。下面为您解析这个链的工作流程:

  1. from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
  2. from langchain_community.chat_models.tongyi import ChatTongyi
  3. from langchain_core.prompts import PromptTemplate

  4. # 创建所需的解析器
  5. str_parser = StrOutputParser()
  6. json_parser = JsonOutputParser()

  7. # 模型创建
  8. model = ChatTongyi(model="qwen3-max")

  9. # 第一个提示词模板
  10. first_prompt = PromptTemplate.from_template(
  11.     "我邻居姓:{lastname},刚生了{gender},请帮忙起名字,"
  12.     "并封装为JSON格式返回给我。要求key是name,value就是你起的名字,请严格遵守格式要求。" #保证输出的是json格式
  13. )

  14. # 第二个提示词模板
  15. second_prompt = PromptTemplate.from_template(
  16.     "姓名:{name},请帮我解析含义。"
  17. )

  18. # 构建链   (AIMessage("{name: 张若曦}")
  19. chain = first_prompt | model | json_parser | second_prompt | model | str_parser

  20. for chunk in chain.stream({"lastname": "张", "gender": "女儿"}):
  21.     print(chunk, end="", flush=True)
复制代码


链的执行步骤分解:
  • first_prompt: 接收用户输入 {“lastname”: “张”, “gender”: “女儿”},生成提示文本:“我邻居姓:张,刚生了女儿,请帮忙起名字...”。
  • model (第一次调用): 接收上面的提示,思考并生成回复。理想情况下,它回复一个JSON字符串,例如: {“name”: “张若曦”}
  • json_parser: 这是关键一步!它将模型返回的JSON字符串 “{“name”: “张若曦”}” 解析成Python字典:{‘name’: ‘张若曦’}
  • second_prompt: 接收上一步解析出的字典 {‘name’: ‘张若曦’}。提示词模板中的变量 {name} 会自动匹配字典中的同名键,生成新提示:“姓名:张若曦,请帮我解析含义。”
  • model (第二次调用): 接收“解析含义”的提示,生成对该名字含义的解释文本。
  • str_parser: 将第二个模型返回的复杂消息对象转换为纯净的字符串,方便最终输出。


如果没有 JsonOutputParser,第一个模型的输出(一个JSON字符串)将直接传给 second_prompt。那么 second_prompt 会试图将整个字符串赋值给变量 {name},导致提示变为 “姓名:{“name”: “张若曦”},请帮我解析含义。”,这显然不符合预期,可能导致第二个模型无法正确理解请求。

这个链清晰地展示了如何通过 JsonOutputParser 串联两个不同的模型任务,实现“起名” -> “解析含义”的流水线处理。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
好!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 半小时前 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-7 23:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表