AgentLink 里智能体交接总丢上下文 / 是传递字段没配还是下游没接?

文章导读
先不要改配置。AgentLink 里“交接丢上下文”,通常只有两个来源:一是交接节点没有把上游结果里的字段映射出去,字段在节点内就断了;二是交接节点已经传出,但下游智能体的入参声明只接了其中一部分,剩下的被丢在入口。这两种情况在页面上看起来都一样——下游只拿到一句话摘要——但处理动作完全不同:前者改映射,后者改下游入参声明。稳妥的做法是先看交接节点的真实输出,再用一条两节点最短链路做回归,别一上来
📋 目录
  1. Ⅰ 在交接节点上看一次真实传过去的内容
  2. Ⅱ 核对交接节点的字段映射关系
  3. Ⅲ 检查下游智能体的入参声明
  4. Ⅳ 用一条两节点最短链路做回归验证
A A

先不要改配置。AgentLink 里“交接丢上下文”,通常只有两个来源:一是交接节点没有把上游结果里的字段映射出去,字段在节点内就断了;二是交接节点已经传出,但下游智能体的入参声明只接了其中一部分,剩下的被丢在入口。这两种情况在页面上看起来都一样——下游只拿到一句话摘要——但处理动作完全不同:前者改映射,后者改下游入参声明。稳妥的做法是先看交接节点的真实输出,再用一条两节点最短链路做回归,别一上来就同时改两边。

判断顺序建议固定为:先看交接节点输出内容,确认字段是否已经传出去;再核对交接节点的字段映射,区分没配和配错;最后检查下游入参声明是否只接了部分字段。三段都通过后,用上游固定返回结构、下游回显全部入参的最小链路验证一次。适用场景是多智能体串联或串行交接;风险边界是各平台字段命名与嵌套规则不同,配置片段需要按实际 schema 替换后再用。

在交接节点上看一次真实传过去的内容

先确认丢在哪一层。只看下游最后一句回复,无法判断是交接节点没传,还是下游没接,所以第一步是拿到交接节点执行时实际写出的内容。

可以按下面的方向查,具体入口以平台页面为准:打开这次运行的执行记录,找到交接节点对应的那一步,查看它的输出内容或输出变量,看里面是否包含上游给出的完整字段;如果页面只展示摘要,可以在交接节点里临时把输出序列化后打到日志,再在运行日志里搜索该字段名。看到的内容里有字段键、有值,说明交接节点至少传出去了;只有一段自然语言摘要,说明问题在交接节点这一侧。

配置片段可以先按这个骨架写,字段名用占位符,实际值以平台的 schema 为准:

# workflow 交接节点最小骨架(占位,按实际 schema 替换)
handoff:
  from: agent_upstream
  to: agent_downstream
  # 交接节点从上游结果中取哪些字段
  inputs:
    - name: result_text        # 上游输出字段占位
    - name: task_meta          # 上游输出字段占位(可为嵌套)
  # 交接节点向外传递哪些字段
  outputs:
    - name: payload_text       # 映射自 result_text
    - name: payload_meta       # 映射自 task_meta
  mapping:
    payload_text: result_text
    payload_meta: task_meta

这段骨架的用途是让“取哪些、传哪些、怎么对应”三件事显式写出来。很多丢上下文的情况,是 inputs 写了但 outputs 没写,或 outputs 只写了摘要字段。

AgentLink 里智能体交接总丢上下文 / 是传递字段没配还是下游没接?

核对交接节点的字段映射关系

拿到真实输出后,再区分“没配”和“配错”。没配的表现是输出里根本没有这个键;配错的表现是键在、值为空或类型不对。

一一对应的写法建议把输入名和输出名分开列,避免同名覆盖带来的误解:

mapping:
  # 左:交接节点对外输出的字段名;右:上游结果中的字段路径
  payload_text: result_text
  payload_meta: task_meta
  payload_items: result_items[].content
  payload_owner: task_meta.owner.id

最容易漏配的位置通常是这几处:一是嵌套字段只写了父级,没有写完整路径;二是数组内的字段,映射时只取了数组本身,没有取元素里的属性;三是可选字段,上游有时不返回,交接节点就直接丢弃,下游看到的就是缺键;四是字段名的大小写和下划线风格不一致,看起来配了实际没命中;五是交接节点默认只暴露摘要字段,其余字段要在输出声明里显式追加。

AgentLink 里智能体交接总丢上下文 / 是传递字段没配还是下游没接?

检查下游智能体的入参声明

如果交接节点输出里有完整字段,而下游仍然只拿到一句话,问题基本在下游入参声明。下游只会拿到它声明过的那部分,没声明的字段不会自动传进来。

对照方法:把交接节点的 outputs 列表和下游入参声明并排列出来,逐行比对。

字段(占位)交接节点输出下游入参声明判断
payload_text有有正常
payload_meta有无下游未接,需补声明
payload_items有有确认嵌套路径一致
payload_owner无有交接节点漏配

只接一部分时,记录里的典型表现是:下游节点的入参里只有声明过的键,其余键缺失或为空;下游提示词中引用了未声明的字段,但取到空值;下游回复只围绕那句话摘要展开,没有用到结构化字段。看到这些表现,先去补下游入参声明,而不是继续加交接节点字段。

用一条两节点最短链路做回归验证

改完之后不要直接在完整流程上试,先搭一条只有上游和一个下游的最短链路,把变量隔离出来。

AgentLink 里智能体交接总丢上下文 / 是传递字段没配还是下游没接?

搭法:上游节点返回一个固定结构的结果,字段固定为上面用到的占位字段;中间保留交接节点;下游节点不做业务处理,只把收到的入参原样回显,比如输出序列化后的入参对象。这样一次运行就能看清字段有没有走到终点。

判定标准可以按三条看:下游回显的字段集合与上游返回的字段集合一致;嵌套路径和数组元素内的字段都能取到值;上游没有返回的可选字段,下游入参里也有对应的键(值为空),而不是整键消失。三条都满足,再回到原流程复跑。

如果仍有字段缺失,下一步是逐个字段补,不要一次改多处:先在交接节点 outputs 里加一个字段并确认它出现在交接节点输出中,再在下游入参声明里加同名同路径的字段,最后用同一条两节点链路回显确认。每加一个字段验证一次,才能定位到底是哪一层没接上。