动作每回合都变?把工具 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 架构:主 Agent 反复调子 Agent 只会烧 token — keyanzhang · 2026-09-09
- opencode 发布 v1.18.30:新增 GPT-6 Astra 系统提示词支持 — opencode-agent[bot] · 2026-09-09
- Bindu Reddy 预告周四发布:主打长时 Agent 循环的超低价新 LLM — bindureddy · 2026-09-09
- 开源 huashu-chrome:让 Agent 带登录态操控你的 Chrome — AlchainHust · 2026-09-09
- 作者实测:GPT-6 Astra 秒完 Claude Code 搞不定的浏览器 Agent 任务 — AlchainHust · 2026-09-09
- Agent 二十次才翻车一次,你怎么证明修复有效? — Such-Process5697 · 2026-09-09