Skip to content

输出顺序与依赖控制

很多结构化输出不稳定,不是因为模型太弱,而是因为你把“后面的结论”放在了“前面的依据”之前。

适合什么时候读

  • 你的输出字段之间有明显前后依赖
  • 你想让 instant 结构化流式更好用
  • 你发现模型会先下结论,再漏掉支撑字段

你会学到什么

  • 为什么字段顺序本身就是一种约束
  • 如何把“事实层”和“结论层”拆开
  • 哪些前置字段应该进入 ensure_keys

依赖顺序的心智模型

如果后一个字段依赖前一个字段,就应该让它在结构里排在后面。

最小示例

python
from agently import Agently

agent = Agently.create_agent()

result = (
    agent
    .input("Dark Souls 3 和 GTA6 的发售日在哪里查?如何购买?")
    .output(
        {
            "信息列表": [
                {
                    "主题": (str, "对应的游戏或主题"),
                    "关键信息": (str, "回答问题所需的关键事实"),
                    "是否确定": (bool, "是否确认该信息可靠"),
                }
            ],
            "确定信息": (str, "只解释可靠的信息"),
            "不确定信息": (str, "列出仍需确认的部分"),
        }
    )
    .start(
        ensure_keys=[
            "信息列表[*].主题",
            "信息列表[*].关键信息",
            "信息列表[*].是否确定",
        ]
    )
)

print(result)

三条实用排序规则

  • 先列事实,再做归纳
  • 先给判断,再给解释,只适用于解释依赖判断的场景
  • 先输出程序要消费的结构字段,再输出自然语言总结

ensure_keys 应该压在哪些字段上

只要后续字段依赖前置字段,就优先保障前置字段完整。

例如上面的例子里,真正应该先稳住的是:

  • 信息列表[*].主题
  • 信息列表[*].关键信息
  • 信息列表[*].是否确定

因为“确定信息”和“不确定信息”本质上都是建立在这些基础字段之上。

这对流式消费有什么帮助

只要顺序设计得对,流式体验就会更自然,因为前端能先拿到有意义的骨架。

常见误区

  • 一上来就让模型输出最终总结,却没给它先整理依据的空间。
  • 结构里明明有依赖关系,字段顺序却完全随意。
  • ensure_keys 压在结论字段上,却没保障前置事实字段。

下一步去哪

  • agently-output-control