多智能体接力上下文怎么传不丢:结构化交接实操

多智能体接力上下文怎么传不丢:结构化交接实操
先把结论摆这儿:多个智能体接力干活,上下文丢失/串味,九成不是模型笨,是你拿大段自然语言在它们之间口口相传。改成结构化交接——上一棒只往下传一个固定字段的 JSON,而不是把整段聊天记录甩过去——基本就稳了。下面是我自己踩出来的做法,带代码。先说我遇到的问题上个月做一个选题→查资料→出初稿→自检的流水线,我串了四个智能体接力跑。前两棒挺好,到第三棒写初稿的时候,画风突变:让它写一篇讲数据库索引的文章,它给我扯到用户增长漏斗去了。回去翻日志才发现,我图省事,每一棒都是把前面所有对话原文 这一棒的指令整个塞进 prompt。跑到第三棒,上下文已经堆了六七千 token,里面混着第一棒查资料时顺手提到的一个营销案例。模型注意力被那段带跑了。这就是典型的两个病:丢:上下文太长,关键约束(比如主题是索引)被淹在中间,模型只记住了头尾。串味:把过程废话也当上下文传下去,后一棒被前一棒的思考过程污染,跑题。更坑的是不稳定。同样的输入跑五次,有两次跑题三次正常,排查起来想骂人。交接设计:传契约,不传聊天记录核心就一句:智能体之间别传对话,传一个结构化的交接单。我给每两棒之间定了个固定 schema,上一棒干完活,只允许往下吐这么几个字段:字段干嘛的谁能改task这次任务一句话(主题/约束),全程不变只第一棒写,后面只读payload上一棒产出的实际内容(资料/初稿)当前棒写constraints硬约束清单,比如字数 800-1600主题索引累加,不删notes给下一棒的提醒,可空当前棒写关键点:过程性的思考、中间废话,一律不进交接单。模型自己琢磨的草稿留在它自己那一轮里,死活别带到下一棒。task和constraints这两个字段每一棒原样透传,相当于给整条流水线钉了根桩,谁也别想跑偏。上代码交接单结构,我用 Pydantic 兜底,省得某一棒吐出来的字段对不上:from pydantic import BaseModel from typing import Optional class Handoff(BaseModel): task: str # 全程不变,只读 payload: str # 当前棒的产出 constraints: list[str] # 累加 notes: Optional[str] None # 给下一棒的话 def run_step(agent, prev: Handoff) - Handoff: # 注意:喂给模型的只有结构化字段,没有上一轮的原始对话 prompt ( f【任务(不可改)】{prev.task}\n f【必须遵守】{chr(10).join(- c for c in prev.constraints)}\n f【上一棒交给你的】\n{prev.payload}\n f【备注】{prev.notes or 无}\n 请完成你这一棒,只输出结果本身。 ) out agent.invoke(prompt) # 你自己的模型调用 return prev.model_copy(update{payload: out, notes: None})跑的时候就是顺着传:state Handoff( task写一篇讲数据库索引的技术文, payload(空,待第一棒填), constraints[主题数据库索引,不许跑题, 字数 800-1600], ) for agent in [researcher, writer, reviewer]: state run_step(agent, state) print(state.payload)就这么个改动,跑题这毛病当场没了。task和constraints每一棒都明晃晃顶在 prompt 最前面,模型想忘都难;payload只带实际产物,token 一下从六七千掉到一千出头。顺便提一嘴搭这套东西的姿势。我没自己写编排框架,是在一个零代码就能拖拽配智能体的平台上把每一棒拉出来的——挂模型、配字段、串顺序,鼠标点点就成,上面这点 Python 只是我想自定义交接逻辑时才补的。说实话第一次见到不写代码也能把四个 AI 小助手串成一条流水线我是有点意外的,原来搭智能体不一定非得从框架啃起。取舍,以及它不完美的地方不吹,这套有代价:字段是手设计的,有学习曲线。schema 定窄了后一棒缺料,定宽了又退化成传聊天记录。我前后改了三版才顺手,constraints该累加还是该覆盖纠结了半天。它只管交接,不管单棒质量。哪一棒模型自己写得烂,结构化也救不了,该调 prompt 还得调。第一版交接单往往太干。我最早payload只塞了结论,下一棒缺背景又抓瞎,后来才学会把必要的上下文也显式写进字段,而不是指望它自己记得。但比起以前那种塞一坨对话进去听天由命,可控太多了。现在五次跑五次稳,排查也快——出问题直接看交接单哪个字段脏了,一眼定位。你们做多智能体接力,上下文是怎么传的?有没有被某一棒带跑过的经历,评论区聊聊。(模型这块我直接调的讯飞星辰 MaaS,现成 API,没自己部署算力,省了一堆事)