绿色金融RAG技术文档

Aug 13, 2025 at 15:45:53

好的,我帮你把这个 RAG 方案整理成标准 Markdown 格式,并且把代码部分放进代码块,方便直接阅读和复制。


RAG 系统方案设计

1. 方案概述

构建一个基于 Agentic RAG 的智能分析系统,实现:

  • 多模态数据整合(文本、图片、PDF等)
  • 动态外部数据更新(通过 MCP 调用爬虫获取 ESG 报告)
  • 闭环性能优化(Ragas 评估反馈至 Agent 决策)
  • 复杂问题推理(Agents 分解任务并调用工具链)

2. 模块设计与技术选型

模块 1:Ragas 评估体系(准确性监控)

评估指标

from ragas import evaluate
from ragas.metrics import answer_relevancy, faithfulness, context_recall

# 输入问题、答案、上下文、人工标注答案
dataset = {
    "question": ["某公司2023年碳排放强度是多少?"],
    "answer": ["1.2吨/万元营收"], 
    "contexts": [["ESG报告第5页显示..."]],
    "ground_truth": ["1.15吨/万元营收"]
}

# 执行评估
score = evaluate(dataset, metrics=[answer_relevancy, faithfulness, context_recall])
print(score)  # 输出各维度评分

技术栈

  • Ragas 开源框架
  • 人工标注数据(仅需 10% 样本)
  • 自动化测试问题生成(基于 LLM 生成对抗性问题)

模块 2:MCP 工具调用(ESG 数据获取)

动态爬虫流程

class ESGScraper:
    def __init__(self):
        self.tools = {
            "web_scraper": ScrapyAPITool(),
            "api_loader": ESGDataAPI()
        }

    def fetch_reports(self, company: str):
        # 智能选择数据源
        if "上市公司" in company:
            return self.tools["api_loader"].get_financial_data(company)
        else:
            return self.tools["web_scraper"].crawl(f"https://esg.org/{company}")

技术栈

  • Request / Xpath(网页爬虫)
  • 公开 ESG 资源(如新浪财经)
  • 数据清洗管道(去重、格式标准化)

模块 3:Agents 智能体工作流(动态 RAG)

工作流逻辑

from langchain.agents import AgentExecutor, Tool

tools = [
    Tool(name="ESG检索", func=vector_db_search),
    Tool(name="公式计算", func=financial_calculator),
    Tool(name="数据爬取", func=ESGScraper().fetch_reports)
]

agent = AgentExecutor.from_agent_and_tools(
    agent=DynamicPlanningAgent(),  # 自定义动态规划智能体
    tools=tools,
    max_iterations=3
)

response = agent.run("范围一排放量?")

执行步骤:

  1. 分解问题
  2. 检索本地知识库
  3. 触发爬虫补充数据
  4. 调用计算工具验证
  5. 生成最终报告

技术栈

  • LangChain Agents
  • 动态规划算法(基于 LLM 的 Chain-of-Thought)
  • 知识库版本管理

模块 4:OCR 多模态处理

图像处理流程

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True)

def extract_text(img_path):
    result = ocr.ocr(img_path, cls=True)
    texts = [line[1][0] for line in result]
    return "\n".join(texts)

# 提取 PDF/图片中的 ESG 数据
esg_table_text = extract_text("carbon_emission.png")

技术栈

  • PyMuPDF
  • 图像预处理(去噪、增强)
  • 表格结构化识别(使用豆包、qwen 模型进行图片识别)

3. 系统流程(以 ESG 分析为例)

  1. 用户提问

    分析腾讯 2023 年 ESG 报告中的范围一排放量

  2. 工作流触发

    • Agents 分解任务:

      1. 检索本地知识库(无最新报告)
      2. MCP 调用爬虫获取 2023 年报告(PDF)
      3. OCR 提取 PDF 中的表格数据
      4. 计算范围一排放量
  3. 数据整合

年度 范围一排放量
2023 2725373.5
  1. Ragas 评估反馈

    • 检测到范围一碳排放量未引用上下文 → 优化 Agents 的引用机制

4. 优化方向

性能优化

  • 分布式爬虫(Scrapy-Redis)
  • OCR 模型微调(针对行业文档)

评估自动化

  • 利用 LLM 生成测试用例(如 GPT-4 生成对抗性问题)
  • 监控异常指标自动触发重训练

安全增强

  • 爬虫伦理审查(Robots 协议检测)
  • 数据脱敏