platform-llm 会在解析 Provider 响应时过滤 reasoning 内容 #331

Open
opened 2026-09-11 21:09:48 +08:00 by lhk229 · 0 comments
Owner

策划 Agent 无法获取 Provider reasoning 内容

问题概述

当前 platform-llm 会在解析 Provider 响应时过滤 reasoning 内容,只保留用户可见正文。

策划 Agent 的 Runtime 因此无法获取 reasoning 增量,也无法在 UI 中展示可折叠的思考过程。

当前行为

Provider 返回的以下字段或内容会被识别为 reasoning,并从正文中排除:

  • reasoning
  • reasoning_content
  • analysis
  • thinking

Responses 协议中以下类型的内容也会被过滤:

reasoning
reasoning_content
analysis
thinking

当前 LlmStreamDelta 只提供:

pub struct LlmStreamDelta {
    pub accumulated_text: String,
    pub delta_text: String,
    pub finish_reason: Option<String>,
}

没有 reasoning 增量或累计 reasoning 字段。

因此上层只能收到:

  • 用户可见正文;
  • 工具调用;
  • 完成状态;

无法收到 reasoning 内容。

影响

策划 Agent 目前无法:

  1. 在流式过程中单独接收 reasoning;
  2. 将 reasoning 与用户正文分开;
  3. 在 UI 中提供默认折叠、按需展开的思考过程;
  4. 对 reasoning 做单独审计或调试记录。

当前策划 Agent 已预留 reasoningText UI 事件字段,但由于 Provider 层没有输出 reasoning,该字段始终为空。

建议方案

不要把 reasoning 拼接进 delta_textaccumulated_text,应扩展流式响应结构,例如:

pub struct LlmStreamDelta {
    pub accumulated_text: String,
    pub delta_text: String,
    pub accumulated_reasoning: String,
    pub reasoning_delta: String,
    pub finish_reason: Option<String>,
}

或者使用可选字段,避免影响不需要 reasoning 的调用方:

pub struct LlmStreamDelta {
    pub accumulated_text: String,
    pub delta_text: String,
    pub reasoning_text: Option<String>,
    pub reasoning_delta: Option<String>,
    pub finish_reason: Option<String>,
}

解析层需要支持:

  • Responses 流式 reasoning 增量事件;
  • Chat Completions 兼容接口中的 reasoning / reasoning_content
  • reasoning 与正文分别累计;
  • 终态响应中的 reasoning 内容;
  • 没有 reasoning 时保持字段为空;
  • reasoning 解析失败时不影响正文和工具调用流程。

范围建议

策划 Agent 只需要在上层消费 reasoning,不应把 reasoning 自动拼入用户正文。

如果只希望策划 Agent 使用 reasoning 展示能力,可以考虑:

  • platform-llm 提供可选 reasoning 字段;
  • 由调用方通过配置或请求参数决定是否保留 reasoning;
  • 默认行为仍保持现状,避免改变 GameAgent 等其他调用方的展示和安全语义。

验收标准

  • Responses 流式 reasoning 能被单独解析;
  • 正文内容不包含 reasoning;
  • reasoning 增量顺序和累计内容正确;
  • 没有 reasoning 的 Provider 行为不变;
  • 现有工具调用和正文流式测试全部通过;
  • 策划 Agent 能收到独立的 reasoning 字段;
  • GameAgent 未启用 reasoning 时行为不变。
# 策划 Agent 无法获取 Provider reasoning 内容 ## 问题概述 当前 `platform-llm` 会在解析 Provider 响应时过滤 reasoning 内容,只保留用户可见正文。 策划 Agent 的 Runtime 因此无法获取 reasoning 增量,也无法在 UI 中展示可折叠的思考过程。 ## 当前行为 Provider 返回的以下字段或内容会被识别为 reasoning,并从正文中排除: - `reasoning` - `reasoning_content` - `analysis` - `thinking` Responses 协议中以下类型的内容也会被过滤: ```text reasoning reasoning_content analysis thinking ``` 当前 `LlmStreamDelta` 只提供: ```rust pub struct LlmStreamDelta { pub accumulated_text: String, pub delta_text: String, pub finish_reason: Option<String>, } ``` 没有 reasoning 增量或累计 reasoning 字段。 因此上层只能收到: - 用户可见正文; - 工具调用; - 完成状态; 无法收到 reasoning 内容。 ## 影响 策划 Agent 目前无法: 1. 在流式过程中单独接收 reasoning; 2. 将 reasoning 与用户正文分开; 3. 在 UI 中提供默认折叠、按需展开的思考过程; 4. 对 reasoning 做单独审计或调试记录。 当前策划 Agent 已预留 `reasoningText` UI 事件字段,但由于 Provider 层没有输出 reasoning,该字段始终为空。 ## 建议方案 不要把 reasoning 拼接进 `delta_text` 或 `accumulated_text`,应扩展流式响应结构,例如: ```rust pub struct LlmStreamDelta { pub accumulated_text: String, pub delta_text: String, pub accumulated_reasoning: String, pub reasoning_delta: String, pub finish_reason: Option<String>, } ``` 或者使用可选字段,避免影响不需要 reasoning 的调用方: ```rust pub struct LlmStreamDelta { pub accumulated_text: String, pub delta_text: String, pub reasoning_text: Option<String>, pub reasoning_delta: Option<String>, pub finish_reason: Option<String>, } ``` 解析层需要支持: - Responses 流式 reasoning 增量事件; - Chat Completions 兼容接口中的 `reasoning` / `reasoning_content`; - reasoning 与正文分别累计; - 终态响应中的 reasoning 内容; - 没有 reasoning 时保持字段为空; - reasoning 解析失败时不影响正文和工具调用流程。 ## 范围建议 策划 Agent 只需要在上层消费 reasoning,不应把 reasoning 自动拼入用户正文。 如果只希望策划 Agent 使用 reasoning 展示能力,可以考虑: - `platform-llm` 提供可选 reasoning 字段; - 由调用方通过配置或请求参数决定是否保留 reasoning; - 默认行为仍保持现状,避免改变 GameAgent 等其他调用方的展示和安全语义。 ## 验收标准 - Responses 流式 reasoning 能被单独解析; - 正文内容不包含 reasoning; - reasoning 增量顺序和累计内容正确; - 没有 reasoning 的 Provider 行为不变; - 现有工具调用和正文流式测试全部通过; - 策划 Agent 能收到独立的 reasoning 字段; - GameAgent 未启用 reasoning 时行为不变。
lhk229 self-assigned this 2026-09-14 11:59:23 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#331