cc 4 일 전
부모
커밋
d8e6223795

+ 3 - 3
ai-server/src/main/java/com/zsjz/ai/module/agent/artifact/ArtifactService.java

@@ -73,10 +73,10 @@ public class ArtifactService {
             "call_analysis", "通话分析",
             "trans_analysis", "交易分析",
             "track_analysis", "轨迹出行与快递",
-            "person_analysis", "人员画像与亲密度",
+            "person_analysis", "人物画像",
             "file_analysis", "非表格材料档案",
             "execute_sql", "SQL查询",
-            "query_table_data", "表格查询");
+            "query_table_data", "基础数据");
 
     private final ArtifactProperties props;
 
@@ -425,7 +425,7 @@ public class ArtifactService {
         try (Stream<Path> files = Files.list(dir)) {
             files.filter(p -> p.getFileName().toString().endsWith(".csv"))
                     .filter(p -> lastModified(p) < cutoff)
-                    .forEach(p -> deleteQuietly(p));
+                    .forEach(ArtifactService::deleteQuietly);
         } catch (IOException e) {
             log.debug("产物过期清理失败: {}", e.getMessage());
         }

+ 3 - 7
ai-server/src/main/java/com/zsjz/ai/module/agent/service/AgentService.java

@@ -5,29 +5,26 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.spring.service.impl.ServiceImpl;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
-import com.zsjz.ai.common.constants.PathConst;
 import com.zsjz.ai.common.exception.ServerException;
 import com.zsjz.ai.common.utils.Json;
 import com.zsjz.ai.module.agent.WorkspaceManagerFactory;
+import com.zsjz.ai.module.agent.artifact.ArtifactService;
 import com.zsjz.ai.module.agent.config.EtlProperties;
 import com.zsjz.ai.module.agent.config.SkillRepositoryConfigEntry;
-import com.zsjz.ai.module.agent.config.SkillRepositorySupport;
 import com.zsjz.ai.module.agent.dto.SaveExpertDTO;
 import com.zsjz.ai.module.agent.entity.AgentEntity;
 import com.zsjz.ai.module.agent.entity.AgentModel;
 import com.zsjz.ai.module.agent.followup.FollowupMiddleware;
 import com.zsjz.ai.module.agent.followup.FollowupService;
-import com.zsjz.ai.module.agent.middleware.CaseScopeMiddleware;
 import com.zsjz.ai.module.agent.intent.IntentMiddleware;
 import com.zsjz.ai.module.agent.intent.IntentService;
 import com.zsjz.ai.module.agent.mapper.AgentChatSessionMapper;
 import com.zsjz.ai.module.agent.mapper.AgentMapper;
 import com.zsjz.ai.module.agent.mapper.AgentModelMapper;
 import com.zsjz.ai.module.agent.mapper.SqlQueryMapper;
+import com.zsjz.ai.module.agent.middleware.CaseScopeMiddleware;
 import com.zsjz.ai.module.agent.python.PythonExecutor;
 import com.zsjz.ai.module.agent.rag.RagSchemaService;
-import com.zsjz.ai.module.agent.scaffold.WorkspaceScaffolder;
-import com.zsjz.ai.module.agent.artifact.ArtifactService;
 import com.zsjz.ai.module.agent.tools.*;
 import com.zsjz.ai.module.agent.vo.ExpertVO;
 import com.zsjz.ai.module.govern.serivce.GovernTreeService;
@@ -52,7 +49,6 @@ import java.nio.file.Paths;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Agent 实例管理服务(官方"无状态引擎单例"模式)。
@@ -572,7 +568,7 @@ public class AgentService extends ServiceImpl<AgentMapper, AgentEntity> {
                 1. 表格类工具(execute_sql 与各业务分析工具)的数据结果会自动导出为 CSV 产物文件,与该次工具调用**成对**展示在「过程」详情里,用户可预览前 200 行、下载全量。
                    报告正文如需呈现数据,直接写 Markdown 表格(第一行是表头,用 | 分隔列,前端会渲染为表格):把你要展示的行**完整给出**,不要省略列、不要用"……"截断;全量数据以 CSV 产物为准。
                    ★ 业务口径优先用专用工具:它们的统计口径(未知对手/未知卡号、现金关键词、夜间/连续/敏感通话、大额/共同/相互交易、碰面时间窗口、同住推导、同行比对等)已固化,不要用 execute_sql 手写 SQL 重算同一口径;只有专用工具覆盖不到的场景才自己写 SQL。
-                   ★ 专用工具按业务域分成 6 组:person(人员画像与亲密度)、call(通话明细)、trans(交易明细与资金)、track(轨迹/出行/快递)、otg(全文检索与行为时间轴)、graph(关系图谱)。当前会话默认只装备 person 组。
+                   ★ 专用工具按业务域分成 6 组:person(人员画像)、call(通话明细)、trans(交易明细与资金)、track(轨迹/出行/快递)、otg(全文检索与行为时间轴)、graph(关系图谱)。当前会话默认只装备 person 组。
                      当你要用的工具不在当前可见工具列表里时,先调用 reset_equipped_tools 把需要的组名一起写进 to_activate —— 它是**全量替换**语义,不在列表里的组会被卸载,所以要么把当前还要用的组一并列出,要么用完立刻切回。不要把无关组一起打开,会浪费上下文。
                 2. 展示常规图表(柱状/折线/饼/散点等)时,必须先调用 render_chart 工具校验 option(option 是结构化 JSON 对象,按该工具的 schema 传,不要传 JSON 字符串),再把工具返回的 ECharts option JSON 原样放入 ```echarts 围栏块中,前端会渲染为图表。
                 3. 展示关系图谱/网络图/关联图时,禁止用 render_chart 手写 graph 类型 series(会被拒绝),必须先调用 render_graph 工具(入参结构以该工具的 schema 为准,不要再自己拼结构串),再把工具返回的图谱 JSON 原样放入 ```graph 围栏块中,前端会渲染为可交互力导向图。禁止用文字罗列代替。

+ 3 - 3
ai-server/src/main/java/com/zsjz/ai/module/agent/tools/AgentToolRegistry.java

@@ -103,7 +103,7 @@ public class AgentToolRegistry {
     public static final String GROUP_GRAPH = "graph";
 
     /**
-     * 人员画像与亲密度组
+     * 人物画像组
      */
     public static final String GROUP_PERSON = "person";
 
@@ -142,7 +142,7 @@ public class AgentToolRegistry {
             return "";
         }
         return switch (groupName) {
-            case GROUP_PERSON -> "人员画像与亲密度";
+            case GROUP_PERSON -> "人物画像";
             case GROUP_CALL -> "通话分析";
             case GROUP_TRANS -> "交易与资金分析";
             case GROUP_TRACK -> "轨迹、出行与快递";
@@ -404,7 +404,7 @@ public class AgentToolRegistry {
 
         // ---- 建组并分配工具 ----
         if (enabled.contains(GROUP_PERSON)) createGroup(toolkit, GROUP_PERSON,
-                "人员画像与亲密度分析(24 个工具):人员枚举与分组、通话/交易画像、常联系与常交易 TOP、"
+                "人物画像分析(24 个工具):人员枚举与分组、通话/交易画像、常联系与常交易 TOP、"
                         + "通话与交易汇总、运营商归属、银行卡汇总、月度/年度交易趋势,"
                         + "以及 9 类亲密度行为(大额交易、特殊日期交易/通话、同号绑定、持续通话/交易、同行、夜间通话)。"
                         + "★ 任何「从人出发」的问题都先激活本组:要回答某人的情况,通常得先用 list_person_names "

+ 1 - 1
sql/agent_tool_pack.sql

@@ -56,7 +56,7 @@ COMMENT ON COLUMN agent_tool_pack.is_builtin IS '1=系统内置(全局可见
 
 INSERT INTO agent_tool_pack (id, user_id, name, description, tool_names, is_builtin, create_at, update_at)
 VALUES
-  (1, 1, '人员画像与亲密度', '人员枚举、通话/交易画像、常联系与常交易 TOP、亲密度分析等 12 个工具。',
+  (1, 1, '人物画像', '人员枚举、通话/交易画像、常联系与常交易 TOP、亲密度分析等 12 个工具。',
    '["get_person_call_profile","stat_person_call_station","stat_person_call_top10","stat_call_record_summary","get_person_trans_profile","stat_person_trans_top10","stat_trans_record_summary","get_trans_bank_card_info","stat_trans_amount_trend_month","stat_trans_amount_trend_year","stat_intimacy_summary","list_persons"]',
    1, now(), now()),
   (2, 1, '通话分析', '通话原始明细与夜间、连续、特殊日期敏感通话的汇总与明细,共 7 个工具。',