news 2026/7/14 6:44:29

输出解析器和结构化输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
输出解析器和结构化输出

输出解析器负责获取模型的输出并将其转换为更适合下游任务的格式。 在使用大型语言模型生成结构化数据或规范化聊天模型和大型语言模型的输出时非常有用。

结构化输出 :对于某些用例,限制大型语言模型的输出为特定格式或结构,例如,如果输出要存储在关系数据库中,如果模型生成遵循定义的模式或格式的输出,将会容易得多。最常见的输出格式将是JSON。

①.with_structured_output()

一些LangChain聊天模型支持.with_structured_output()方法。 该方法只需要一个模式作为输入,并返回一个字典或Pydantic对象。 通常,这个方法仅在支持下面描述的更高级方法的模型上存在, 并将在内部使用其中一种。它负责导入合适的输出解析器并 将模式格式化为模型所需的正确格式。

ps:这个方法目前不支持国内的deepseek模型以及Qwen的模型,这里用的是智谱的模型。

from typing import Optional from langchain_core.prompts import ChatPromptTemplate from pydantic import BaseModel,Field from langchain_demo.my_llm import llm class Joke(BaseModel): """ 搞笑段子的结构类 """ start:str=Field(decription="笑话的开头部分") punchline:str=Field(decription="笑话的包袱/笑点") rating:Optional[int]=Field(decription="笑话的有趣程序评分,范围1到10") prompt_template=ChatPromptTemplate.from_template( '帮我生成一个关于{topic}的笑话!' ) chain=prompt_template|llm.with_structured_output(Joke) resp=chain.invoke({"topic":"篮球"}) print(resp) print(type(resp)) print(resp.start) 输出结果: start='为什么篮球总是很累?' punchline='因为它总是在投篮!' rating=6 <class '__main__.Joke'> 为什么篮球总是很累?

②.SimpleJsonOutputParser()

限制模型的输出始终为某种有效的 JSON。

from langchain_classic.chains.summarize.map_reduce_prompt import prompt_template from langchain_core.output_parsers import SimpleJsonOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_demo.my_llm import llm prompt_template=ChatPromptTemplate.from_messages([ ("system", "你的输出必须始终包含\"answer\"和\"followup_question\"键的JSON对象。" "其中\"answer\"代表对用户的回答。" "\"followup_question\"代表用户可能提出的后续问题。" ), ("user","{question}") ]) chain=prompt_template|llm|SimpleJsonOutputParser() resp=chain.invoke({"question":"请简要回答下什么是深度学习"}) print(resp) print(type(resp)) 输出: --{'answer': '深度学习是机器学习的一个子领域,它使用多层神经网络结构来模拟人脑的学习过程。通过大量数据训练,这些网络能够自动学习数据的复杂特征和表示,无需人工设计特征。深度学习在图像识别、自然语言处理、语音识别等领域取得了突破性进展。', 'followup_question': '深度学习和传统机器学习有什么区别?'} --<class 'dict'>

③.工具调用

它的工作原理是首先将所需的模式直接或通过 LangChain 工具 绑定到 聊天模型,使用.bind_tools()方法。然后模型将生成一个包含与所需形状匹配的 args 的 tool_calls 字段的 AIMessage

from pydantic import BaseModel,Field from langchain_demo.my_llm import llm class ResponseFormatter(BaseModel): """用此工具来结构化你的用户响应""" answer:str=Field(decription="对用户问题的回答") followup_question:str=Field(description='用户所提出的问题') resp=llm.bind_tools([ResponseFormatter]).invoke("请简要介绍下深度学习") print(resp) print(resp.tool_calls[0]['args']) 输出结构: --content='目前我无法为您提供关于深度学习的详细介绍,因为相关的知识库查询工具暂时不可用。\n\n不过,我可以告诉您深度学习是机器学习的一个分支,它使用多层神经网络来模拟人脑的学习过程。深度学习在图像识别、自然语言处理、语音识别等领域取得了显著成就。\n\n如果您想了解更详细的信息,建议您:\n1. 查阅相关的学术资料或教科书\n2. 访问专业的AI和机器学习网站\n3. 参考在线课程平台上的深度学习课程\n\n您是否有其他我可以帮助您的问题?' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 269, 'prompt_tokens': 341, 'total_tokens': 610, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 320}, 'prompt_cache_hit_tokens': 320, 'prompt_cache_miss_tokens': 21}, 'model_provider': 'openai', 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_eaab8d114b_prod0820_fp8_kvcache', 'id': 'ef6552b8-9222-42cb-8978-33f8704124f9', 'finish_reason': 'tool_calls', 'logprobs': None} id='lc_run--019b5515-7fcb-7ab0-9978-145e91ce52ab-0' tool_calls=[{'name': 'ResponseFormatter', 'args': {'answer': '目前我无法为您提供关于深度学习的详细介绍,因为相关的知识库查询工具暂时不可用。\n\n不过,我可以告诉您深度学习是机器学习的一个分支,它使用多层神经网络来模拟人脑的学习过程。深度学习在图像识别、自然语言处理、语音识别等领域取得了显著成就。\n\n如果您想了解更详细的信息,建议您:\n1. 查阅相关的学术资料或教科书\n2. 访问专业的AI和机器学习网站\n3. 参考在线课程平台上的深度学习课程', 'followup_question': '请简要介绍下深度学习'}, 'id': 'call_00_ELKuV91YhlCSTY2KQxtEotqT', 'type': 'tool_call'}] usage_metadata={'input_tokens': 341, 'output_tokens': 269, 'total_tokens': 610, 'input_token_details': {'cache_read': 320}, 'output_token_details': {}} --{'answer': '目前我无法为您提供关于深度学习的详细介绍,因为相关的知识库查询工具暂时不可用。\n\n不过,我可以告诉您深度学习是机器学习的一个分支,它使用多层神经网络来模拟人脑的学习过程。深度学习在图像识别、自然语言处理、语音识别等领域取得了显著成就。\n\n如果您想了解更详细的信息,建议您:\n1. 查阅相关的学术资料或教科书\n2. 访问专业的AI和机器学习网站\n3. 参考在线课程平台上的深度学习课程', 'followup_question': '请简要介绍下深度学习'}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 13:05:47

终极字符渲染优化方案:彻底解决游戏中文乱码显示问题

终极字符渲染优化方案&#xff1a;彻底解决游戏中文乱码显示问题 【免费下载链接】CK2dll Crusader Kings II double byte patch /production : 3.3.4 /dev : 3.3.4 项目地址: https://gitcode.com/gh_mirrors/ck/CK2dll 《十字军之王II》作为一款深受全球玩家喜爱的中世…

作者头像 李华
网站建设 2026/7/7 4:11:30

15、Puppet 扩展与负载均衡策略

Puppet 扩展与负载均衡策略 一、CA 目录同步 在进行 Puppet 扩展时,首先要保证 CA(证书颁发机构)目录的同步。可以使用 rsync 命令将主 CA 目录同步到备用 CA 目录,同时删除目标目录中源目录不存在的文件。示例命令如下: [root@puppet-ca-1 ~]# crontab -l * * * * …

作者头像 李华
网站建设 2026/7/3 14:18:11

27、MCollective与Hiera:高效基础设施管理与数据分离方案

MCollective与Hiera:高效基础设施管理与数据分离方案 1. MCollective简介 MCollective为Puppet管理的系统提供实时、基于元数据的命令和控制。它采用创新的方法来编排大量系统,不依赖主机名,而是与Facter集成,通过元数据过滤不想执行操作的机器。同时,它使用STOMP消息传…

作者头像 李华
网站建设 2026/7/1 23:20:31

Proteus 8.16下载安装教程:适用于64位系统的实践指南

Proteus 8.16 安装实战&#xff1a;从零开始搞定64位系统部署你是不是也遇到过这种情况&#xff1f;刚下载好 Proteus 8.16 的安装包&#xff0c;满怀期待地点开 Setup.exe&#xff0c;结果弹出一堆错误提示——“缺少 DLL 文件”、“访问被拒绝”、“启动后闪退”……折腾半天…

作者头像 李华
网站建设 2026/6/25 15:13:32

Dify平台的教学沙箱模式设计构想

Dify平台的教学沙箱模式设计构想 在人工智能教育快速普及的今天&#xff0c;越来越多高校和培训机构开始开设LLM&#xff08;大语言模型&#xff09;相关课程。但一个现实问题摆在面前&#xff1a;学生如何真正“动手”实践AI应用开发&#xff1f;传统的教学方式依赖PPT讲解和代…

作者头像 李华
网站建设 2026/6/28 20:25:40

AUTOSAR网络管理睡眠确认机制项目应用实例

AUTOSAR网络管理中的睡眠确认机制&#xff1a;从原理到实战的深度剖析一场“集体休眠”的工程挑战想象这样一个场景&#xff1a;车辆熄火后&#xff0c;所有电子控制单元&#xff08;ECU&#xff09;本应安静地进入低功耗睡眠模式&#xff0c;以减少蓄电池的静态电流消耗。然而…

作者头像 李华