Menu

#79 feat: support reasoningEffort and fix WriterAgent model override issues

open
nobody
None
5 days ago
2026-03-23
Anonymous
No

Originally created by: Misaka09982

Summary

<!-- 1-3 bullet points: what changed and why -->
  • 正式支持 reasoningEffort 推理强度配置:作为一等配置字段,支持在 .envinkos.json  modelOverrides 中设置,并自动映射到 OpenAI Chat (reasoning_effort) 和 Responses (reasoning: { effort }) API。
  • 修复 WriterAgent 覆盖参数失效 Bug:移除了 WriterAgent 第一阶段写作中硬编码的 0.7 温度,使其能够正确响应用户在 modelOverrides.writer.temperature 中的自定义设置。
  • 优化配置合并链路:改进了 PipelineRunner 的逻辑,确保当用户仅覆盖 temperaturemaxTokens  reasoningEffort 时,这些参数能正确下沉到实际的 API 请求中。

Motivation (optional)

<!-- Why this change is needed. Link issues if applicable. -->

目前的 InkOS 在使用 OpenAI o1/o3 等具备推理能力的模型时,无法通过配置控制推理强度(reasoning_effort)。此外,由于部分 Agent(如 WriterAgent)内部存在参数硬编码,导致用户即便在配置文件中设置了覆盖参数也无法生效。

Changes

<!-- File-level change list: what each file does --> File | Change -- | -- packages/core/src/models/project.ts | 在 Schema 中新增 reasoningEffort 字段,并补全 AgentLLMOverrideSchema 中的可选覆盖项。 packages/core/src/utils/config-loader.ts | 增加对环境变量 INKOS_LLM_REASONING_EFFORT 的读取支持。 packages/core/src/llm/provider.ts | 实现 reasoningEffort 在不同协议(Chat/Responses)下的请求参数映射。 packages/core/src/pipeline/runner.ts | 修正 resolveOverride 逻辑,确保非 baseUrl 变化的覆盖配置也能创建正确携带默认值的客户端。 packages/core/src/agents/writer.ts | 将创意写作阶段的 temperature 从硬编码 0.7 改为读取 client.defaults.temperature。 packages/cli/src/commands/config.ts | KNOWN_KEYS 增加推理强度支持,并在 set-global 中添加 --reasoning-effort 参数。 packages/cli/src/commands/init.ts | 在项目初始化的 .env 模板中加入推理强度的配置示例和注释。

Usage (optional)

<!-- Code snippets, CLI examples, or config samples showing how to use the new feature -->

命令行设置全局推理强度:

<button class="" title="Copy code" aria-label="Copy code to clipboard" style="color: rgba(204, 204, 204, 0.87); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 13px; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(26, 26, 26); border-color: rgb(69, 69, 69); border-style: solid; border-width: 0.8px; border-image: none 100% / 1 / 0 stretch; cursor: pointer; opacity: 0; display: flex; border-radius: 4px; justify-content: center; align-items: center; padding: 4px; transition: opacity 0.15s, background 0.15s; position: absolute; top: 4px; right: 4px;"></button>
inkos config set-global --reasoning-effort high --provider openai --model o3-mini ...

inkos.json 中针对特定模型配置:

<button class="" title="Copy code" aria-label="Copy code to clipboard" style="color: rgba(204, 204, 204, 0.87); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; font-size: 13px; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(26, 26, 26); border-color: rgb(69, 69, 69); border-style: solid; border-width: 0.8px; border-image: none 100% / 1 / 0 stretch; cursor: pointer; opacity: 0; display: flex; border-radius: 4px; justify-content: center; align-items: center; padding: 4px; transition: opacity 0.15s, background 0.15s; position: absolute; top: 4px; right: 4px;"></button>
"modelOverrides": {
  "writer": {
    "model": "o3-mini",
    "reasoningEffort": "high",
    "temperature": 1.0
  }
}

Test plan

  •  pnpm typecheck passes
  •  pnpm test passes (all existing + new tests)
  •  Manual verification:
    •   .env 中设置 INKOS_LLM_REASONING_EFFORT=high,通过抓包工具确认 OpenAI 请求体中包含了正确的 reasoning_effort  reasoning: { effort }
    •   writer agent 设置特定的 temperature: 0.9,确认实际 API 请求参数不再是默认的 0.7
    •  验证修改后的代码在非 OpenAI 渠道下不会产生多余的请求参数干扰。

Breaking changes (optional)

<!-- List any breaking changes to public API, CLI flags, config format, etc. -->

无破坏性变更。reasoningEffort 为可选字段,未设置时不会影响现有逻辑。


🤖 Generated with Claude Code

Discussion


Log in to post a comment.

MongoDB Logo MongoDB