“龙虾调研“开发复盘:AI自动研报框架的架构设计、难点落地与工程实践
本文分享了AI研报生成框架"龙虾调研"的开发经验。该框架采用四阶段解耦架构:代码驱动数据采集、AI内容整合、代码渲染报告、模拟持仓闭环。关键技术包括多数据源适配、结构化AI输出、轻量级NLP路由、CSS驱动的PDF渲染系统等。通过三次架构重构,项目从单体脚本发展为支持双模式运行的工程化系统。核心价值在于提供可复用的工程范式,强调数据与AI分离、模板化输出和开发者友好设计。项目开
"龙虾调研"开发复盘:AI自动研报框架的架构设计、难点落地与工程实践
大家好,我是 Lobster Research(龙虾调研)的开发者。本篇从真实开发历程出发,分享一套 AI 研报生成框架从 0 到 1 的架构思路、关键技术难点、落地方案与踩坑经验,面向正在做垂直领域 AI 应用、数据采集、自动化报告、Agent 技能的开发者。
一、项目出发点:解决 AI 应用的普遍痛点
在做多个 AI Agent 项目后,我观察到几个高频问题:
- 大模型擅长理解与生成,但实时/结构化数据获取能力弱,输出容易脱离事实。
- 数据采集脚本稳定可靠,但不具备总结、写作、逻辑整合能力。
- 研报/分析类工具要么封闭黑盒,难以二次开发;要么太零散,无法形成流水线。
- AI 自由生成内容格式不可控,无法直接生成标准 PDF、无法嵌入系统。
- 面向普通用户的工具太重,面向开发者的框架缺少工程化规范。
基于这些问题,我确定了 Lobster Research 的核心思路:
代码负责确定性数据采集,AI 负责理解性分析整合,报告渲染由代码保证稳定输出。
二、整体架构:四阶段分离式设计(核心)
项目最终采用四阶段严格解耦的流水线架构,层与层之间只通过 JSON 通信,不交叉、不渗透。
1. Phase 1:代码驱动数据采集
职责:实时行情、K 线与技术指标、个股/行业/宏观基础数据、多源搜索、市场情绪、新闻资金数据。
输出:固定结构 JSON 文件,存入 output/tasks/任务ID/。
设计原则:
- 所有数据获取由 Python 完成,不依赖任何 AI 能力。
- 统一字段名、统一时间格式、统一涨跌标识、统一异常处理。
- 支持
quick模式跳过耗时采集,提升快报生成速度。
解决的问题:数据不可靠、格式混乱、AI 因数据异常导致写作失败。
2. Phase 2:AI 内容整合
职责:读取 Phase 1 数据 → 按报告模板写作 → 输出 5_agent_report_input.json。
设计原则:
- AI 只做内容填充,不采集、不搜索、不控制格式。
- 采用固定章节模板,强制结构稳定。
- 支持两种模式:
- Agent 模式:外部 Agent 调度填充
- Alone 模式:直接调用 LLM 自动完成
解决的问题:AI 输出结构漂移、内容跑题、无法渲染。
3. Phase 3:代码驱动报告生成
职责:读取 AI 写作结果 → 渲染 HTML → 生成 PDF。
技术栈:Jinja2 + 纯 CSS + Playwright。
样式系统:
- 10 套色板
- 3 种渲染:纯色 / 渐变 / 液态光晕
- 3 种布局:圆角 / 方正 / 极简
解决的问题:报告颜值低、样式不可控、跨平台不一致。
4. Phase 4:模拟持仓与策略进化
职责:基于研报结论自动执行交易决策、记录操作、反思复盘、调整策略参数。
定位:用于展示 Agent 闭环决策能力,非实盘交易建议。
三、核心技术难点与落地实现(高密度细节)
1. 多数据源兼容:统一适配与格式收敛
项目接入新浪财经、腾讯财经、AKShare、证券之星、多引擎搜索等多个来源,面临大量差异:
- 股票代码规则不同(sh/sz/hk/us)
- 字段命名不统一
- K 线复权、缺失值处理不同
- 涨跌颜色规则不同
- 接口返回结构随时间变化
最终方案:适配器模式 + 内部统一 Schema
- 每个数据源独立封装,对外提供相同结构。
- 行情、K 线、资金、新闻分别定义标准结构。
- 上层流程不感知底层数据源,便于后续替换/扩展。
关键处理: - 统一时间戳为北京时间
- 统一涨跌方向:国内市场红涨绿跌
- 缺失数据自动填充或标记,避免流程中断
2. AI 输出稳定化:从自由生成到结构化填充
早期版本直接使用自由 Prompt,出现大量问题:
- 章节混乱、字数波动巨大
- 关键数据遗漏
- 格式不统一,无法渲染 PDF
- 重复、跑题、幻觉
最终方案:外置模板 + 章节式写作
- 设计 29 套报告模板(7 快报 + 22 研报),全部外置 JSON。
- 每个模板固定:标题、章节、要点、字数、数据要求。
- AI 只填充
content字段,不控制结构。 - 优先使用 function calling 输出 JSON,无 FC 则降级为可解析 Markdown。
效果:报告结构稳定性显著提升,可直接进入渲染流程。
3. 轻量级 NLP 路由:不依赖模型的意图识别
需求:用户输入自然语言,自动识别:
- 领域:股票 / 行业 / 大盘 / 科技 / 农业等
- 报告类型:快讯 / 快报 / 研报
最终方案:双层关键词匹配
- 领域路由:
main.json配置关键词集合 - 报告类型路由:按深度词、长度、意图词判断
优势:
- 无 Token 消耗
- 响应速度快
- 可热更新、可调试、可解释
- 不依赖模型状态
优化:持续补充同义词、形近词、口语化表达,提升匹配准确率。
4. PDF 渲染系统:纯 CSS 驱动的高可用样式
需求:美观、稳定、可配置、跨平台一致。
实现方案:
- 使用 CSS 变量定义色板,
data-*属性驱动主题切换。 - liquid 模式使用光晕 + 毛玻璃,仅在支持的渲染环境生效。
- 分页、标题层级、表格、图表容器做专门兼容。
踩坑内容: - Playwright 打印模式下渐变、毛玻璃效果可能失效
- 长表格跨页分裂
- 图片尺寸、字体嵌入导致 PDF 过大
- 不同平台渲染行距差异
解决方案: - 固定页面宽度
- 强制表格分页兼容
- 使用标准字体
- 简化打印模式下的高级特效
5. 双模式运行:Agent 模式 + Alone 模式
为了同时满足嵌入 Agent 平台和独立运行两种场景,设计双模式:
- Skill 模式:作为外部 Agent 技能,等待 Agent 完成 Phase 2。
- Alone 模式:不依赖任何平台,直接调用 LLM 自动跑完全流程。
实现: - 统一入口
main.py - 配置项
system.run_mode切换 - 数据流程、渲染流程完全共用
优势:一套代码支持两种部署形态,开发与生产环境统一。
6. 工程化体系:日志、配置、任务、测试
为支持长期迭代,项目做了完整工程化:
- 日志:LobsterLogger,按天切割,记录关键步骤与异常。
- 配置:所有关键词、模板、路由、API 外置 JSON,不写死代码。
- 任务隔离:每个任务独立目录,互不干扰。
- 测试套件:
test.runner覆盖 CLI、数据采集、样式、报告生成。 - 无状态设计:支持中断、重试、重入,便于服务化部署。
四、三次架构重构:从可用到好用
第一阶段(V0.1–V0.6)
单体脚本 + 自由 Prompt,能跑但不稳定,无法扩展,PDF 样式简陋。
第二阶段(V1.0–V1.6)
拆分数据/AI/渲染模块,加入模板与 CLI,结构更清晰,但不支持 Agent。
第三阶段(V2.0–V2.2)
四阶段架构定型,支持 Agent + Alone 双模式,完善样式系统、模拟持仓、日志与测试,达到可开源、可复用、可二次开发标准。
五、设计中的取舍与权衡
-
优先聚焦国内市场
数据源、股票代码、关键词、提示词均面向 A 股生态,国际化成本较高,后续逐步支持。 -
先广度后深度
先覆盖 23 个领域建立框架,再逐步为各领域补充专业数据与深度逻辑。 -
模板化优于自由生成
为了稳定性与可渲染性,放弃部分灵活性,保证输出可产品化。 -
面向开发者优先
暂不提供 GUI,聚焦 CLI 与 Agent 集成,降低维护成本,提升扩展性。 -
数据与 AI 强解耦
不追求端到端黑盒,明确分工,提升可维护性与问题定位效率。
六、总结
Lobster Research 的核心价值,并非只是提供投资分析能力,而是提供一套可直接复用的工程化范式:
数据采集 → AI 整合 → 报告渲染 → 闭环扩展。
整个开发过程中,最有价值的收获是:
- 垂直 AI 应用的关键不在模型,而在结构、稳定性、工程化。
- 数据层与 AI 层必须清晰分离,才能保证可靠输出。
- 自动化报告必须走模板 + 代码渲染,才能真正产品化。
- 框架类项目一定要做取舍,聚焦场景,才能做到简洁可用。
希望这些真实的架构思路、技术难点与踩坑经验,能为做同类项目的开发者提供一些参考。
项目信息
项目名称:Lobster Research(龙虾调研)
开源地址:https://github.com/hegeo/Lobster-Research
协议:MIT
定位:AI 研报生成框架|Agent 技能|自动化报告工具
更多推荐


所有评论(0)