深入解析athina-ai项目中的Corrective RAG技术

深入解析athina-ai项目中的Corrective RAG技术

rag-cookbooks This repository contains various advanced techniques for Retrieval-Augmented Generation (RAG) systems. rag-cookbooks 项目地址: https://gitcode.com/gh_mirrors/ra/rag-cookbooks

什么是Corrective RAG?

Corrective Retrieval-Augmented Generation(修正性检索增强生成,简称Corrective RAG或CRAG)是一种先进的自然语言处理技术,它通过评估和修正检索到的文档来提高生成响应的准确性。这项技术代表了传统RAG系统的进化,增加了对检索结果的智能评估和修正机制。

Corrective RAG的工作原理

Corrective RAG系统的工作流程可以分为三个关键决策路径:

  1. 文档相关且正确:当检索到的文档与问题高度相关时,系统会精炼这些文档,去除不必要的内容,然后用于生成最终回答。

  2. 文档不相关:当文档被判定为不相关时,系统会丢弃这些文档,并触发额外的信息检索机制(如网络搜索)来补充知识库。

  3. 文档相关性不确定:在模糊情况下,系统会结合检索到的文档和网络搜索获得的信息,生成一个平衡的响应。

技术实现详解

1. 初始设置

实现Corrective RAG需要安装一系列Python库,包括:

  • 向量数据库支持(如ChromaDB)
  • 大语言模型接口(如AI服务提供商)
  • 图计算框架(LangGraph)
  • 网络搜索工具(如Tavily)
! pip install athina chromadb langgraph

2. 数据索引构建

构建有效的检索系统首先需要创建文档索引:

from langchain_ai import AIEmbeddings
from langchain.document_loaders import CSVLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma

# 加载嵌入模型
embeddings = AIEmbeddings()

# 加载和分割文档
loader = CSVLoader("./context.csv")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
documents = text_splitter.split_documents(documents)

# 创建向量存储
vectorstore = Chroma.from_documents(documents, embeddings)
retriever = vectorstore.as_retriever()

3. 文档相关性评估器

Corrective RAG的核心组件之一是文档评估器,它判断检索到的文档是否与用户问题相关:

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field

class GradeDocuments(BaseModel):
    binary_score: str = Field(
        description="Documents are relevant to the question, 'yes' or 'no'"
    )

# 创建评估提示模板
system = """You are a grader assessing relevance of a retrieved document..."""
grade_prompt = ChatPromptTemplate.from_messages([
    ("system", system),
    ("human", "Retrieved document: \n\n {document} \n\n User question: {question}"),
])

retrieval_grader = grade_prompt | structured_llm_grader

4. RAG生成链

基础RAG生成链负责根据检索到的文档生成回答:

from langchain import hub
from langchain_core.output_parsers import StrOutputParser

template = """You are a helpful assistant that answers questions based on the following context.
Context: {context}
Question: {question}
Answer:"""

prompt = ChatPromptTemplate.from_template(template)
llm = ChatAIProvider(temperature=0)
rag_chain = prompt | llm | StrOutputParser()

5. 网络搜索集成

当本地检索结果不足时,系统可以调用网络搜索补充信息:

from langchain_community.tools.tavily_search import TavilySearchResults
web_search_tool = TavilySearchResults(k=3)

6. 构建决策图

Corrective RAG的核心创新在于其决策流程,使用LangGraph构建:

from langgraph.graph import END, StateGraph, START

# 定义状态图
workflow = StateGraph(GraphState)

# 添加节点
workflow.add_node("retrieve", retrieve)
workflow.add_node("grade_documents", grade_documents)
workflow.add_node("generate", generate)
workflow.add_node("web_search_node", web_search)

# 构建边和条件边
workflow.add_edge(START, "retrieve")
workflow.add_edge("retrieve", "grade_documents")
workflow.add_conditional_edges(
    "grade_documents",
    decide_to_generate,
    {"web_search": "web_search_node", "generate": "generate"},
)
workflow.add_edge("web_search_node", "generate")
workflow.add_edge("generate", END)

# 编译图
app = workflow.compile()

技术优势与应用场景

Corrective RAG相比传统RAG系统具有以下优势:

  1. 质量保证:通过文档评估环节确保生成内容基于高质量信息源
  2. 灵活补充:当本地知识不足时自动补充外部信息
  3. 智能决策:根据文档相关性动态调整生成策略

典型应用场景包括:

  • 客户支持系统
  • 教育问答平台
  • 专业领域知识库
  • 研究辅助工具

实现建议与最佳实践

  1. 文档预处理:确保索引文档经过适当清洗和分割,提高检索质量
  2. 评估器调优:根据领域特点调整文档评估标准
  3. 网络搜索策略:合理设置网络搜索触发条件和结果处理逻辑
  4. 性能监控:跟踪系统各环节性能,持续优化响应时间和准确性

Corrective RAG代表了检索增强生成技术的重要发展方向,通过引入智能评估和修正机制,显著提高了生成内容的准确性和可靠性。这种架构特别适合对回答质量要求高的应用场景,是构建下一代智能问答系统的有力工具。

rag-cookbooks This repository contains various advanced techniques for Retrieval-Augmented Generation (RAG) systems. rag-cookbooks 项目地址: https://gitcode.com/gh_mirrors/ra/rag-cookbooks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅亭策Serena

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值