docs(studio): 补全扩展能力与观测设计

This commit is contained in:
2026-06-01 00:56:40 +08:00
parent b6e1e209a2
commit 1132cf0262
19 changed files with 504 additions and 0 deletions

View File

@@ -241,6 +241,14 @@ CREATE INDEX IF NOT EXISTS idx_agent_message_session_id ON agent_message (sessio
CREATE INDEX IF NOT EXISTS idx_agent_message_role ON agent_message (role); CREATE INDEX IF NOT EXISTS idx_agent_message_role ON agent_message (role);
CREATE INDEX IF NOT EXISTS idx_agent_capability_owner ON agent_capability_binding (owner_type, owner_id); CREATE INDEX IF NOT EXISTS idx_agent_capability_owner ON agent_capability_binding (owner_type, owner_id);
CREATE INDEX IF NOT EXISTS idx_agent_capability_type ON agent_capability_binding (capability_type, capability_id); CREATE INDEX IF NOT EXISTS idx_agent_capability_type ON agent_capability_binding (capability_type, capability_id);
CREATE INDEX IF NOT EXISTS idx_mcp_server_import_type ON mcp_server (import_type);
CREATE INDEX IF NOT EXISTS idx_mcp_server_health_status ON mcp_server (health_status);
CREATE INDEX IF NOT EXISTS idx_mcp_capability_server_id ON mcp_capability (server_id);
CREATE INDEX IF NOT EXISTS idx_mcp_capability_type ON mcp_capability (capability_type);
CREATE INDEX IF NOT EXISTS idx_skill_definition_status ON skill_definition (status);
CREATE INDEX IF NOT EXISTS idx_skill_definition_type ON skill_definition (skill_type);
CREATE INDEX IF NOT EXISTS idx_skill_version_skill_id ON skill_version (skill_id);
CREATE INDEX IF NOT EXISTS idx_skill_version_publish_status ON skill_version (publish_status);
COMMENT ON TABLE studio_project IS 'Studio项目空间表'; COMMENT ON TABLE studio_project IS 'Studio项目空间表';
COMMENT ON TABLE workflow_definition IS 'Workflow定义表'; COMMENT ON TABLE workflow_definition IS 'Workflow定义表';

48
script/sql/mcp.sql Normal file
View File

@@ -0,0 +1,48 @@
-- MCP 服务与能力表。
CREATE TABLE IF NOT EXISTS mcp_server (
id BIGSERIAL PRIMARY KEY,
server_code VARCHAR(100) NOT NULL,
server_name VARCHAR(200) NOT NULL,
import_type VARCHAR(50) NOT NULL,
endpoint_url VARCHAR(500),
package_name VARCHAR(200),
manifest_json JSONB NOT NULL DEFAULT '{}'::jsonb,
auth_type VARCHAR(50),
secret_ref VARCHAR(200),
health_status VARCHAR(50) NOT NULL DEFAULT 'UNKNOWN',
enabled BOOLEAN NOT NULL DEFAULT TRUE,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_mcp_server_code UNIQUE (server_code)
);
CREATE TABLE IF NOT EXISTS mcp_capability (
id BIGSERIAL PRIMARY KEY,
server_id BIGINT NOT NULL,
capability_code VARCHAR(150) NOT NULL,
capability_name VARCHAR(200) NOT NULL,
capability_type VARCHAR(50) NOT NULL,
schema_json JSONB NOT NULL DEFAULT '{}'::jsonb,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_mcp_capability_code UNIQUE (server_id, capability_code),
CONSTRAINT fk_mcp_capability_server_id FOREIGN KEY (server_id) REFERENCES mcp_server (id)
);
CREATE INDEX IF NOT EXISTS idx_mcp_server_import_type ON mcp_server (import_type);
CREATE INDEX IF NOT EXISTS idx_mcp_server_health_status ON mcp_server (health_status);
CREATE INDEX IF NOT EXISTS idx_mcp_capability_server_id ON mcp_capability (server_id);
CREATE INDEX IF NOT EXISTS idx_mcp_capability_type ON mcp_capability (capability_type);
COMMENT ON TABLE mcp_server IS 'MCP服务表';
COMMENT ON TABLE mcp_capability IS 'MCP能力表';

46
script/sql/skill.sql Normal file
View File

@@ -0,0 +1,46 @@
-- Skill 定义与版本表。
CREATE TABLE IF NOT EXISTS skill_definition (
id BIGSERIAL PRIMARY KEY,
skill_code VARCHAR(100) NOT NULL,
skill_name VARCHAR(200) NOT NULL,
skill_type VARCHAR(50) NOT NULL,
description VARCHAR(1000),
status VARCHAR(50) NOT NULL DEFAULT 'DRAFT',
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_skill_definition_code UNIQUE (skill_code)
);
CREATE TABLE IF NOT EXISTS skill_version (
id BIGSERIAL PRIMARY KEY,
skill_id BIGINT NOT NULL,
version_no INTEGER NOT NULL,
prompt_text TEXT,
code_text TEXT,
config_json JSONB NOT NULL DEFAULT '{}'::jsonb,
variable_schema_json JSONB NOT NULL DEFAULT '{}'::jsonb,
test_result_json JSONB NOT NULL DEFAULT '{}'::jsonb,
publish_status VARCHAR(50) NOT NULL DEFAULT 'DRAFT',
published_time TIMESTAMP,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_skill_version_no UNIQUE (skill_id, version_no),
CONSTRAINT fk_skill_version_skill_id FOREIGN KEY (skill_id) REFERENCES skill_definition (id)
);
CREATE INDEX IF NOT EXISTS idx_skill_definition_status ON skill_definition (status);
CREATE INDEX IF NOT EXISTS idx_skill_definition_type ON skill_definition (skill_type);
CREATE INDEX IF NOT EXISTS idx_skill_version_skill_id ON skill_version (skill_id);
CREATE INDEX IF NOT EXISTS idx_skill_version_publish_status ON skill_version (publish_status);
COMMENT ON TABLE skill_definition IS 'Skill定义表';
COMMENT ON TABLE skill_version IS 'Skill版本表';

View File

@@ -0,0 +1,60 @@
-- Studio 相关枚举初始化。
-- 保持 sys_enum 现有 catalog/type/name/value/strvalue/sort/remark 格式不变。
INSERT INTO sys_enum (catalog, type, name, value, strvalue, sort, version, remark)
VALUES
('studio', 'environment', '开发环境', 1, 'DEV', 1, 1, 'Studio环境'),
('studio', 'environment', '测试环境', 2, 'TEST', 2, 1, 'Studio环境'),
('studio', 'environment', '生产环境', 3, 'PROD', 3, 1, 'Studio环境'),
('studio', 'publish_status', '草稿', 1, 'DRAFT', 1, 1, '发布状态'),
('studio', 'publish_status', '已发布', 2, 'PUBLISHED', 2, 1, '发布状态'),
('studio', 'publish_status', '已归档', 3, 'ARCHIVED', 3, 1, '发布状态'),
('workflow', 'status', '草稿', 1, 'DRAFT', 1, 1, 'Workflow状态'),
('workflow', 'status', '启用', 2, 'ENABLED', 2, 1, 'Workflow状态'),
('workflow', 'status', '停用', 3, 'DISABLED', 3, 1, 'Workflow状态'),
('workflow', 'run_status', '排队中', 1, 'QUEUED', 1, 1, 'Workflow运行状态'),
('workflow', 'run_status', '运行中', 2, 'RUNNING', 2, 1, 'Workflow运行状态'),
('workflow', 'run_status', '成功', 3, 'SUCCESS', 3, 1, 'Workflow运行状态'),
('workflow', 'run_status', '失败', 4, 'FAILED', 4, 1, 'Workflow运行状态'),
('workflow', 'run_status', '取消', 5, 'CANCELED', 5, 1, 'Workflow运行状态'),
('workflow', 'node_type', '开始', 1, 'START', 1, 1, 'Workflow节点类型'),
('workflow', 'node_type', '大模型', 2, 'LLM', 2, 1, 'Workflow节点类型'),
('workflow', 'node_type', '知识检索', 3, 'KNOWLEDGE_RETRIEVAL', 3, 1, 'Workflow节点类型'),
('workflow', 'node_type', 'MCP工具', 4, 'MCP_TOOL', 4, 1, 'Workflow节点类型'),
('workflow', 'node_type', 'Skill', 5, 'SKILL', 5, 1, 'Workflow节点类型'),
('workflow', 'node_type', '条件', 6, 'CONDITION', 6, 1, 'Workflow节点类型'),
('workflow', 'node_type', '回答', 7, 'ANSWER', 7, 1, 'Workflow节点类型'),
('agent', 'session_status', '活跃', 1, 'ACTIVE', 1, 1, 'Agent会话状态'),
('agent', 'session_status', '已关闭', 2, 'CLOSED', 2, 1, 'Agent会话状态'),
('agent', 'session_status', '异常终止', 3, 'FAILED', 3, 1, 'Agent会话状态'),
('agent', 'message_role', '用户', 1, 'USER', 1, 1, 'Agent消息角色'),
('agent', 'message_role', '助手', 2, 'ASSISTANT', 2, 1, 'Agent消息角色'),
('agent', 'message_role', '系统', 3, 'SYSTEM', 3, 1, 'Agent消息角色'),
('agent', 'message_role', '工具', 4, 'TOOL', 4, 1, 'Agent消息角色'),
('mcp', 'import_type', 'URL导入', 1, 'URL', 1, 1, 'MCP导入方式'),
('mcp', 'import_type', 'npm包导入', 2, 'NPM_PACKAGE', 2, 1, 'MCP导入方式'),
('mcp', 'import_type', 'JSON声明导入', 3, 'JSON_MANIFEST', 3, 1, 'MCP导入方式'),
('mcp', 'capability_type', '工具', 1, 'TOOL', 1, 1, 'MCP能力类型'),
('mcp', 'capability_type', '资源', 2, 'RESOURCE', 2, 1, 'MCP能力类型'),
('mcp', 'capability_type', '提示词', 3, 'PROMPT', 3, 1, 'MCP能力类型'),
('mcp', 'health_status', '未知', 1, 'UNKNOWN', 1, 1, 'MCP健康状态'),
('mcp', 'health_status', '健康', 2, 'HEALTHY', 2, 1, 'MCP健康状态'),
('mcp', 'health_status', '异常', 3, 'UNHEALTHY', 3, 1, 'MCP健康状态'),
('skill', 'skill_type', '提示词', 1, 'PROMPT', 1, 1, 'Skill类型'),
('skill', 'skill_type', '代码', 2, 'CODE', 2, 1, 'Skill类型'),
('skill', 'skill_type', '混合', 3, 'MIXED', 3, 1, 'Skill类型'),
('skill', 'status', '草稿', 1, 'DRAFT', 1, 1, 'Skill状态'),
('skill', 'status', '已发布', 2, 'PUBLISHED', 2, 1, 'Skill状态'),
('skill', 'status', '已归档', 3, 'ARCHIVED', 3, 1, 'Skill状态'),
('agent', 'capability_owner_type', 'Agent', 1, 'AGENT', 1, 1, '能力绑定主体类型'),
('agent', 'capability_owner_type', 'Workflow', 2, 'WORKFLOW', 2, 1, '能力绑定主体类型'),
('agent', 'capability_type', '知识库', 1, 'RAG_STORE', 1, 1, '能力绑定能力类型'),
('agent', 'capability_type', 'MCP能力', 2, 'MCP_CAPABILITY', 2, 1, '能力绑定能力类型'),
('agent', 'capability_type', 'Skill', 3, 'SKILL', 3, 1, '能力绑定能力类型')
ON CONFLICT (catalog, type, name)
DO UPDATE SET
value = EXCLUDED.value,
strvalue = EXCLUDED.strvalue,
sort = EXCLUDED.sort,
remark = EXCLUDED.remark,
update_time = CURRENT_TIMESTAMP;

View File

@@ -0,0 +1,19 @@
# MCP 能力接入模块前端实现
## 1. 页面
`McpImportPage.vue` 展示导入方式、Manifest 预览和能力预览。
## 2. 接口草案
- `POST /api/mcp/import`
- `GET /api/mcp/servers/{serverCode}/capabilities`
- `POST /api/mcp/servers/query`
- `POST /api/mcp/capabilities/save`
## 3. 交互规则
- 导入前校验地址或 Manifest 格式。
- 能力预览成功后才允许保存。
- 未授权能力显示待授权状态。
- 已停用 Server 的能力不可被 Workflow 新增选择。

View File

@@ -0,0 +1,19 @@
# Skill 编辑模块前端实现
## 1. 页面
`SkillWorkspacePage.vue` 提供 Prompt、Code、Config 编辑区,测试面板和版本列表。
## 2. 接口草案
- `GET /api/skills/{skillCode}`
- `PUT /api/skills/{skillCode}/draft`
- `POST /api/skills/{skillCode}/test`
- `POST /api/skills/{skillCode}/publish`
## 3. 交互规则
- 发布版本只读。
- 草稿变更后提示未发布。
- 测试结果保存到版本草稿。
- Workflow 只能选择发布版本或明确选择草稿测试。

View File

@@ -0,0 +1,28 @@
# 运行观测模块前端实现
## 1. 页面
`ObservabilityPage.vue` 展示运行记录和步骤日志。
## 2. ViewModel
`ObservabilityView` 建议包含:
- 运行列表。
- 当前运行详情。
- 步骤日志。
- 模型调用摘要。
- 成本和延迟统计。
## 3. 接口草案
- `GET /api/observability/runs`
- `GET /api/observability/runs/{requestId}`
- `GET /api/observability/model-calls`
- `GET /api/observability/runs/{requestId}/export`
## 4. 交互规则
- 异常运行高亮展示。
- 步骤日志按执行时间排序。
- 导出日志不包含密钥或完整敏感请求体。

View File

@@ -0,0 +1,20 @@
# MCP 能力接入模块后端实现
## 1. 包建议
后续实现建议新增 `com.bruce.mcp`,包含 Controller、DTO、Entity、Mapper、Service 和 MCP Client 适配。
## 2. Service 草案
| Service | 职责 |
|---------|------|
| `IMcpServerService` | Server 导入、启停用、健康检查 |
| `IMcpCapabilityService` | 能力发现、保存、启停用 |
| `IMcpImportService` | 处理 URL、package、Manifest 导入 |
## 3. 校验规则
- Server 编码唯一。
- 能力编码在 Server 下唯一。
- 导入方式必须来自枚举。
- 能力 schema 必须为合法 JSON。

View File

@@ -0,0 +1,20 @@
# Skill 编辑模块后端实现
## 1. 包建议
后续实现建议新增 `com.bruce.skill`
## 2. Service 草案
| Service | 职责 |
|---------|------|
| `ISkillDefinitionService` | Skill 定义管理 |
| `ISkillVersionService` | 草稿保存、测试、发布、归档 |
| `ISkillRunner` | 运行 Skill 并生成测试结果 |
## 3. 校验规则
- Skill 编码唯一。
- 版本号在 Skill 内唯一。
- Prompt、Code、Config 至少一种非空。
- 变量 schema 必须为合法 JSON。

View File

@@ -0,0 +1,24 @@
# 运行观测模块后端实现
## 1. 包建议
后续实现可新增 `com.bruce.observability`,也可以先由 Workflow、Agent 和模型模块分别提供查询接口。
## 2. Controller 草案
- `ObservabilityRunController`
- `ObservabilityModelCallController`
## 3. Service 草案
| Service | 职责 |
|---------|------|
| `IObservabilityRunService` | 聚合运行记录 |
| `IObservabilityTraceService` | 聚合步骤、会话和模型调用 |
| `IObservabilityExportService` | 导出脱敏日志 |
## 4. 校验规则
- 只允许查询脱敏后的运行摘要。
- 导出接口必须过滤密钥和完整请求内容。
- requestId 不存在时返回空结果而不是内部异常。

View File

@@ -0,0 +1,20 @@
# MCP 数据库设计
## 1. 表结构
| 表 | 说明 |
|----|------|
| `mcp_server` | MCP 服务配置 |
| `mcp_capability` | MCP 能力清单 |
## 2. 约束
- `mcp_server.server_code` 唯一。
- `mcp_capability` 使用 `(server_id, capability_code)` 唯一。
- `mcp_capability.server_id` 引用 `mcp_server`
## 3. 脚本
- `script/sql/mcp.sql`
- `docs/STUDIO_PROTOTYPE_SCHEMA.sql`
- `script/sql/studio_enum.sql`

View File

@@ -0,0 +1,20 @@
# Skill 数据库设计
## 1. 表结构
| 表 | 说明 |
|----|------|
| `skill_definition` | Skill 定义 |
| `skill_version` | Skill 版本 |
## 2. 约束
- `skill_definition.skill_code` 唯一。
- `skill_version` 使用 `(skill_id, version_no)` 唯一。
- `skill_version.skill_id` 引用 `skill_definition`
## 3. 脚本
- `script/sql/skill.sql`
- `docs/STUDIO_PROTOTYPE_SCHEMA.sql`
- `script/sql/studio_enum.sql`

View File

@@ -0,0 +1,29 @@
# 运行观测数据库设计
## 1. 表范围
运行观测复用已有运行表,不单独新增观测主表:
- `workflow_run`
- `workflow_run_step`
- `model_call_log`
- `agent_session`
- `agent_message`
## 2. 索引建议
- `workflow_run.request_id`
- `workflow_run.status`
- `workflow_run_step.run_id`
- `model_call_log.request_id`
- `model_call_log.task_type`
- `agent_session.agent_id`
## 3. 脚本
索引分散在:
- `script/sql/workflow.sql`
- `script/sql/model_provider.sql`
- `script/sql/agent_session.sql`
- `docs/STUDIO_PROTOTYPE_SCHEMA.sql`

View File

@@ -0,0 +1,26 @@
# MCP 能力接入模块设计
## 1. 核心模型
| 对象 | 说明 |
|------|------|
| MCP Server | 外部能力服务 |
| MCP Capability | Server 暴露的工具或资源 |
| Manifest | Server 能力声明 |
## 2. 导入流程
```mermaid
flowchart LR
Input["输入 URL/package/Manifest"] --> Validate["校验连接与声明"]
Validate --> Server["写入 mcp_server"]
Server --> Capability["写入 mcp_capability"]
Capability --> Binding["绑定给 Workflow/Agent"]
```
## 3. 设计约束
- `secret_ref` 只保存密钥引用,不保存明文密钥。
- `manifest_json` 保存原始能力声明摘要。
- `schema_json` 保存单个能力输入输出 schema。
- Server 停用时,其能力不应被新运行选择。

View File

@@ -0,0 +1,23 @@
# Skill 编辑模块设计
## 1. 核心模型
| 对象 | 说明 |
|------|------|
| Skill 定义 | Skill 主数据 |
| Skill 版本 | Prompt、Code、Config 与测试结果快照 |
## 2. 版本规则
- 草稿版本可编辑。
- 发布版本不可直接修改。
- 归档版本仅可查看。
- Workflow 运行必须引用确定版本。
## 3. 数据设计
- `prompt_text` 保存提示词。
- `code_text` 保存脚本或函数片段。
- `config_json` 保存运行配置。
- `variable_schema_json` 保存输入输出变量定义。
- `test_result_json` 保存最近测试结果摘要。

View File

@@ -0,0 +1,35 @@
# 运行观测模块设计
## 1. 观测主键
运行观测以 `request_id` 为主线串联:
- Workflow 运行。
- Workflow 步骤。
- Agent 会话。
- 模型调用日志。
## 2. 展示维度
- 名称。
- 类型。
- 状态。
- 延迟。
- 成本。
- 步骤输出。
- 错误摘要。
## 3. 数据来源
| 来源 | 表 |
|------|----|
| 流程运行 | `workflow_run` |
| 步骤日志 | `workflow_run_step` |
| 模型调用 | `model_call_log` |
| Agent 会话 | `agent_session``agent_message` |
## 4. 设计约束
- 观测模块只读业务运行数据。
- 不保存完整 Prompt 或敏感密钥。
- 错误信息只保存摘要,详细日志由运行环境负责。

View File

@@ -0,0 +1,20 @@
# MCP 能力接入模块需求
## 1. 模块目标
MCP 能力接入模块负责导入外部 MCP Server读取能力清单并把工具或资源能力绑定给 Workflow 和 Agent 使用。
## 2. 功能需求
- 支持 URL、npm package、JSON Manifest 三种导入方式。
- 支持保存 Server 连接信息、鉴权方式、密钥引用和 Manifest。
- 支持发现工具、资源等能力。
- 支持能力启停用。
- 支持健康状态展示。
## 3. 关联资料
- 表:`mcp_server``mcp_capability`
- 枚举:`mcp/import_type``mcp/capability_type``mcp/health_status`
- 脚本:`script/sql/mcp.sql``script/sql/studio_enum.sql`
- 前端原型:`McpImportPage.vue`

View File

@@ -0,0 +1,20 @@
# Skill 编辑模块需求
## 1. 模块目标
Skill 编辑模块负责维护可复用的提示词、代码片段、配置和测试结果,使 Workflow 或 Agent 可以复用稳定的能力单元。
## 2. 功能需求
- 支持 Skill 定义管理。
- 支持版本草稿、发布和归档。
- 支持 Prompt、Code、Config 三类编辑区域。
- 支持变量 schema 和测试结果保存。
- 支持发布版本供 Workflow 或 Agent 绑定。
## 3. 关联资料
- 表:`skill_definition``skill_version`
- 枚举:`skill/skill_type``skill/status``studio/publish_status`
- 脚本:`script/sql/skill.sql``script/sql/studio_enum.sql`
- 前端原型:`SkillWorkspacePage.vue`

View File

@@ -0,0 +1,19 @@
# 运行观测模块需求
## 1. 模块目标
运行观测模块负责展示 Workflow、Agent、MCP、Skill 和模型调用的运行记录,支撑排障、成本分析和发布质量评估。
## 2. 功能需求
- 展示最近运行记录。
- 展示步骤日志和节点输出摘要。
- 展示模型调用耗时、Token 和成本。
- 支持按 requestId 追踪一次完整运行。
- 支持导出日志。
## 3. 关联资料
- 表:`workflow_run``workflow_run_step``model_call_log``agent_session``agent_message`
- 脚本:`script/sql/workflow.sql``script/sql/model_provider.sql``script/sql/agent_session.sql`
- 前端原型:`ObservabilityPage.vue`