自适应RAG系统(Multi-Agentic RAG:探索智能问答系统的新边界(含代码))是一种能够根据用户查询的具体语境,动态选择检索策略与生成方式的人工智能系统。它结合了先进的自然语言处理技术和信息检索算法,能够在海量数据中快速定位相关信息,并基于这些信息生成准确、连贯的回答。LangGraph、OpenAI和Tavily作为这一过程中的关键工具,分别承担着流程编排、语言生成与信息检索的重任。
一、系统架构与工具介绍
-
LangGraph:LangGraph(探索LangGraph:开启AI Agent构建的新路径)是一个用于编排工具和管理对话逻辑的库。它允许开发者以图形化的方式定义工作流,将不同的功能模块(如检索器、生成器等)连接起来,形成一个高效的信息处理流程。在自适应RAG系统中,LangGraph负责协调各个组件的工作,确保信息能够顺畅地在不同模块间传递。
-
OpenAI:OpenAI(OpenAI’s O3:AI推理模型的新前沿)是自然语言处理领域的领军企业,其提供的GPT系列模型在文本生成方面表现出色。在自适应RAG系统中,OpenAI模型被用作生成器,根据检索到的相关信息生成回答。通过微调OpenAI模型,可以使其更好地适应特定领域或任务的需求,从而提高生成的准确性和连贯性。
-
Tavily:Tavily是一个强大的网络搜索引擎,它能够根据用户查询快速返回相关网页或文档。在自适应RAG系统中,Tavily作为外部信息源,为系统提供了丰富的背景知识和相关信息。通过集成Tavily,系统能够超越本地数据库的限制,获取更广泛的信息资源。
二、系统构建步骤
1、环境搭建
首先,需要安装必要的库和工具。这包括LangGraph、TikToken、Langchain(包含对OpenAI、Cohere等API的支持)、ChromoDB(用于向量存储)、以及Tavily的Python客户端等。通过pip命令可以方便地安装这些依赖项。
2、数据准备
为了构建自适应RAG系统,需要准备大量的文本数据作为训练材料。这些数据可以来自网页、学术论文、新闻报道等来源。在将数据输入系统之前,需要对其进行预处理,包括去除噪声、分词、向量化等步骤。其中,向量化是将文本数据转换为高维向量表示的关键步骤,它使得系统能够根据向量间的相似度来检索相关信息。
3、工作流定义
利用LangGraph定义工作流是构建自适应RAG系统(探索 Auto-RAG:提升人工智能知识获取与生成能力的新路径)的核心步骤之一。工作流定义了从用户查询输入到最终回答输出的整个处理流程。在这个流程中,需要定义多个节点和边来连接不同的功能模块。例如,可以定义一个“检索”节点来调用Tavily进行网络搜索,一个“生成”节点来调用OpenAI模型生成回答,以及一个“评估”节点来对生成的回答进行质量评估。
4、检索与生成策略
自适应RAG系统的关键在于其能够根据用户查询的具体语境动态调整检索与生成策略(优化检索增强生成(RAG)管道:实现更智能AI回应的高级技术)。为了实现这一目标,需要定义一系列规则和逻辑来判断何时进行网络搜索、何时从本地数据库中检索信息,以及何时调用生成器生成回答。例如,对于某些具有明确指向性的查询(如“请提供关于XXX的最新研究”),系统可以优先进行网络搜索;而对于一些较为模糊或泛化的查询(如“请谈谈你对XXX的看法”),则可以首先从本地数据库中检索相关信息,然后基于这些信息生成回答。
创建查询:
from pydantic import BaseModel, Field
from typing import Literal
class RouteQuery(BaseModel):
"""Route a user query to the most relevant datasource."""
datasource: Literal["vectorstore", "web_search"] = Field(
...,
description="Given a user question choose to route it to web search or a vectorstore.",
)
structured_llm_router = llm.with_structured_output(RouteQuery)
# Prompt
ROUTER_PROMPT = """You are an expert at routing a user question to a vectorstore or web search.
The vectorstore contains documents related to 2025, new year investment outlook by nutmeg.
Use the vectorstore for questions on these topics. Otherwise, use web-search."""
from langchain_core.prompts import ChatPromptTemplate
route_prompt = ChatPromptTemplate.from_messages(
[
("system", ROUTER_PROMPT),
("human", "{question}"),
]
)
question_router = route_prompt | structured_llm_router
# question_router.invoke({"question": "What are the new 2025 investment?"})
## RouteQuery(datasource='vectorstore')
# question_router.invoke({"question": "What are the new llm we have?"})
## RouteQuery(datasource='web_search')
query改写(Query 改写综述:提升信息检索效率与准确性的关键技术):
from pydantic import BaseModel, Field
from typing import Literal
class RouteQuery(BaseModel):
"""Route a user query to the most relevant datasource."""
datasource: Literal["vectorstore", "web_search"] = Field(
...,
description="Given a user question choose to route it to web search or a vectorstore.",
)
structured_llm_router = llm.with_structured_output(RouteQuery)
# Prompt
ROUTER_PROMPT = """You are an expert at routing a user question to a vectorstore or web search.
The vectorstore contains documents related to 2025, new year investment outlook by nutmeg.
Use the vectorstore for questions on these topics. Otherwise, use web-search."""
from langchain_core.prompts import ChatPromptTemplate
route_prompt = ChatPromptTemplate.from_messages(
[
("system", ROUTER_PROMPT),
("human", "{question}"),
]
)
question_router = route_prompt | structured_llm_router
# question_router.invoke({"question": "What are the new 2025 investment?"})
## RouteQuery(datasource='vectorstore')
# question_router.invoke({"question": "What are the new llm we have?"})
## RouteQuery(datasource='web_search')
5、模型训练与微调
在定义了工作流和检索与生成策略之后,需要对OpenAI模型进行训练或微调(深入了解Fine-Tuning:解锁大语言模型的潜能)。这通常涉及使用大量的训练数据来优化模型的参数,使其能够更好地适应特定任务的需求。在训练过程中,可以采用多种策略来提高模型的性能,如使用不同的损失函数、调整学习率、引入正则化项等。
6、系统测试与优化
完成模型训练后,需要对整个自适应RAG系统进行测试(五大开源RAG(Retrieval-Augmented Generation)评估框架详解)和优化。测试阶段的目标是评估系统在各种场景下的性能表现,包括准确率、召回率、生成速度等指标。根据测试结果,可以对工作流、检索策略、生成策略等进行调整和优化,以提高系统的整体性能。
三、案例分析
以下是一个具体的案例分析,展示了如何构建自适应RAG系统来处理用户查询。
假设用户输入了一个关于“2025年投资建议”的查询。系统首先会分析这个查询的语境和意图,并决定采取何种检索与生成策略。在这个例子中,系统可能会优先进行网络搜索,以获取最新的市场动态和投资趋势。通过调用Tavily搜索引擎,系统可以快速找到一系列与“2025年投资建议”相关的网页和文档。
接下来,系统会对这些检索到的信息进行评估和筛选,以确定哪些信息对回答用户查询最有价值。这通常涉及对信息的相关性、准确性、权威性等方面的评估。在筛选过程中,系统可能会使用一些预定义的规则或机器学习模型来辅助判断。
一旦确定了相关的信息,系统就会调用OpenAI模型来生成回答。在这个过程中,模型会根据检索到的信息以及用户查询的具体语境来生成一个连贯、准确的回答。为了提高生成的准确性和连贯性,系统还可以对生成的回答进行后处理,如去除冗余信息、调整句子结构等。
最后,系统会对生成的回答进行质量评估,以确保其符合用户期望。这通常涉及对回答的语义理解、逻辑连贯性、事实准确性等方面的评估。如果评估结果不理想,系统可能会重新进行检索和生成过程,直到生成一个满意的回答为止。
自适应RAG系统是一种高效、智能的信息处理工具,它结合了先进的自然语言处理技术和信息检索算法,能够根据用户查询的具体语境动态调整检索与生成策略。通过融合LangGraph、OpenAI和Tavily等工具,我们可以构建一个功能强大的自适应RAG系统,实现对用户查询的精准响应。
然而,自适应RAG系统的发展仍面临一些挑战和问题。例如,如何进一步提高系统的准确率和召回率、如何优化模型的训练过程以提高生成速度和质量、如何更好地处理复杂和多义的查询等。未来,随着技术的不断进步和应用的不断拓展,我们相信自适应RAG系统将在更多领域发挥重要作用。
完整代码git:https://github.com/Abhinavk910/GenAI/blob/main/Agent/Langgraph/Adaptive_rag/RAG.ipynb
标签:检索,RAG,vectorstore,question,系统,生成,Tavily,LangGraph From: https://blog.csdn.net/llm_way/article/details/145112750