8890cd28065ea11b7524ab5164314c248d09e1e3
## 改动内容 ### 1. ChatService - Agent 执行日志 在 `executeChat` 方法中添加: ``` ======================================== ========== Agent 执行开始 ========== ======================================== 📝 用户问题: 支付为什么会失败? ---------------------------------------- 🚀 执行 ReactAgent.call() - 自动处理工具调用 ======================================== ========== Agent 执行完成 ========== ======================================== ⏱️ 执行耗时: 1523 ms 📏 最终输出长度: 456 字符 ---------------------------------------- 📤 最终输出内容: 根据知识库的记录,支付失败的主要原因是... ======================================== ``` **关键信息**: - 用户问题 - 执行耗时 - 最终输出长度和内容 --- ### 2. LookupKnowledgeTool - 工具调用详细日志 ``` ======================================== >>> [工具调用] lookup_knowledge >>> 参数: query = "支付为什么会失败?" >>> RequestId: a3b4c5d6 ---------------------------------------- [L0 精确匹配] 完成: matches=0, time=3ms [置信度判断] highConfidence=false, reason=多个或零个匹配 [L1 语义检索] L0非唯一匹配,触发L1语义检索... [L1 语义检索] 完成: matches=1, time=245ms [L1 语义检索] 找到文档: - [1] 文档ID: doc-123, 相似度得分: 0.82 ---------------------------------------- <<< [工具返回] lookup_knowledge <<< 结果: found=true, matchType=semantic_L1, confidence=medium <<< 总耗时: 248ms (L0=3ms, L1=245ms) <<< 返回内容长度: 1234 字符 <<< 内容预览: ## 支付网关错误码定义... ======================================== ``` **关键信息**: - 工具名称和参数 - L0/L1 执行时间和结果 - 匹配文档列表 - 返回结果摘要 --- ## 日志格式说明 ### 符号约定 - `>>>` - 工具调用(入参) - `<<<` - 工具返回(出参) - `***` - Agent 思考过程(暂未实现) - `📝` - 用户输入 - `📤` - Agent 输出 - `⏱️` - 性能指标 ### 日志级别 - `INFO` - 关键节点和结果 - `DEBUG` - 详细的中间状态(已设置但默认不显示) --- ## 使用场景 ### 1. 调试工具调用 ```bash # 查看工具调用详情 grep "工具调用\|工具返回" logs/application.log # 输出示例 >>> [工具调用] lookup_knowledge >>> 参数: query = "ERR_TIMEOUT" <<< [工具返回] lookup_knowledge <<< 结果: found=true, matchType=exact_L0, confidence=high ``` ### 2. 性能分析 ```bash # 查看执行耗时 grep "执行耗时\|总耗时" logs/application.log # 输出示例 ⏱️ 执行耗时: 1523 ms <<< 总耗时: 248ms (L0=3ms, L1=245ms) ``` ### 3. L0/L1 验证 ```bash # 查看检索路径 grep "L0精确匹配\|L1语义检索" logs/application.log # 示例 - L0 命中 [L0 精确匹配] 完成: matches=1, time=3ms [L0 精确匹配] 找到文档: - [1] 标题: 支付网关错误码定义, 路径: api/payment-errors.md [L1 语义检索] L0唯一匹配,跳过L1检索 # 示例 - L1 命中 [L0 精确匹配] 完成: matches=0, time=2ms [L1 语义检索] L0非唯一匹配,触发L1语义检索... [L1 语义检索] 完成: matches=1, time=245ms ``` --- ## 后续优化 ### 可能的增强(未实现) 由于阿里云 ReactAgent 不支持内置监听器,以下功能暂时无法实现: - ❌ Agent 思考过程实时监听(`onStateUpdate`) - ❌ 工具调用前拦截(`onToolCall`) - ❌ 工具返回后拦截(`onToolResponse`) 如需这些功能,需要: 1. 包装每个工具,统一添加日志 2. 或使用支持监听器的 Agent 框架 当前实现已满足基本可观测需求。 --- ## 验证 ```bash # 1. 启动应用 mvn spring-boot:run # 2. 发起对话 curl -X POST http://localhost:9900/api/chat \ -H "Content-Type: application/json" \ -d '{"id":"test","question":"支付为什么会失败?"}' # 3. 查看日志 tail -f logs/application.log | grep -E "Agent|工具|输出" ```
SuperBizAgent
基于 Spring Boot + AI Agent 的智能问答与运维系统
📖 项目简介
企业级智能业务代理系统,包含两大核心模块:
1. RAG 智能问答
集成 Milvus 向量数据库和阿里云 DashScope,提供基于检索增强生成的智能问答能力,支持多轮对话和流式输出。
2. AIOps 智能运维
基于 AI Agent 的自动化运维系统,采用 Planner-Executor-Replanner 架构,实现告警分析、日志查询、智能诊断和报告生成。
🚀 核心特性
- ✅ RAG 问答: 向量检索 + 多轮对话 + 流式输出
- ✅ AIOps 运维: 智能诊断 + 多 Agent 协作 + 自动报告
- ✅ 工具集成: 文档检索、告警查询、日志分析、时间工具
- ✅ 会话管理: 上下文维护、历史管理、自动清理
- ✅ Web 界面: 提供测试界面和 RESTful API
🛠️ 技术栈
| 技术 | 版本 | 说明 |
|---|---|---|
| Java | 17 | 开发语言 |
| Spring Boot | 3.2.0 | 应用框架 |
| Spring AI | - | AI Agent 框架 |
| DashScope | 2.17.0 | 阿里云 AI 服务 |
| Milvus | 2.6.10 | 向量数据库 |
📦 核心模块
SuperBizAgent/
├── src/main/java/org/example/
│ ├── controller/
│ │ └── ChatController.java # 统一接口控制器 ⭐
│ ├── service/
│ │ ├── ChatService.java # 对话服务 ⭐
│ │ ├── AiOpsService.java # AIOps 服务 ⭐
│ │ ├── RagService.java # RAG 服务
│ │ └── Vector*.java # 向量服务
│ ├── agent/tool/ # Agent 工具集
│ │ ├── DateTimeTools.java # 时间工具
│ │ ├── InternalDocsTools.java # 文档检索
│ │ ├── QueryMetricsTools.java # 告警查询
│ │ └── QueryLogsTools.java # 日志查询
│ └── config/ # 配置类
├── src/main/resources/
│ ├── static/ # Web 界面
│ └── application.yml # 应用配置
└── aiops-docs/ # 运维文档库
📡 核心接口
1. 智能问答接口
流式对话(推荐)
POST /api/chat_stream
Content-Type: application/json
{
"Id": "session-123",
"Question": "什么是向量数据库?"
}
支持 SSE 流式输出、自动工具调用、多轮对话。
普通对话
POST /api/chat
Content-Type: application/json
{
"Id": "session-123",
"Question": "什么是向量数据库?"
}
一次性返回完整结果,支持工具调用和多轮对话。
2. AIOps 智能运维接口
POST /api/ai_ops
自动执行告警分析流程,生成运维报告(SSE 流式输出)。
3. 会话管理
POST /api/chat/clear- 清空会话历史GET /api/chat/session/{sessionId}- 获取会话信息
4. 文件管理
POST /api/upload- 上传文件并自动向量化GET /milvus/health- Milvus 健康检查
⚙️ 核心配置
application.yml
server:
port: 9900
# Milvus 向量数据库
milvus:
host: localhost
port: 19530
# 阿里云 DashScope
spring:
ai:
dashscope:
api-key: "${DASHSCOPE_API_KEY}" // 环境变量
# RAG 配置
rag:
top-k: 3
model: "qwen3-max"
# 文档分片
document:
chunk:
max-size: 800
overlap: 100
环境变量
export DASHSCOPE_API_KEY=your-api-key
🚀 快速开始
1. 环境准备
# 设置 API Key
export DASHSCOPE_API_KEY=your-api-key
2. 启动应用
方法一: 手动启动
1.先启动向量数据库
docker compose up -d -f vector-database.yml
2.启动服务
mvn clean install
mvn spring-boot:run
方法二:一键启动
make init # 会自动启动向量数据库并上传运维文档到向量库
3. 使用示例
Web 界面
http://localhost:9900
命令行
# 上传文档
curl -X POST http://localhost:9900/api/upload \
-F "file=@document.txt"
# 智能问答
curl -X POST http://localhost:9900/api/chat \
-H "Content-Type: application/json" \
-d '{"Id":"test","Question":"什么是向量数据库?"}'
# 健康检查
curl http://localhost:9900/milvus/health
🏗️ Phase 1: 基础设施搭建(已完成)
架构概览
Phase 1 完成了项目的基础设施搭建,包括:
- ✅ 数据持久化层(MySQL + JPA + Flyway)
- ✅ 会话管理(Redis)
- ✅ 向量索引(Milvus 集成)
- ✅ 文档管理服务(上传/查询/删除)
- ✅ 统一异常处理
- ✅ RESTful API 接口
本地开发环境
前置要求
- Java 17+
- Maven 3.8+
- Docker & Docker Compose(用于本地数据库)
快速开始
1. 启动依赖服务
# 启动 MySQL + Redis + Milvus(本地开发)
docker-compose up -d
# 查看服务状态
docker-compose ps
2. 配置应用
复制 src/main/resources/application.yml 并根据需要修改:
spring:
datasource:
url: jdbc:mysql://localhost:3306/super_biz_agent
username: superbiz
password: superbiz123
data:
redis:
host: localhost
port: 6379
password: redis123
milvus:
host: localhost
port: 19530
3. 运行应用
# 编译
mvn clean compile
# 运行测试
mvn test
# 启动应用
mvn spring-boot:run
应用将在 http://localhost:9900 启动。
数据库迁移
Flyway 会自动执行数据库迁移:
src/main/resources/db/migration/
├── V001__create_diagnosis_record.sql
├── V002__create_case_library.sql
└── V003__create_api_document.sql
API 文档
文档管理接口:
# 上传文档(仅支持 .md 和 .txt)
POST /api/documents/upload
Content-Type: multipart/form-data
# 查询文档
GET /api/documents/{docId}
GET /api/documents/status/{status}?page=0&size=20
GET /api/documents/faultSource/{faultSource}
# 删除文档
DELETE /api/documents/{docId}
健康检查:
# Milvus 连接测试
mvn test -Dtest=SimpleMilvusTest
# MySQL 连接测试
mvn test -Dtest=MySQLConnectionTest
# Redis 连接测试
mvn test -Dtest=RedisConnectionTest
项目结构
com.superbiz.agent/
├── controller/ # REST 控制器
│ ├── ChatController.java
│ ├── DocumentController.java
│ └── FileUploadController.java
├── service/ # 业务逻辑层
│ ├── DocumentManagementService.java
│ ├── TextExtractorService.java
│ ├── session/ # 会话管理
│ └── ...
├── repository/ # 数据访问层
│ ├── ApiDocumentRepository.java
│ ├── CaseLibraryRepository.java
│ └── DiagnosisRecordRepository.java
├── domain/ # 领域模型
│ ├── entity/ # JPA 实体
│ ├── model/ # 数据模型
│ └── enums/ # 枚举类
├── dto/ # 数据传输对象
├── exception/ # 异常处理
│ ├── GlobalExceptionHandler.java
│ ├── SessionNotFoundException.java
│ └── DocumentProcessException.java
└── config/ # 配置类
待办事项
- 向量化索引实现(VectorIndexService.indexDocumentChunks)
- 混合检索工具(精确匹配 + 语义检索 + RRF 融合)
- 文档管理集成测试
技术决策
- 包名重构:
org.example→com.superbiz.agent - 文本格式:仅支持 Markdown (.md) 和纯文本 (.txt),其他格式需外部转换服务
- 分块策略:使用 DocumentChunkService 的智能分块(按标题、段落边界)
- 向量数据库:生产环境推荐 Zilliz Cloud,本地开发可用 Docker Milvus
版本: v1.0.0
作者: chief
许可证: MIT
Languages
Java
61.2%
JavaScript
23.9%
CSS
8.2%
Makefile
3.8%
HTML
2.9%