面向开发人员的 Agentic RAG!

2025-06-10

面向开发人员的 Agentic RAG!

在快速发展的人工智能领域,Agentic RAG 已成为一种颠覆性的信息检索和生成方法。这项先进技术将检索增强生成 (RAG) 的强大功能与自主代理相结合,提供了一种更具动态性和情境感知能力的信息处理和生成方法。随着企业和研究人员不断提升 AI 能力,理解和实施 Agentic RAG 已成为在竞争中保持领先地位的关键。

本指南深入探讨了如何使用两款强大的工具:LangChain 和 CrewAI 来掌握 Agentic RAG。它探索了从传统 RAG 到 Agentic RAG 的演变,并重点介绍了它们的主要区别和优势。本文还探讨了 LangChain 如何作为实施 Agentic RAG 的基础,并演示了如何利用 CrewAI 来创建更复杂、更高效的 AI 系统。

RAG 的演变:从传统到代理

传统 RAG 的局限性

天真的 RAG

传统的检索增强生成 (RAG) 系统通过将大型语言模型 (LLM) 与向量数据库相结合,克服了现成 LLM 的局限性,彻底改变了人工智能。然而,这些系统在多任务处理时面临挑战,并且不适用于复杂的用例。在构建简单的问答聊天机器人、支持机器人等之前,这种方法还算可以接受,但一旦情况变得稍微复杂一些,传统的 RAG 方法就会失效。它们通常难以将检索到的数据与上下文联系起来,导致响应肤浅,可能无法完全解决查询的细微差别。

Agentic RAG 简介

Agentic RAG

Agentic RAG 是传统 RAG 的演进,它集成了 AI 代理来增强 RAG 方法。该方法采用自主代理来分析初步发现,并策略性地选择有效的数据检索工具。这些 AI 代理能够将复杂任务分解为多个子任务,使其更易于处理。它们还拥有记忆功能(例如聊天历史记录),因此它们知道发生了什么以及需要采取哪些后续步骤。

此外,这些AI代理非常智能,它们可以在需要解决任务时调用任何API或工具。代理能够提出逻辑、推理并采取相应的行动。这正是代理式RAG方法如此突出的原因。该系统将复杂的查询分解成易于管理的部分,并为每个部分分配特定的代理,同时保持无缝协调。

Agentic RAG 的主要优势和用例

Naive RAG 与 Agentic RAG 对比

Agentic RAG 相较于传统系统拥有诸多优势。其自主代理独立工作,能够高效地并行处理复杂查询。系统具备高度的适应性,能够根据新信息或不断变化的用户需求动态调整策略。在市场营销领域,Agentic RAG 可以分析客户数据,生成个性化沟通信息,并提供实时竞争情报。此外,它还能增强营销活动管理的决策能力,并改进搜索引擎优化策略。

LangChain:Agentic RAG 的支柱

LangChain概述

朗链

LangChain 已成为构建大型语言模型 (LLM) 应用的强大框架,其功能呈现指数级增长。它功能多样,与其他框架相比,能够更好地兼容各种平台。LangChain 的核心在于集成尖端技术,以提升每次交互的模型性能。该框架采用模块化原则,在处理自然语言交互时具有灵活性和适应性。

Agentic RAG 的基本组件

LangChain 的架构支持短期和长期记忆功能,这对于 Agentic RAG 系统至关重要。短期记忆利用上下文学习,而长期记忆则利用外部向量存储来实现无限的信息保留和快速检索。这些组件使 LangChain 能够出色地理解对话中的语境、语气和细微差别,从而实现更接近人类的交互。

将 LangChain 与外部工具集成

为了实现 Agentic RAG,LangChain 可以与各种外部工具集成。这种集成引入了能够进行规划、推理和持续学习的智能代理。该系统通常包含用于问答和摘要的文档代理,以及用于监督和协调其工作的元代理。这种层级结构增强了智能代理在需要战略规划和精细决策的任务中的能力,将智能代理的性能提升到新的高度。

利用 CrewAI 实现高级 Agentic RAG

CrewAI简介

CrewAI

CrewAI 是一个开源框架,旨在创建和管理智能代理团队。与传统的聊天机器人不同,这些代理可以协作、共享信息,共同处理复杂的任务。CrewAI 是一个先进的平台,它模拟软件开发团队的角色和职责,帮助组织有效地构建其 AI 运营。

实施多代理工作流程

CrewAI 允许用户为代理定义任务、角色、目标和背景故事,从而促进多代理工作流程。这种方法可以提高组织内部的生产力、决策流程和产品设计。该框架支持各种协作模型,包括顺序、分层和异步工作流。通过利用 CrewAI,团队可以简化操作并通过协调努力最大限度地提高效率。

优化代理交互和决策

CrewAI 通过角色扮演、焦点维护和工具利用等功能优化代理交互。该平台集成了安全措施和协议的护栏,确保可靠且符合道德规范的运营。记忆功能使代理能够存储和调用过去的交互,从而增强决策过程。通过将 CrewAI 与 Groq 的 Llama3-70B 等高级语言模型集成,组织可以进一步改进内容生成和任务执行。

Agentic RAG 工作流程教程 

我们将了解如何让代理参与 RAG 系统,并通过调用工具来检索最相关的信息。
我将使用 SingleStore Notebooks(类似于您的 Google Colab 或 Jupyter Notebooks,但具有附加功能)来运行我的代码。您也可以使用相同的版本。SingleStore 提供免费的共享套餐,您可以注册并开始免费使用服务。

立即注册并开始使用您的笔记本

创建 SingleStore 笔记本后,让我们继续添加以下代码并逐步运行它。

单店笔记本

安装所需的库

!pip install crewai==0.28.8 crewai_tools==0.1.6 langchain_community==0.0.29 sentence-transformers langchain-groq --quiet
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode

提及 Groq API 密钥

import os

# Set the API key
os.environ['GROQ_API_KEY'] = 'Add Your Groq API Key'
Enter fullscreen mode Exit fullscreen mode

提及所使用的法学硕士

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,
)
Enter fullscreen mode Exit fullscreen mode
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)
Enter fullscreen mode Exit fullscreen mode

创建 RAG 工具变量来传递我们的 PDF

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",
            ),
        ),
    )
)
Enter fullscreen mode Exit fullscreen mode
rag_tool.run("How did self-attention mechanism evolve in large language models?")
Enter fullscreen mode Exit fullscreen mode

提及 Tavily API 密钥

import os

# Set the Tavily API key
os.environ['TAVILY_API_KEY'] = 'Add Your Tavily API Key'
Enter fullscreen mode Exit fullscreen mode
web_search_tool = TavilySearchResults(k=3)
Enter fullscreen mode Exit fullscreen mode
web_search_tool.run("What is self-attention mechansim in large language models?")
Enter fullscreen mode Exit fullscreen mode

定义工具

@tool
def router_tool(question):
  """Router Function"""
  if 'self-attention' in question:
    return 'vectorstore'
  else:
    return 'web_search'
Enter fullscreen mode Exit fullscreen mode

创建代理来配合工作

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,
)
Enter fullscreen mode Exit fullscreen mode

以下是完整的分步视频教程。

这是完整的笔记本代码

鏂囩珷鏉ユ簮锛�https://dev.to/pavanbelagatti/agentic-rag-for-developers-ioe
PREV
Docker、开发人员的最佳实践以及下一步是什么?
NEXT
Node.js 应用程序持续集成的分步指南