孤儿 tool_call:对账补漏

简介: 「手写中文版Claude Code」教学系列:从零实现codeAgent,界面到Agent主循环全手写,注释均为中文大白话。本课详解压缩导致的“工具调用-结果”配对断裂(孤儿tool_call),揭示补假结果位置、增量校验等关键避坑点,并封装为流水线统一收尾函数。适合Agent开发入门与进阶。

「手写中文版 claude code」教学系列:codeAgent 是我从零手写的 claude code 复刻——不套壳不翻译,从界面到 Agent 主循环一行行实现,注释全是中文大白话,适合当 Agent 开发教材从头读到尾。
上一课解决了"合并着端回去";这一课处理端回去之前的对账——压缩和裁剪会把「调用↔结果」拆散,拆散了就是 400。
仓库:https://github.com/Harvil1/codeAgent

什么叫孤儿 tool_call

协议要求严格配对:assistant 发出的每个工具调用(tool_calls 里的 id),后面必须跟着同 id 的工具结果;反过来,工具结果前面必须有发起它的调用。

压缩、裁剪、恢复会话——任何从中间动消息的操作,都可能把一对搭档切成两半:

  • 正向孤儿:调用了,结果没了(被裁掉)
  • 反向孤儿:结果还在,发起它的调用被裁了

两种都让 API 直接 400,报错信息还不直说是配对问题。

对账函数(源码)

agent/context_compressor.py:

def _fix_tool_call_pairs(messages: list) -> list:
    """修复压缩切坏了的「工具调用 ↔ 工具结果」配对。

    处理两类问题:
    - 正向孤儿(调用了但没结果):在 assistant(tool_calls) 后面的结果序列末尾
      补一条假结果(内容注明「因压缩丢失」)。⚠️ 位置必须紧贴结果序列末尾,
      **不能**补到整个消息列表最后——中间隔了别的消息照样违反「紧跟其后」
      (Anthropic 查得最严),还是 400
    - 反向孤儿(有结果但前面没发起它的调用):直接删掉
      (压缩边界或上游 bug 都可能造出这种孤儿)
    """
    # 反向孤儿按「截至当前位置见过哪些 id」判断(逐步累加);
    # 用全量集合会漏判错序——结果 B 出现在发起 B 的调用之前也会放行
    # (B 已在全量集合里),导致 API 400。
    seen_so_far = set()
    ...

这个函数在我项目里是压缩流水线的固定收尾动作——七层压缩不管哪层动了刀(昨天第 3 篇的 compress_if_needed),最后统一过一遍对账。紧急压缩(第 2 篇的 reactive_compact)砍完消息也调它。

注释里藏的两个深坑

坑一:补假结果的位置。 正向孤儿补结果,直觉是补到消息列表末尾——错。协议要求结果紧跟 assistant 的调用序列,中间隔了别的消息照样 400。必须紧贴该轮结果序列的末尾补。

坑二:判断反向孤儿不能用全量集合。 我一开始的写法是先收集全部 tool_call id 再查结果——会漏判"结果出现在发起它的调用之前"这种错序(全量集合里已经有这个 id,检查放行,实际顺序是非法的)。正确做法是逐步累加的 seen_so_far:走到哪查到哪,错序当场现形。

设计启示

把它做成独立纯函数 + 流水线固定收尾,而不是散在各处打补丁,好处是:任何新加的"动消息"操作(未来的压缩层、会话编辑功能)自动获得对账保护,忘了调用手动刀的风险归零。

小结

  1. 动历史必产生孤儿配对,孤儿必 400——对账是压缩的标配收尾
  2. 补结果的位置要紧贴调用序列;判孤儿要用增量集合防错序漏判
  3. 收尾动作做成统一纯函数,新操作自动继承保护

下一篇:数硬币别占收银台——asyncio 的 to_thread 与 contextvars 一坑两命。


仓库在这,注释全中文,欢迎 Star ⭐:https://github.com/Harvil1/codeAgent

标签:Python asyncio Agent 大模型API

目录
相关文章
|
3月前
|
机器学习/深度学习 数据采集 人工智能
企业知识库搭建实战:RAG 从文档导入到检索调优全流程拆解
本文详解企业知识库搭建实战:以RAG为核心,覆盖文档导入、智能解析分段、语义/增强检索调优全流程。结合硅基边界平台案例,直击解析策略、分段长度、相似度阈值等关键参数调优要点,助技术/产品/运营团队两周内快速验证AI问答效果,让私域资料真正变成“会回答的AI”。
554 1
|
2月前
|
存储 人工智能 监控
大模型训练、AI项目 的 GPU 云服务器价格多少?阿里云 EGS GPU 云服务器最新配置价格清单(小时/月/年)
阿里云 EGS GPU云服务器 为AI开发者、科研人员、企业团队提供了弹性、可按需租用的高性能GPU算力,覆盖从T4入门卡到L20高端显卡的完整实例矩阵,支持包年包月、按量付费、抢占式实例、节省计划多种计费方案,适配模型训练、AI推理、AIGC生成、科学仿真等多元化高性能计算场景。在评估 阿里云 EGS GPU云服务器 服务器成本时,不能只看实例本身标价,必须把云盘、公网带宽、快照等附加计费项纳入预算评估。借助nvidia-smi等本地检测命令,可以快速验证GPU硬件状态;通过阿里云CLI和Python监控脚本,能够实时查询账单,监控算力消耗,及时发现成本异常。
321 1
|
29天前
|
人工智能 自然语言处理 IDE
AI 编程工具用了一年,我把「怎么用好它们」总结成 6 条心法
本文总结AI编程实践中的6条核心心法:强调上下文(尤其项目级CLAUDE.md)比工具选择更重要;按探索、设计、实现等阶段匹配不同工具形态;重视会话资产沉淀;建立人机边界感——AI做机械事,人做决策与设计;坚持“少而精”,主力+备用2–3个工具足矣。克制,才是高效关键。(239字)
274 0
|
1月前
|
人工智能 前端开发 API
阿里云百炼api入口官网:前台和后台,免费领超7000万Tokens
阿里云百炼是其AI大模型服务平台,提供前台官网(介绍、计费、领券)与后台控制台(API Key管理、Token用量查询、模型配置)。新用户可免费领取超7000万Tokens(每模型100万),支持按量付费或订阅计划降本。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
2月前
|
存储 人工智能 算法
大模型长期记忆系统设计:记忆压缩、去重、动态遗忘、时间衰减与冲突处理应用实践24.0
本文系统阐述大模型记忆引擎设计,提出瞬时/短期/长期三层记忆架构,涵盖压缩精简、语义去重、版本更新、时间衰减与冲突消解等全生命周期治理机制,强调其非简单数据库,而是模拟人脑规律的智能信息筛选与管理能力。
265 3
|
3月前
|
人工智能 自然语言处理 安全
阿里云Qoder CN能做什么?只是代码补全还是能做更多?
阿里云Qoder CN(原灵码)是覆盖开发与办公全场景的AI智能体系列,含IDE插件、桌面助手、CLI终端、数字员工及云端Agent等形态,支持自主编程、专家协作、语音交互、安全扫描及跨端任务管理,助力高效智能工作。阿里云Qoder CN官网:https://t.aliyun.com/U/hGZKNX
|
2月前
|
人工智能 数据挖掘 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8基座,六大核心能力重构企业自动化工作流与计费选型全指南
千问办公QwenWork依托Qwen3.8基座,通过六大核心能力打通文档处理、数据分析、浏览器自动化、自定义技能编排、多端Agent协同、企业业务系统,把AI能力从简单对话升级为完整任务交付,解决企业大量重复办公工作。但AI办公智能体属于效率辅助工具,无法完全替代业务人员专业判断,财务、法务类关键业务输出,必须经过人工审核校验。
541 2
|
2月前
|
数据采集 人工智能 搜索推荐
AI搜索优化内容判定机制与合规实践:避免被降权的三个信号
本文解析2026年央视315曝光“AI投毒”后,AI搜索引擎可信度评估机制的变革:强调语义一致性、跨平台数据校验与来源可核实性;提出合规内容生产的三大原则——标注出处、分平台改写、拆解为可验证信息块,并给出落地检查清单。
355 1
|
2月前
|
人工智能 缓存 弹性计算
阿里云百炼Token Plan全解:统一Credits计费,全栈AI能力订阅接入实操完整指南
阿里云百炼推出Token Plan订阅服务,采用Credits作为统一计量抵扣单元,一份订阅套餐,打通文本大模型、多模态视觉、图片生成、视频生成、语音能力,同时兼容Harness工具集与大量主流AI编程、智能体工具,实现一套订阅覆盖全栈AI能力,解决多模型多工具分散订阅、计费碎片化的痛点。本文将从产品底层定位、Credits统一计费机制、个人版与团队版能力差异、支持模型与工具矩阵、完整API接入实操、套餐选型策略、成本优化手段以及高频故障排查等维度完整展开,帮助开发者理解Token Plan的运行逻辑,完成业务接入,合理管控AI调用成本。
290 1
|
3月前
|
人工智能 中间件 定位技术
LangChain 入门教学:一张地图搞懂模型、链、RAG、图与智能体
本文是一份面向初学者的LangChain系统性入门指南,以“认知地图”为主线,清晰梳理LangChain 1.0、LangGraph、RAG、智能体(`create_agent`)等核心模块的定位与协作关系,摒弃过时API,聚焦2026年官方推荐架构,助开发者快速建立正确心智模型。(239字)
1017 0