# AgentHub **Repository Path**: leke_code/agent-hub ## Basic Information - **Project Name**: AgentHub - **Description**: Agent智能体建设仓库,包含多个可直接调用的原子化公共能力,如数据采集、内容生成、内容评审等。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-16 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Data Collection Agent > 报告生成多智能体系统 —— 数据采集智能体模块 > 技术栈:Java 21 · Spring Boot 3.3 · Spring AI Alibaba 1.0 --- ## 项目结构 ``` data-collection-agent/ ├── pom.xml ├── README.md └── src/ ├── main/ │ ├── java/com/report/datacollection/ │ │ ├── DataCollectionApplication.java # 启动类 │ │ ├── DataCollectionController.java # REST API │ │ ├── agent/ │ │ │ ├── BaseAgent.java # Agent 接口契约 │ │ │ ├── DataCollectionInput.java # 主 Agent 输入 DTO │ │ │ ├── DataCollectionAgent.java # 主调度 Agent(并发核心) │ │ │ ├── DataCollectionService.java # 服务门面 │ │ │ └── sub/ │ │ │ ├── RagSubAgent.java # RAG 检索(HyDE + RRF) │ │ │ ├── WebSearchSubAgent.java # 互联网搜索(去重 + LLM 评估) │ │ │ ├── ApiSubAgent.java # 三方接口(LLM 自主选择) │ │ │ └── TavilySearchClient.java # Tavily API 客户端 │ │ ├── aggregator/ │ │ │ └── DataCollectionAggregator.java # 聚合器(冲突检测 + mergedDataMap) │ │ ├── config/ │ │ │ ├── DataCollectionProperties.java # 类型安全配置 │ │ │ ├── VirtualThreadConfig.java # Java 21 虚拟线程 │ │ │ ├── SpringAiConfig.java # ChatClient Bean 配置 │ │ │ └── MetricsConfig.java # Micrometer 指标 │ │ ├── context/ │ │ │ └── ReportContext.java # 全流程共享上下文 │ │ ├── model/ │ │ │ ├── enums/SourceType.java │ │ │ ├── DataMeta.java # 数据元数据 │ │ │ ├── KnowledgeChunk.java # RAG 结果单元 │ │ │ ├── WebSearchResult.java # WEB 结果单元 │ │ │ ├── ApiCallResult.java # API 结果单元 │ │ │ ├── DataCollection.java # 聚合输出 │ │ │ ├── CollectionSummary.java # 统计摘要 │ │ │ ├── IntentResult.java # 意图识别结果(上游输入) │ │ │ ├── TemplateMeta.java # 模板元数据(上游输入) │ │ │ └── AgentLog.java # 执行轨迹日志 │ │ ├── registry/ │ │ │ ├── ApiDefinition.java # 接口注册定义 │ │ │ └── ApiRegistry.java # 接口注册库(YAML 加载) │ │ ├── executor/ │ │ │ └── ApiExecutor.java # HTTP 执行器 │ │ └── exception/ │ │ ├── DataCollectionException.java # 全部失败异常 │ │ ├── SubAgentException.java # 子 Agent 异常 │ │ └── DataConflictWarning.java # 数据冲突警告 │ └── resources/ │ ├── application.yml │ └── config/api-registry.yml # 三方接口注册配置 └── test/ ├── java/com/report/datacollection/ │ ├── agent/ │ │ ├── DataCollectionAgentTest.java # 并发调度 + 容错测试 │ │ ├── ReportContextTest.java # Context 状态管理测试 │ │ └── sub/ │ │ ├── RagSubAgentTest.java # RAG 检索测试 │ │ ├── WebSearchSubAgentTest.java # WEB 搜索测试 │ │ └── ApiRegistryTest.java # 注册库加载测试 │ └── aggregator/ │ └── DataCollectionAggregatorTest.java # 聚合逻辑测试 └── resources/ └── application-test.yml ``` --- ## 快速开始 ### 前置依赖 | 组件 | 版本 | 用途 | |------|------|------| | JDK | 21 | 虚拟线程 | | Maven | 3.9+ | 构建 | | Milvus | 2.3+ | 向量数据库(RAG) | | Redis | 7.x | ReportContext 缓存 | | 通义百炼 API Key | — | LLM + Embedding | | Tavily API Key | — | 互联网搜索 | ### 环境变量 ```bash export DASHSCOPE_API_KEY=your-dashscope-api-key export TAVILY_API_KEY=your-tavily-api-key export MILVUS_HOST=localhost export REDIS_HOST=localhost # 可选:内部接口认证 export SALES_API_KEY=your-internal-api-key export MARKET_API_TOKEN=your-market-token export HR_API_KEY=your-hr-key export FINANCE_OAUTH_TOKEN=your-finance-token ``` ### 启动 ```bash # 编译 mvn clean compile # 运行测试 mvn test # 启动服务 mvn spring-boot:run ``` ### Docker Compose 快速启动依赖 ```yaml version: '3.8' services: milvus: image: milvusdb/milvus:v2.3.4 ports: - "19530:19530" environment: ETCD_ENDPOINTS: etcd:2379 MINIO_ADDRESS: minio:9000 redis: image: redis:7-alpine ports: - "6379:6379" ``` --- ## API 使用 ### 发起数据采集 ```bash POST /api/v1/data-collection/collect Content-Type: application/json { "intent": { "reportType": "TEMPLATE", "topic": "2024年Q3新能源汽车市场分析", "audience": "管理层", "dataScope": "2024年Q3市场数据", "timeRange": { "start": "2024-07-01", "end": "2024-09-30" }, "preferredFormat": "DOCX", "keywords": ["市场规模", "增长率", "竞争格局", "销售量"] }, "templateMeta": null } ``` 响应: ```json { "taskId": "550e8400-e29b-41d4-a716-446655440000", "status": "SUCCESS", "totalResultCount": 18, "missingFields": [], "totalTokenUsage": 2840 } ``` ### Demo 接口 ```bash GET /api/v1/data-collection/demo?topic=2024年Q3新能源汽车市场分析报告 ``` ### 健康检查 ```bash GET /actuator/health GET /actuator/metrics/data_collection.duration GET /actuator/prometheus ``` --- ## 核心设计 ### 三路并发采集流程 ``` DataCollectionAgent.execute() │ ├─── CompletableFuture (虚拟线程) ─── RagSubAgent (15s 超时) │ HyDE 假设文档 → 双路向量检索 → RRF 重排 │ ├─── CompletableFuture (虚拟线程) ─── WebSearchSubAgent (20s 超时) │ 多关键词搜索 → URL 去重 → 时效过滤 → LLM 评估 │ └─── CompletableFuture (虚拟线程) ─── ApiSubAgent (30s 超时) LLM 选接口 → 并行执行 → LLM 处理返回值 CompletableFuture.allOf().join() DataCollectionAggregator.aggregate() → mergedDataMap(可信度优先级合并) → 冲突检测(数值差异 > 20% 警告) → CollectionSummary ctx.setDataCollectionResult(result) ``` ### 容错策略 | 场景 | 处理 | |------|------| | 单路超时 | 记录 missingFields,其他路继续 | | 单路异常 | 日志 + 降级为空列表,流程继续 | | HyDE 生成失败 | 降级为原始主题关键词检索 | | LLM 评估失败 | 降级为原始 Tavily score | | 三路全部失败 | 抛出 DataCollectionException,触发人工干预 | ### 接口注册库扩展 在 `src/main/resources/config/api-registry.yml` 中添加新接口: ```yaml apis: - id: your_api_id name: 接口名称 description: > 接口用途描述(供 LLM 理解,越详细越好) endpoint: https://your-api.com/endpoint method: GET auth: type: api_key header: X-API-Key key_env: YOUR_API_KEY_ENV params: - name: paramName type: string required: true description: 参数说明 example: "示例值" returns: "返回值格式描述" credibility: 0.90 timeout: 10 tags: [your, tags] ``` 重启服务后自动生效,无需修改代码。 --- ## 指标监控 | 指标名 | 类型 | 说明 | |--------|------|------| | `data_collection.duration{sub_agent=rag}` | Timer | RAG 耗时 | | `data_collection.duration{sub_agent=web}` | Timer | WEB 搜索耗时 | | `data_collection.duration{sub_agent=api}` | Timer | API 调用耗时 | | `data_collection.timeout.count{sub_agent=*}` | Counter | 各路超时次数 | | `data_collection.conflict.count` | Counter | 数据冲突次数 | Grafana Dashboard 查询示例: ```promql # 各路采集平均耗时(ms) histogram_quantile(0.95, rate(data_collection_duration_seconds_bucket[5m])) * 1000 # 超时率 rate(data_collection_timeout_count_total[5m]) ```