跳转至

SecRAG — 券商投研知识问答 Agent

角色个人独立项目 状态架构验证完成 技术栈LangGraph · ChromaDB · FastAPI 源码GitHub ↗

非任何客户定制开发,不涉及任何客户保密信息。

项目一句话

SecRAG 是一个面向券商投研场景的 Agentic RAG 个人项目。它不是只做“文档问答”,而是把角色权限、混合检索、工具推理、引用验证和审计日志串成一条可复盘的问答工作流。

为什么做这个项目

证券行业的知识问答场景,检索本身不是最大的难点,真正棘手的是:

  • 信息分散在研报、公告、法规、财报、内部制度里
  • 同一问题,投顾 / 机构销售 / 合规看到的材料权限不同
  • 数字错了会触发合规风险,引用错了会引发客户投诉
  • 普通 RAG 系统无法区分“检索到的内容”和“模型脑补的内容”

这个项目想验证的是:能不能把知识库从“文档检索器”升级成结构上可信任的投研助手。答案不靠模型自觉,靠工作流设计把权限、验证、审计变成硬约束。

系统架构

整个流程拆成六个可审计的节点,用 LangGraph StateGraph 编排,不是“提问 → 检索 → 生成答案”一步到位:

Query Planner 生成检索计划 Retriever 按角色权限检索 RBAC 权限前置生效 Reasoner 推理 + 工具调用 Verifier 来源 / 数字校验 两类校验独立检查 Composer 带引用的回答 Auditor 审计日志 Answer 检索不足 → 回退重新规划
六个节点由 LangGraph StateGraph 编排,条件路由控制流转;红色标注的是两个结构性约束点。

节点间用条件路由控制流转,而非固定线性链路。比如检索结果不足时,会回退到 Planner 重新规划检索路径。

能力证据矩阵

能力 项目中的落点
RAG 数据管道 文档加载、Chunk 切分、Embedding、ChromaDB 入库
Agent 编排 LangGraph 状态图、六节点拆分、条件路由、失败分支
权限治理 角色权限在 Retriever 节点前置生效,影响可检索材料范围
可信输出 引用标注、来源校验、数字校验、审计日志
服务化封装 FastAPI 问答接口,便于把 Agent 工作流对外暴露为服务

技术亮点

  • 基于角色的检索权限过滤(RBAC):投顾、机构销售、合规、运营、技术 5 种角色,权限直接决定检索路径和可见结果,不是事后过滤
  • 混合检索 + 语义重排:ChromaDB 向量检索为主,BGE Reranker 对召回结果做语义重排
  • LangGraph StateGraph 编排:节点间条件路由,而非固定 Chain
  • FastAPI 问答接口:面向内部使用场景的服务化封装

可验证的代码事实

这个项目的可信度建立在代码本身,不是设计文档:

  • 33 次独立 commit,功能按模块逐步落地(数据管道 → 基础RAG → Agent编排 → 检索优化 → 金融工具)
  • src/agents/ 共 816 行:graph.py(图构建,143行)、nodes.py(六节点实现,510行)、state.py(状态定义,52行)、tools.py(工具定义,101行)
  • tests/ 共 1524 行,36+ 单元测试覆盖节点逻辑、条件路由与图构建

技术栈

已在代码中落地:

  • Agent 编排:LangGraph
  • LLM 接口:LangChain
  • 向量检索:ChromaDB
  • 语义重排:BGE Reranker
  • 服务接口:FastAPI

设计取舍

方案 取舍
朴素 RAG 实现简单,但无法表达角色权限、验证分支和审计轨迹
固定 Chain 流程清晰,但检索不足或验证失败时缺少自然回退路径
LangGraph StateGraph 显式表达节点、状态和条件路由,更适合需要可审计分支的金融问答
生成后过滤权限 改动轻,但模型已经看过越权材料,不适合权限敏感场景
检索前置权限过滤 实现成本更高,但能从源头限制可见材料范围

项目边界说明

这是一个验证架构可行性的个人项目,不是生产系统。需要明确的是:

  • 引用准确率、幻觉率、响应延迟等指标,在项目设计阶段的 PRD 里作为目标值提出,未经生产环境实测验证,这里不引用这些数字作为已达成的成果
  • 内部知识库的数据源(研报、公告、法规)目前使用的是模拟/公开数据,未接入任何机构的真实内部数据
  • 项目重点展示 Agentic RAG 架构、权限建模和验证链路,不声称已经覆盖生产级权限审计、灰度发布、在线评测和全量监控体系

与客户端背景的关联

10 年证券客户端工程经验没有被当成履历装饰,而是直接映射到两个系统决策:

业务经验 SecRAG 中的设计
不同角色从一开始就拥有不同的信息边界 RBAC 在 Retriever 前生效,模型不会先看到越权材料
数字错误与引用错误的风险性质不同 Verifier 将数字校验与来源校验拆成独立检查逻辑

联系:对这个项目的设计取舍有想法,或在招相关方向 → jr.lu.jobs@gmail.com · GitHub