深入解析athina-ai项目中的Corrective RAG技术
什么是Corrective RAG?
Corrective Retrieval-Augmented Generation(修正性检索增强生成,简称Corrective RAG或CRAG)是一种先进的自然语言处理技术,它通过评估和修正检索到的文档来提高生成响应的准确性。这项技术代表了传统RAG系统的进化,增加了对检索结果的智能评估和修正机制。
Corrective RAG的工作原理
Corrective RAG系统的工作流程可以分为三个关键决策路径:
-
文档相关且正确:当检索到的文档与问题高度相关时,系统会精炼这些文档,去除不必要的内容,然后用于生成最终回答。
-
文档不相关:当文档被判定为不相关时,系统会丢弃这些文档,并触发额外的信息检索机制(如网络搜索)来补充知识库。
-
文档相关性不确定:在模糊情况下,系统会结合检索到的文档和网络搜索获得的信息,生成一个平衡的响应。
技术实现详解
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系统具有以下优势:
- 质量保证:通过文档评估环节确保生成内容基于高质量信息源
- 灵活补充:当本地知识不足时自动补充外部信息
- 智能决策:根据文档相关性动态调整生成策略
典型应用场景包括:
- 客户支持系统
- 教育问答平台
- 专业领域知识库
- 研究辅助工具
实现建议与最佳实践
- 文档预处理:确保索引文档经过适当清洗和分割,提高检索质量
- 评估器调优:根据领域特点调整文档评估标准
- 网络搜索策略:合理设置网络搜索触发条件和结果处理逻辑
- 性能监控:跟踪系统各环节性能,持续优化响应时间和准确性
Corrective RAG代表了检索增强生成技术的重要发展方向,通过引入智能评估和修正机制,显著提高了生成内容的准确性和可靠性。这种架构特别适合对回答质量要求高的应用场景,是构建下一代智能问答系统的有力工具。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考