--- date: "2026-06-01" status: adopted topic: "middleware-thinking" impact: [thinking, model-compat] --- # 用中间件实现思考,而非依赖模型原生 reasoning ## 背景 "思考功能"可以有两种实现: A. 透传 `enable_thinking` 给底层模型,依赖模型自带的 reasoning/extended-thinking 能力。 B. 在主请求前自己加一次"指引思考"的辅助 LLM 调用。 模型 A 路线要求底层模型支持原生 reasoning,且不同模型行为/输出格式不一致,难以统一前端处理。 ## 决策 采用 B:实现 `GuidelineMiddleware`,在 `before_agent` 阶段用业务指引 prompt 调一次模型生成思考, 统一包成 `...` + `message_tag:"THINK"`。 ## 影响 - 与具体模型解耦,任何 LLM(OpenAI/Claude/Qwen)都能用。 - 思考阶段可注入业务规则、工具描述、术语分析、记忆上下文,可控性强。 - 代价:每次多一次 LLM 调用(延迟 + 成本);思考内容非流式。 ## Gotchas - 思考依赖 `config._mem0_context`,需保证 memory 中间件先于本中间件执行。 - 思考后补空 `HumanMessage` 以兼容"末条须为 user"的模型,勿删。