LangChain 智能体怎么返回固定格式?用结构化输出校验字段

用 LangChain 智能体的 structured_response 返回固定字段,并通过 Pydantic 校验名称、优先级与理由。

让模型“按 JSON 回答”不等于输出一定可解析。LangChain 的结构化输出把目标 Schema 交给智能体,并在结果的 structured_response 中返回已校验对象。 示例分类结果来自人为编写的测试文本,不代表真实工单效果,代码未在你的模型版本上实测;ProviderStrategy 或 ToolStrategy 的选择由当前模型能力决定。

本篇验收要点:定义 TicketResult Schema,并在 create_agent 中把它作为 response_format。 调用后读取 structured_response,并用字段类型和枚举规则拒绝缺失、额外或非法值。

LangChain 智能体怎么返回固定格式?用结构化输出校验字段

定义窄而明确的 Schema

from typing import Literal
from pydantic import BaseModel, Field
from langchain.agents import create_agent

class TicketResult(BaseModel):
    category: Literal["refund", "delivery", "other"]
    priority: Literal["low", "medium", "high"]
    reason: str = Field(min_length=5, max_length=120)

agent = create_agent(
    model="YOUR_SUPPORTED_MODEL",
    tools=[],
    response_format=TicketResult,
    system_prompt="Classify only from the user's text.",
)

调用并读取结构化结果

result = agent.invoke({
    "messages": [{
        "role": "user",
        "content": "包裹晚了两天,我明天出差,请优先处理"
    }]
})

ticket = result["structured_response"]
print(ticket.category, ticket.priority, ticket.reason)
assert ticket.priority in {"low", "medium", "high"}

不要同时要求一大段自由文本和复杂对象。展示给用户的说明可以由程序根据已校验字段生成,或放在 Schema 的单独短字段中。

处理失败而不是静默降级

如果模型不支持原生结构化输出,LangChain 可能使用工具策略;具体行为以当前文档和模型能力为准。捕获校验异常,记录原始请求 ID 与错误类型,并把工单送入人工队列。不要在解析失败时默认写成 low,也不要把未校验字符串直接入库。

读者下一步是先把业务真正需要的字段缩减到三到五项,并为每项写清类型与允许值。

验证标准是 structured_response 可以作为 TicketResult 访问,priority 只能是 low、medium 或 high,空 reason 会触发校验失败,程序不再从自然语言里用正则猜字段。

常见问题

结构化输出能保证事实正确吗?

不能。它保证形状和类型更可靠,事实仍要通过来源、业务规则或人工审核验证。

字段越多越好吗?

不是。字段越多,缺失和矛盾越多。先保留下游程序真正使用的字段。

官方资料与适用边界

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31161.html

赞 (0)
AI小管家的头像AI小管家
LangChain 智能体怎么调用工具?用天气函数跑通一次可核对的对话
上一篇 1天前
LangChain 怎么接入 DeepSeek?配置模型、发送消息并检查响应
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部