docs: 修正 ReActAgentComponent 的 userPrompt 语义与 thinking 参数处置

- userMessage 更名为 userPrompt,并改为抽象方法(必须实现)
- 新增 §4.1 明确 thinking level 等模型高级参数由用户在 buildModel 内处理,
  LiteFlow 不做统一抽象

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
everywhere.z
2026-04-19 14:39:04 +08:00
parent f760ac2203
commit 8333819ffe

View File

@@ -80,14 +80,13 @@ public abstract class ReActAgentComponent extends NodeComponent {
/** 构建 agentscope 的 Model平台+模型+apiKey+参数) */
protected abstract Model buildModel(ReActAgentContext ctx);
/** 系统提示词ctx 含 sessionId / workspace 路径,可拼入 prompt */
/** 系统提示词ctx 含 sessionId / workspace 路径,可拼入 prompt
* 一次性会话场景下可返回空串,所有业务意图写在 userPrompt 里即可 */
protected abstract String systemPrompt(ReActAgentContext ctx);
/** 本次要发送给 agent 的用户消息;默认从 slot.getRequestData() 取 */
protected String userMessage(ReActAgentContext ctx) {
Object data = ctx.getSlot().getRequestData();
return data == null ? "" : data.toString();
}
/** 本次要发送给 agent 的用户消息LLM Role=user
* 必须实现——一次性会话时核心意图全部写在这里 */
protected abstract String userPrompt(ReActAgentContext ctx);
/* ===== 可选覆写 ===== */
@@ -135,6 +134,34 @@ public abstract class ReActAgentComponent extends NodeComponent {
- Agent 实例**懒构建**并缓存在 `AgentSession`,同一 sessionId 复用memory 自动累积(多轮对话能力来自此)。
- 默认 `resolveSessionId = slot.requestId` → 每次执行独立 session无状态覆写后可跨次共享。
### 4.1 模型高级参数(如 thinking level的处置
各平台的 "thinking level" 参数形态差异很大Gemini 用 `ThinkingLevelFormatter`、OpenAI o 系列用 `reasoning_effort`、Anthropic 用 `thinking.budget_tokens`、DashScope 用 `enable_thinking`、DeepSeek 用模型名区分)。
**设计决策**:抽象类**不**统一封装,`ReActAgentProperties` 里也**不**提供 thinking 配置项。用户在 `buildModel(ctx)` 内用 agentscope 原生 builder 自行设置。好处平台演进新增高级参数temperature / top_p / safety_settings / reasoning_timeout 等)不需要修改 LiteFlow 的 schema 或 core 抽象。
示例:
```java
// Gemini
return GeminiChatModel.builder()
.apiKey(apiKey).modelName("gemini-3-flash-preview")
.formatter(new ThinkingLevelFormatter("high"))
.build();
// Anthropic
return AnthropicChatModel.builder()
.apiKey(apiKey).modelName("claude-sonnet-4-6")
.thinkingBudgetTokens(8000)
.build();
// DashScope千问
return DashScopeChatModel.builder()
.apiKey(apiKey).modelName("qwen3-max")
.enableThinking(true)
.build();
```
## 5. 平台子模块便捷工厂
每个平台模块**极薄**,只提供一个 Model 工厂类。
@@ -336,7 +363,7 @@ public class PlatformCredential {
.hooks(hooks(ctx))
.build()
12. }
13. Msg reply = session.agent.call(Msg.builder().textContent(userMessage(ctx)).build()).block()
13. Msg reply = session.agent.call(Msg.builder().textContent(userPrompt(ctx)).build()).block()
14. handleReply(reply, ctx)
} finally {
15. session.lock.unlock()