Agentic RAG 融合智能代理和检索增强生成,为开发者带来更强大的 AI 编程工具链。介绍核心原理和应用模式。
传统检索增强生成(RAG)系统通过将大语言模型(LLM)与向量数据库相结合来解决现成 LLM 的局限性,从而彻底改变了 AI。然而,这些系统在多任务处理时面临挑战,不适合复杂用例。当你构建简单的问答聊天机器人、支持机器人等时还可以,但一旦事情变得复杂,传统 RAG 方法就失败了。它们往往难以将检索到的数据进行语境化,导致表面化的响应,可能无法充分解决查询的细微之处。
Agentic RAG 是传统 RAG 的演变,集成了 AI Agent 以增强 RAG 方法。这种方法采用自主 Agent 来分析初始发现,并战略性地为数据检索选择有效工具。这些 AI Agent 能够将复杂任务分解为多个子任务,使其易于处理。它们还具备记忆能力(如聊天历史),因此知道发生了什么以及接下来需要采取哪些步骤。
此外,这些 AI Agent 非常智能,可以在需要解决任务时调用任何 API 或工具。Agent 可以产生逻辑、推理并相应地采取行动。这正是 Agentic RAG 方法如此突出的原因。系统将复杂查询解构为可管理的片段,为每个部分分配特定 Agent,同时保持无缝协调。
Agentic RAG 相比传统系统提供了许多优势。其自主 Agent 独立工作,允许高效并行处理复杂查询。系统的可适应性能够基于新信息或不断演变的用户需求动态调整策略。在营销中,Agentic RAG 可以分析客户数据以生成个性化通信,并提供实时竞争情报。它还增强了活动管理中的决策制定,并改进了搜索引擎优化策略。
LangChain 已成为构建大语言模型(LLM)应用的强大框架,其功能呈指数级增长。与其他框架相比,它提供了与各种平台更好的兼容性的多功能工具。LangChain 的核心整合了尖端技术,通过每次交互增强模型性能。该框架基于模块化原则运作,在处理自然语言交互中允许灵活性和适应性。
LangChain 的架构支持短期和长期记忆能力,这对 Agentic RAG 系统至关重要。短期记忆利用上下文学习,而长期记忆利用外部向量存储以实现无限信息保留和快速检索。这些组件使 LangChain 在理解对话中的上下文、语气和细微差别方面表现出色,从而导致更人性化的交互。
为了实施 Agentic RAG,LangChain 可以与各种外部工具集成。这种集成引入了能够随时间推移进行规划、推理和学习的智能 Agent。系统通常包括用于问答和总结的文档 Agent,以及用于监督和协调其工作的元 Agent。这种分层结构增强了需要战略规划和细致决策的任务的能力,将 Agent 的性能提升到新的高度。
CrewAI 是一个开源框架,用于创建和管理智能 Agent 团队。与传统聊天机器人不同,这些 Agent 可以协作和共享信息,一起处理复杂任务。CrewAI 作为一个精密平台,使组织能够有效地组织其 AI 操作,模拟软件开发团队的角色和责任。
CrewAI 通过允许用户为 Agent 定义任务、角色、目标和背景故事来促进多 Agent 工作流。这种方法提高了组织内的生产力、决策制定过程和产品设计。该框架支持多种协作模型,包括顺序、分层和异步工作流。通过利用 CrewAI,团队可以通过协调努力来简化操作并最大化效率。
CrewAI 通过角色扮演、焦点维护和工具利用等特性来优化 Agent 交互。该平台为安全措施和协议纳入护栏,确保可靠和伦理的运作。记忆能力使 Agent 能够存储和回忆过去的交互,增强决策制定过程。通过将 CrewAI 与 Groq 的 Llama3–70B 等先进语言模型集成,组织可以进一步改进内容生成和任务性能。
我们将看到 Agent 如何通过调用工具参与 RAG 系统以检索最相关的信息。我将使用 SingleStore Notebooks(就像你的 Google Colab 或 Jupyter Notebooks,但具有附加功能)来运行我的代码。你也可以使用相同的工具。SingleStore 有一个免费的共享层,你可以注册并免费开始使用该服务。
现在注册并开始使用你的 Notebook。
创建 SingleStore Notebook 后,让我们继续添加下面的代码并逐步运行它。
!pip install crewai==0.28.8 crewai_tools==0.1.6 langchain_community==0.0.29 sentence-transformers langchain-groq --quiet
from langchain_openai import ChatOpenAI
import os
from crewai_tools import PDFSearchTool
from langchain_community.tools.tavily_search import TavilySearchResults
from crewai_tools import tool
from crewai import Crew
from crewai import Task
from crewai import Agent
import os
# Set the API key
os.environ['GROQ_API_KEY'] = 'Add Your Groq API Key'
llm = ChatOpenAI(
openai_api_base="https://api.groq.com/openai/v1",
openai_api_key=os.environ['GROQ_API_KEY'],
model_name="llama3-8b-8192",
temperature=0.1,
max_tokens=1000,
)
import requests
pdf_url = 'https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf'
response = requests.get(pdf_url)
with open('attenstion_is_all_you_need.pdf', 'wb') as file:
file.write(response.content)
rag_tool = PDFSearchTool(pdf='attenstion_is_all_you_need.pdf',
config=dict(
llm=dict(
provider="groq", # or google, openai, anthropic, llama2, ...
config=dict(
model="llama3-8b-8192",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="huggingface", # or openai, ollama, ...
config=dict(
model="BAAI/bge-small-en-v1.5",
#task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
rag_tool.run("How did self-attention mechanism evolve in large language models?")
import os
# Set the Tavily API key
os.environ['TAVILY_API_KEY'] = 'Add Your Tavily API Key'
web_search_tool = TavilySearchResults(k=3)
web_search_tool.run("What is self-attention mechansim in large language models?")
@tool
def router_tool(question):
"""Router Function"""
if 'self-attention' in question:
return 'vectorstore'
else:
return 'web_search'
Router_Agent = Agent(
role='Router',
goal='Route user question to a vectorstore or web search',
backstory=(
"You are an expert at routing a user question to a vectorstore or web search."
"Use the vectorstore for questions on concept related to Retrieval-Augmented Generation."
"You do not need to be stringent with the keywords in the question related to these topics. Otherwise, use web-search."
),
verbose=True,
allow_delegation=False,
llm=llm,
)
这是完整的分步视频教程,你可以跟随。
这是完整的 Notebook 代码。
某些评论可能只对已登录的访客可见。登录以查看所有评论。
如需进一步的行动,你可以考虑屏蔽此人和/或举报滥用行为。