From bbab9168427bbdad8c0e33908c392cf056aedf56 Mon Sep 17 00:00:00 2001 From: V-LiuShuang Date: Mon, 21 Sep 2026 10:40:45 +0800 Subject: [PATCH] add --- harness-properties.md | 364 +++++++++++++++++++++++++++++++++++++++++ msg.md | 365 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 728 insertions(+), 1 deletion(-) create mode 100644 harness-properties.md diff --git a/harness-properties.md b/harness-properties.md new file mode 100644 index 0000000..99a8203 --- /dev/null +++ b/harness-properties.md @@ -0,0 +1,364 @@ +# AgentProperties 配置文档 + +本文档描述 `AgentProperties` 类及其内部静态类的配置字段。每个字段都通过 `@Schema` 注解提供了描述信息。 + +## 主类:AgentProperties + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| mainAgentSpec | MainAgentSpec | 主智能体规格 | +| workspace | Workspace | 工作区配置 | +| compaction | Compaction | 上下文压缩配置 | +| skillRepository | SkillRepository | SKILL相关配置 | +| a2sMcpProvider | McpProvider | AaaS的MCP供应商配置 | +| mcpServerConfigs | List\ | MCP服务配置列表 | +| permissionContext | PermissionContext | 权限上下文配置 | +| memoryConfig | MemoryConfig | 长期记忆配置 | +| subagentSpec | List\ | 子智能体清单 | + +## 内部类:MainAgentSpec + +主智能体规格配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| name | String | 智能体名字 | - | +| description | String | 智能体描述 | - | +| systemPrompt | String | 系统提示词 | - | +| chatModel | NewApiModelProperties | 聊天模型 | - | +| enablePlanMode | Boolean | 是否启用计划模式 | - | +| enableShell | Boolean | 是否启用SHELL | - | +| enableAgentTraceLog | Boolean | 是否打印TraceLog | - | +| asyncToolTimeout | int | 异步工具执行超时(单位:秒) | - | +| maxContextTokens | int | 最大上下文(默认:8000) | 8000 | +| maxIter | int | 最大迭代次数(默认:10) | 10 | +| maxRetries | int | 最大重试次数(默认:3) | 3 | + +## 内部类:Workspace + +工作区配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| localRootPath | String | 本机根目录 | +| stateStoreType | String | 状态存储(mysql/redis) | +| isolationScope | String | 隔离级别 | +| anonymousUserId | String | 当上下文没有用户ID使用的默认值 | + +## 内部类:Compaction + +上下文压缩配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| triggerMessages | int | 触发压缩的消息数量阈值(0表示不按消息数触发) | 50 | +| triggerTokens | int | 触发压缩的token数量阈值(0表示动态模式:根据模型上下文窗口减去reserved计算) | 0 | +| reserved | int | 预留的token数量(仅动态模式使用) | 20000 | +| keepMessages | int | 压缩后保留的消息数量 | 20 | +| keepTokens | int | 压缩后保留的token数量(-1表示动态模式,0表示使用keepMessages) | -1 | +| keepTokensMin | int | 最小保留token数量(动态模式) | 2000 | +| keepTokensMax | int | 最大保留token数量(动态模式) | 8000 | +| keepTokensRatio | Double | 保留token的比例(动态模式) | 0.25 | +| summaryPrompt | String | 摘要提示词,'default'表示使用默认提示词 | - | +| flushBeforeCompact | Boolean | 压缩前是否刷新消息到存储 | true | +| offloadBeforeCompact | Boolean | 压缩前是否卸载消息到外部存储 | true | +| prune | PruneConfig | 剪枝配置 | - | +| truncate | TruncateArgs | 截断配置 | - | +| model | NewApiModelProperties | 压缩使用的模型,不设置则使用智能体主模型 | - | + +## 内部类:McpProvider + +AaaS的MCP供应商配置。 + +| 字段名 | 类型 | 描述 | 示例 | +|--------|------|------|------| +| apiGateway | String | API网关 | https://misdev.lcfuturecenter.com/prod-api | +| apiQueryMcpServerInfoUri | String | 查询MCP连接信息(批量) | /mcp/server/openapi/list | +| httpClient | HttpClientConfig | HTTP客户端配置 | - | + +## 内部类:McpServerConfig + +MCP服务配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| serverName | String | MCP服务名称 | - | +| transport | String | 协议(stdio/sse/http) | - | +| enableTools | List\ | 启用的工具列表 | - | +| initializationTimeout | int | 多少秒初始化超时(默认10秒) | 10 | +| timeout | int | 多少秒执行超时(默认600秒) | 600 | + +## 内部类:SkillRepository + +SKILL相关配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| mysql | MysqlSkillRepository | 从MySQL加载 | +| classPath | ClassPathSkillRepository | 从classpath加载 | +| a2s | A2sSkillRepository | 从AaaS加载 | +| httpClient | HttpClientConfig | HTTP客户端配置 | + +## 内部类:HttpClientConfig + +HTTP客户端配置。 + +| 字段名 | 类型 | 描述 | 示例 | +|--------|------|------|------| +| version | String | HTTP协议版本,仅支持:HTTP/1.1、HTTP/2 | HTTP/1.1 | +| connectTimeout | int | 连接超时(单位:秒) | - | +| requestTimeout | int | 单个请求超时(单位:秒) | - | +| enableRequestLogger | Boolean | 是否开启请求日志打印 | - | +| enableResponseLogger | Boolean | 是否开启响应日志打印(下载或流式传输会忽略掉) | - | +| defaultHeaders | Map\ | 自定义的默认请求头 | - | + +## 内部类:A2sSkillRepository + +从AaaS加载SKILL的配置。 + +| 字段名 | 类型 | 描述 | 示例 | +|--------|------|------|------| +| enable | Boolean | 是否启用 | - | +| directory | String | 从A2s下载到服务器本地的目录 | - | +| apiGateway | String | API网关 | https://misdev.lcfuturecenter.com/prod-api | +| apiDebugSkillInfoUri | String | 查询调试版SKILL信息的URI | /mcp/skill/openapi/debug/{skill_name} | +| apiReleaseSkillInfoUri | String | 查询正式版SKILL信息的URI(支持占位符) | /mcp/skill/openapi/release/{skill_name} | +| apiDownloadSkillUri | String | 下载SKILL的地址(支持占位符) | /resource/oss/download/{oss_id} | +| availableSkills | Set\ | 可用SKILL名称列表 | - | + +## 内部类:ClassPathSkillRepository + +从classpath加载SKILL的配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| enable | Boolean | 是否启用 | +| directory | String | 目录名称 | + +## 内部类:MysqlSkillRepository + +从MySQL加载SKILL的配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| enable | Boolean | 是否启用 | +| databaseName | String | 数据库名称 | +| skillsTableName | String | SKILL表名称 | +| resourcesTableName | String | SKILL资源表名称 | +| createIfNotExist | Boolean | 没有表是否框架自行创建表 | +| writeable | Boolean | 平台统一管理 skill 时常用,设置为true后可以从 agent 侧写回,只读分发就设置为false | + +## 内部类:PruneConfig + +剪枝配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| protectTokens | int | 保护的token数量,剪枝时不会删除这些token | 40000 | +| minimumTokens | int | 最小token数量,剪枝后不会低于此值 | 20000 | +| maxOutputChars | int | 工具输出的最大字符数,超过则截断 | 2000 | +| excludedTools | Set\ | 排除的工具列表,这些工具的输出不会被剪枝 | ["read_file", "memory_search", "memory_get", "session_search"] | + +## 内部类:TruncateArgs + +截断配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| triggerMessages | int | 触发截断的消息数量阈值 | 25 | +| triggerTokens | int | 触发截断的token数量阈值 | 40000 | +| keepMessages | int | 截断后保留的消息数量 | 20 | +| keepTokens | int | 截断后保留的token数量 | 0 | +| maxArgLength | int | 工具参数的最大长度,超过则截断 | 2000 | +| truncationText | String | 截断时显示的提示文本 | ...(argument truncated) | + +## 内部类:PermissionContext + +权限上下文配置。 + +| 字段名 | 类型 | 描述 | 默认值 | 示例 | +|--------|------|------|--------|------| +| mode | String | 工作区权限上下文模式 | default | default/accept_edits/explore/bypass/dont_ask | +| allow | Set\ | 运行执行的工具列表 | - | - | +| deny | Set\ | 拒绝执行的工具列表 | - | - | +| ask | Set\ | 需要询问用户的工具列表 | - | - | + +## 内部类:MemoryConfig + +长期记忆配置。 + +| 字段名 | 类型 | 描述 | 默认值 | 示例 | +|--------|------|------|--------|------| +| model | NewApiModelProperties | 记忆操作(刷新 + 归纳)专用模型,不设置则使用智能体主模型 | - | - | +| flushPrompt | String | 刷新记忆的提示词,null表示使用默认值 | - | - | +| consolidationPrompt | String | 归纳记忆的提示词,必须包含两个%d占位符(max-tokens, max-chars),null表示使用默认值 | - | - | +| consolidationMaxTokens | int | 归纳时的最大token数 | 4000 | 4000 | +| consolidationMinGap | int | 归纳的最小间隔(单位:分钟) | 30 | 30 | +| dailyFileRetentionDays | int | 每日记忆文件保留天数 | 30 | 30 | +| sessionRetentionDays | int | 会话记忆JSONL日志保留天数 | 30 | 30 | +| flushTrigger | String | 每次调用后flush的触发策略(ALWAYS/NEVER) | ALWAYS | ALWAYS | + +## 内部类:SubagentSpec + +子智能体规格配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| name | String | 子智能体名称 | - | +| description | String | 子智能体描述 | - | +| systemPrompt | String | 子智能体的系统提示词 | - | +| workspaceMode | String | 工作区模式:SHARED=共享主智能体的工作区,ISOLATED=独立的工作区 | SHARED | +| model | NewApiModelProperties | 子智能体使用的模型,不设置则使用主智能体的模型 | - | +| steps | int | 这个子智能体单次最大迭代次数,不填或者设置0则使用主智能体最大迭代次数的1/2 | 0 | +| mode | String | 默认 subagent,可选:primary/subagent/all;primary 不允许被 spawn | subagent | +| hidden | Boolean | 默认false,设为 true 时不出现在 agent 可见列表(仍可程序化 spawn) | false | + +--- + +## 示例 JSON + +```json +{ + "mainAgentSpec": { + "name": "main-agent", + "description": "主智能体", + "systemPrompt": "你是一个有用的助手。", + "chatModel": { + "model": "gpt-4", + "apiKey": "your-api-key" + }, + "enablePlanMode": true, + "enableShell": false, + "enableAgentTraceLog": true, + "asyncToolTimeout": 30, + "maxContextTokens": 8000, + "maxIter": 10, + "maxRetries": 3 + }, + "workspace": { + "localRootPath": "/app/workspace", + "stateStoreType": "mysql", + "isolationScope": "USER", + "anonymousUserId": "anonymous" + }, + "compaction": { + "triggerMessages": 50, + "triggerTokens": 0, + "reserved": 20000, + "keepMessages": 20, + "keepTokens": -1, + "keepTokensMin": 2000, + "keepTokensMax": 8000, + "keepTokensRatio": 0.25, + "summaryPrompt": "default", + "flushBeforeCompact": true, + "offloadBeforeCompact": true, + "prune": { + "protectTokens": 40000, + "minimumTokens": 20000, + "maxOutputChars": 2000, + "excludedTools": ["read_file", "memory_search", "memory_get", "session_search"] + }, + "truncate": { + "triggerMessages": 25, + "triggerTokens": 40000, + "keepMessages": 20, + "keepTokens": 0, + "maxArgLength": 2000, + "truncationText": "...(argument truncated)" + }, + "model": { + "model": "gpt-4", + "apiKey": "your-api-key" + } + }, + "skillRepository": { + "mysql": { + "enable": true, + "databaseName": "skill_db", + "skillsTableName": "skills", + "resourcesTableName": "skill_resources", + "createIfNotExist": true, + "writeable": false + }, + "classPath": { + "enable": true, + "directory": "skills" + }, + "a2s": { + "enable": true, + "directory": "/app/skills", + "apiGateway": "https://misdev.lcfuturecenter.com/prod-api", + "apiDebugSkillInfoUri": "/mcp/skill/openapi/debug/{skill_name}", + "apiReleaseSkillInfoUri": "/mcp/skill/openapi/release/{skill_name}", + "apiDownloadSkillUri": "/resource/oss/download/{oss_id}", + "availableSkills": ["skill1|debug", "skill2|release"] + }, + "httpClient": { + "version": "HTTP/1.1", + "connectTimeout": 10, + "requestTimeout": 30, + "enableRequestLogger": true, + "enableResponseLogger": false, + "defaultHeaders": { + "Authorization": "Bearer token123" + } + } + }, + "a2sMcpProvider": { + "apiGateway": "https://misdev.lcfuturecenter.com/prod-api", + "apiQueryMcpServerInfoUri": "/mcp/server/openapi/list", + "httpClient": { + "version": "HTTP/1.1", + "connectTimeout": 10, + "requestTimeout": 30, + "enableRequestLogger": true, + "enableResponseLogger": false, + "defaultHeaders": {} + } + }, + "mcpServerConfigs": [ + { + "serverName": "weather-server", + "transport": "sse", + "enableTools": ["get_weather", "get_forecast"], + "initializationTimeout": 10, + "timeout": 600 + } + ], + "permissionContext": { + "mode": "default", + "allow": ["read_file", "list_files"], + "deny": ["delete_file"], + "ask": ["write_file"] + }, + "memoryConfig": { + "model": { + "model": "gpt-4", + "apiKey": "your-api-key" + }, + "flushPrompt": "刷新记忆提示词", + "consolidationPrompt": "归纳记忆提示词,最大token数:%d,最大字符数:%d", + "consolidationMaxTokens": 4000, + "consolidationMinGap": 30, + "dailyFileRetentionDays": 30, + "sessionRetentionDays": 30, + "flushTrigger": "ALWAYS" + }, + "subagentSpec": [ + { + "name": "research-agent", + "description": "研究智能体", + "systemPrompt": "你是一个研究助手。", + "workspaceMode": "SHARED", + "model": { + "model": "gpt-4", + "apiKey": "your-api-key" + }, + "steps": 5, + "mode": "subagent", + "hidden": false + } + ] +} +``` \ No newline at end of file diff --git a/msg.md b/msg.md index d800886..99a8203 100644 --- a/msg.md +++ b/msg.md @@ -1 +1,364 @@ -123 \ No newline at end of file +# AgentProperties 配置文档 + +本文档描述 `AgentProperties` 类及其内部静态类的配置字段。每个字段都通过 `@Schema` 注解提供了描述信息。 + +## 主类:AgentProperties + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| mainAgentSpec | MainAgentSpec | 主智能体规格 | +| workspace | Workspace | 工作区配置 | +| compaction | Compaction | 上下文压缩配置 | +| skillRepository | SkillRepository | SKILL相关配置 | +| a2sMcpProvider | McpProvider | AaaS的MCP供应商配置 | +| mcpServerConfigs | List\ | MCP服务配置列表 | +| permissionContext | PermissionContext | 权限上下文配置 | +| memoryConfig | MemoryConfig | 长期记忆配置 | +| subagentSpec | List\ | 子智能体清单 | + +## 内部类:MainAgentSpec + +主智能体规格配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| name | String | 智能体名字 | - | +| description | String | 智能体描述 | - | +| systemPrompt | String | 系统提示词 | - | +| chatModel | NewApiModelProperties | 聊天模型 | - | +| enablePlanMode | Boolean | 是否启用计划模式 | - | +| enableShell | Boolean | 是否启用SHELL | - | +| enableAgentTraceLog | Boolean | 是否打印TraceLog | - | +| asyncToolTimeout | int | 异步工具执行超时(单位:秒) | - | +| maxContextTokens | int | 最大上下文(默认:8000) | 8000 | +| maxIter | int | 最大迭代次数(默认:10) | 10 | +| maxRetries | int | 最大重试次数(默认:3) | 3 | + +## 内部类:Workspace + +工作区配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| localRootPath | String | 本机根目录 | +| stateStoreType | String | 状态存储(mysql/redis) | +| isolationScope | String | 隔离级别 | +| anonymousUserId | String | 当上下文没有用户ID使用的默认值 | + +## 内部类:Compaction + +上下文压缩配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| triggerMessages | int | 触发压缩的消息数量阈值(0表示不按消息数触发) | 50 | +| triggerTokens | int | 触发压缩的token数量阈值(0表示动态模式:根据模型上下文窗口减去reserved计算) | 0 | +| reserved | int | 预留的token数量(仅动态模式使用) | 20000 | +| keepMessages | int | 压缩后保留的消息数量 | 20 | +| keepTokens | int | 压缩后保留的token数量(-1表示动态模式,0表示使用keepMessages) | -1 | +| keepTokensMin | int | 最小保留token数量(动态模式) | 2000 | +| keepTokensMax | int | 最大保留token数量(动态模式) | 8000 | +| keepTokensRatio | Double | 保留token的比例(动态模式) | 0.25 | +| summaryPrompt | String | 摘要提示词,'default'表示使用默认提示词 | - | +| flushBeforeCompact | Boolean | 压缩前是否刷新消息到存储 | true | +| offloadBeforeCompact | Boolean | 压缩前是否卸载消息到外部存储 | true | +| prune | PruneConfig | 剪枝配置 | - | +| truncate | TruncateArgs | 截断配置 | - | +| model | NewApiModelProperties | 压缩使用的模型,不设置则使用智能体主模型 | - | + +## 内部类:McpProvider + +AaaS的MCP供应商配置。 + +| 字段名 | 类型 | 描述 | 示例 | +|--------|------|------|------| +| apiGateway | String | API网关 | https://misdev.lcfuturecenter.com/prod-api | +| apiQueryMcpServerInfoUri | String | 查询MCP连接信息(批量) | /mcp/server/openapi/list | +| httpClient | HttpClientConfig | HTTP客户端配置 | - | + +## 内部类:McpServerConfig + +MCP服务配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| serverName | String | MCP服务名称 | - | +| transport | String | 协议(stdio/sse/http) | - | +| enableTools | List\ | 启用的工具列表 | - | +| initializationTimeout | int | 多少秒初始化超时(默认10秒) | 10 | +| timeout | int | 多少秒执行超时(默认600秒) | 600 | + +## 内部类:SkillRepository + +SKILL相关配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| mysql | MysqlSkillRepository | 从MySQL加载 | +| classPath | ClassPathSkillRepository | 从classpath加载 | +| a2s | A2sSkillRepository | 从AaaS加载 | +| httpClient | HttpClientConfig | HTTP客户端配置 | + +## 内部类:HttpClientConfig + +HTTP客户端配置。 + +| 字段名 | 类型 | 描述 | 示例 | +|--------|------|------|------| +| version | String | HTTP协议版本,仅支持:HTTP/1.1、HTTP/2 | HTTP/1.1 | +| connectTimeout | int | 连接超时(单位:秒) | - | +| requestTimeout | int | 单个请求超时(单位:秒) | - | +| enableRequestLogger | Boolean | 是否开启请求日志打印 | - | +| enableResponseLogger | Boolean | 是否开启响应日志打印(下载或流式传输会忽略掉) | - | +| defaultHeaders | Map\ | 自定义的默认请求头 | - | + +## 内部类:A2sSkillRepository + +从AaaS加载SKILL的配置。 + +| 字段名 | 类型 | 描述 | 示例 | +|--------|------|------|------| +| enable | Boolean | 是否启用 | - | +| directory | String | 从A2s下载到服务器本地的目录 | - | +| apiGateway | String | API网关 | https://misdev.lcfuturecenter.com/prod-api | +| apiDebugSkillInfoUri | String | 查询调试版SKILL信息的URI | /mcp/skill/openapi/debug/{skill_name} | +| apiReleaseSkillInfoUri | String | 查询正式版SKILL信息的URI(支持占位符) | /mcp/skill/openapi/release/{skill_name} | +| apiDownloadSkillUri | String | 下载SKILL的地址(支持占位符) | /resource/oss/download/{oss_id} | +| availableSkills | Set\ | 可用SKILL名称列表 | - | + +## 内部类:ClassPathSkillRepository + +从classpath加载SKILL的配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| enable | Boolean | 是否启用 | +| directory | String | 目录名称 | + +## 内部类:MysqlSkillRepository + +从MySQL加载SKILL的配置。 + +| 字段名 | 类型 | 描述 | +|--------|------|------| +| enable | Boolean | 是否启用 | +| databaseName | String | 数据库名称 | +| skillsTableName | String | SKILL表名称 | +| resourcesTableName | String | SKILL资源表名称 | +| createIfNotExist | Boolean | 没有表是否框架自行创建表 | +| writeable | Boolean | 平台统一管理 skill 时常用,设置为true后可以从 agent 侧写回,只读分发就设置为false | + +## 内部类:PruneConfig + +剪枝配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| protectTokens | int | 保护的token数量,剪枝时不会删除这些token | 40000 | +| minimumTokens | int | 最小token数量,剪枝后不会低于此值 | 20000 | +| maxOutputChars | int | 工具输出的最大字符数,超过则截断 | 2000 | +| excludedTools | Set\ | 排除的工具列表,这些工具的输出不会被剪枝 | ["read_file", "memory_search", "memory_get", "session_search"] | + +## 内部类:TruncateArgs + +截断配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| triggerMessages | int | 触发截断的消息数量阈值 | 25 | +| triggerTokens | int | 触发截断的token数量阈值 | 40000 | +| keepMessages | int | 截断后保留的消息数量 | 20 | +| keepTokens | int | 截断后保留的token数量 | 0 | +| maxArgLength | int | 工具参数的最大长度,超过则截断 | 2000 | +| truncationText | String | 截断时显示的提示文本 | ...(argument truncated) | + +## 内部类:PermissionContext + +权限上下文配置。 + +| 字段名 | 类型 | 描述 | 默认值 | 示例 | +|--------|------|------|--------|------| +| mode | String | 工作区权限上下文模式 | default | default/accept_edits/explore/bypass/dont_ask | +| allow | Set\ | 运行执行的工具列表 | - | - | +| deny | Set\ | 拒绝执行的工具列表 | - | - | +| ask | Set\ | 需要询问用户的工具列表 | - | - | + +## 内部类:MemoryConfig + +长期记忆配置。 + +| 字段名 | 类型 | 描述 | 默认值 | 示例 | +|--------|------|------|--------|------| +| model | NewApiModelProperties | 记忆操作(刷新 + 归纳)专用模型,不设置则使用智能体主模型 | - | - | +| flushPrompt | String | 刷新记忆的提示词,null表示使用默认值 | - | - | +| consolidationPrompt | String | 归纳记忆的提示词,必须包含两个%d占位符(max-tokens, max-chars),null表示使用默认值 | - | - | +| consolidationMaxTokens | int | 归纳时的最大token数 | 4000 | 4000 | +| consolidationMinGap | int | 归纳的最小间隔(单位:分钟) | 30 | 30 | +| dailyFileRetentionDays | int | 每日记忆文件保留天数 | 30 | 30 | +| sessionRetentionDays | int | 会话记忆JSONL日志保留天数 | 30 | 30 | +| flushTrigger | String | 每次调用后flush的触发策略(ALWAYS/NEVER) | ALWAYS | ALWAYS | + +## 内部类:SubagentSpec + +子智能体规格配置。 + +| 字段名 | 类型 | 描述 | 默认值 | +|--------|------|------|--------| +| name | String | 子智能体名称 | - | +| description | String | 子智能体描述 | - | +| systemPrompt | String | 子智能体的系统提示词 | - | +| workspaceMode | String | 工作区模式:SHARED=共享主智能体的工作区,ISOLATED=独立的工作区 | SHARED | +| model | NewApiModelProperties | 子智能体使用的模型,不设置则使用主智能体的模型 | - | +| steps | int | 这个子智能体单次最大迭代次数,不填或者设置0则使用主智能体最大迭代次数的1/2 | 0 | +| mode | String | 默认 subagent,可选:primary/subagent/all;primary 不允许被 spawn | subagent | +| hidden | Boolean | 默认false,设为 true 时不出现在 agent 可见列表(仍可程序化 spawn) | false | + +--- + +## 示例 JSON + +```json +{ + "mainAgentSpec": { + "name": "main-agent", + "description": "主智能体", + "systemPrompt": "你是一个有用的助手。", + "chatModel": { + "model": "gpt-4", + "apiKey": "your-api-key" + }, + "enablePlanMode": true, + "enableShell": false, + "enableAgentTraceLog": true, + "asyncToolTimeout": 30, + "maxContextTokens": 8000, + "maxIter": 10, + "maxRetries": 3 + }, + "workspace": { + "localRootPath": "/app/workspace", + "stateStoreType": "mysql", + "isolationScope": "USER", + "anonymousUserId": "anonymous" + }, + "compaction": { + "triggerMessages": 50, + "triggerTokens": 0, + "reserved": 20000, + "keepMessages": 20, + "keepTokens": -1, + "keepTokensMin": 2000, + "keepTokensMax": 8000, + "keepTokensRatio": 0.25, + "summaryPrompt": "default", + "flushBeforeCompact": true, + "offloadBeforeCompact": true, + "prune": { + "protectTokens": 40000, + "minimumTokens": 20000, + "maxOutputChars": 2000, + "excludedTools": ["read_file", "memory_search", "memory_get", "session_search"] + }, + "truncate": { + "triggerMessages": 25, + "triggerTokens": 40000, + "keepMessages": 20, + "keepTokens": 0, + "maxArgLength": 2000, + "truncationText": "...(argument truncated)" + }, + "model": { + "model": "gpt-4", + "apiKey": "your-api-key" + } + }, + "skillRepository": { + "mysql": { + "enable": true, + "databaseName": "skill_db", + "skillsTableName": "skills", + "resourcesTableName": "skill_resources", + "createIfNotExist": true, + "writeable": false + }, + "classPath": { + "enable": true, + "directory": "skills" + }, + "a2s": { + "enable": true, + "directory": "/app/skills", + "apiGateway": "https://misdev.lcfuturecenter.com/prod-api", + "apiDebugSkillInfoUri": "/mcp/skill/openapi/debug/{skill_name}", + "apiReleaseSkillInfoUri": "/mcp/skill/openapi/release/{skill_name}", + "apiDownloadSkillUri": "/resource/oss/download/{oss_id}", + "availableSkills": ["skill1|debug", "skill2|release"] + }, + "httpClient": { + "version": "HTTP/1.1", + "connectTimeout": 10, + "requestTimeout": 30, + "enableRequestLogger": true, + "enableResponseLogger": false, + "defaultHeaders": { + "Authorization": "Bearer token123" + } + } + }, + "a2sMcpProvider": { + "apiGateway": "https://misdev.lcfuturecenter.com/prod-api", + "apiQueryMcpServerInfoUri": "/mcp/server/openapi/list", + "httpClient": { + "version": "HTTP/1.1", + "connectTimeout": 10, + "requestTimeout": 30, + "enableRequestLogger": true, + "enableResponseLogger": false, + "defaultHeaders": {} + } + }, + "mcpServerConfigs": [ + { + "serverName": "weather-server", + "transport": "sse", + "enableTools": ["get_weather", "get_forecast"], + "initializationTimeout": 10, + "timeout": 600 + } + ], + "permissionContext": { + "mode": "default", + "allow": ["read_file", "list_files"], + "deny": ["delete_file"], + "ask": ["write_file"] + }, + "memoryConfig": { + "model": { + "model": "gpt-4", + "apiKey": "your-api-key" + }, + "flushPrompt": "刷新记忆提示词", + "consolidationPrompt": "归纳记忆提示词,最大token数:%d,最大字符数:%d", + "consolidationMaxTokens": 4000, + "consolidationMinGap": 30, + "dailyFileRetentionDays": 30, + "sessionRetentionDays": 30, + "flushTrigger": "ALWAYS" + }, + "subagentSpec": [ + { + "name": "research-agent", + "description": "研究智能体", + "systemPrompt": "你是一个研究助手。", + "workspaceMode": "SHARED", + "model": { + "model": "gpt-4", + "apiKey": "your-api-key" + }, + "steps": 5, + "mode": "subagent", + "hidden": false + } + ] +} +``` \ No newline at end of file