This commit is contained in:
V-LiuShuang committed 2026-10-09 15:56:45 +08:00
1 parent 37457f0ae0
commit 6bf8c7707a
11 files changed
-4896

No files matched your search

-887
View File
@@ -1,887 +0,0 @@
# 数据统计
以下是关于数据统计的API文档。
## 提交用户点赞/取消赞/写评论
- 请求地址:/mcp/metrics/append
- 请求方式:POST
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| tag | 是 | String | 资源类型(agent=智能体、skill=技能、mcp_server=MCP服务) |
| operateType | 是 | String | 操作类型(like=点赞、like_withdraw=取消赞、write_comment=写评论) |
| resourceId | 是 | String | 资源ID,Agent传ID、Skill传skillId、MCP传mcpServerUuid |
| comment.content | 否 | String | 评论内容,最大500字 |
| comment.star | 否 | Number | 星级,1~5 |
### 请求示例
```bash
curl -X POST {gateway}/mcp/metrics/append \
-H "Content-Type: application/json" \
-d '{
"tag": "agent",
"operateType": "write_comment",
"resourceId": "123456",
"comment": {
"content": "很好用的智能体",
"star": 5
}
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Boolean | 操作是否成功 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": true
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 查询用户点赞/取消赞/写评论
- 请求地址:/mcp/metrics/detail
- 请求方式:POST
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| tag | 是 | String | 资源类型(agent=智能体、skill=技能、mcp_server=MCP服务) |
| resourceId | 是 | String | 资源ID,Agent传ID、Skill传skillId、MCP传mcpServerUuid |
| comment.pageNum | 否 | Number | 分页页码,默认1 |
| comment.pageSize | 否 | Number | 分页条数,默认25 |
### 请求示例
```bash
curl -X GET '{gateway}/mcp/metrics/detail' \
-H "Content-Type: application/json" \
-d '{
"tag": "agent",
"resourceId": "123456",
"comment": {
"pageNum": 1,
"pageSize": 25
}
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 返回数据 |
| data.appendCount | Number | 已有多少人添加 |
| data.likeCount | Number | 已有多少人点赞 |
| data.comments | Object | 评分与评论分页数据 |
| data.comments.total | Number | 总记录数 |
| data.comments.rows | Array | 评论列表 |
| data.comments.rows[].commentId | Number | 评论ID |
| data.comments.rows[].userId | String | 用户ID |
| data.comments.rows[].username | String | 用户名 |
| data.comments.rows[].nickname | String | 昵称 |
| data.comments.rows[].comment | String | 评论内容 |
| data.comments.rows[].time | String | 评论时间,格式 yyyy-MM-dd HH:mm:ss |
| data.comments.rows[].star | Number | 评分星级,1~5 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"appendCount": "100",
"likeCount": "50",
"comments": {
"total": 10,
"rows": [
{
"commentId": "1",
"userId": "100",
"username": "user001",
"nickname": "张三",
"comment": "很好用的智能体",
"time": "2024-01-01 12:00:00",
"star": 5
}
]
}
}
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 用户删除评论
- 请求地址:/mcp/metrics/comment
- 请求方式:DELETE
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| commentId | 是 | Number | 评论ID(Query参数) |
### 请求示例
```bash
curl -X DELETE '{gateway}/mcp/metrics/comment?commentId={commentId}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Boolean | 操作是否成功 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": true
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
# 客户端软件包
以下是关于客户端软件包的API文档。
## 版本列表
- 请求地址:/system/client/software
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,如 devco |
| canary | 否 | Boolean | 传true则查询范围覆盖灰度版,否则只查正式版 |
### 请求示例
```bash
curl -X GET '{gateway}/system/client/software?identity={identity}&canary={canary}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Array | 版本列表 |
| data[].releaseId | Number | 版本记录 ID |
| data[].versionNo | String | 版本号 |
| data[].releaseTime | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss |
| data[].releaseNotes | String | 更新内容 |
| data[].packageOssId | Number | 安装包 OSS 主键;前端据此请求预签名下载地址 |
| data[].packageName | String | 安装包文件名 |
| data[].packageSize | Number | 安装包大小(字节) |
| data[].packageSizeDisplay | String | 安装包大小展示文案,如 12.50 MB |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"releaseId": "123456",
"versionNo": "1.0.0",
"releaseTime": "2024-01-01 12:00:00",
"releaseNotes": "更新内容",
"packageOssId": "789",
"packageName": "devco-1.0.0.exe",
"packageSize": 52428800,
"packageSizeDisplay": "50.00 MB"
}
]
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 查看最新版本
- 请求地址:/system/client/software/latest
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,如 devco |
| canary | 否 | Boolean | 传true则查询范围覆盖灰度版,否则只查正式版 |
### 请求示例
```bash
curl -X GET '{gateway}/system/client/software/latest?identity={identity}&canary={canary}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 版本信息 |
| data.releaseId | Number | 版本记录 ID |
| data.versionNo | String | 版本号 |
| data.releaseTime | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss |
| data.releaseNotes | String | 更新内容 |
| data.packageOssId | Number | 安装包 OSS 主键 |
| data.packageName | String | 安装包文件名 |
| data.packageSize | Number | 安装包大小(字节) |
| data.packageSizeDisplay | String | 安装包大小展示文案,如 12.50 MB |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"releaseId": "123456",
"versionNo": "1.0.0",
"releaseTime": "2024-01-01 12:00:00",
"releaseNotes": "更新内容",
"packageOssId": "789",
"packageName": "devco-1.0.0.exe",
"packageSize": 52428800,
"packageSizeDisplay": "50.00 MB"
}
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 下载软件包
- 请求地址:/system/client/software/download/{ossId}
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| ossId | 是 | Number | OSSID,安装包在OSS中的唯一标识 |
### 请求示例
```bash
curl -X GET {gateway}/system/client/software/download/{ossId}
```
### 响应参数
直接返回文件流下载。
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 查看版本信息
- 请求地址:/system/client/software/{releaseId}
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| releaseId | 是 | Number | 版本ID |
### 请求示例
```bash
curl -X GET {gateway}/system/client/software/{releaseId}
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 版本信息 |
| data.releaseId | Number | 版本记录 ID |
| data.versionNo | String | 版本号 |
| data.releaseTime | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss |
| data.releaseNotes | String | 更新内容 |
| data.packageOssId | Number | 安装包 OSS 主键 |
| data.packageName | String | 安装包文件名 |
| data.packageSize | Number | 安装包大小(字节) |
| data.packageSizeDisplay | String | 安装包大小展示文案,如 12.50 MB |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"releaseId": "123456",
"versionNo": "1.0.0",
"releaseTime": "2024-01-01 12:00:00",
"releaseNotes": "更新内容",
"packageOssId": "789",
"packageName": "devco-1.0.0.exe",
"packageSize": 52428800,
"packageSizeDisplay": "50.00 MB"
}
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 新建版本
- 请求地址:/system/client/software
- 请求方式:POST
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,如 devco |
| state | 是 | String | 版本状态,canary=灰度版、release=正式版 |
| version | 是 | String | 版本号,如 1.0.0 |
| releaseTime | 否 | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss;省略则取当前时间 |
| releaseNotes | 否 | String | 更新日志(富文本 HTML) |
| ossId | 是 | Number | 安装包 OSS ID |
### 请求示例
```bash
curl -X POST {gateway}/system/client/software \
-H "Content-Type: application/json" \
-d '{
"identity": "devco",
"state": "release",
"version": "1.0.0",
"releaseTime": "2024-01-01 12:00:00",
"releaseNotes": "<p>更新日志</p>",
"ossId": 789
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 版本信息 |
| data.releaseId | Number | 版本记录 ID |
| data.versionNo | String | 版本号 |
| data.releaseTime | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss |
| data.releaseNotes | String | 更新内容 |
| data.packageOssId | Number | 安装包 OSS 主键 |
| data.packageName | String | 安装包文件名 |
| data.packageSize | Number | 安装包大小(字节) |
| data.packageSizeDisplay | String | 安装包大小展示文案,如 12.50 MB |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"releaseId": "123456",
"versionNo": "1.0.0",
"releaseTime": "2024-01-01 12:00:00",
"releaseNotes": "<p>更新日志</p>",
"packageOssId": "789",
"packageName": "devco-1.0.0.exe",
"packageSize": 52428800,
"packageSizeDisplay": "50.00 MB"
}
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 编辑版本信息
- 请求地址:/system/client/software/{releaseId}
- 请求方式:PUT
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| releaseId | 是 | Number | 版本ID(路径参数) |
| identity | 是 | String | 客户端标识,如 devco |
| state | 是 | String | 版本状态,canary=灰度版、release=正式版 |
| version | 是 | String | 版本号,如 1.0.0 |
| releaseTime | 否 | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss;省略则取当前时间 |
| releaseNotes | 否 | String | 更新日志(富文本 HTML) |
| ossId | 是 | Number | 安装包 OSS ID |
### 请求示例
```bash
curl -X PUT {gateway}/system/client/software/{releaseId} \
-H "Content-Type: application/json" \
-d '{
"identity": "devco",
"state": "release",
"version": "1.0.1",
"releaseTime": "2024-01-02 12:00:00",
"releaseNotes": "<p>修复bug</p>",
"ossId": 790
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 版本信息 |
| data.releaseId | Number | 版本记录 ID |
| data.versionNo | String | 版本号 |
| data.releaseTime | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss |
| data.releaseNotes | String | 更新内容 |
| data.packageOssId | Number | 安装包 OSS 主键 |
| data.packageName | String | 安装包文件名 |
| data.packageSize | Number | 安装包大小(字节) |
| data.packageSizeDisplay | String | 安装包大小展示文案,如 12.50 MB |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"releaseId": "123456",
"versionNo": "1.0.1",
"releaseTime": "2024-01-02 12:00:00",
"releaseNotes": "<p>修复bug</p>",
"packageOssId": "790",
"packageName": "devco-1.0.1.exe",
"packageSize": 52428800,
"packageSizeDisplay": "50.00 MB"
}
}
```
### 失败示例
```json
{
"code": 500,
"msg": "参数[releaseId]不能为空"
}
```
## 删除版本
- 请求地址:/system/client/software/{releaseId}
- 请求方式:DELETE
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| releaseId | 是 | Number | 版本ID(路径参数) |
### 请求示例
```bash
curl -X DELETE {gateway}/system/client/software/{releaseId}
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Boolean | 操作是否成功 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": true
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
# 客户端软件包测试成员管理
以下是关于客户端软件包测试成员管理的API文档。
## 查看详情
- 请求地址:/system/client/software/canary
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,如 devco |
### 请求示例
```bash
curl -X GET '{gateway}/system/client/software/canary?identity={identity}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 灰度配置信息 |
| data.identity | String | 客户端标识 |
| data.deptIds | Array | 部门ID列表 |
| data.userIds | Array | 用户ID列表 |
| data.dept | Array | 部门详情列表 |
| data.dept[].id | Number | 部门ID |
| data.dept[].name | String | 部门名称 |
| data.user | Array | 用户详情列表 |
| data.user[].id | Number | 用户ID |
| data.user[].name | String | 用户名称 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"identity": "devco",
"deptIds": [1, 2, 3],
"userIds": [100, 200],
"dept": [
{
"id": 1,
"name": "研发部"
},
{
"id": 2,
"name": "测试部"
}
],
"user": [
{
"id": 100,
"name": "张三"
},
{
"id": 200,
"name": "李四"
}
]
}
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 添加用户或部门
- 请求地址:/system/client/software/canary
- 请求方式:PUT
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,如 devco |
| ids | 否 | Array | 用户ID或部门ID集合 |
| type | 是 | Number | 类型,1=用户、2=部门 |
### 请求示例
```bash
curl -X PUT {gateway}/system/client/software/canary \
-H "Content-Type: application/json" \
-d '{
"identity": "devco",
"ids": [100, 200],
"type": 1
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Boolean | 操作是否成功 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": true
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 删除用户或部门
- 请求地址:/system/client/software/canary
- 请求方式:DELETE
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,如 devco |
| ids | 否 | Array | 用户ID或部门ID集合 |
| type | 是 | Number | 类型,1=用户、2=部门 |
### 请求示例
```bash
curl -X DELETE {gateway}/system/client/software/canary \
-H "Content-Type: application/json" \
-d '{
"identity": "devco",
"ids": [100],
"type": 1
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Boolean | 操作是否成功 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": true
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
# 智能体管理
以下是关于智能体管理的API文档。
## 禁用或启用智能体
- 请求地址:/paw/agents/available
- 请求方式:POST
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| agentId | 是 | String | 智能体ID |
| available | 是 | Boolean | true=启用、false=禁用 |
### 请求示例
```bash
curl -X POST {gateway}/paw/agents/available \
-H "Content-Type: application/json" \
-d '{
"agentId": "123456",
"available": true
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Boolean | 操作是否成功 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": true
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 移除智能体(老接口)
- 请求地址:/paw/agents/{agentId}
- 请求方式:DELETE
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| agentId | 是 | String | 智能体ID |
### 请求示例
```bash
curl -X 请求方式:DELETE {gateway}/paw/agents/123456
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功"
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
-229
View File
@@ -1,229 +0,0 @@
# MIS-Paw 开放 API 使用文档
> 面向外部接入系统的开发者。当前提供文件上传和 Agent 对话两个接口。
>
> API 根地址示例:`https://misagent.lcfuturecenter.com`
## 1. 快速开始
外部系统只需要使用 MIS-Paw 管理页面创建的完整 API Key。API Key 会唯一定位一个 Agent,因此请求中不需要传 `agentId`。
对外接口不要求登录态,也不要求 `Authorization`、`Clientid` 或 `Subsystem`。两个接口都必须携带:
```http
X-Paw-Api-Key: <完整 API Key>
```
API Key 必须通过 HTTPS 传输,不要写入日志、前端源码、URL 查询参数或错误信息。管理页面列表中的 Key 可能被掩码显示,调用时请复制完整值。
## 2. 接口总览
| 方法 | 路径 | 用途 | 请求类型 | 成功响应 |
|---|---|---|---|---|
| `POST` | `/api/files/upload` | 上传 Agent 对话附件 | `multipart/form-data` | JSON |
| `POST` | `/api/shareChat` | 调用 Agent 对话 | `application/json` | SSE |
网关和服务部署在带有统一前缀的环境时,将前缀拼接到上述路径前。例如实际地址可能是 `/paw/api/shareChat`;请以部署环境提供的 API 根地址为准。
## 3. 文件上传:`POST /api/files/upload`
### 3.1 请求
请求头:
| Header | 必填 | 值 |
|---|---:|---|
| `X-Paw-Api-Key` | 是 | 当前 Agent 的完整 API Key |
| `Content-Type` | 自动 | `multipart/form-data`,由 HTTP 客户端自动生成 boundary |
表单字段:
| 字段 | 必填 | 类型 | 说明 |
|---|---:|---|---|
| `file` | 是 | Binary | 要上传的文件 |
示例:
```bash
curl --fail-with-body -X POST "https://misagent.lcfuturecenter.com/api/files/upload" \
-H "X-Paw-Api-Key: <完整 API Key>" \
-F "file=@./demo.txt"
```
不要手动设置 `Content-Type: multipart/form-data`,否则可能缺少 boundary;让 curl、浏览器或 SDK 自动设置。
### 3.2 成功响应
```http
HTTP/1.1 200 OK
Content-Type: application/json
```
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"url": "/root/output/paw15004/.qwenpaw/workspaces/9U5Y2t5/media/1b3e01157eb74bb39c0329dc47d6235c_demo.txt",
"fileName": "demo.txt",
"fileSize": 84757
}
}
```
`data.url` 是 QwenPaw 当前 Agent Workspace `media` 目录中的文件引用。它是不透明值,调用方必须完整保存并在对话请求中原样传回,不要拼接、截断、URL 解码后重组或自行构造本地路径。
文件上传调用不依赖缓存头完成业务处理;部署环境如配置了响应缓存策略,应将该响应设置为 `Cache-Control: no-store`。
上传接口不创建 Session,也不返回 `X-Paw-Session-Id`。文件真正被对话使用后,才会按 QwenPaw 原生机制进入聊天文件记录。
## 4. Agent 对话:`POST /api/shareChat`
### 4.1 请求头
| Header | 必填 | 说明 |
|---|---:|---|
| `X-Paw-Api-Key` | 是 | 定位 Agent 并完成 API Key 鉴权 |
| `X-Paw-Session-Id` | 否 | 续聊时传上一次响应中的值;首次请求可省略 |
| `Accept` | 否 | 推荐 `text/event-stream`;缺少时默认为 SSE。当前仅支持流式,不支持 `application/json` |
| `Content-Type` | 是 | `application/json` |
本接口不要求 `Authorization`、`Clientid`、`Subsystem`。不要把 API Key 或 Session ID 放在 URL 查询参数中。
### 4.2 请求体
```json
{
"message": "这个文件内容是什么",
"files": [
{
"url": "/root/output/paw15004/.qwenpaw/workspaces/9U5Y2t5/media/1b3e01157eb74bb39c0329dc47d6235c_demo.txt",
"fileName": "demo.txt",
"fileSize": 84757
}
]
}
```
字段说明:
| 字段 | 必填 | 类型 | 说明 |
|---|---:|---|---|
| `message` | 是 | String | 用户消息;去除首尾空白后不能为空,即使只提问文件也必须填写 |
| `files` | 否 | Array | 文件引用列表;不传等同于空数组 |
| `files[].url` | 是(每个文件) | String | `/api/files/upload` 成功响应中的 `data.url`,必须原样传回 |
| `files[].fileName` | 是(每个文件) | String | 上传响应中的 `data.fileName` |
| `files[].fileSize` | 是(每个文件) | Long | 上传响应中的 `data.fileSize`,单位为字节 |
对外 DTO 不接收 `agentId`、`userId`、`sessionId`、`channel`、`stream` 或 QwenPaw Runtime 私有字段。
## 5. 流式对话(SSE)
### 5.1 首次请求
省略 `X-Paw-Session-Id`,服务端会按 QwenPaw Console 规则生成 Session ID,并在响应头返回:
```bash
curl -N --fail-with-body -X POST "https://misagent.lcfuturecenter.com/api/shareChat" \
-H "X-Paw-Api-Key: <完整 API Key>" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{"message":"你好","files":[]}'
```
成功响应头:
```http
Content-Type: text/event-stream;charset=UTF-8
Cache-Control: no-cache, no-transform
X-Paw-Session-Id: 1788156264286
```
响应体是现有 QwenPaw Console Chat 的 SSE 事件流,事件顺序和结束语义保持一致。客户端应按标准 SSE 读取 `data:` 事件,不要假设每一帧都是完整的最终答案。
### 5.2 续聊
保存首次响应的 `X-Paw-Session-Id`,后续请求用同一个 API Key 和同一个 Session ID:
```bash
curl -N --fail-with-body -X POST "https://misagent.lcfuturecenter.com/api/shareChat" \
-H "X-Paw-Api-Key: <完整 API Key>" \
-H "X-Paw-Session-Id: 1788156264286" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{"message":"继续说明","files":[]}'
```
Session ID 是会话上下文标识,不是 API Key,也不是登录凭证。接入系统应按自己的用户或业务会话保存它;不同 API Key 不要主动共享同一个 Session ID。同一个 Session 同时只能有一个进行中的对话请求,否则可能返回 `409 SESSION_BUSY`。
## 6. 错误处理
建连前的错误通常返回 MIS 统一 JSON 错误结构:
```json
{
"code": 401,
"msg": "API Key 无效或已过期",
"data": null,
"errorCode": "API_KEY_INVALID"
}
```
常见状态码:
| HTTP | 场景 |
|---:|---|
| `400` | `message` 为空、文件元数据缺失或 Session 格式不合法 |
| `401` | 缺少、无效或已过期的 `X-Paw-Api-Key` |
| `403` | API Key 已停用,或文件不属于该 Key 定位的 Agent Workspace |
| `406` | `Accept` 不支持 |
| `409` | 同一个 Agent/Session 已有进行中的 Chat |
| `413` | 文件超过配置的大小限制 |
| `422` | Agent 创建人的模型 Key 不可用 |
| `503` | Agent 或 QwenPaw 实例不可用 |
如果 SSE 已经开始,之后发生的 Agent 错误仍以 SSE 事件返回,不会中途切换成 JSON。客户端需要同时处理 HTTP 建连错误和 SSE 错误事件。
## 7. 文件+对话完整流程
1. 使用 `X-Paw-Api-Key` 调用 `/api/files/upload`。
2. 保存响应中的 `data.url`、`data.fileName`、`data.fileSize`。
3. 调用 `/api/shareChat`,将这三个值放入 `files`,并填写 `message`。
4. 保存响应头 `X-Paw-Session-Id`。
5. 后续续聊时使用同一个 API Key,并回传保存的 Session ID。
```bash
# 1. 上传文件
curl -sS -X POST "https://misagent.lcfuturecenter.com/api/files/upload" \
-H "X-Paw-Api-Key: <完整 API Key>" \
-F "file=@./demo.txt"
# 2. 使用上传返回的 url 对话
curl -N -X POST "https://misagent.lcfuturecenter.com/api/shareChat" \
-H "X-Paw-Api-Key: <完整 API Key>" \
-H "Accept: text/event-stream" \
-H "Content-Type: application/json" \
-d '{
"message": "这个文件内容是什么",
"files": [{
"url": "<上一步 data.url>",
"fileName": "demo.txt",
"fileSize": 84757
}]
}'
```
## 8. 浏览器跨域调用
如果由浏览器直接调用,预检请求不需要 API Key,但实际 `POST` 必须携带。前端需要能够读取 `X-Paw-Session-Id`,服务端跨域配置应允许以下请求头并暴露 Session 响应头:
```text
Allowed-Headers: Content-Type, Accept, X-Paw-Api-Key, X-Paw-Session-Id
Exposed-Headers: X-Paw-Session-Id, Content-Type, Cache-Control
```
不要在浏览器端把完整 API Key 固化到公开前端代码中;更适合由受控的后端接入系统代理调用。
## 9. 重试与费用提示
一期没有 HTTP 请求级幂等键。客户端在未收到完整响应时重试,可能重新启动一次 Agent 对话并产生新的模型费用;只有同一 Session 尚未结束时,才可能收到 `409 SESSION_BUSY`。请由调用方控制超时、重试次数和同一 Session 的并发请求。
-88
View File
@@ -1,88 +0,0 @@
# 客户端软件包
以下是客户端软件包相关接口的API文档。
## 查看最新版本
查询指定客户端(`identity`)的最新版本信息,若带 `canary=true` 且当前登录用户在灰度范围内,则查询范围覆盖灰度版,否则仅返回正式版。
- 请求地址:/client/software/latest
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| identity | 是 | String | 客户端标识,示例:devco |
| canary | 否 | Boolean | 传true则查询范围覆盖灰度版,否则只查正式版;不传等同于false |
### 请求示例
```bash
curl -X GET {gateway}/client/software/latest?identity=devco&canary=true
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Object | 版本信息;无匹配版本时为 null |
| data.releaseId | String | 版本记录 ID(Long 序列化为字符串) |
| data.versionNo | String | 版本号,如 1.0.0 |
| data.releaseTime | String | 发布时间,格式 yyyy-MM-dd HH:mm:ss(GMT+8) |
| data.releaseNotes | String | 更新内容 |
| data.packageOssId | String | 安装包 OSS 主键(Long 序列化为字符串);前端据此请求预签名下载地址 |
| data.packageName | String | 安装包文件名 |
| data.packageSize | Number | 安装包大小(字节) |
| data.packageSizeDisplay | String | 安装包大小展示文案,如 12.50 MB |
| data.state | String | 版本状态:canary=灰度版、release=正式版 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"releaseId": "1928374655647382",
"versionNo": "1.0.0",
"releaseTime": "2026-09-28 10:00:00",
"releaseNotes": "修复已知问题,优化启动速度",
"packageOssId": "1928374655647383",
"packageName": "devco-1.0.0-setup.exe",
"packageSize": 13107200,
"packageSizeDisplay": "12.50 MB",
"state": "release"
}
}
```
### 无版本示例
查询范围内没有任何版本时,`data` 为 `null`:
```json
{
"code": 200,
"msg": "操作成功",
"data": null
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
### 备注
- 结果按 `releaseTime` 倒序取第一条,即为最新版本。
- 未登录(`LoginHelper.getLoginUser()` 为 null)时仅返回正式版,忽略 `canary`。
- `packageName`、`packageSize`、`packageSizeDisplay` 在数据库未记录安装包信息时,会尝试从 OSS 元数据补全;OSS 查询失败时保持为空,不影响接口返回。
- 下载安装包请调用 `GET /client/software/download/{ossId}`,其中 `ossId` 取 `data.packageOssId`。
-594
View File
@@ -1,594 +0,0 @@
# SE智能体相关接口
以下是对应 `/harness` 路由前缀的 SE 智能体 HTTP 接口文档。
## 根据用户意图选子智能体
### 基本信息
| 项目 | 说明 |
|------|------|
| 接口地址 | `/harness/choose/subagent` |
| 请求方式 | `POST` |
| Content-Type | `application/json` |
| 响应类型 | `text/event-stream` (SSE) |
| 接口描述 | 根据用户意图选择子智能体 |
### 请求参数 (Request Body)
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| sessionId | Long | 是 | 会话ID |
| username | String | 是 | 用户名 |
| input | String | 是 | 用户输入内容 |
#### 请求示例
```json
{
"sessionId": 1001,
"username": "zhangsan",
"input": "帮我查看代码中的空指针异常"
}
```
### 响应参数 (Response Body)
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | int | 状态码 (200=成功, 500=失败) |
| msg | String | 消息内容 |
| data | Object | 响应数据对象 |
| data.sessionId | String | 会话ID |
| data.username | String | 用户名 |
| data.input | String | 用户输入 |
| data.output | String | 主智能体的输出 |
| data.subAgentId | String | 子智能体ID |
#### 成功响应示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"sessionId": "1001",
"username": "zhangsan",
"input": "帮我查看代码中的空指针异常",
"output": "正在为您分配合适的子智能体...",
"subAgentId": "code-review-agent"
}
}
```
#### 失败响应示例
```json
{
"code": 500,
"msg": "参数[sessionId]不能为空",
"data": null
}
```
---
## 保存子智能体回复
### 基本信息
| 项目 | 说明 |
|------|------|
| 接口地址 | `/harness/subagent/output` |
| 请求方式 | `POST` |
| Content-Type | `application/json` |
| 响应类型 | `text/event-stream` (SSE) |
| 接口描述 | 保存来自paw的子智能体回复内容 |
### 请求参数 (Request Body)
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| sessionId | Long | 是 | 会话ID |
| username | String | 是 | 用户名 |
| subagentOutput | String | 是 | 子智能体回复内容 |
| context | Map | 否 | 自定义扩展数据 |
#### 请求示例
```json
{
"sessionId": 1001,
"username": "zhangsan",
"subagentOutput": "在第42行发现潜在的空指针异常,建议添加空值检查...",
"context": {
"key1": "xxx",
"key2": "yyy"
}
}
```
### 响应参数 (Response Body)
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | int | 状态码 (200=成功, 500=失败) |
| msg | String | 消息内容 |
| data | Long | 保存的消息ID |
#### 成功响应示例
```json
{
"code": 200,
"msg": "操作成功",
"data": 12345
}
```
#### 失败响应示例
```json
{
"code": 500,
"msg": "参数[username]不能为空",
"data": null
}
```
---
## 通用说明
### 状态码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 操作成功 |
| 500 | 操作失败 |
### 错误码说明
| 错误信息 | 说明 |
|----------|------|
| 参数[sessionId]不能为空 | sessionId为必填参数 |
| 参数[username]不能为空 | username为必填参数 |
| 参数[input]不能为空 | input为必填参数 |
| 参数[subagentOutput]不能为空 | subagentOutput为必填参数 |
| 操作失败 | 服务器内部错误 |
## 开启一个会话窗口
- 请求地址:{gateway}/harness/session
- 请求方式:PUT
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| username | 是 | String | 用户名称 |
### 请求示例
```bash
curl -X PUT {gateway}/harness/session -H "Content-Type: application/json" -d '{
"username": "zhangsan"
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | String | 新开启的会话ID(sessionId) |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": "1872639000000000001"
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 查看聊天记录列表
- 请求地址:{gateway}/harness/session/history
- 请求方式:POST
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| pageNum | 否 | Number | 页码,默认1 |
| pageSize | 否 | Number | 每页行数,默认20 |
| username | 否 | String | 用户名,不传则从token获取 |
| keywords | 否 | String | 根据用户的问题去搜索 |
### 请求示例
```bash
curl -X POST {gateway}/harness/session/history -H "Content-Type: application/json" -d '{
"pageNum": 1,
"pageSize": 20,
"username": "zhangsan",
"keywords": "如何配置"
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| total | Number | 总记录数 |
| rows | Array | 会话列表数据 |
| rows.sessionId | String | 会话ID |
| rows.userQuestion | String | 用户的第一个问题 |
| rows.createTime | String | 创建时间(yyyy-MM-dd HH:mm:ss) |
| rows.createAt | String | 创建人 |
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| extraData | Object | 列表之外的额外数据 |
### 成功示例
```json
{
"total": 1,
"rows": [
{
"sessionId": "1872639000000000001",
"userQuestion": "如何配置聊天模型",
"createTime": "2026-09-20 10:30:00",
"createAt": "zhangsan"
}
],
"code": 200,
"msg": "查询成功",
"extraData": null
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 查看会话聊天记录
- 请求地址:{gateway}/harness/session/message/{sessionId}
- 请求方式:GET
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| sessionId | 是 | Number | 会话ID |
### 请求示例
```bash
curl -X GET {gateway}/harness/session/message/1872639000000000001
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Array | 聊天消息列表 |
| data.messageId | String | 消息ID |
| data.messageType | String | 消息类型(USER=用户输入,AGENT=智能体输出) |
| data.message | String | 消息内容(markdown格式) |
| data.context | Object | 扩展上下文信息 |
| data.createTime | String | 创建时间(yyyy-MM-dd HH:mm:ss) |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"messageId": "1872639000000001001",
"messageType": "USER",
"message": "你好,请问如何配置聊天模型?",
"context": {
"key1": "xxx",
"key2": "yyy"
},
"createTime": "2026-09-20 10:30:00"
},
{
"messageId": "1872639000000001002",
"messageType": "AGENT",
"message": "你好!配置聊天模型可以参考以下步骤:...",
"context": null,
"createTime": "2026-09-20 10:30:05"
}
]
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 预设的热门问题
- 请求地址:{gateway}/harness/hot/question
- 请求方式:GET
### 请求参数
无
### 请求示例
```bash
curl -X GET {gateway}/harness/hot/question
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Array | 热门问题列表 |
| data.questionShortName | String | 热门问题简写 |
| data.questionContent | String | 问题实际内容 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"questionShortName": "如何配置模型",
"questionContent": "如何为智能体配置聊天模型?"
}
]
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 预设的子智能体
- 请求地址:{gateway}/harness/subagent/config
- 请求方式:GET
### 请求参数
无
### 请求示例
```bash
curl -X GET {gateway}/harness/subagent/config
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Array | 子智能体配置列表 |
| data.name | String | 子智能体名称 |
| data.alias | String | 展示给用户看的别名 |
| data.dataId | String | 如果`added=true`返回用户个人空间的agentId,否则返回需要添加到个人空间的agentId |
| data.added | Boolean | 用户是否添加了这个子智能体 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"name": "SE_taskexec",
"alias": "SE任务执行专家",
"dataId": "123456",
"added": true
},
{
"name": "SE_Debug",
"alias": "SE-issue调试专家",
"dataId": "67890",
"added": false
}
]
}
```
### 失败示例
```json
{
"code": 500,
"msg": "错误信息"
}
```
## 保存用户输入的内容
- 请求地址:{gateway}/harness/user/input
- 请求方式:POST
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| sessionId | 是 | Long | 会话ID |
| username | 是 | String | 用户名 |
| userInput | 是 | String | 用户输入的内容 |
### 请求示例
```bash
curl -X POST {gateway}/harness/user/input -H "Content-Type: application/json" -d '{
"sessionId": 1872639000000000001,
"username": "zhangsan",
"userInput": "帮我查看代码中的空指针异常"
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Long | 保存的消息ID |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": 1872639000000001001
}
```
### 失败示例
```json
{
"code": 500,
"msg": "参数[sessionId]不能为空"
}
```
## 重写用户输入
- 请求地址:{gateway}/harness/user/input/rewrite
- 请求方式:PUT
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| sessionId | 是 | Long | 会话ID |
| username | 是 | String | 用户名 |
| userId | 是 | Long | 用户ID |
| userInput | 是 | String | 用户输入的内容 |
### 请求示例
```bash
curl -X PUT {gateway}/harness/user/input/rewrite -H "Content-Type: application/json" -d '{
"sessionId": 1872639000000000001,
"username": "zhangsan",
"userId": 1001,
"userInput": "帮我查看代码中的空指针异常"
}'
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | String | 重写后的用户输入内容 |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": "帮我查看代码中的空指针异常\n\n变量表提示信息:..."
}
```
### 失败示例
```json
{
"code": 500,
"msg": "参数[sessionId]不能为空"
}
```
## 删除会话
- 请求地址:{gateway}/harness/session/{sessionId}
- 请求方式:DELETE
### 请求参数
| 参数名称 | 是否必传 | 类型 | 描述 |
|:-----|:-----|:-----|:-----|
| sessionId | 是 | Long | 会话ID(路径参数) |
### 请求示例
```bash
curl -X DELETE {gateway}/harness/session/1872639000000000001
```
### 响应参数
| 参数名称 | 类型 | 描述 |
|:-----|:-----|:-----|
| code | Number | 返回码(200=成功) |
| msg | String | 提示信息 |
| data | Long | 被删除的会话ID |
### 成功示例
```json
{
"code": 200,
"msg": "操作成功",
"data": 1872639000000000001
}
```
### 失败示例
```json
{
"code": 500,
"msg": "删除失败"
}
```
-1021
View File
File diff suppressed because it is too large. Load diff
-362
View File
@@ -1,362 +0,0 @@
# AgentProperties 配置文档
本文档描述 `AgentProperties` 类及其内部静态类的配置字段。每个字段都通过 `@Schema` 注解提供了描述信息。
## 主类:AgentProperties
| 字段名 | 类型 | 描述 |
|--------|------|------|
| mainAgentSpec | MainAgentSpec | 主智能体规格 |
| workspace | Workspace | 工作区配置 |
| compaction | Compaction | 上下文压缩配置 |
| skillRepository | SkillRepository | SKILL相关配置 |
| a2sMcpProvider | McpProvider | AaaS的MCP供应商配置 |
| mcpServerConfigs | List\<McpServerConfig\> | MCP服务配置列表 |
| permissionContext | PermissionContext | 权限上下文配置 |
| memoryConfig | MemoryConfig | 长期记忆配置 |
| subagentSpec | List\<SubagentSpec\> | 子智能体清单 |
## 内部类: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
工作区配置。
| 字段名 | 类型 | 描述 |
|--------|------|------|
| 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\<String\> | 启用的工具列表 | - |
| 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\<String, String\> | 自定义的默认请求头 | - |
## 内部类: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\<String\> | 可用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\<String\> | 排除的工具列表,这些工具的输出不会被剪枝 | ["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\<String\> | 运行执行的工具列表 | - | - |
| deny | Set\<String\> | 拒绝执行的工具列表 | - | - |
| ask | Set\<String\> | 需要询问用户的工具列表 | - | - |
## 内部类: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": {
"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
}
]
}
```
-32
View File
@@ -1,32 +0,0 @@
执行 stress 测试
# 我在 MIS 系统的真实个人信息
**请以下面的信息作为我的个人信息**,上下文中若出现其他个人信息,请忽略掉,以此为准。
<MisUserProfile>
<username>
<description>我的用户名</description>
<value>mingyan.li</value>
</username>
<userId>
<description>我的用户ID</description>
<value>7</value>
</userId>
<date>
<description>今天的日期</description>
<value>2026-09-29</value>
</date>
<employeeNo>
<description>我的工号</description>
<value>H220GEE</value>
</employeeNo>
<sessionId>
<description>当前会话ID</description>
<value>2104757602742181889</value>
</sessionId>
<email>
<description>我的邮箱</description>
<value>Mingyan.Li@lcfuturecenter.com</value>
</email>
</MisUserProfile>
-142
View File
@@ -1,142 +0,0 @@
{
"mainAgentSpec": {
"name": "se-agent",
"description": "主智能体",
"systemPrompt": "nacos:se-agent-prompt-main.txt",
"chatModel": {
"model": "Qwen3.6-35B-A3B",
"apiKey": "sk-xxx"
},
"enablePlanMode": false,
"enableShell": false,
"enableAgentTraceLog": true,
"asyncToolTimeout": 30,
"maxContextTokens": 8000,
"maxIter": 200,
"maxRetries": 3
},
"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": "qwen3.5-122b-a10b-fp8",
"apiKey": "sk-xxx"
}
},
"skillRepository": {
"mysql": {
"enable": false,
"databaseName": "mis-dubugging",
"skillsTableName": "agent_skill",
"resourcesTableName": "agent_skill_resource",
"createIfNotExist": true,
"writeable": false
},
"classPath": {
"enable": false,
"directory": "skills"
},
"a2s": {
"enable": true,
"directory": "a2s-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": true,
"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
}
]
}
-1220
View File
File diff suppressed because it is too large. Load diff
-203
View File
@@ -1,203 +0,0 @@
# 服务
| 服务名称 | 分支 | 描述 |
| --- | --- | --- |
| mis-paw | dev_lab | 用户添加Agent到个人中心(添加次数+1)|
| mis-tool-server | dev_lab | MCP、Skill、Agent 数据统计 |
## SQL脚本
### 新建的表
```sql
DROP TABLE `mis-mcp-paw-claw`.`user_resource_operate_record`
DROP TABLE `mis-mcp-paw-claw`.`resource_operate_count`;
DROP TABLE `mis-mcp-paw-claw`.`user_resource_comment`;
DROP TABLE `mis-cloud-claw`.`client_software`;
DROP TABLE `mis-cloud-claw`.`client_software_canary_settings`;
DROP TABLE `mis-paw-claw`.`work_sheet`;
```
```sql
CREATE TABLE `mis-mcp-paw-claw`.`resource_operate_count` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
`tag` VARCHAR(32) DEFAULT NULL COMMENT '资源类型(agent=智能体、skill=技能、mcp_server=MCP服务)',
`resource_id` VARCHAR(255) DEFAULT NULL COMMENT '资源ID(Agent=智能体ID、Skill=skillId、MCP=mcpServerUuid)',
`like_count` BIGINT DEFAULT '0' COMMENT '点赞次数',
`comment_count` BIGINT DEFAULT '0' COMMENT '评论次数',
`personal_space_add_count` BIGINT DEFAULT '0' COMMENT '被添加到个人中心的次数',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '最近更新时间',
`create_at` VARCHAR(255) DEFAULT NULL COMMENT '创建人',
`update_at` VARCHAR(255) DEFAULT NULL COMMENT '最近更新人',
`delete_flag` VARCHAR(8) DEFAULT '0' COMMENT '删除标识(0=未删除,2=已删除)',
PRIMARY KEY (`id`),
KEY(`resource_id`),
UNIQUE KEY(`tag`, `resource_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '资源的操作统计';
CREATE TABLE `mis-mcp-paw-claw`.`user_resource_comment` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
`tag` VARCHAR(32) DEFAULT NULL COMMENT '资源类型(agent=智能体、skill=技能、mcp_server=MCP服务)',
`resource_id` VARCHAR(255) DEFAULT NULL COMMENT '资源ID(Agent=智能体ID、Skill=skillId、MCP=mcpServerUuid)',
`user_id` VARCHAR(255) DEFAULT NULL COMMENT '用户ID',
`comment` VARCHAR(500) DEFAULT NULL COMMENT '评论内容',
`star` INT DEFAULT '0' COMMENT '评分星级(1~5)',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '最近更新时间',
`create_at` VARCHAR(255) DEFAULT NULL COMMENT '创建人',
`update_at` VARCHAR(255) DEFAULT NULL COMMENT '最近更新人',
`delete_flag` VARCHAR(8) DEFAULT '0' COMMENT '删除标识(0=未删除,2=已删除)',
PRIMARY KEY (`id`),
KEY(`resource_id`),
KEY(`user_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '用户对资源的评论';
CREATE TABLE `mis-mcp-paw-claw`.`user_resource_operate_record` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id',
`tag` VARCHAR(32) DEFAULT NULL COMMENT '资源类型(agent=智能体、skill=技能、mcp_server=MCP服务)',
`resource_id` VARCHAR(255) DEFAULT NULL COMMENT '资源ID(Agent=智能体ID、Skill=skillId、MCP=mcpServerUuid)',
`user_id` VARCHAR(255) DEFAULT NULL COMMENT '用户ID',
`click_like` VARCHAR(8) DEFAULT NULL COMMENT '是否点过赞(yes=是、no=否)',
`click_like_time` DATETIME DEFAULT NULL COMMENT '点赞时间',
`withdraw_like` VARCHAR(8) DEFAULT NULL COMMENT '是否取消点赞(yes=是、no=否)',
`withdraw_like_time` DATETIME DEFAULT NULL COMMENT '取消点赞时间',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT NULL COMMENT '最近更新时间',
`create_at` VARCHAR(255) DEFAULT NULL COMMENT '创建人',
`update_at` VARCHAR(255) DEFAULT NULL COMMENT '最近更新人',
`delete_flag` VARCHAR(8) DEFAULT '0' COMMENT '删除标识(0=未删除,2=已删除)',
PRIMARY KEY (`id`),
KEY(`resource_id`),
UNIQUE KEY(`tag`, `resource_id`, `user_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '用户在个人空间对资源的操作记录';
CREATE TABLE `mis-cloud-claw`.`client_software` (
`id` BIGINT NOT NULL COMMENT 'ID',
`identity` VARCHAR(255) NOT NULL COMMENT '客户端标识',
`state` VARCHAR(50) NOT NULL COMMENT '状态',
`version_no` VARCHAR(50) NOT NULL COMMENT '版本号',
`release_notes` TEXT COMMENT '更新内容',
`release_time` DATETIME COMMENT '发布时间',
`package_oss_id` BIGINT COMMENT '安装包 OSS ID',
`package_name` VARCHAR(255) COMMENT '安装包文件名',
`package_size` BIGINT COMMENT '安装包大小(字节)',
`create_time` DATETIME COMMENT '创建时间',
`update_time` DATETIME COMMENT '最近更新时间',
`create_at` VARCHAR(100) COMMENT '创建人',
`update_at` VARCHAR(100) COMMENT '最近更新人',
`delete_flag` CHAR(1) DEFAULT '0' COMMENT '删除标识:0=未删除(其他数值视为删除)',
PRIMARY KEY (`id`),
KEY idx_identity(`identity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户端软件表';
CREATE TABLE `mis-cloud-claw`.`client_software_canary_settings` (
`id` BIGINT NOT NULL COMMENT 'ID',
`identity` VARCHAR(255) NOT NULL COMMENT '客户端标识',
`dept_ids` JSON COMMENT '部门ID列表',
`user_ids` JSON COMMENT '用户ID列表',
`create_time` DATETIME COMMENT '创建时间',
`update_time` DATETIME COMMENT '最近更新时间',
`create_at` VARCHAR(100) COMMENT '创建人',
`update_at` VARCHAR(100) COMMENT '最近更新人',
`delete_flag` CHAR(1) DEFAULT '0' COMMENT '删除标识:0=未删除(其他数值视为删除)',
PRIMARY KEY (`id`),
KEY idx_identity(`identity`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户端软件包测试版配置表';
CREATE TABLE `mis-paw-claw`.`work_sheet` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
`system_code` VARCHAR(64) NOT NULL COMMENT '系统编码',
`work_code` VARCHAR(512) NOT NULL COMMENT '工单编码',
`current_try_times` INT NOT NULL COMMENT '当前是第几次重试',
`max_try_times` INT NOT NULL COMMENT '最多重试多少次',
`task_id` VARCHAR(512) NOT NULL COMMENT '追踪标识(traceId、业务标识、时间戳等)',
`state` VARCHAR(32) NOT NULL COMMENT '状态:wait-待执行,error-失败,success-成功',
`json_param` JSON NULL COMMENT '请求参数(JSON格式)',
`str_param` VARCHAR(512) NULL COMMENT '请求参数(简单字符串)',
`response_param` LONGTEXT NULL COMMENT '响应参数',
`error` LONGTEXT NULL COMMENT '错误信息',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`start_time` DATETIME NULL COMMENT '执行开始时间',
`finish_time` DATETIME NULL COMMENT '执行结束时间',
PRIMARY KEY (`id`),
KEY idx_task_id(`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单表';
```
### 扩字段
```sql
ALTER TABLE `mis-paw-claw`.`agent`
ADD COLUMN `available` VARCHAR(8) DEFAULT 'yes' COMMENT '是否可用(yes=启用,no=禁用)';
ALTER TABLE `mis-paw-claw`.`agent_skill_mapping`
ADD COLUMN `skill_id` BIGINT NULL COMMENT '技能ID(调试版)' AFTER `agent_id`;
ALTER TABLE `mis-paw-claw`.`agent_skill_mapping` MODIFY `skill_release_id` BIGINT NULL COMMENT 'tool-server skill_release 主键(正式版)';
```
### 数据初始化
```sql
-- 初始化智能体被添加次数
INSERT INTO `mis-mcp-paw-claw`.`resource_operate_count`(`tag`, `resource_id`, `like_count`, `comment_count`, `personal_space_add_count`, `create_time`, `update_time`, `create_at`, `update_at`, `delete_flag`)
VALUES
SELECT 'agent', `parent_agent_id`, 0, 0, count(`agent_id`), now(), now(), 'admin', 'admin', '0'
FROM `mis-paw-claw`.`agent`
WHERE `del_flag` = '0' AND `version_lane` = 'PUBLISHED'
GROUP BY `parent_agent_id`;
-- 初始化MCP被添加次数
INSERT INTO `mis-mcp-paw-claw`.`resource_operate_count`(`tag`, `resource_id`, `like_count`, `comment_count`, `personal_space_add_count`, `create_time`, `update_time`, `create_at`, `update_at`, `delete_flag`)
VALUES
SELECT 'mcp_server', `mcp_server_uuid`, 0, 0, count(`mcp_square_pull_record_id`), now(), now(), 'admin', 'admin', '0'
FROM `mis-mcp-paw-claw`.`mcp_square_pull_record`
WHERE `use_state` = 3
GROUP BY `mcp_server_uuid`;
-- 初始化Skill被添加次数
INSERT INTO `mis-mcp-paw-claw`.`resource_operate_count`(`tag`, `resource_id`, `like_count`, `comment_count`, `personal_space_add_count`, `create_time`, `update_time`, `create_at`, `update_at`, `delete_flag`)
VALUES
SELECT 'skill', `skill_release_id`, 0, 0, count(`skill_square_pull_record_id`), now(), now(), 'admin', 'admin', '0'
FROM `mis-mcp-paw-claw`.`skill_square_pull_record`
WHERE `use_state` = 3
GROUP BY `skill_release_id`;
-- 初始化 skill_id
UPDATE `mis-paw-claw`.`agent_skill_mapping` AS asm
INNER JOIN `mis-mcp-paw-claw`.`skill_release` AS sr
ON sr.`skill_release_id` = asm.`skill_release_id`
SET asm.`skill_id` = sr.`skill_id`
WHERE sr.`del_flag` = '0'
AND asm.`del_flag` = '0'
AND asm.`skill_release_id` IS NOT NULL
AND sr.`skill_id` IS NOT NULL;
```
### 数据迁移
```sql
CREATE TABLE `mis-cloud-claw`.`server_client_release` (
`release_id` BIGINT NOT NULL COMMENT '主键',
`version_no` VARCHAR(64) NOT NULL COMMENT '版本号,如 1.0.0',
`release_time` DATETIME NOT NULL COMMENT '发布时间',
`release_notes` TEXT COMMENT '更新内容',
`download_url` VARCHAR(1024) COMMENT '外部下载地址;上传包时可为空,由 oss 预签名生成',
`package_oss_id` BIGINT COMMENT '客户端安装包 ossId',
`package_name` VARCHAR(255) COMMENT '安装包原始文件名',
`package_size` BIGINT COMMENT '安装包大小(字节)',
`create_by` BIGINT,
`create_dept` BIGINT,
`create_time` DATETIME,
`update_by` BIGINT,
`update_time` DATETIME,
`del_flag` CHAR(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`release_id`),
INDEX `idx_release_time` (`release_time`)
) ENGINE=InnoDB COMMENT='Server客户端版本发布';
-- 同步版本数据
INSERT INTO `mis-cloud-claw`.`server_client_release`
SELECT * FROM `mis-paw-claw`.`server_client_release`;
```
-118
View File
@@ -1,118 +0,0 @@
# 服务
| 服务名称 | 分支 | 描述 |
| --- | --- | --- |
| mis-debugging | qas_liushuang | SE智能体 |
## 新建的表
```sql
CREATE TABLE `work_sheet` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
`system_code` VARCHAR(64) NOT NULL COMMENT '系统编码',
`work_code` VARCHAR(512) NOT NULL COMMENT '工单编码',
`current_try_times` INT NOT NULL COMMENT '当前是第几次重试',
`max_try_times` INT NOT NULL COMMENT '最多重试多少次',
`task_id` VARCHAR(512) NOT NULL COMMENT '追踪标识(traceId、业务标识、时间戳等)',
`state` VARCHAR(32) NOT NULL COMMENT '状态:wait-待执行,error-失败,success-成功',
`json_param` JSON NULL COMMENT '请求参数(JSON格式)',
`str_param` VARCHAR(512) NULL COMMENT '请求参数(简单字符串)',
`response_param` LONGTEXT NULL COMMENT '响应参数',
`error` LONGTEXT NULL COMMENT '错误信息',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`start_time` DATETIME NULL COMMENT '执行开始时间',
`finish_time` DATETIME NULL COMMENT '执行结束时间',
PRIMARY KEY (`id`),
KEY idx_task_id(`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工单表';
CREATE TABLE `se_agent_session` (
`id` BIGINT NOT NULL COMMENT '主键ID',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`create_at` VARCHAR(64) NOT NULL COMMENT '创建人',
`del_flag` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0=未删除 2=已删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='SeAgent会话表';
CREATE TABLE `se_agent_chat_message` (
`id` BIGINT NOT NULL COMMENT '主键ID',
`session_id` BIGINT NOT NULL COMMENT '会话ID',
`message_type` VARCHAR(16) NOT NULL COMMENT '消息类型 USER=用户输入 AGENT=智能体输出',
`message` LONGTEXT NOT NULL COMMENT '消息内容',
`context` JSON NULL COMMENT '扩展上下文信息(JSON)',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`create_at` VARCHAR(64) NOT NULL COMMENT '创建者',
`del_flag` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0=未删除 2=已删除',
PRIMARY KEY (`id`),
INDEX `idx_session_id` (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='SeAgent聊天消息表';
```
## Nacos
- se-agent.yaml
- se-agent-system-prompt.txt
## 主智能体选子智能体的系统提示词
```text
# 角色
你叫软件工程师,人们通常称呼你为SE智能体,SE取自"Software Engineer"英文缩写。经过3轮MBTI测试,你的人格类型均为INTJ。
你最大的优点是沉着、冷静、一丝不苟、循规蹈矩,这也是人们喜欢你的原因。
你的唯一目标是根据用户的问题,选一个子智能体,输出子智能体的名称。
当用户的输入不符合任何子智能体的职责时,回复"defaultSubagent"即可。
## 输出契约
你只需要输出子智能体的名称,你不用过度思考、不用解释原因,仅输出子智能体的名称。
## 子智能体
|智能体名称|职责|
|---|---|
|SE_Debug|提供相似issue匹配、log解析、DIKW相关建议,在任务执行过程中遇到异常,请由工程师来决定如何执行。|
|SE_Taskexec|提供任务执行相关能力,下发任务到测试机。|
|SE_PPM|提供初始issue分配建议、issue数据统计分析的能力,在任务执行过程中遇到异常,请由工程师来决定如何执行。|
|SE_Dataquery|提供vLAB系统、Driver系统、SE管理系统的数据查询服务|
|SE_KnowledgeSearch|提供笔记本电脑测试、调试的知识问答服务,通过用户提供的简单自然语言描述,快速定位相关知识文档,提供清晰的排查步骤与修复方案等相关知识。|
## 参考示例
|用户的问题|输出|
|执行stress测试|SE_Taskexec|
|提供issue解决建议|SE_Debug|
|提供issue分配建议|SE_PPM|
|查询Debug测试流程|SE_KnowledgeSearch|
|更新Driver|SE_Taskexec|
|执行Preload|SE_Taskexec|
```
## 集成Harness(废案)
### 新建的表
从`agentscope-java`源码提取而来。
```sql
CREATE TABLE IF NOT EXISTS agent_skill (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
description TEXT NOT NULL,
skill_content LONGTEXT NOT NULL,
source VARCHAR(255) NOT NULL,
metadata_json LONGTEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS agent_skill_resource (
id BIGINT NOT NULL,
resource_path VARCHAR(500) NOT NULL,
resource_content LONGTEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id, resource_path),
FOREIGN KEY (id) REFERENCES agent_skill (id) ON DELETE CASCADE
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```