从 RAG 到 Agentic RAG:复合人工智能系统(CAIS)的演进与实现

过去三年,以 OpenAI 的 ChatGPT 为代表的基础模型推动了大语言模型(LLM)应用的快速发展。然而,仅依赖 LLM 的“自有”知识来回答问题,往往会面临大模型幻觉或知识更新滞后的问题。为了解决这一挑战,行业开始探索多 LLM 体系,每个模型针对不同问题进行优化。然而,这种方法虽然提高了准确性,但也增加了系统的复杂性和扩展难度。

为此,复合人工智能系统(CAIS,Compound AI System)应运而生。本文将深入解析 CAIS 的历史演变,从 RAG(Retrieval-Augmented Generation)到 Agentic RAG 的发展路径,并探讨如何使用 Milvus 向量数据库、LlamaIndex 和 Claude 3.5 Sonnet 来构建智能化的 RAG 体系。

1. 复合人工智能系统(CAIS)的演变:从 RAG 到 Agent

CAIS 的概念最早出现在 2024 年初加州大学伯克利分校 AI 研究实验室的博客《从模型到复合人工智能系统的转变》中,强调通过集成多种 AI 技术和模块,提高智能系统的效率、可靠性和可解释性。

RAG 的构建原理

RAG 通过向 LLM 提供外部知识库,实现更准确和上下文相关的回答。其核心流程包括:

  • Chunking:将文档拆分成小片段,提高语义检索的相关性。
  • Embedding:将片段向量化,并存入向量数据库(如 Milvus)。
  • Prompt:向 LLM 提供指令,并结合检索到的信息进行回答。
  • Query:用户提出问题,系统返回增强后的答案。

然而,RAG 存在局限性:当文本分块不够精准或相关性不足时,答案质量会受到影响。此外,RAG 过于依赖单一模型,无法灵活应对不同类型的问题。

Agent 时代的到来

为解决 RAG 的局限性,LLM Agent 体系诞生。Agent 通过引入推理、工具调用、规划等步骤,使系统具备更强的任务执行能力。典型代表是 ReAct(推理-行动框架),其包含四个核心环节:

  1. Plan/Think(规划/推理)
  2. Act/Tools(执行/工具调用)
  3. Observe(评估)
  4. Answer(答案生成)

ReAct 使 AI 能够在复杂任务中不断优化答案,提升回答的精准度和连贯性。

2. 在 RAG Pipeline 中集成 Agent

在 RAG 框架中集成 Agent 的方法主要有以下几种:

  • Routing(路由):根据用户查询类型,自动匹配最合适的知识库。
  • Query Planning(查询规划):将复杂问题拆分为子查询,并分别检索答案。
  • Tool Use(工具调用):LLM 可调用外部 API 或数据库,提高查询能力。
  • ReAct(推理+行动):结合推理、工具调用和评估,实现动态响应。
  • Dynamic Query Planning(动态查询规划):支持并行查询,提高效率。

这些方法使 RAG 不仅能检索信息,还能结合推理能力,提供更具上下文理解的答案。

3. 构建 Agentic RAG:实战演示

我们使用 Milvus 向量数据库、LlamaIndex 作为 Agent 框架,并结合 Claude 3.5 Sonnet 作为 LLM,构建一个智能化的 RAG 系统。

步骤 1:数据加载

from llama_index.core import SimpleDirectoryReader

documents = SimpleDirectoryReader(
    input_files=["/content/milvus_docs/en/faq/operational_faq.md"]
).load_data()

print("Document ID:", documents[0].doc_id)

步骤 2:设置环境变量

import os
from google.colab import userdata
os.environ["ANTHROPIC_API_KEY"] = userdata.get('ANTHROPIC_API_KEY')
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY')

步骤 3:创建 Milvus 向量索引

from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.vector_stores.milvus import MilvusVectorStore

vector_store = MilvusVectorStore(dim=1536)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)

步骤 4:构建查询引擎

from llama_index.llms.anthropic import Anthropic

llm = Anthropic(model="claude-3-5-sonnet-20240620")
query_engine = index.as_query_engine(similarity_top_k=5, llm=llm)

步骤 5:集成 Agent

from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.core.tools import QueryEngineTool, ToolMetadata

query_engine_tool = QueryEngineTool(
    query_engine=query_engine,
    metadata=ToolMetadata(
        name="knowledge_base",
        description="Provides information about Milvus FAQ.",
    ),
)

agent_worker = FunctionCallingAgentWorker.from_tools(
    [query_engine_tool], llm=llm, verbose=True
)
agent = agent_worker.as_agent()

response = agent.chat("What is the maximum vector dimension supported in Milvus?")
print(str(response))

Agentic RAG 的输出示例

Milvus supports vectors with up to 32,768 dimensions by default. However, this limit can be increased by modifying the 'Proxy.maxDimension' parameter.

Agent 体系提供了更丰富的信息,包括查询背后的逻辑和推理过程,使回答更具可信度和解释性。

4. 结论

复合人工智能系统(CAIS) 通过整合 RAG 和 Agent 技术,使 AI 能够高效、准确地响应复杂查询。向量数据库 Milvus 在其中发挥了关键作用,通过高效检索和数据管理,大幅提升了 RAG 和 Agent 体系的性能。

将来,Agentic RAG 体系将成为智能搜索、知识管理和 AI 自动化的重要方向,为企业和开发者提供更智能、高效的解决方案。

标签



热门标签