Skip to content

一个什么都往里扔的垃圾桶

证据等级:F(源码直接证明)
分析基线:4f843556


一句话

build_agent_context 将 soul.md、memory.md、skills/、session_context、focus、triggers、enterprise_info 全部压进一个 system message,无分层、无缓存、无优先级。


1. 事实基础

# agent_context.py
system_prompt = static_content + dynamic_content

# caller.py:557-559
api_messages = [LLMMessage(
    role="system",
    content=static_prompt,
    dynamic_content=dynamic_prompt,
)]

内容构成

类型 内容 处理
静态 soul.md 截断到 30K 字符
静态 memory.md 截断到 2K 字符
静态 skills/ 索引 渐进式披露
静态 enterprise_info 完整加载
动态 session_context 紧凑摘要
动态 focus 当前活跃项
动态 triggers 触发条件
动态 时间戳 当前时间

全部合并为一个 LLMMessage(role="system")


2. 后果

  1. 无分层:system / task / memory / tool result 全部混在一起,LLM 无法区分优先级
  2. 无缓存策略:静态内容(soul.md、skills/、enterprise_info)每次重算,不被缓存
  3. 截断丢失:memory 截断到 2000 字符,超出部分丢弃
  4. 无法单独更新:任何一个静态部分变化,整个 system message 都要重建

3. 交互影响

与"一根管道"(018)叠加:工具输出(可能是 pip 进度条、npm 依赖树)直通 messages[] → 与 soul.md、memory、skills 挤在同一个上下文窗口 → 关键信息被噪音淹没。

与"伪缓存"(020)叠加:静态内容每次都重算 → 但其中已经混入了会话动态内容 → 即使想缓存也无法缓存。


4. 与 AI Coding 的关系

  1. "全部拼接"是最简单的实现:把所有内容拼成一个大字符串,比设计分层架构快得多
  2. 无缓存意识:AI 不会主动说"这部分内容几轮都不变,应该缓存"——这需要架构师对性能的整体判断
  3. 局部合理、全局灾难:每个 _read_file_safe 调用本身是正确的——但组合在一起就变成了无法维护的"垃圾桶"

关键代码

文件 行号 内容
agent_context.py 全文件 build_agent_context — 全部内容拼成字符串
agent_context.py 467 memory 截断到 2000 字符
agent_context.py 455 soul 截断到 30000 字符
caller.py 557-559 静态+动态合并为一个 system message