This commit is contained in:
V-LiuShuang committed 2026-10-09 14:27:23 +08:00
1 parent b46d7ee6ad
commit 3d79b9b7d0
2 files changed
+162 -122

No files matched your search

+91 -1
View File
@@ -1,3 +1,93 @@
# 任务目标 # 任务目标
修改E:\gitlab\mis-paw\mis-modules\mis-paw\src\main\java\com\lcfc\mispaw\service\Impl\AgentApprovalServiceImpl.java里面的"assertNoUnpublishedSkillMapping"方法,目前判断agentId关联的skill包含未发布的逻辑有误,应该参考"E:\gitlab\mis-paw\mis-modules\mis-paw\src\main\java\com\lcfc\mispaw\service\Impl\AgentPublishServiceImpl.java"的"submitPublish"方法生成的"AgentConfigSnapshot.java"。 agent发布时,`agent_skill_mapping`表中`skill_id`关联的SKILL信息没有存储到`agent_published_version_snapshot`表中的`skills_json`字段,尝试了2次都不行。
## 代码路径
|#|源文件名称|方法名称|补充说明|
|---|---|---|---|
|提交发布|AgentPublishServiceImpl.java|submitPublishInLock|无|
|在哪里保存的快照|AgentPublishedVersionSnapshotServiceImpl.java|sealBindingsOnSubmit|在"submitPublishInLock"方法内部嵌套调用,然后调用"insertSealedRow"方法,最终存储到`agent_published_version_snapshot`表中|
## 通过SQL查到提交发布时的SKILL信息
查询结果中`skill_release`的表中是没有关联到数据的,只有`skill`表关联上了2条数据。
```sql
with mapping AS (
select
asm.agent_id,asm.mapping_id,asm.skill_id,asm.skill_release_id,asm.create_time
from `mis-paw-claw`.`agent_skill_mapping` asm
where asm.agent_id = '1977925311412596737FcNLSZ'
and asm.del_flag = '0'
)
select mapping.mapping_id, mapping.skill_id, mapping.skill_release_id, sk.skill_name,sk.skill_file
from mapping join `mis-mcp-paw-claw`.`skill` sk
on mapping.skill_id = sk.skill_id and sk.del_flag = '0'
union all
select mapping.mapping_id, mapping.skill_id, mapping.skill_release_id, sr.skill_name, sr.skill_file
from mapping join `mis-mcp-paw-claw`.`skill_release` sr
on mapping.skill_release_id = sr.skill_release_id and sr.del_flag = '0';
```
```json
[
{
"mapping_id": "2102629713947136001",
"skill_id": "2102629462528081922",
"skill_release_id": null,
"skill_name": "mis-spec-eclaw",
"skill_file": "{\"ossId\": \"1790140893732205682\", \"fileName\": \"mis-spec-eclaw.zip\"}"
},
{
"mapping_id": "2105125581220810754",
"skill_id": "2105124095074033665",
"skill_release_id": null,
"skill_name": "java-spec",
"skill_file": "{\"ossId\": \"1790735602461436068\", \"fileName\": \"java-spec.zip\"}"
}
]
```
## 通过SQL查到agent的快照信息
```sql
select * from `mis-paw-claw`.`agent_published_version_snapshot` apvs
where apvs.agent_id = '1977925311412596737FcNLSZ'
and apvs.del_flag = '0'
```
```json
[
{
"config_id": "2105128598548582402",
"snapshot_id": "2105128595469963266",
"agent_id": "1977925311412596737FcNLSZ",
"skills_json": "[]",
"mcps_json": "[]",
"persona_docs_json": "",
"kbs_json": "[]",
"create_by": "1977925311412596737",
"create_dept": "5",
"create_time": "2026-09-30 10:52:24",
"update_by": "1977925311412596737",
"update_time": "2026-09-30 10:52:24",
"del_flag": "0"
},
{
"config_id": "2105179820223688705",
"snapshot_id": "2105179819527434242",
"agent_id": "1977925311412596737FcNLSZ",
"skills_json": "[]",
"mcps_json": "[]",
"persona_docs_json": "",
"kbs_json": "[]",
"create_by": "1977925311412596737",
"create_dept": "5",
"create_time": "2026-09-30 14:15:56",
"update_by": "1977925311412596737",
"update_time": "2026-09-30 14:15:56",
"del_flag": "0"
}
]
```
+71 -121
View File
@@ -7,8 +7,10 @@
- [查智能体使用数据](查智能体使用数据) - [查智能体使用数据](查智能体使用数据)
- [查项目统计数据](#查项目统计数据) - [查项目统计数据](#查项目统计数据)
- [新增devco账号](#新增devco账号) - [新增devco账号](#新增devco账号)
- [查paw-agent信息](#查paw-agent信息) - [查某个用户的智能体](#查某个用户的智能体)
- [查工作流工单状态](#查工作流工单状态) - [查工作流工单状态](#查工作流工单状态)
- [查智能体绑定的技能](#查智能体绑定的技能)
- [查智能体的发布快照](#查智能体的发布快照)
## 查智能体用户数 ## 查智能体用户数
@@ -18,39 +20,24 @@ select
agent.agent_id, agent.agent_id,
agent.agent_name, agent.agent_name,
IFNULL (aus.user_num, 0) AS user_num IFNULL (aus.user_num, 0) AS user_num
from from `mis-agent`.`agent` AS agent left join agent_usage_stats AS aus ON agent.agent_id = aus.agent_id
`agent` AS agent where agent.del_flag = '0'
left join agent_usage_stats AS aus ON agent.agent_id = aus.agent_id
where
agent.del_flag = '0'
UNION ALL UNION ALL
select select
'多智能体' AS agent_type, '多智能体' AS agent_type,
ma.agent_id, ma.agent_id,
ma.agent_name, ma.agent_name,
IFNULL (maus.user_num, 0) AS user_num IFNULL (maus.user_num, 0) AS user_num
from from `mis-agent`.`multi_agent_main` AS ma left join agent_usage_stats AS maus ON ma.agent_id = maus.agent_id
`multi_agent_main` AS ma where ma.del_flag = '0';
left join agent_usage_stats AS maus ON ma.agent_id = maus.agent_id
where
ma.del_flag = '0';
``` ```
## 查客户端是否登录 ## 查客户端是否登录
```sql ```sql
select select * from `mis-cloud-claw`.`sys_logininfor`
* where client_key = (
from select client_key from `mis-cloud-claw`.`sys_client` where `client_id` = '客户端ID'
`mis-cloud-claw`.`sys_logininfor`
where
client_key = (
select
client_key
from
`mis-cloud-claw`.`sys_client`
where
`client_id` = '客户端ID'
); );
``` ```
@@ -59,15 +46,15 @@ where
1. 查询所有切片号,假设查询出来的`part`是[1,2] 1. 查询所有切片号,假设查询出来的`part`是[1,2]
```sql ```sql
select part from log_agent_chat where del_flag = '0'; select part from `mis-agent`.`log_agent_chat` where del_flag = '0';
``` ```
2. 根据切片号查询并合并各个切片表的数据 2. 根据切片号查询并合并各个切片表的数据
```sql ```sql
select * from log_agent_chat_1 where chat_window_id = 会话ID select * from `mis-agent`.`log_agent_chat_1` where chat_window_id = 会话ID
UNION ALL UNION ALL
select * from log_agent_chat_2 where chat_window_id = 会话ID select * from `mis-agent`.`log_agent_chat_2` where chat_window_id = 会话ID
``` ```
## 查智能体信息 ## 查智能体信息
@@ -94,14 +81,14 @@ with agent_info AS (
long_term_memory, long_term_memory,
case kb_mode when '1' then '直接检索' when '2' then 'tool检索' else '' end AS kb_mode, case kb_mode when '1' then '直接检索' when '2' then 'tool检索' else '' end AS kb_mode,
case kb_search_type when '0' then '向量检索' when '1' then '混合检索' when '2' then '智能检索' else '' end AS kb_search_type case kb_search_type when '0' then '向量检索' when '1' then '混合检索' when '2' then '智能检索' else '' end AS kb_search_type
from mis-agent.agent from `mis-agent`.`agent`
where agent_id = <智能体ID> where agent_id = <智能体ID>
), ),
agent_skill AS ( agent_skill AS (
select select
<智能体ID> AS agent_id, <智能体ID> AS agent_id,
GROUP_CONCAT(skill_name) AS skill_names GROUP_CONCAT(skill_name) AS skill_names
from mis-mcp.skill from `mis-mcp`.`skill`
where skill_id in ( where skill_id in (
select skill_id from mis-agent.agent_skill_mapping select skill_id from mis-agent.agent_skill_mapping
where agent_id = <智能体ID> where agent_id = <智能体ID>
@@ -111,7 +98,7 @@ agent_mcp_tool AS (
select select
<智能体ID> AS agent_id, <智能体ID> AS agent_id,
GROUP_CONCAT(tool_name) AS tool_names GROUP_CONCAT(tool_name) AS tool_names
from mis-mcp.map_tools from `mis-mcp`.`map_tools`
where mcp_server_uuid in ( where mcp_server_uuid in (
select mcp_server_uuid from mis-agent.agent_tool_mapping select mcp_server_uuid from mis-agent.agent_tool_mapping
where relate_agent_id = <智能体ID> where relate_agent_id = <智能体ID>
@@ -125,12 +112,18 @@ left join agent_mcp_tool AS c on a.agent_id = c.agent_id
2. 查询多智能体信息 2. 查询多智能体信息
查询主智能体:
```sql ```sql
select * from mis-agent.agent_release_info where release_id in ( select * from `mis-agent`.`multi_agent_main` where agent_id = <主智能体ID>
```
查询子智能体:
```sql
select * from `mis-agent`.`agent_release_info` where release_id in (
select select
release_id release_id
from mis-agent.multi_agent_sub from `mis-agent`.`multi_agent_sub`
where main_agent_id = <智能体ID> where main_agent_id = <主智能体ID>
) )
``` ```
@@ -139,7 +132,7 @@ select * from mis-agent.agent_release_info where release_id in (
必须提供**智能体ID**。 必须提供**智能体ID**。
```sql ```sql
select * from mis-agent.agent_usage_stats_daily where agent_id = <智能体ID> order by daily desc select * from `mis-agent`.`agent_usage_stats_daily` where agent_id = <智能体ID> order by daily desc
``` ```
## 查项目统计数据 ## 查项目统计数据
@@ -149,7 +142,7 @@ select * from mis-agent.agent_usage_stats_daily where agent_id = <智能体ID> o
1. 查询项目注册表,判断是否包含该项目。用户提供的项目名称大概率是模糊的,比如"认证"、"ebiz",要根据语义判断究竟是哪一个,如果猜不准就询问一下用户是哪个。 1. 查询项目注册表,判断是否包含该项目。用户提供的项目名称大概率是模糊的,比如"认证"、"ebiz",要根据语义判断究竟是哪一个,如果猜不准就询问一下用户是哪个。
```sql ```sql
select * from mis-agent.project_stats_registry select * from `mis-agent`.`project_stats_registry`
``` ```
**重要:`project_stats_registry`里的`id`字段,称为项目ID,或者叫project_id,后面的步骤需要用到。** **重要:`project_stats_registry`里的`id`字段,称为项目ID,或者叫project_id,后面的步骤需要用到。**
@@ -157,7 +150,7 @@ select * from mis-agent.project_stats_registry
2. 查询项目统计数据 2. 查询项目统计数据
```sql ```sql
select * from mis-agent.project_data_stats_daily where project_id = <project_id> select * from `mis-agent`.`project_data_stats_daily` where project_id = <project_id>
``` ```
## 新增devco账号 ## 新增devco账号
@@ -178,104 +171,61 @@ username3
**在`mis-dev`资源下的`mis-cloud-paw`库中执行**批量插入sql,示例: **在`mis-dev`资源下的`mis-cloud-paw`库中执行**批量插入sql,示例:
```sql ```sql
INSERT INTO external_login_client_account (client_id, account, state) VALUES INSERT INTO `mis-cloud-paw`.`external_login_client_account`(client_id, account, state) VALUES
('226c18408b5705449f37b621a432a6d3', 'username1', 1), ('226c18408b5705449f37b621a432a6d3', 'username1', 1),
('226c18408b5705449f37b621a432a6d3', 'username2', 1), ('226c18408b5705449f37b621a432a6d3', 'username2', 1),
('226c18408b5705449f37b621a432a6d3', 'username3', 1); ('226c18408b5705449f37b621a432a6d3', 'username3', 1);
``` ```
## 查paw-agent信息 ## 查某个用户的智能体
在`mis-dev`资源下,根据用户名(username)查询paw-agent信息,如果用户没有提供username,友好的提问要查哪个用户的,一个可用的username示例:`Agnes2.wang`。 把`{username}`替换成真实的用户名。
1. 根据用户提供的`username`查询`user_id`,只会查出来1行数据,示例:
```sql
select user_id from `mis-cloud-claw`.`sys_user` where user_name = '{username}';
```
2. 根据`user_id`查询agent信息,可能返回多行数据,使用markdown表格的形式展示每一行的数据,示例:
```sql ```sql
select select
agent_id, agent_id, agent_mode,
agent_mode, publish_status, publish_scope, published_at,
publish_status, version_lane, key_scope_default
publish_scope, from `mis-paw-claw`.`agent`
published_at, where del_flag = '0'
version_lane, and create_by = (select user_id from `mis-cloud-claw`.`sys_user` where user_name = '{username}')
key_scope_default
from
`mis-paw-claw`.`agent`
where
create_by = < user_id >;
``` ```
## 查工作流工单状态 ## 查工作流工单状态
把`{business_key}`替换成申请单ID。
```sql ```sql
CREATE DEFINER=`root`@`%` PROCEDURE `sp_flow_status_by_business_key`(IN p_business_key VARCHAR(64)) call `mis-workflow-claw`.sp_flow_status_by_business_key('{business_key}')
BEGIN ```
-- 1) 流程实例摘要
SELECT ## 查智能体绑定的技能
h.BUSINESS_KEY_ AS business_key,
h.PROC_INST_ID_ AS process_instance_id, 把`{agentId}`替换成真实的智能体ID。
SUBSTRING_INDEX(h.PROC_DEF_ID_, ':', 1) AS process_key,
h.BUSINESS_STATUS_ AS business_status, ```sql
CASE h.BUSINESS_STATUS_ with mapping AS (
WHEN 'waiting' THEN '待审核' select
WHEN 'finish' THEN '已完成' asm.agent_id,asm.mapping_id,asm.skill_id,asm.skill_release_id,asm.create_time
WHEN 'back' THEN '已退回' from `mis-paw-claw`.`agent_skill_mapping` asm
WHEN 'cancel' THEN '已撤销' where asm.agent_id = '{agentId}'
WHEN 'draft' THEN '草稿' and asm.del_flag = '0'
ELSE IFNULL(h.BUSINESS_STATUS_, '未知') )
END AS business_status_name, select mapping.mapping_id, mapping.skill_id, mapping.skill_release_id, sk.skill_name,sk.skill_file
h.START_USER_ID_ AS start_user_id, from mapping join `mis-mcp-paw-claw`.`skill` sk
h.START_TIME_ AS start_time, on mapping.skill_id = sk.skill_id and sk.del_flag = '0'
h.END_TIME_ AS end_time, union all
CASE WHEN h.END_TIME_ IS NULL THEN 'RUNNING' ELSE 'FINISHED' END AS flow_state, select mapping.mapping_id, mapping.skill_id, mapping.skill_release_id, sr.skill_name, sr.skill_file
(SELECT COUNT(1) from mapping join `mis-mcp-paw-claw`.`skill_release` sr
FROM ACT_RU_TASK t on mapping.skill_release_id = sr.skill_release_id and sr.del_flag = '0'
INNER JOIN ACT_RU_EXECUTION e ON e.ID_ = t.PROC_INST_ID_ ```
WHERE e.BUSINESS_KEY_ = h.BUSINESS_KEY_
AND e.PROC_INST_ID_ = h.PROC_INST_ID_) AS pending_task_count ## 查智能体的发布快照
FROM ACT_HI_PROCINST h
WHERE h.BUSINESS_KEY_ = p_business_key 把`{agentId}`替换成真实的智能体ID。
ORDER BY h.START_TIME_ DESC;
```sql
-- 2) 当前待办 select * from `mis-paw-claw`.`agent_published_version_snapshot` apvs
SELECT where apvs.agent_id = '{agentId}'
t.ID_ AS task_id, and apvs.del_flag = '0'
t.NAME_ AS task_name,
t.TASK_DEF_KEY_ AS task_definition_key,
t.ASSIGNEE_ AS assignee,
t.CREATE_TIME_ AS create_time,
t.PROC_INST_ID_ AS process_instance_id,
e.BUSINESS_KEY_ AS business_key
FROM ACT_RU_TASK t
INNER JOIN ACT_RU_EXECUTION e ON e.ID_ = t.PROC_INST_ID_
WHERE e.BUSINESS_KEY_ = p_business_key
ORDER BY t.CREATE_TIME_ ASC;
-- 3) 历史任务 + 意见
SELECT
ht.ID_ AS task_id,
ht.NAME_ AS task_name,
ht.TASK_DEF_KEY_ AS task_definition_key,
ht.ASSIGNEE_ AS assignee,
ht.START_TIME_ AS start_time,
ht.END_TIME_ AS end_time,
c.TYPE_ AS comment_type,
c.MESSAGE_ AS comment_msg,
h.PROC_INST_ID_ AS process_instance_id,
h.BUSINESS_KEY_ AS business_key
FROM ACT_HI_TASKINST ht
INNER JOIN ACT_HI_PROCINST h ON h.PROC_INST_ID_ = ht.PROC_INST_ID_
LEFT JOIN ACT_HI_COMMENT c
ON c.TASK_ID_ = ht.ID_
AND c.TYPE_ IN ('pass', 'back')
WHERE h.BUSINESS_KEY_ = p_business_key
AND (ht.PARENT_TASK_ID_ IS NULL OR ht.PARENT_TASK_ID_ = '')
ORDER BY ht.START_TIME_ ASC, ht.ID_ ASC;
END
``` ```