# Intro 以下是`mis-agent`项目架构以及目录结构。 ## 核心技术栈 | 名称 | 版本 | 官方文档 | Github | |:-----|:-----|:-----|:-----| |Java|OpenJDK21|-|-| |SpringBoot|3.2.9|https://docs.spring.io/spring-boot/docs/3.2.9/reference/html|https://github.com/spring-projects/spring-boot/tree/v3.2.9| |SpringFramework|6.1.12|https://docs.spring.io/spring-framework/reference/6.2/index.html|https://github.com/spring-projects/spring-framework/tree/v6.1.12| |rocketmq-spring-boot-starter|2.2.3|https://rocketmq.apache.org/zh/docs/4.x|https://github.com/apache/rocketmq-spring/tree/rocketmq-spring-all-2.2.3| |rocketmq-client|4.9.8|-|https://github.com/apache/rocketmq/tree/rocketmq-all-4.9.8| |mybatis-plus|3.5.7|https://baomidou.com/introduce/|https://github.com/baomidou/mybatis-plus/tree/v3.5.7| |MySQL|8.0.25|https://dev.mysql.com/doc/refman/8.0/en/|https://github.com/mysql/mysql-server/tree/mysql-8.0.25| |Redis|8.0+|-|-| |redisson-spring-boot-starter|3.34.1|https://redisson.pro/docs/integration-with-spring/#usage|https://github.com/redisson/redisson/tree/redisson-3.34.1/redisson-spring-boot-starter/src/main| |agentscope-java|1.0.11|https://java.agentscope.io/v1/zh/docs/task/agent-as-tool.html|https://github.com/agentscope-ai/agentscope-java/tree/v1.0.11| |spring-ai-alibaba|1.1.2.2|https://java2ai.com/docs/overview|https://github.com/alibaba/spring-ai-alibaba/tree/v1.1.2.2| |spring-ai|1.1.2|https://docs.spring.io/spring-ai/reference/1.1/index.html|https://github.com/spring-projects/spring-ai/tree/v1.1.2| ## 代码编写守则 - 代码书写规范:https://git.jkwlstv.cn/doc/prompts/raw/branch/main/clean_java_code_rules.md - ORM实体类示例:https://git.jkwlstv.cn/doc/prompts/raw/branch/main/example_entity.md - 枚举类示例:https://git.jkwlstv.cn/doc/prompts/raw/branch/main/example_enum.md - SQL示例:https://git.jkwlstv.cn/doc/prompts/raw/branch/main/example_mysql_ddl.md - 书写HTTP接口文档示例:https://git.jkwlstv.cn/doc/prompts/raw/branch/main/example_rest_api_doc.md - DTO/VO示例:https://git.jkwlstv.cn/doc/prompts/raw/branch/main/example_dto_bean.md ## 目录结构 ### 主目录 ```text mis-modules\mis-agent\src\main\ ├── java # Java源文件 └── resources └── mapper # Mybatis Mapper XML └── application.yml # 配置文件 ``` ### 智能体 ```text com\lcfc\agent\agents\ ├── a2a # a2a agent ├── config # Spring配置类 ├── constants # 常量类 ├── context # 自定义的上下文载体类 ├── controller # SpringWeb控制器 ├── dubbo # Dubbo接口实现类 ├── enums # 枚举类 ├── events # Spring事件消息载体, 定义ApplicationEventPublisher.publishEvent的Payload ├── mapper # Mybatis Mapper 接口 ├── multiagent # 多智能体,采用agentscope-java的Agent AS Tool架构 ├── saa # 单智能体,采用spring-ai-alibaba的方案 ├── service # CRUD业务逻辑接口 │ └── impl # CRUD业务逻辑接口实现类 ├── util # 工具类 ├── validator # 封装复杂的/可复用的验证工具 ├── domain # 数据库实体类 ├── DTO # DTO └── VO # VO ``` ### 事件发布订阅 目的是摆脱对`ApplicationEventPublisher`的依赖,在非`springbean`对象中简单的使用发布订阅模式。 ```text com\lcfc\agent\eventhub\ ├── MisAgentEventHub.java # 通过init方法注册监听器,使用broadcast推送事件 └── MisAgentEventListener.java # 所有监听器都必须实现该接口 ``` ### 智能体记忆 管理智能体的长期记忆。 ```text com\lcfc\agent\memory\ ├── UserLongTermChannel.java # 长期记忆组件的通道枚举,例如hindsight ├── UserLongTermMemoryClient.java # 用户级别长期记忆的客户端接口 ├── UserLongTermMemoryConfig.java # 用户级别长期记忆的配置 └── UserLongTermMemoryCtl.java # 用户级别长期记忆的控制类 ``` ### 智能体监控 收集智能体运行时调用了哪些tool、使用了哪些Skill、触发了哪些工作流、查询了哪些知识库、消耗了多少token等数据。 ```text com\lcfc\agent\monitor\ ├── AgentChatMetricsCtx.java # 智能体监控数据的上下文对象 ├── AgentChatMetricsFinishEvent.java # 智能体监控数据收集完成事件消息载体 ├── AgentChatMetricsFinishListener.java # 智能体监控数据收集完成事件监听器 ├── IAgentChatMetricsConsumer.java # 消费智能体监控数据上下文对象的接口 ├── MisAgentChatMetricsCtl.java # 管理多智能体和单智能体监控上下文对象的控制类 └── MisMcpToolMetadataCtl.java # 管理多智能体和单智能体MCP工具元数据的控制类 ``` ### 对于agentscope-java的封装 提炼使用agentscope-java构建智能体可复用的能力。 ```text com\lcfc\agent\scope\ ├── AgentScopeAgentCtl.java # 构建ReActAgent.Builder和A2aAgent.Builder对象的控制类 ├── AgentScopeChatUsageUtils.java # 计算Token消耗的工具类 ├── AgentScopeMemoryCtl.java # 管理官方提供的AutoContextMemory自动压缩上下文控制类 ├── AgentScopeModelCtl.java # 控制agentscope-java默认使用的聊天模型 ├── AgentScopeMsgCtl.java # 管理智能体输入或输出消息,例如查询知识库或者保存用户输入或者智能体输出的消息,或者创建一个会话窗口ID ├── AgentScopeMsgUtils.java # 格式化Msg的工具类 ├── AgentScopeSkillCtl.java # 管理Skill的控制类 ├── AgentScopeToolCtl.java # 管理Tool以及MCPTool的控制类 ├── KbReferenceCtl.java # 引用的知识库控制类 └── KbSearchCtl.java # 知识库搜索控制类 ``` ### 管理Skill ```text com\lcfc\agent\skills\ ├── BaseSkillToolsExecutor.java # 执行Skill中的脚本工具类父类 ├── AgentScopeSkillTools.java # 基于agentscope-java封装执行Skill中脚本的Tools ├── SpringAiSkillTools.java # 基于spring-ai封装执行Skill中脚本的Tools ├── AgentSkillMetadataHandler.java # 在磁盘文件记录存储了多少个Skill,包括技能ID和名称 ├── AgentSkillResourceHandler.java # 负责Skill静态资源的下载、解压、删除 ├── AgentSkillRuntimeHandler.java # 每个会话都会拷贝用到的Skill资源到临时目录,该类负责临时目录的创建与删除 ├── AgentSkillRuntimeConfigHandler.java # Skill包含自定义配置,该类管理运行时自定义配置的创建、读取、删除 ├── AgentSkillSessionCache.java # 管理智能体运行时SKill临时目录,包括自动续期与超时,超时会自动清理,避免磁盘空间浪费 ├── RemoveSkillConsumer.java # 处理智能体解绑了某个skill的事件/服务端Skill资源被删除事件 ├── SkillRemoveConsumer.java # ? ├── SkillResourceChangeConsumer.java # 处理Skill资源更新事件 ├── SkillStateChangeConsumer.java # 处理Skill状态变更事件(禁用/启用) ├── AgentSkillRuntimeConfig.java # 智能体运行时Skill配置,例如:临时目录的根目录、过期时长等 └── AgentSkillResourceConfig.java # Skill资源配置,例如:静态资源的根目录、最多存放的静态资源数量等 ``` ### 公共工具包 ```text com\lcfc\agent\utils\ └── TransactionTaskTemplate.java # 编程式Spring事务模板 ``` ### 项目数据统计相关 ```text com\lcfc\agent\stats\ ├── api # Controller ├── service # Service ├── conf # 配置类 ├── domain │ ├── dto # DTO │ ├── vo # VO │ ├── enums # Enum │ ├── entity # Entity │ └── mapper # Mapper Java源文件 ├── mq │ ├── event # 消息载体 │ └── consumer # 监听器 └── resources └── mapper # Mapper XML文件 (位于src/main/resources/mapper) ```