动作每回合都变?把工具 Schema 放最后一条消息保住缓存

Low_Bad_6585 · reddit · 2026-09-09

开发者在做一个角色在共享世界中自主决策的 AI 生活模拟游戏,遇到的难题是:可用的动作(工具)随世界状态每回合变化,而工具定义放在对话前缀会不断使后续历史缓存失效。

他的解法是把当前动作 Schema(含可选动作和参数约束)放进最后一条动态 user message,放在历史之后,让不变的前缀保持可缓存。请求结构为:稳定系统指令 → 对话历史 → 最新 user 消息(当前状态 + 当前动作 Schema)。模型返回 JSON 由应用解析校验。这直接关系到连续决策场景的成本和延迟。

他还对比了 Anthropic Claude Code 的 Tool Search 思路:前缀里放一组轻量工具桩、按需加载完整定义,本质是同一个关注点——在不改写对话前部的前提下引入变化信息。

作者曾测试 17 种模型/输出模式组合(GPT、Claude、Gemini、Qwen、豆包等),模式包括 JSON schema 输出、JSON 对象模式、纯文本含 JSON、通用 doaction/dochoice 工具、为每个可用动作动态生成独立工具。初步结论:Gemini Flash + JSON schema 最稳,豆包 Seed 和 Sonnet 在纯文本 JSON 下能产生有趣的连续行为链;同时解析成功、选对动作、维持连贯行为是三个不同难度的问题。他也坦承这些是探索性运行,并非受控评测。

帖末向社区提问:大家是重新生成原生工具 Schema、用延迟加载,还是把 Schema 放消息里?有没有量化过缓存复用率、延迟与动作质量?工具或参数变了如何不改写缓存前缀地保留历史调用?

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →