研究生产力工具

📎 引用文件

本文引用的文件 - README.md - 工具注册表 __init__.py - 网络搜索工具 web_search_tool.py - 网页读取工具 web_reader_tool.py - 文档读取工具 doc_reader_tool.py - 图像视觉分析工具 image_vision_tool.py - 学术论文检索工具 research_papers_tool.py - OCR 引擎调度 engine.py - LLM 视觉 OCR llm_vision_ocr.py - RapidOCR 引擎 rapid_ocr.py - MCP 服务器 mcp_server.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 Vibe-Trading 研究生产力工具,聚焦以下能力:文档阅读与解析、网页抓取与清洗、多引擎网络搜索、图像识别与智能信息抽取、学术论文检索与结构化摘要。通过统一的工具注册与执行框架,将上述能力组合为可复用的工作流,帮助金融研究高效完成资料收集、证据整理与知识沉淀。

项目结构

围绕“工具即服务”的设计,系统以工具注册表为核心,按需发现并挂载本地与远程(MCP)工具;上层通过 MCP 暴露统一接口,供 CLI、Web UI、自动化流程调用。关键路径包括: - 工具注册与发现:自动扫描 src/tools 下的 BaseTool 子类,支持可选的 MCP 工具注入 - 数据获取:web_search、read_url、read_document、analyze_image - 学术检索:research_papers 基于 arXiv/OpenAlex 的结构化提取 - OCR 引擎:可插拔的本地/云端 OCR,自动选择与降级

graph TB A["用户/客户端"] --> B["MCP 服务器"] B --> C["工具注册表"] C --> D["网络搜索工具"] C --> E["网页读取工具"] C --> F["文档读取工具"] C --> G["图像视觉工具"] C --> H["学术论文检索工具"] F --> I["OCR 引擎调度"] I --> J["RapidOCR(本地)"] I --> K["LLM 视觉 OCR(云端)"]

图示来源 - 工具注册表 __init__.py:66-245 - MCP 服务器 mcp_server.py:1060-1112 - OCR 引擎调度 engine.py:118-170

章节来源 - 工具注册表 __init__.py:66-245 - MCP 服务器 mcp_server.py:1060-1112

核心组件

章节来源 - 工具注册表 __init__.py:66-245 - 网络搜索工具 web_search_tool.py:134-349 - 网页读取工具 web_reader_tool.py:61-152 - 文档读取工具 doc_reader_tool.py:384-457 - 图像视觉分析工具 image_vision_tool.py:52-147 - 学术论文检索工具 research_papers_tool.py:1-800

架构总览

系统采用“工具注册表 + 插件式 OCR + 多源数据接入”的架构。MCP 作为对外统一接口,屏蔽底层差异;工具层按职责拆分,保证高内聚低耦合;OCR 引擎通过协议抽象与自动发现机制,支持本地与云端切换。

sequenceDiagram participant U as "用户" participant M as "MCP 服务器" participant R as "工具注册表" participant S as "网络搜索工具" participant W as "网页读取工具" participant D as "文档读取工具" participant O as "OCR 引擎" participant P as "学术论文检索工具" U->>M : 调用 read_document/read_url/web_search M->>R : 查找并执行对应工具 alt 文档读取 R->>D : execute(file_path, pages, min_text_per_page) D->>O : 若 PDF 文本不足则 OCR O-->>D : 返回 OCR 文本 D-->>M : 标准 JSON 信封 else 网页抓取 R->>W : execute(url, no_cache) W-->>M : Markdown 内容 else 网络搜索 R->>S : execute(query, max_results) S-->>M : 标题/链接/摘要 end

图示来源 - MCP 服务器 mcp_server.py:1060-1112 - 工具注册表 __init__.py:66-245 - 文档读取工具 doc_reader_tool.py:133-235 - 网页读取工具 web_reader_tool.py:61-152 - 网络搜索工具 web_search_tool.py:172-349

详细组件分析

文档阅读与 OCR

flowchart TD Start(["开始"]) --> CheckExt{"文件扩展名"} CheckExt --> |PDF| ReadPDF["逐页提取文本"] CheckExt --> |DOCX/XLS/PPTX| ParseOffice["解析 Office 文档"] CheckExt --> |图片| ImageOCR["图像 OCR"] CheckExt --> |文本| ReadText["编码回退读取"] ReadPDF --> Threshold{"文本是否充足?"} Threshold --> |是| Merge["拼接结果"] Threshold --> |否| OCR["调用 OCR 引擎"] OCR --> Merge ParseOffice --> Merge ImageOCR --> Merge ReadText --> Merge Merge --> Envelope["构建 JSON 信封"] Envelope --> End(["结束"])

图示来源 - 文档读取工具 doc_reader_tool.py:133-235 - 文档读取工具 doc_reader_tool.py:384-457 - OCR 引擎调度 engine.py:118-170

章节来源 - 文档读取工具 doc_reader_tool.py:133-235 - 文档读取工具 doc_reader_tool.py:384-457 - OCR 引擎调度 engine.py:118-170

网页抓取

sequenceDiagram participant C as "客户端" participant M as "MCP" participant T as "网页读取工具" participant J as "Jina Reader" C->>M : read_url(url, no_cache) M->>T : execute(url, no_cache) T->>T : 安全校验(主机/IP/凭据) T->>J : GET r.jina.ai/{url} J-->>T : Markdown 内容 T-->>M : 标准 JSON 信封(含 title/content/cached)

图示来源 - 网页读取工具 web_reader_tool.py:24-152

章节来源 - 网页读取工具 web_reader_tool.py:24-152

网络搜索

flowchart TD Q["输入查询"] --> TryIQS{"是否配置 IQS?"} TryIQS --> |是| IQS["调用阿里云 IQS"] TryIQS --> |否| DDGS["使用 ddgs 多引擎搜索"] IQS --> Result{"是否有结果?"} DDGS --> Result Result --> |有| Out["返回结果"] Result --> |无| Fallback["尝试 Sogou/cn.bing 回退"] Fallback --> Out

图示来源 - 网络搜索工具 web_search_tool.py:33-131 - 网络搜索工具 web_search_tool.py:208-349

章节来源 - 网络搜索工具 web_search_tool.py:134-349

图像识别与智能信息抽取

classDiagram class OcrEngine { +name : string +is_cloud : bool +install_hint : string +is_available() bool +recognize(image) string +confidence(image) float? } class RapidOcrEngine { +name = "rapid" +is_cloud = false +is_available() bool +recognize(image) string } class LlmVisionOcrEngine { +name = "llm-vision" +is_cloud = true +is_available() bool +recognize(image) string } OcrEngine <|-- RapidOcrEngine OcrEngine <|-- LlmVisionOcrEngine

图示来源 - OCR 引擎调度 engine.py:34-56 - RapidOCR 引擎 rapid_ocr.py:8-43 - LLM 视觉 OCR llm_vision_ocr.py:157-299

章节来源 - 图像视觉分析工具 image_vision_tool.py:52-147 - OCR 引擎调度 engine.py:118-170 - RapidOCR 引擎 rapid_ocr.py:8-43 - LLM 视觉 OCR llm_vision_ocr.py:157-299

学术论文检索与结构化摘要

sequenceDiagram participant U as "用户" participant M as "MCP" participant T as "学术论文检索工具" participant A as "arXiv/OpenAlex" U->>M : search/read papers M->>T : execute(mode, query/id_list) T->>A : 查询预印本/论文元数据 A-->>T : 标题/摘要/作者/引用 T->>T : 句子切分与模式匹配 T-->>M : 结构化 brief(能力/市场/信号/指标)

图示来源 - 学术论文检索工具 research_papers_tool.py:1-800

章节来源 - 学术论文检索工具 research_papers_tool.py:1-800

依赖关系分析

graph LR Reg["工具注册表"] --> WebSearch["网络搜索工具"] Reg --> WebReader["网页读取工具"] Reg --> DocReader["文档读取工具"] Reg --> Vision["图像视觉工具"] Reg --> Papers["学术论文检索工具"] DocReader --> OCR["OCR 引擎"] OCR --> Rapid["RapidOCR"] OCR --> LLMV["LLM 视觉 OCR"]

图示来源 - 工具注册表 __init__.py:66-245 - 文档读取工具 doc_reader_tool.py:384-457 - OCR 引擎调度 engine.py:118-170

章节来源 - 工具注册表 __init__.py:66-245 - 文档读取工具 doc_reader_tool.py:384-457 - OCR 引擎调度 engine.py:118-170

性能考量

[本节提供通用指导,无需具体文件分析]

故障排查指南

章节来源 - 文档读取工具 doc_reader_tool.py:133-235 - 网页读取工具 web_reader_tool.py:61-152 - 网络搜索工具 web_search_tool.py:172-349 - 图像视觉分析工具 image_vision_tool.py:85-147

结论

Vibe-Trading 的研究生产力工具以统一工具注册为中心,将文档解析、网页抓取、网络搜索、图像识别与学术检索整合为可编排的工作流。通过严格的输入校验、错误降级与结构化输出,确保在复杂网络与数据环境下仍能提供稳定、可审计的研究能力。结合 MCP 暴露的接口,可在 CLI、Web UI 与自动化流程中灵活组合,显著提升金融研究效率。

[本节为总结性内容,无需具体文件分析]

附录

[本节为概念性内容,无需具体文件分析]