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