# DL-Invest **Repository Path**: Dlow71/dl-invest ## Basic Information - **Project Name**: DL-Invest - **Description**: 基于多层AI Agent的Web3快讯投资分析系统,自动从Odaily快讯中提取代币并给出BUY/SELL/HOLD投资建议(开发中)。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-23 - **Last Updated**: 2025-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web3 自主投资分析 Agent ## 项目简介 DL-Invest 是一个**Web3投资分析系统**,通过多层AI Agent协作框架,实现从快讯监控、实体提取、投资分析到知识增强的全链路自动化。系统集成向量检索(RAG)和知识图谱能力,支持多个大语言模型的灵活接入,提供实时分析和监控能力。 ### 核心能力 - **多Agent协作**: 三层Agent架构(EntityAgent → InvestmentAgent → LeaderAgent)实现分工协作和结果聚合 - **智能实体提取**: 从快讯文本精准识别代币、机构、技术亮点等关键实体 - **投资价值判断**: 结合实时行情、历史知识、市场情绪进行多维分析,给出明确的BUY/SELL/HOLD建议 - **知识增强检索**: 集成PostgreSQL pgvector实现RAG语义搜索,补充上下文信息(Neo4j知识图谱开发中) - **实时监控**: 支持定时任务和异步队列,自动发现和分析新快讯 - **多源数据融合**: CoinGecko、Tavily、Web搜索等工具的智能集成和降级策略 ## 核心目标 - **投资分析准确率**: ≥ 90% - **代币命中准确率**: ≥ 90% - **截止时间**: 2025年11月23日 14:00 ## 技术栈 ### 后端框架 - **Python**: 3.12(严格类型注解) - **FastAPI**: Web框架与API服务 - **SQLAlchemy**: ORM与数据库管理 - **Pydantic**: 数据验证和配置管理 - **Agno**: 多Agent协作框架 ### 数据库与存储 - **PostgreSQL**: 主数据库(快讯、分析结果、任务队列) - **pgvector**: 向量扩展,支持语义搜索 - **Neo4j**: 知识图谱存储(开发中,暂未完成模块对接) - **Redis/RabbitMQ**: 消息队列与任务分发 ### AI与搜索 - **OpenAI API**: GPT系列模型(官方服务) - **硅基流动**: OpenAI兼容接口(国内优化) - **Google Gemini**: 多模态AI能力 - **Tavily API**: 专业Web搜索服务 - **DuckDuckGo**: 备用搜索引擎 - **CoinGecko API**: 加密货币行情数据 ### 开发工具 - **httpx**: 异步HTTP客户端 - **BeautifulSoup4**: HTML解析与数据提取 - **APScheduler**: 定时任务调度 - **Loguru**: 日志系统(支持彩色输出和文件轮转) - **YAML**: Prompt配置管理 ## 项目结构 ``` DL-Invest/ ├── app/ # 应用主目录 │ ├── main.py # FastAPI入口与应用启动 │ ├── config.py # 中央配置管理(环境变量驱动) │ │ │ ├── db/ # 数据库模块 │ │ ├── base.py # SQLAlchemy Declarative Base │ │ ├── session.py # 数据库会话管理 │ │ └── models/ # ORM数据模型 │ │ ├── news.py # Odaily快讯表 │ │ ├── analysis.py # 投资分析结果表 │ │ ├── token_analysis.py # 代币分析详情表 │ │ ├── task.py # 任务队列表(支持重试) │ │ └── rootdata.py # Rootdata项目表 │ │ │ ├── schemas/ # Pydantic数据模型(请求/响应) │ │ ├── common.py # 通用数据结构 │ │ ├── news.py # 快讯相关模型 │ │ └── analysis.py # 分析结果模型 │ │ │ ├── agents/ # AI Agent核心模块 │ │ ├── config.py # Agent配置(provider、model等) │ │ ├── entity_agent.py # 实体提取Agent(代币、机构等) │ │ ├── investment_agent.py # 投资分析Agent(单代币深度分析) │ │ ├── leader_agent.py # LeaderAgent(多Agent协调聚合) │ │ ├── providers/ # LLM提供商适配层 │ │ │ ├── openai.py # OpenAI接口 │ │ │ ├── gemini.py # Google Gemini接口 │ │ │ └── custom.py # 自定义兼容接口 │ │ └── tools/ # Agent工具库 │ │ ├── base_tool.py # 工具基类 │ │ ├── token_search.py # 代币查询(CoinGecko + 兜底) │ │ ├── web_search.py # Web搜索(Tavily) │ │ ├── rag_search.py # RAG知识检索 │ │ └── knowledge_graph_tool.py # 知识图谱查询 │ │ │ ├── services/ # 业务逻辑服务层 │ │ ├── ingest_news.py # Odaily快讯爬虫服务 │ │ ├── monitor.py # 实时监控服务(APScheduler) │ │ ├── rag_service.py # RAG索引与检索管理 │ │ └── knowledge_graph_service.py # 图谱构建与查询 │ │ │ ├── routers/ # FastAPI路由(API端点) │ │ ├── news.py # 快讯相关接口 │ │ ├── analysis.py # 分析相关接口 │ │ ├── monitor.py # 监控相关接口 │ │ └── chat.py # 对话相关接口 │ │ │ ├── mq/ # 消息队列模块 │ │ ├── producer.py # 任务发布者 │ │ └── consumer.py # 任务消费者 │ │ │ ├── workers/ # 后台Worker进程 │ │ └── analysis_worker.py # 异步分析任务Worker │ │ │ ├── utils/ # 工具函数 │ │ ├── logger.py # 日志配置 │ │ ├── exceptions.py # 自定义异常类 │ │ └── enums.py # 枚举定义(错误码、状态等) │ │ │ └── prompts/ # Agent Prompt配置 │ ├── entity_agent.yaml # 实体提取Prompt │ ├── investment_agent.yaml # 投资分析Prompt │ └── leader_agent.yaml # 协调Prompt │ ├── scripts/ # 脚本目录 │ ├── run_ingest.py # 手动触发快讯抓取 │ ├── run_monitor.py # 启动实时监控 │ └── test_accuracy.py # 准确率评测脚本 │ ├── data/ # 数据目录 │ └── token_whitelist.json # 代币白名单 │ ├── logs/ # 日志目录 ├── tests/ # 测试目录 ├── plan-docs/ # 项目规划文档 ├── .claude/ # Claude配置 ├── .env.example # 环境变量模板 ├── requirements.txt # Python依赖 └── README.md # 项目文档 ``` ## 快速开始 ### 🐳 Docker部署(推荐) **最简单的部署方式,5分钟搞定!** ```bash # 1. 配置环境变量 cp .env.docker.example .env.docker vim .env.docker # 配置API密钥 # 2. 启动所有服务 docker-compose up -d # 3. 查看日志 docker-compose logs -f app # 4. 访问API文档 open http://localhost:8000/docs ``` **或使用Makefile简化命令:** ```bash # 开发环境(支持代码热重载) make dev-up # 生产环境 make build && make up # 查看日志 make logs # 停止服务 make down ``` **详细部署指南**: 📖 [Docker部署指南.md](./Docker部署指南.md) --- ### 💻 本地开发部署 #### 1. 环境准备 确保已安装: - Python 3.12+ - PostgreSQL 14+ (带pgvector扩展) - Redis 7+ - Neo4j 5+ (可选) #### 2. 安装依赖 ```bash # 创建虚拟环境 python3 -m venv venv # 激活虚拟环境 # macOS/Linux: source venv/bin/activate # Windows: # venv\Scripts\activate # 安装依赖 pip install -r requirements.txt ``` #### 3. 配置环境变量 ```bash # 复制环境变量模板 cp .env.example .env # 编辑.env文件,填入配置 # - 数据库连接信息 # - OpenAI API Key # - 其他配置项 ``` #### 4. 初始化数据库 ```bash # 创建PostgreSQL数据库 createdb dl_invest # 启用pgvector扩展 psql -d dl_invest -c "CREATE EXTENSION IF NOT EXISTS vector;" # 初始化表结构(启动应用时自动创建) python3 -m app.main ``` #### 5. 执行数据库迁移 ```bash # 执行Alembic迁移(创建表结构) alembic upgrade head # 查看迁移状态 alembic current ``` #### 6. 启动应用 ```bash # 开发模式 python3 -m app.main # 或使用uvicorn uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` 访问 http://localhost:8000/docs 查看API文档。 --- ## 核心功能 ### 1️⃣ 快讯数据获取与管理 - **自动爬虫**: 从Odaily快讯页定期获取最新消息,支持批量和增量抓取 - **智能去重**: 基于Odaily ID进行唯一性约束,避免重复处理 - **详情补充**: 异步爬取文章详细内容和补充元数据 - **数据清洗**: 去除HTML标签、富文本格式,提取纯文本内容 - **已完成**: ✅ 完整的爬虫实现,支持自定义频率和重试机制 ### 2️⃣ 多层Agent协作分析 - **EntityAgent**: 从快讯文本中精准提取代币、机构、技术概念等关键实体 - 使用NER思路进行结构化信息提取 - 自动关联代币符号和名称,提高准确率 - **InvestmentAgent**: 对单个代币进行多维度投资分析 - 结合实时行情数据(价格、市值、流动性) - 分析项目基本面、市场前景、风险因素 - 给出清晰的BUY/SELL/HOLD/IGNORE建议 - 包含置信度评分(0-100) - **LeaderAgent**: 整合多个代币分析结果 - 聚合单代币结果为快讯整体投资价值判断 - 生成综合分析报告和投资建议 - 记录分析过程和决策依据 - **已完成**: ✅ 三层Agent框架完整实现,支持并行和串行执行 ### 3️⃣ 智能工具集成 - **TokenSearchTool**: 代币实时行情查询 - 集成CoinGecko API获取权威行情数据 - 智能兜底机制:API失败时使用本地缓存或硬编码数据 - 支持5分钟TTL缓存,优化性能和API配额 - **WebSearchTool**: 互联网信息搜索 - Tavily API集成(专业Web搜索) - DuckDuckGo备用方案 - **RAGSearchTool**: 知识库语义检索(调试中) - PostgreSQL + pgvector向量检索 - 支持阈值过滤和相似度排序 - 🚧 注意:RAG功能需要调试后联调整合,暂时不建议在生产环境使用 - **KnowledgeGraphTool**: 图谱关系查询(开发中) - Neo4j实体和关系查询 - 支持复杂的图谱模式匹配 - ⚠️ 注意:知识图谱模块暂未完成对接,当前不可用 - **已完成**: ✅ TokenSearch、WebSearch工具完整实现,支持自动降级和错误恢复 ### 4️⃣ 实时监控与自动化 - **定时监控**: APScheduler集成,支持自定义监控间隔(10-30秒) - **快讯发现**: 自动检测新发布的快讯 - **任务队列**: Redis/RabbitMQ支持,可靠的任务分发 - **异步处理**: Worker进程并行分析多条快讯,支持并发控制 - **重试机制**: 失败任务自动重试,支持指数退避 - **已完成**: ✅ 完整的监控服务,支持启动/停止/状态查询 ### 5️⃣ RAG知识库系统(调试中) - **向量存储**: 使用PostgreSQL pgvector扩展 - **知识导入**: 支持Rootdata项目白皮书、Odaily分析报告等批量导入 - **分块策略**: 可配置的文本分块大小和重叠,优化检索精度 - **语义搜索**: 基于向量相似度的智能检索 - **开发状态**: 🚧 RAG基础框架已搭建,需要调试后联调整合,暂时不建议在生产环境使用 - **注意**: 当前版本的RAG功能可能存在稳定性问题,建议先使用WebSearch替代 ### 6️⃣ 知识图谱(开发中) - **实体关系图**: 使用Neo4j构建项目、代币、机构、公链等知识图谱 - **关系类型**: 投资关系、发行关系、技术合作、融资关系等 - **图谱查询**: 支持复杂的Cypher查询和路径分析 - **开发状态**: 🚧 基础框架已搭建,但模块对接暂未完成,存在已知问题 - **注意**: 当前版本暂不建议使用知识图谱功能,建议使用RAG检索替代 ## 系统架构 ### 数据流 ``` 快讯来源(Odaily) ↓ [爬虫服务] → 数据清洗 → PostgreSQL (news表) ↓ [监控服务] → 发现新快讯 → 创建分析任务 → 任务队列 ↓ [Worker进程] → 分析任务 ↓ LeaderAgent 协调 ↓ ├─→ EntityAgent(实体提取) │ ↓ │ 提取代币列表 │ ↓ └─→ InvestmentAgent(并行分析每个代币) ├─→ TokenSearchTool(实时行情) ├─→ RAGSearchTool(历史知识) └─→ WebSearchTool(互联网信息) ↓ 生成单代币分析结果 ↓ LeaderAgent聚合结果 → 整体投资建议 ↓ 存储分析结果 → PostgreSQL (analysis表) ``` ### 关键设计 - **多Provider支持**: 灵活切换OpenAI、硅基流动、Gemini等LLM服务 - **错误处理**: 统一的BizException体系,支持错误码和详细日志 - **配置管理**: 基于环境变量的中央配置,支持开发/生产环境切换 - **Prompt管理**: YAML配置文件管理Prompt模板,支持版本控制和A/B测试 - **性能优化**: 代币信息5分钟缓存、并发限制、异步处理 - **日志系统**: Loguru集成,彩色化输出,文件轮转,生产级别的日志管理 ## 技术亮点 ### 1. 完善的降级与容错机制 - **CoinGecko API失败**:自动切换到本地缓存或基于2024年11月真实市场数据的兜底值 - **Web搜索失败**:Tavily失败时自动降级到DuckDuckGo - **任务重试**:支持指数退避的自动重试机制 - **错误隔离**:单个代币分析失败不影响整体任务 ### 2. 灵活的AI Provider架构 - 统一的Provider接口,支持无缝切换LLM服务 - 支持自定义base_url,兼容OpenAI API协议的第三方服务 - 针对不同Provider的特定优化(如硅基流动的国内网络优化) - 配置化的模型选择和参数调优 ### 3. 生产级日志与监控 - 结构化日志输出,便于日志分析和告警 - 彩色化控制台输出,提升开发调试体验 - 自动日志轮转和保留策略 - 关键操作的详细执行日志,支持问题追溯 ### 4. 类型安全与代码质量 - 严格的Python类型注解(Type Hints) - Pydantic数据验证,确保数据一致性 - 统一的异常处理和错误码定义 - 清晰的分层架构(Router → Service → Agent → Tool) ### 5. Prompt工程与配置化 - YAML配置文件管理Prompt模板 - 支持动态变量替换和模板继承 - 版本控制友好,便于Prompt迭代优化 - 支持多语言Prompt和A/B测试 ## API接口 ### 快讯相关 - `GET /api/v1/news` - 获取快讯列表 - `POST /api/v1/news/ingest` - 手动抓取快讯 ### 分析相关 - `POST /api/v1/analysis/analyze` - 分析指定快讯 - `GET /api/v1/analysis/{id}` - 获取分析结果 - `GET /api/v1/analysis/list` - 获取分析列表 ### 监控相关 - `POST /api/v1/monitor/start` - 启动监控 - `POST /api/v1/monitor/stop` - 停止监控 - `GET /api/v1/monitor/status` - 查看监控状态 ## 数据库设计 ### news表 存储Odaily快讯数据 - `id`: 主键 - `odaily_id`: Odaily原始ID(唯一索引) - `title`: 标题 - `content`: 内容 - `published_at`: 发布时间 - `source_url`: 来源URL - `extra_metadata`: 额外元数据(JSONB) - `created_at`: 创建时间 ### analysis表 存储分析结果 - `id`: 主键 - `news_id`: 关联快讯ID - `is_valuable`: 是否有投资价值 - `overall_direction`: 整体方向(BUY/SELL/HOLD/IGNORE/UNKNOWN) - `overall_reason`: 分析说明 - `model_name`: 使用的模型 - `status`: 状态(SUCCESS/FAILED) - `raw_output`: 原始输出(JSONB) - `logs`: 日志(JSONB) ### token_analysis表 存储代币分析 - `id`: 主键 - `analysis_id`: 关联分析ID - `symbol`: 代币符号 - `name`: 代币名称 - `direction`: 投资方向 - `confidence`: 置信度(0-100) - `reason`: 分析原因 - `price_now`: 当前价格 - `market_cap`: 市值 - `vol_24h`: 24小时交易量 ### odaily_task表 任务队列 - `id`: 主键 - `news_id`: 关联快讯ID - `status`: 状态(PENDING/RUNNING/SUCCESS/FAILED) - `error`: 错误信息 - `attempts`: 尝试次数 ## 开发规范 详见 `.windsurf` 配置文件和 `plan-docs/PROJECT_PLAN_AGENT.md` ### 核心原则 1. 使用类型注解 2. 函数职责单一 3. 配置通过环境变量管理 4. 日志提示语使用中文 5. 异常使用BizException 6. 错误码定义在ErrorCodeEnum ## 准确率评测 运行评测脚本: ```bash python3 scripts/test_accuracy.py ``` 评测指标: - **投资分析准确率**: 投资方向是否正确 - **代币命中准确率**: 是否准确提取所有相关代币 ## 项目进展 ### ✅ 已完成 - [x] 项目框架搭建(FastAPI + SQLAlchemy + Pydantic) - [x] 数据库模型设计(news、analysis、token_analysis、task等) - [x] Odaily爬虫实现(支持批量和增量抓取) - [x] Entity Agent实现(结构化实体提取) - [x] Investment Agent实现(多维度投资分析) - [x] Leader Agent实现(多Agent协调聚合) - [x] 代币行情查询工具(CoinGecko + 智能兜底) - [x] Web搜索工具(Tavily + DuckDuckGo) - [ ] RAG检索工具(pgvector向量搜索 - 调试中,需要联调整合) - [ ] 知识图谱工具(Neo4j查询 - 开发中,暂未完成对接) - [x] API路由层(快讯、分析、监控接口) - [x] 实时监控服务(APScheduler定时任务) - [x] 消息队列与Worker(异步分析任务) - [x] 日志系统(Loguru集成) - [x] 多Provider支持(OpenAI、硅基流动、Gemini) - [x] 错误处理体系(BizException + 错误码) ### 📋 当前重点 - 投资分析准确率优化(目标≥90%) - 代币命中准确率优化(目标≥90%) - Bug修复和稳定性提升 - 性能调优和并发优化 ### 🚧 开发中功能 - [ ] RAG知识库系统的调试与联调整合 - [ ] RAG检索工具与Agent的稳定性优化 - [ ] 知识图谱(Neo4j)模块对接与调试 - [ ] 知识图谱工具与Agent的集成 ## 注意事项 1. **数据迁移**: AI不负责数据迁移,完成任务后会告知数据库修改内容 2. **测试**: AI不编写测试文件,由开发者手动测试 3. **安全**: 不要在代码中硬编码API Key等敏感信息 4. **性能**: 注意控制并发分析数量,避免超出API限制 ### 🔗 API文档 启动应用后访问: - Swagger UI: http://localhost:8777/docs - ReDoc: http://localhost:8777/redoc ## License MIT ## 联系方式 如有问题,请联系项目负责人。