偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深入淺出從 RAG 到 Agentic RAG:AI 智能體如何重構(gòu)檢索增強(qiáng)生成的技術(shù)閉環(huán)?

人工智能
運(yùn)行智能體RAG標(biāo)志著從理論架構(gòu)到實(shí)際應(yīng)用的落地。通過(guò)上述案例可以看到,Agentic RAG系統(tǒng)不僅能完成“檢索-生成”的基礎(chǔ)任務(wù),還具備類似人類的“反思-修正”能力。

1. 引言

從2024年邁入2025年,AI領(lǐng)域的焦點(diǎn)正從檢索增強(qiáng)生成(RAG)轉(zhuǎn)向更具突破性的——具能動(dòng)性RAG(Agentic RAG)。本文將為你介紹具能動(dòng)性RAG的概念、實(shí)現(xiàn)方式及其優(yōu)缺點(diǎn)。

圖片圖片

1.1 具能動(dòng)性RAG概述

檢索增強(qiáng)生成(RAG)是人工智能領(lǐng)域的重要進(jìn)步,它將大型語(yǔ)言模型(LLM)的生成能力與實(shí)時(shí)數(shù)據(jù)檢索相結(jié)合。盡管LLM在自然語(yǔ)言處理中表現(xiàn)出色,但其依賴靜態(tài)預(yù)訓(xùn)練數(shù)據(jù)的特性常導(dǎo)致響應(yīng)過(guò)時(shí)或不完整。RAG通過(guò)從外部源動(dòng)態(tài)檢索相關(guān)信息并融入生成過(guò)程,解決了這一局限,實(shí)現(xiàn)了上下文準(zhǔn)確且實(shí)時(shí)更新的輸出。

1.2 RAG與具能動(dòng)性RAG的對(duì)比

RAG系統(tǒng)的架構(gòu)集成了三個(gè)主要組件:

  • 檢索模塊:負(fù)責(zé)查詢知識(shí)庫(kù)、API或向量數(shù)據(jù)庫(kù)等外部數(shù)據(jù)源。高級(jí)檢索器利用密集向量搜索和基于Transformer的模型提升檢索精度和語(yǔ)義相關(guān)性。
  • 增強(qiáng)模塊:處理檢索到的數(shù)據(jù),提取并總結(jié)最相關(guān)信息以匹配查詢上下文。
  • 生成模塊:將檢索信息與LLM的預(yù)訓(xùn)練知識(shí)結(jié)合,生成連貫且符合上下文的響應(yīng)。

圖片圖片

圖片圖片

具能動(dòng)性RAG引入了使用AI智能體的自主決策與編排能力,支持更健壯靈活的檢索-生成工作流,其核心流程包括:

  • 智能體導(dǎo)向的查詢分析:用戶查詢被路由至AI智能體,解析查詢意圖與上下文。
  • 記憶與策略制定:智能體利用短期(會(huì)話)和長(zhǎng)期(歷史)記憶跟蹤上下文,制定動(dòng)態(tài)檢索與推理策略。
  • 工具選擇與數(shù)據(jù)收集:智能體智能選擇工具(如向量搜索、API連接器或其他智能體),從相關(guān)知識(shí)庫(kù)(如MCP服務(wù)器、圖數(shù)據(jù)庫(kù)、文檔存儲(chǔ))檢索數(shù)據(jù)。
  • 提示詞構(gòu)建:檢索內(nèi)容與結(jié)構(gòu)化上下文、系統(tǒng)指令結(jié)合,形成增強(qiáng)提示詞并傳遞給LLM。
  • LLM響應(yīng)生成:LLM處理優(yōu)化后的上下文提示詞,生成高相關(guān)性、可解釋且自適應(yīng)的響應(yīng)。

2. RAG范式的演進(jìn)

檢索增強(qiáng)生成(RAG)領(lǐng)域已顯著演進(jìn),以應(yīng)對(duì)現(xiàn)實(shí)應(yīng)用中日益增長(zhǎng)的復(fù)雜性——上下文準(zhǔn)確性、可擴(kuò)展性和多步推理能力至關(guān)重要。從簡(jiǎn)單的基于關(guān)鍵詞的檢索開(kāi)始,RAG已發(fā)展為復(fù)雜、模塊化且自適應(yīng)的系統(tǒng),能夠集成多樣化數(shù)據(jù)源和自主決策流程。這一演進(jìn)凸顯了RAG系統(tǒng)高效處理復(fù)雜查詢的迫切需求。

2.1 樸素RAG

樸素RAG是檢索增強(qiáng)生成的基礎(chǔ)實(shí)現(xiàn),其核心是基于關(guān)鍵詞的檢索和靜態(tài)數(shù)據(jù)集的“檢索-讀取”工作流。這類系統(tǒng)依賴TF-IDF和BM25等簡(jiǎn)單關(guān)鍵詞檢索技術(shù)從靜態(tài)數(shù)據(jù)集中獲取文檔,再利用檢索文檔增強(qiáng)語(yǔ)言模型的生成能力。

局限性

  • 缺乏上下文感知:依賴詞法匹配而非語(yǔ)義理解,導(dǎo)致檢索文檔常無(wú)法捕捉查詢的語(yǔ)義細(xì)微差別。
  • 輸出碎片化:缺少高級(jí)預(yù)處理或上下文集成,易產(chǎn)生不連貫或過(guò)于泛化的響應(yīng)。
  • 可擴(kuò)展性問(wèn)題:基于關(guān)鍵詞的檢索技術(shù)在處理大規(guī)模數(shù)據(jù)集時(shí),難以識(shí)別最相關(guān)信息。

圖片圖片

2.2 高級(jí)RAG

高級(jí)RAG系統(tǒng)通過(guò)引入語(yǔ)義理解和增強(qiáng)檢索技術(shù),彌補(bǔ)了樸素RAG的不足。這類系統(tǒng)利用密集檢索模型(如Dense Passage Retrieval, DPR)和神經(jīng)排序算法提升檢索精度,實(shí)現(xiàn)語(yǔ)義增強(qiáng)的檢索和迭代式上下文感知流水線。

圖片圖片

2.3 模塊化RAG

模塊化RAG代表了RAG范式的最新演進(jìn),強(qiáng)調(diào)靈活性和可定制性。該系統(tǒng)將檢索與生成流水線分解為獨(dú)立可復(fù)用的組件,支持領(lǐng)域特定優(yōu)化和任務(wù)適應(yīng)性,其架構(gòu)包含混合檢索策略、可組合流水線和外部工具集成。

圖片圖片

2.4 圖結(jié)構(gòu)RAG

圖結(jié)構(gòu)RAG通過(guò)集成圖數(shù)據(jù)結(jié)構(gòu)擴(kuò)展了傳統(tǒng)RAG系統(tǒng),利用圖數(shù)據(jù)中的關(guān)系和層次結(jié)構(gòu)增強(qiáng)多跳推理和上下文豐富性。通過(guò)引入圖檢索,圖結(jié)構(gòu)RAG能生成更豐富準(zhǔn)確的輸出,尤其適用于需要關(guān)系理解的任務(wù)(如醫(yī)療診斷、法律研究)。

圖片圖片

局限性

  • 可擴(kuò)展性有限:依賴圖結(jié)構(gòu)可能限制大規(guī)模數(shù)據(jù)源的擴(kuò)展。
  • 數(shù)據(jù)依賴性:高質(zhì)量圖數(shù)據(jù)是生成有意義輸出的關(guān)鍵,限制了其在非結(jié)構(gòu)化或標(biāo)注不良數(shù)據(jù)集中的應(yīng)用。
  • 集成復(fù)雜度:將圖數(shù)據(jù)與非結(jié)構(gòu)化檢索系統(tǒng)集成增加了設(shè)計(jì)和實(shí)現(xiàn)難度。

圖片圖片

2.5 具能動(dòng)性RAG

具能動(dòng)性RAG通過(guò)引入能夠動(dòng)態(tài)決策和工作流優(yōu)化的自主智能體,實(shí)現(xiàn)了范式轉(zhuǎn)換。與靜態(tài)系統(tǒng)不同,具能動(dòng)性RAG采用迭代優(yōu)化和自適應(yīng)檢索策略,以處理復(fù)雜、實(shí)時(shí)和多領(lǐng)域的查詢。該范式在引入基于智能體的自主性的同時(shí),利用了檢索和生成過(guò)程的模塊化特性。

圖片圖片

3. 傳統(tǒng)RAG系統(tǒng)的挑戰(zhàn)與局限

盡管檢索增強(qiáng)生成(RAG)通過(guò)結(jié)合生成能力與實(shí)時(shí)數(shù)據(jù)提升了LLM性能,但在復(fù)雜現(xiàn)實(shí)場(chǎng)景中仍存在關(guān)鍵挑戰(zhàn):

  1. 上下文集成難題:即使RAG系統(tǒng)成功檢索到相關(guān)信息,也常難以將其無(wú)縫融入生成響應(yīng)。檢索流水線的靜態(tài)特性和有限的上下文感知能力,導(dǎo)致輸出碎片化、不一致或過(guò)于泛化。示例:當(dāng)被問(wèn)及“阿爾茨海默病研究的最新進(jìn)展及其對(duì)早期治療的影響”時(shí),RAG可能提取相關(guān)研究,但無(wú)法將這些發(fā)現(xiàn)轉(zhuǎn)化為患者護(hù)理的可操作見(jiàn)解。
  2. 多步推理缺失:復(fù)雜問(wèn)題通常需要多步推理,但傳統(tǒng)RAG通常僅執(zhí)行單跳檢索,缺乏深度綜合能力。示例:“歐洲可再生能源政策中有哪些經(jīng)驗(yàn)可應(yīng)用于發(fā)展中國(guó)家,潛在經(jīng)濟(jì)影響如何?”這類查詢需要結(jié)合政策數(shù)據(jù)、本地上下文和經(jīng)濟(jì)預(yù)測(cè),而RAG常無(wú)法將這些要素整合成連貫答案。
  3. 可擴(kuò)展性與延遲問(wèn)題:隨著外部數(shù)據(jù)增長(zhǎng),搜索和排序大規(guī)模數(shù)據(jù)集會(huì)降低響應(yīng)速度,這對(duì)實(shí)時(shí)用例(如實(shí)時(shí)金融分析或客戶支持)構(gòu)成挑戰(zhàn)。

4. 具能動(dòng)性RAG的分類體系

4.1 單智能體具能動(dòng)性RAG:路由型

單智能體具能動(dòng)性RAG作為集中式?jīng)Q策系統(tǒng),由單個(gè)智能體管理信息的檢索、路由和集成,適用于工具或數(shù)據(jù)源有限的場(chǎng)景。

圖片

工作流程

  1. 查詢提交與評(píng)估:用戶提交查詢,協(xié)調(diào)智能體分析并確定合適的數(shù)據(jù)源。
  2. 知識(shí)源選擇:包括結(jié)構(gòu)化數(shù)據(jù)庫(kù)(如PostgreSQL、MySQL)、語(yǔ)義搜索(如PDF、書(shū)籍)、網(wǎng)頁(yè)搜索和推薦系統(tǒng)。
  3. 數(shù)據(jù)集成與LLM綜合:檢索數(shù)據(jù)傳遞給LLM,生成連貫響應(yīng)。
  4. 輸出生成:系統(tǒng)為用戶生成簡(jiǎn)潔、可操作的響應(yīng)。

圖片圖片

4.2 多智能體具能動(dòng)性RAG系統(tǒng)

多智能體系統(tǒng)中,多個(gè)專門(mén)智能體協(xié)同工作,每個(gè)智能體專注于特定數(shù)據(jù)源或任務(wù),支持復(fù)雜查詢的可擴(kuò)展、模塊化處理。

圖片圖片

工作流程

  1. 查詢提交:協(xié)調(diào)智能體接收查詢并分發(fā)給專門(mén)智能體。
  2. 專門(mén)檢索智能體:如處理結(jié)構(gòu)化數(shù)據(jù)的智能體、語(yǔ)義搜索智能體、實(shí)時(shí)網(wǎng)頁(yè)搜索智能體等。
  3. 工具訪問(wèn)與數(shù)據(jù)檢索:并行利用向量搜索、Text-to-SQL、網(wǎng)頁(yè)搜索和外部API。
  4. 數(shù)據(jù)集成與LLM綜合:聚合數(shù)據(jù)傳遞給LLM,生成全面輸出。

4.3 分層式具能動(dòng)性RAG系統(tǒng)

分層系統(tǒng)采用結(jié)構(gòu)化的多層方法處理信息檢索與流程,智能體按層級(jí)組織,高層智能體監(jiān)督指導(dǎo)低層智能體,實(shí)現(xiàn)多級(jí)決策。

工作流程

  1. 查詢接收:頂層智能體接收查詢并負(fù)責(zé)初始評(píng)估與任務(wù)分配。
  2. 戰(zhàn)略決策:頂層智能體評(píng)估查詢復(fù)雜度,根據(jù)領(lǐng)域相關(guān)性和數(shù)據(jù)可靠性選擇下屬智能體、數(shù)據(jù)庫(kù)或API。
  3. 任務(wù)委派:任務(wù)分配給專門(mén)的低層智能體,獨(dú)立執(zhí)行檢索。
  4. 聚合與綜合:低層智能體將結(jié)果返回頂層智能體,集成綜合為統(tǒng)一響應(yīng)。

4.4 具能動(dòng)性糾正型RAG

糾正型RAG引入自我糾正機(jī)制,通過(guò)在工作流中嵌入智能體,迭代優(yōu)化檢索結(jié)果,提升文檔利用率和響應(yīng)質(zhì)量。

工作流程

  1. 上下文檢索智能體:從向量數(shù)據(jù)庫(kù)檢索初始上下文文檔。
  2. 相關(guān)性評(píng)估智能體:評(píng)估檢索文檔的相關(guān)性,標(biāo)記不相關(guān)或模糊文檔。
  3. 查詢優(yōu)化智能體:利用語(yǔ)義理解重寫(xiě)和優(yōu)化查詢,改善檢索結(jié)果。
  4. 外部知識(shí)檢索智能體:若上下文不足,執(zhí)行網(wǎng)頁(yè)搜索或訪問(wèn)替代數(shù)據(jù)源。

圖片圖片

4.5 自適應(yīng)具能動(dòng)性RAG

自適應(yīng)RAG通過(guò)基于查詢復(fù)雜度定制檢索策略,引入動(dòng)態(tài)查詢處理能力,提升靈活性和效率。

圖片圖片

核心邏輯

  • 簡(jiǎn)單查詢:直接生成響應(yīng)(如“水的沸點(diǎn)是多少?”)。
  • 中等復(fù)雜查詢:?jiǎn)尾綑z索(如“我最新的電費(fèi)賬單狀態(tài)如何?”)。
  • 復(fù)雜查詢:多步檢索與迭代優(yōu)化(如“城市X過(guò)去十年人口變化及其影響因素”)。

圖片圖片

4.6 基于圖結(jié)構(gòu)的具能動(dòng)性RAG

4.6.1 Agent-G:圖結(jié)構(gòu)RAG的具能動(dòng)性框架

Agent-G引入新型架構(gòu),將圖知識(shí)庫(kù)與非結(jié)構(gòu)化文檔檢索結(jié)合,提升RAG系統(tǒng)的推理和檢索精度,其核心包括圖知識(shí)庫(kù)、非結(jié)構(gòu)化文檔處理、批評(píng)模塊和反饋循環(huán)。

4.6.2 GeAR:圖增強(qiáng)型具能動(dòng)性RAG

GeAR通過(guò)集成圖結(jié)構(gòu)檢索和智能體控制,增強(qiáng)傳統(tǒng)RAG,改善復(fù)雜查詢的多跳檢索能力,其核心是圖擴(kuò)展模塊和基于智能體的檢索策略管理。

圖片圖片

圖片圖片

4.7 具能動(dòng)性文檔工作流(ADW)

ADW通過(guò)在以文檔為中心的流程中編排端到端知識(shí)工作自動(dòng)化,擴(kuò)展傳統(tǒng)RAG,集成解析、檢索、推理和結(jié)構(gòu)化輸出與智能體。

5. 具能動(dòng)性RAG框架的對(duì)比分析

圖片圖片

6. 構(gòu)建具能動(dòng)性RAG系統(tǒng)

本教程將構(gòu)建一個(gè)檢索智能體,使LLM能夠決策是從向量存儲(chǔ)檢索上下文還是直接響應(yīng)用戶。

圖片圖片

6.1 文檔預(yù)處理

  • 獲取文檔:使用WebBaseLoader獲取Lilian Weng博客的最新頁(yè)面:
from langchain_community.document_loaders import WebBaseLoader
urls = [
    "https://lilianweng.github.io/posts/2024-11-28-reward-hacking/",
    "https://lilianweng.github.io/posts/2024-07-07-hallucination/",
    "https://lilianweng.github.io/posts/2024-04-12-diffusion-video/",
]
docs = [WebBaseLoader(url).load() for url in urls]
  • 分割文檔:將文檔分割為小塊以便索引到向量存儲(chǔ):
from langchain_text_splitters import RecursiveCharacterTextSplitter
docs_list = [item for sublist in docs for item in sublist]
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=100, chunk_overlap=50
)
doc_splits = text_splitter.split_documents(docs_list)

6.2 創(chuàng)建檢索工具

  • 初始化向量存儲(chǔ):使用內(nèi)存向量存儲(chǔ)和OpenAI嵌入:
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
vectorstore = InMemoryVectorStore.from_documents(
    documents=doc_splits, embedding=OpenAIEmbeddings()
)
retriever = vectorstore.as_retriever()
  • 創(chuàng)建檢索工具:使用LangChain的create_retriever_tool
from langchain.tools.retriever import create_retriever_tool
retriever_tool = create_retriever_tool(
    retriever,
    "retrieve_blog_posts",
    "Search and return information about Lilian Weng blog posts.",
)
  • 測(cè)試工具
retriever_tool.invoke({"query": "types of reward hacking"})

6.3 生成查詢

構(gòu)建generate_query_or_respond節(jié)點(diǎn),調(diào)用LLM基于當(dāng)前圖狀態(tài)生成響應(yīng),決定是檢索還是直接響應(yīng):

from langgraph.graph import MessagesState
from langchain.chat_models import init_chat_model
response_model = init_chat_model("openai:gpt-4.1", temperature=0)

def generate_query_or_respond(state: MessagesState):
    """根據(jù)當(dāng)前狀態(tài)調(diào)用模型生成響應(yīng),決定檢索或直接回答。"""
    response = (
        response_model
        .bind_tools([retriever_tool]).invoke(state["messages"])
    )
    return {"messages": [response]}

6.4 文檔評(píng)分

在構(gòu)建智能體增強(qiáng)檢索生成(Agentic RAG)系統(tǒng)時(shí),文檔評(píng)分是關(guān)鍵環(huán)節(jié),它能評(píng)估檢索結(jié)果的相關(guān)性并決定后續(xù)處理流程。以下是具體實(shí)現(xiàn)步驟及代碼解析:

6.4.1 添加條件邊:文檔相關(guān)性評(píng)估

我們需要?jiǎng)?chuàng)建一個(gè)條件邊grade_documents,通過(guò)結(jié)構(gòu)化輸出模型判斷檢索文檔是否與用戶問(wèn)題相關(guān)。該函數(shù)會(huì)根據(jù)評(píng)分結(jié)果決定下一步操作(生成答案或重寫(xiě)問(wèn)題)。

代碼實(shí)現(xiàn):

from pydantic import BaseModel, Field
from typing import Literal

# 定義文檔評(píng)分提示詞,用于評(píng)估檢索文檔與問(wèn)題的相關(guān)性
GRADE_PROMPT = (
    "你是一個(gè)評(píng)分器,負(fù)責(zé)評(píng)估檢索到的文檔與用戶問(wèn)題的相關(guān)性。\n"
    "以下是檢索到的文檔:\n\n{context}\n\n"
    "以下是用戶問(wèn)題:{question}\n"
    "如果文檔包含與用戶問(wèn)題相關(guān)的關(guān)鍵詞或語(yǔ)義含義,則評(píng)為相關(guān)。\n"
    "請(qǐng)給出二進(jìn)制評(píng)分'yes'或'no',表示文檔是否與問(wèn)題相關(guān)。"
)

# 定義結(jié)構(gòu)化輸出模型,用于規(guī)范評(píng)分結(jié)果格式
class GradeDocuments(BaseModel):
    """使用二進(jìn)制評(píng)分檢查文檔相關(guān)性"""
    binary_score: str = Field(
        descriptinotallow="相關(guān)性評(píng)分:'yes'表示相關(guān),'no'表示不相關(guān)"
    )

# 初始化評(píng)分模型(使用GPT-4.1,溫度系數(shù)為0以保證確定性)
grader_model = init_chat_model("openai:gpt-4.1", temperature=0)

def grade_documents(
    state: MessagesState,
) -> Literal["generate_answer", "rewrite_question"]:
    """判斷檢索到的文檔是否與問(wèn)題相關(guān)"""
    question = state["messages"][0].content  # 提取用戶問(wèn)題
    context = state["messages"][-1].content  # 提取檢索到的文檔內(nèi)容
    
    # 格式化提示詞,傳入問(wèn)題和文檔內(nèi)容
    prompt = GRADE_PROMPT.format(questinotallow=question, cnotallow=context)
    
    # 調(diào)用評(píng)分模型,使用結(jié)構(gòu)化輸出解析結(jié)果
    response = (
        grader_model
        .with_structured_output(GradeDocuments).invoke(
            [{"role": "user", "content": prompt}]
        )
    )
    
    score = response.binary_score  # 提取評(píng)分結(jié)果
    if score == "yes":
        return"generate_answer"# 相關(guān)則進(jìn)入答案生成環(huán)節(jié)
    else:
        return"rewrite_question"# 不相關(guān)則重寫(xiě)問(wèn)題

6.4.2 測(cè)試:不相關(guān)文檔的評(píng)分流程

通過(guò)模擬不相關(guān)的檢索結(jié)果,驗(yàn)證評(píng)分函數(shù)是否能正確識(shí)別并觸發(fā)重寫(xiě)問(wèn)題邏輯。

代碼實(shí)現(xiàn):

from langchain_core.messages import convert_to_messages

# 構(gòu)造測(cè)試輸入:用戶問(wèn)題、檢索工具調(diào)用、不相關(guān)的工具響應(yīng)("meow")
input = {
    "messages": convert_to_messages(
        [
            {
                "role": "user",
                "content": "Lilian Weng 對(duì)獎(jiǎng)勵(lì)黑客的類型有什么看法?",
            },
            {
                "role": "assistant",
                "content": "",
                "tool_calls": [
                    {
                        "id": "1",
                        "name": "retrieve_blog_posts",
                        "args": {"query": "types of reward hacking"},
                    }
                ],
            },
            {"role": "tool", "content": "meow", "tool_call_id": "1"},
        ]
    )
}

# 調(diào)用文檔評(píng)分函數(shù),查看返回的下一步操作
grade_documents(input)  # 應(yīng)返回"rewrite_question"

6.4.3 測(cè)試:相關(guān)文檔的評(píng)分流程

使用包含正確信息的檢索結(jié)果,驗(yàn)證評(píng)分函數(shù)是否能正確識(shí)別并允許生成答案。

代碼實(shí)現(xiàn):

# 構(gòu)造測(cè)試輸入:用戶問(wèn)題、檢索工具調(diào)用、相關(guān)的工具響應(yīng)(包含獎(jiǎng)勵(lì)黑客類型的描述)
input = {
    "messages": convert_to_messages(
        [
            {
                "role": "user",
                "content": "Lilian Weng 對(duì)獎(jiǎng)勵(lì)黑客的類型有什么看法?",
            },
            {
                "role": "assistant",
                "content": "",
                "tool_calls": [
                    {
                        "id": "1",
                        "name": "retrieve_blog_posts",
                        "args": {"query": "types of reward hacking"},
                    }
                ],
            },
            {
                "role": "tool",
                "content": "獎(jiǎng)勵(lì)黑客可分為兩類:環(huán)境或目標(biāo)指定錯(cuò)誤,以及獎(jiǎng)勵(lì)篡改",
                "tool_call_id": "1",
            },
        ]
    )
}

# 調(diào)用文檔評(píng)分函數(shù),查看返回的下一步操作
grade_documents(input)  # 應(yīng)返回"generate_answer"

6.4.4 核心邏輯解析

  • 評(píng)分機(jī)制:通過(guò)提示詞引導(dǎo)模型分析文檔與問(wèn)題的語(yǔ)義相關(guān)性,使用二進(jìn)制評(píng)分(yes/no)簡(jiǎn)化決策流程。
  • 結(jié)構(gòu)化輸出:利用Pydantic模型GradeDocuments確保評(píng)分結(jié)果格式統(tǒng)一,避免非結(jié)構(gòu)化文本導(dǎo)致的解析錯(cuò)誤。
  • 動(dòng)態(tài)路由:根據(jù)評(píng)分結(jié)果決定流程走向:

若相關(guān)(yes),進(jìn)入generate_answer生成最終回答;

若不相關(guān)(no),進(jìn)入rewrite_question優(yōu)化查詢語(yǔ)句,避免無(wú)效檢索。

6.4.5 實(shí)際應(yīng)用優(yōu)化建議

  1. 評(píng)分提示詞優(yōu)化:可根據(jù)領(lǐng)域特性調(diào)整提示詞,例如在醫(yī)療場(chǎng)景中加入專業(yè)術(shù)語(yǔ)匹配規(guī)則。
  2. 多輪評(píng)分機(jī)制:對(duì)于復(fù)雜問(wèn)題,可引入多輪評(píng)分(如結(jié)合TF-IDF權(quán)重和語(yǔ)義相似度),降低誤判率。
  3. 人工反饋集成:在生產(chǎn)環(huán)境中,可收集人工標(biāo)注數(shù)據(jù)微調(diào)評(píng)分模型,提升長(zhǎng)期準(zhǔn)確性。

通過(guò)文檔評(píng)分環(huán)節(jié),Agentic RAG系統(tǒng)能夠自主過(guò)濾無(wú)效信息,確保后續(xù)生成的回答基于高質(zhì)量上下文,這是區(qū)別于傳統(tǒng)RAG系統(tǒng)的核心能力之一。

6.5 重寫(xiě)問(wèn)題

在智能體增強(qiáng)檢索生成(Agentic RAG)系統(tǒng)中,當(dāng)檢索工具返回不相關(guān)文檔時(shí),需要通過(guò)重寫(xiě)問(wèn)題來(lái)優(yōu)化查詢邏輯。這一環(huán)節(jié)能有效提升檢索準(zhǔn)確性,避免因原始問(wèn)題表述模糊導(dǎo)致的無(wú)效響應(yīng)。以下是具體實(shí)現(xiàn)步驟及代碼解析:

6.5.1 構(gòu)建rewrite_question節(jié)點(diǎn)

該節(jié)點(diǎn)的核心功能是基于原始用戶問(wèn)題生成更精準(zhǔn)的查詢語(yǔ)句,引導(dǎo)檢索工具獲取相關(guān)信息。通過(guò)調(diào)用語(yǔ)言模型,系統(tǒng)能理解問(wèn)題的深層語(yǔ)義意圖,并重新組織表述方式。

代碼實(shí)現(xiàn):

# 定義問(wèn)題重寫(xiě)提示詞,引導(dǎo)模型分析問(wèn)題語(yǔ)義并優(yōu)化表述
REWRITE_PROMPT = (
    "請(qǐng)分析輸入內(nèi)容,推理其潛在的語(yǔ)義意圖/含義。\n"
    "以下是初始問(wèn)題:\n"
    "------- \n"
    "{question}"
    "\n ------- \n"
    "請(qǐng)構(gòu)建一個(gè)優(yōu)化后的問(wèn)題:"
)

def rewrite_question(state: MessagesState):
    """重寫(xiě)原始用戶問(wèn)題,提升檢索相關(guān)性"""
    messages = state["messages"]  # 獲取對(duì)話狀態(tài)中的消息列表
    question = messages[0].content  # 提取用戶的原始問(wèn)題
    
    # 格式化提示詞,傳入原始問(wèn)題
    prompt = REWRITE_PROMPT.format(questinotallow=question)
    
    # 調(diào)用語(yǔ)言模型生成優(yōu)化后的問(wèn)題
    response = response_model.invoke([{"role": "user", "content": prompt}])
    
    # 返回重寫(xiě)后的問(wèn)題,更新對(duì)話狀態(tài)
    return {"messages": [{"role": "user", "content": response.content}]}

6.5.2 功能測(cè)試:重寫(xiě)問(wèn)題流程演示

通過(guò)模擬不相關(guān)檢索結(jié)果的場(chǎng)景,驗(yàn)證rewrite_question節(jié)點(diǎn)是否能生成更精準(zhǔn)的查詢語(yǔ)句。

代碼實(shí)現(xiàn):

# 構(gòu)造測(cè)試輸入:用戶問(wèn)題、檢索工具調(diào)用、不相關(guān)的工具響應(yīng)("meow")
input = {
    "messages": convert_to_messages(
        [
            {
                "role": "user",
                "content": "Lilian Weng 對(duì)獎(jiǎng)勵(lì)黑客的類型有什么看法?",
            },
            {
                "role": "assistant",
                "content": "",
                "tool_calls": [
                    {
                        "id": "1",
                        "name": "retrieve_blog_posts",
                        "args": {"query": "types of reward hacking"},
                    }
                ],
            },
            {"role": "tool", "content": "meow", "tool_call_id": "1"},
        ]
    )
}

# 調(diào)用問(wèn)題重寫(xiě)函數(shù)
response = rewrite_question(input)

# 打印重寫(xiě)后的問(wèn)題
print("重寫(xiě)后的問(wèn)題:")
print(response["messages"][-1]["content"])

6.5.3 核心邏輯解析

  • 語(yǔ)義理解:通過(guò)提示詞引導(dǎo)語(yǔ)言模型分析原始問(wèn)題的深層意圖,而非僅關(guān)注表面關(guān)鍵詞。例如,將“獎(jiǎng)勵(lì)黑客的類型”理解為“分類方式”或“具體類別”。
  • 表述優(yōu)化:模型會(huì)將模糊或歧義的問(wèn)題轉(zhuǎn)化為更精準(zhǔn)的查詢。例如,將“什么看法”轉(zhuǎn)化為“如何分類”或“包含哪些類型”。
  • 流程閉環(huán):重寫(xiě)后的問(wèn)題會(huì)重新觸發(fā)檢索流程,形成“查詢優(yōu)化-重新檢索”的閉環(huán),確保系統(tǒng)能自主修正檢索方向。

6.5.4 實(shí)際應(yīng)用優(yōu)化建議

  • 領(lǐng)域特定提示詞:針對(duì)不同場(chǎng)景(如醫(yī)療、法律)定制重寫(xiě)提示詞,融入領(lǐng)域術(shù)語(yǔ)。例如,在法律場(chǎng)景中,將“合同問(wèn)題”重寫(xiě)為“合同條款爭(zhēng)議類型”。
  • 用戶意圖聚類:通過(guò)歷史對(duì)話數(shù)據(jù)聚類用戶意圖,預(yù)定義常見(jiàn)問(wèn)題的優(yōu)化模板,提升重寫(xiě)效率。
  • 多輪重寫(xiě)機(jī)制:對(duì)于復(fù)雜問(wèn)題,可設(shè)置多輪重寫(xiě)(如首次重寫(xiě)聚焦語(yǔ)義,二次重寫(xiě)補(bǔ)充限定條件),逐步縮小檢索范圍。

6.5.5 示例:重寫(xiě)效果演示

原始問(wèn)題:“Lilian Weng 對(duì)獎(jiǎng)勵(lì)黑客的類型有什么看法?”不相關(guān)檢索結(jié)果:“meow”(模擬無(wú)效數(shù)據(jù))重寫(xiě)后問(wèn)題(可能輸出):“Lilian Weng 論文中提到的獎(jiǎng)勵(lì)黑客分類方式有哪些?”

通過(guò)添加“論文中提到的”限定條件,明確了信息來(lái)源,同時(shí)將“類型”轉(zhuǎn)化為“分類方式”,更符合學(xué)術(shù)文獻(xiàn)的表述習(xí)慣,從而提升后續(xù)檢索的相關(guān)性。

問(wèn)題重寫(xiě)是Agentic RAG系統(tǒng)實(shí)現(xiàn)自主優(yōu)化的關(guān)鍵環(huán)節(jié),它賦予系統(tǒng)“反思”和“調(diào)整”的能力,避免傳統(tǒng)RAG中“錯(cuò)誤查詢-無(wú)效結(jié)果”的死循環(huán)。

6.6 生成答案

在智能體增強(qiáng)檢索生成(Agentic RAG)系統(tǒng)中,當(dāng)檢索文檔通過(guò)相關(guān)性評(píng)分后,需要基于用戶問(wèn)題和檢索內(nèi)容生成最終回答。這一環(huán)節(jié)要求語(yǔ)言模型(LLM)不僅能整合信息,還能以自然、簡(jiǎn)潔的方式呈現(xiàn)結(jié)果。以下是具體實(shí)現(xiàn)步驟及代碼解析:

6.6.1 構(gòu)建generate_answer節(jié)點(diǎn)

該節(jié)點(diǎn)的核心功能是根據(jù)用戶問(wèn)題和檢索到的上下文生成回答。通過(guò)定制提示詞,引導(dǎo)模型提煉關(guān)鍵信息并控制輸出長(zhǎng)度,確?;卮鸷?jiǎn)潔且準(zhǔn)確。

代碼實(shí)現(xiàn):

# 定義答案生成提示詞,引導(dǎo)模型基于上下文回答問(wèn)題
GENERATE_PROMPT = (
    "你是一個(gè)問(wèn)答助手。請(qǐng)使用以下檢索到的上下文回答問(wèn)題。"
    "如果不知道答案,請(qǐng)直接說(shuō)明不知道。"
    "最多使用三個(gè)句子,保持回答簡(jiǎn)潔。\n"
    "問(wèn)題:{question} \n"
    "上下文:{context}"
)

def generate_answer(state: MessagesState):
    """基于用戶問(wèn)題和檢索上下文生成最終答案"""
    question = state["messages"][0].content  # 提取用戶問(wèn)題
    context = state["messages"][-1].content  # 提取檢索到的上下文內(nèi)容
    
    # 格式化提示詞,傳入問(wèn)題和上下文
    prompt = GENERATE_PROMPT.format(questinotallow=question, cnotallow=context)
    
    # 調(diào)用語(yǔ)言模型生成回答
    response = response_model.invoke([{"role": "user", "content": prompt}])
    
    # 返回生成的答案,更新對(duì)話狀態(tài)
    return {"messages": [response]}

6.6.2 功能測(cè)試:答案生成流程演示

通過(guò)模擬相關(guān)檢索結(jié)果的場(chǎng)景,驗(yàn)證generate_answer節(jié)點(diǎn)是否能正確整合信息并生成有效回答。

代碼實(shí)現(xiàn):

# 構(gòu)造測(cè)試輸入:用戶問(wèn)題、檢索工具調(diào)用、相關(guān)的工具響應(yīng)(包含獎(jiǎng)勵(lì)黑客類型的描述)
input = {
    "messages": convert_to_messages(
        [
            {
                "role": "user",
                "content": "Lilian Weng 對(duì)獎(jiǎng)勵(lì)黑客的類型有什么看法?",
            },
            {
                "role": "assistant",
                "content": "",
                "tool_calls": [
                    {
                        "id": "1",
                        "name": "retrieve_blog_posts",
                        "args": {"query": "types of reward hacking"},
                    }
                ],
            },
            {
                "role": "tool",
                "content": "reward hacking can be categorized into two types: environment or goal misspecification, and reward tampering",
                "tool_call_id": "1",
            },
        ]
    )
}

# 調(diào)用答案生成函數(shù)
response = generate_answer(input)

# 打印生成的答案
print("生成的答案:")
response["messages"][-1].pretty_print()

6.6.3 核心邏輯解析

  • 信息整合:模型會(huì)從上下文中提取與問(wèn)題相關(guān)的關(guān)鍵信息。例如,從“兩類:環(huán)境或目標(biāo)指定錯(cuò)誤、獎(jiǎng)勵(lì)篡改”中提煉分類結(jié)果。
  • 格式控制:通過(guò)提示詞限定回答長(zhǎng)度(最多三句話),避免生成冗長(zhǎng)或無(wú)關(guān)內(nèi)容,提升信息密度。
  • 不確定性處理:若上下文缺乏足夠信息,模型會(huì)遵循提示詞要求,直接說(shuō)明“不知道”,避免虛構(gòu)答案。

6.6.4 實(shí)際應(yīng)用優(yōu)化建議

  • 回答風(fēng)格定制:根據(jù)應(yīng)用場(chǎng)景調(diào)整提示詞,例如:

客服場(chǎng)景:“請(qǐng)用口語(yǔ)化表達(dá),分點(diǎn)說(shuō)明解決方案”

學(xué)術(shù)場(chǎng)景:“請(qǐng)引用上下文觀點(diǎn),并補(bǔ)充相關(guān)研究背景”

  • 證據(jù)溯源機(jī)制:在回答中加入上下文引用標(biāo)記(如“根據(jù)文檔第3段”),提升回答可信度。
  • 多輪生成優(yōu)化:對(duì)于復(fù)雜問(wèn)題,可先生成草稿回答,再通過(guò)提示詞優(yōu)化表述(如“將技術(shù)術(shù)語(yǔ)轉(zhuǎn)化為通俗語(yǔ)言”)。

6.6.5 示例:答案生成效果

用戶問(wèn)題:“Lilian Weng 對(duì)獎(jiǎng)勵(lì)黑客的類型有什么看法?”檢索上下文:“獎(jiǎng)勵(lì)黑客可分為兩類:環(huán)境或目標(biāo)指定錯(cuò)誤,以及獎(jiǎng)勵(lì)篡改。”生成答案

Lilian Weng將獎(jiǎng)勵(lì)黑客分為兩類:環(huán)境或目標(biāo)指定錯(cuò)誤,以及獎(jiǎng)勵(lì)篡改。她認(rèn)為獎(jiǎng)勵(lì)黑客是一個(gè)更廣泛的概念,其中包含了獎(jiǎng)勵(lì)篡改。部分研究將獎(jiǎng)勵(lì)篡改單獨(dú)定義,但Weng將其歸為獎(jiǎng)勵(lì)黑客的范疇。

該回答不僅整合了上下文的分類信息,還補(bǔ)充了概念范疇的說(shuō)明,符合“三句話內(nèi)簡(jiǎn)潔回答”的要求,同時(shí)保持了學(xué)術(shù)表述的嚴(yán)謹(jǐn)性。

答案生成是Agentic RAG系統(tǒng)的最終輸出環(huán)節(jié),其質(zhì)量直接影響用戶體驗(yàn)。通過(guò)精準(zhǔn)的提示詞設(shè)計(jì)和模型調(diào)用,系統(tǒng)能將檢索到的碎片化信息轉(zhuǎn)化為結(jié)構(gòu)化回答。

6.7 組裝圖結(jié)構(gòu)

在完成文檔預(yù)處理、檢索工具創(chuàng)建、查詢生成、文檔評(píng)分、問(wèn)題重寫(xiě)和答案生成等核心組件后,需要將這些功能模塊組裝成一個(gè)完整的圖結(jié)構(gòu)工作流。通過(guò)狀態(tài)圖(StateGraph)的形式,Agentic RAG系統(tǒng)能夠?qū)崿F(xiàn)組件間的動(dòng)態(tài)路由和條件跳轉(zhuǎn),形成自主決策的檢索-生成閉環(huán)。以下是具體實(shí)現(xiàn)步驟及架構(gòu)解析:

6.7.1 構(gòu)建狀態(tài)圖工作流

使用LangGraph框架的StateGraph類定義組件間的連接關(guān)系,通過(guò)條件邊實(shí)現(xiàn)基于規(guī)則的流程控制。以下是完整的圖結(jié)構(gòu)組裝代碼:

代碼實(shí)現(xiàn):

from langgraph.graph import StateGraph, START, END
from langgraph.prebuilt import ToolNode
from langgraph.prebuilt import tools_condition

# 初始化狀態(tài)圖,指定狀態(tài)類型為MessagesState(包含對(duì)話消息列表)
workflow = StateGraph(MessagesState)

# 添加核心功能節(jié)點(diǎn)
workflow.add_node(generate_query_or_respond)  # 查詢生成/響應(yīng)節(jié)點(diǎn)
workflow.add_node("retrieve", ToolNode([retriever_tool]))  # 檢索工具節(jié)點(diǎn)
workflow.add_node(rewrite_question)  # 問(wèn)題重寫(xiě)節(jié)點(diǎn)
workflow.add_node(generate_answer)  # 答案生成節(jié)點(diǎn)

# 定義起始節(jié)點(diǎn)到查詢生成節(jié)點(diǎn)的連接
workflow.add_edge(START, "generate_query_or_respond")

# 添加條件邊:根據(jù)查詢生成節(jié)點(diǎn)的輸出決定是否調(diào)用檢索工具
workflow.add_conditional_edges(
    "generate_query_or_respond",
    # 使用tools_condition函數(shù)判斷是否需要調(diào)用工具
    tools_condition,
    {
        "tools": "retrieve",  # 如需調(diào)用工具則跳轉(zhuǎn)至檢索節(jié)點(diǎn)
        END: END  # 如直接響應(yīng)則結(jié)束流程
    },
)

# 添加檢索節(jié)點(diǎn)后的條件邊:根據(jù)文檔評(píng)分結(jié)果決定下一步
workflow.add_conditional_edges(
    "retrieve",
    # 調(diào)用grade_documents函數(shù)評(píng)估文檔相關(guān)性
    grade_documents,
    {
        "generate_answer": "generate_answer",  # 相關(guān)則生成答案
        "rewrite_question": "rewrite_question"# 不相關(guān)則重寫(xiě)問(wèn)題
    },
)

# 添加最終節(jié)點(diǎn)連接
workflow.add_edge("generate_answer", END)  # 答案生成后結(jié)束流程
workflow.add_edge("rewrite_question", "generate_query_or_respond")  # 重寫(xiě)問(wèn)題后重新生成查詢

# 編譯狀態(tài)圖為可執(zhí)行的工作流
graph = workflow.compile()

6.7.2 圖結(jié)構(gòu)可視化

通過(guò)Mermaid語(yǔ)法繪制狀態(tài)圖,直觀展示組件間的交互邏輯。以下是生成可視化圖像的代碼:

代碼實(shí)現(xiàn):

from IPython.display import Image, display

# 生成狀態(tài)圖的Mermaid格式并轉(zhuǎn)換為PNG圖像
display(Image(graph.get_graph().draw_mermaid_png()))

6.7.3 圖結(jié)構(gòu)核心組件解析

  1. 節(jié)點(diǎn)類型
  • 生成查詢/響應(yīng)節(jié)點(diǎn)generate_query_or_respond):決定是否調(diào)用檢索工具或直接回答。
  • 檢索節(jié)點(diǎn)retrieve):調(diào)用向量數(shù)據(jù)庫(kù)獲取相關(guān)文檔。
  • 問(wèn)題重寫(xiě)節(jié)點(diǎn)rewrite_question):優(yōu)化查詢語(yǔ)句。
  • 答案生成節(jié)點(diǎn)generate_answer):整合信息生成回答。
  1. 邊的類型
  • tools_condition:根據(jù)LLM是否返回工具調(diào)用指令決定是否檢索。
  • grade_documents:根據(jù)文檔相關(guān)性評(píng)分決定生成答案或重寫(xiě)問(wèn)題。
  • 無(wú)條件邊add_edge):固定流程跳轉(zhuǎn)(如起始節(jié)點(diǎn)到查詢生成節(jié)點(diǎn))。
  • 條件邊add_conditional_edges):
  1. 狀態(tài)流轉(zhuǎn)邏輯
graph TD
START --> generate_query_or_respond
generate_query_or_respond -->|需要工具| retrieve
generate_query_or_respond -->|直接響應(yīng)| END
retrieve -->|文檔相關(guān)| generate_answer
retrieve -->|文檔不相關(guān)| rewrite_question
rewrite_question --> generate_query_or_respond
generate_answer --> END

6.7.4 動(dòng)態(tài)路由機(jī)制詳解

  • 工具調(diào)用判斷tools_condition函數(shù)會(huì)檢查L(zhǎng)LM輸出中是否包含tool_calls字段。若有,則觸發(fā)檢索工具;若無(wú),則直接生成回答。
  • 文檔相關(guān)性決策grade_documents函數(shù)根據(jù)評(píng)分結(jié)果(yes/no)決定流程走向,形成“檢索-評(píng)估-修正”的閉環(huán)。
  • 重寫(xiě)優(yōu)化循環(huán):當(dāng)文檔不相關(guān)時(shí),系統(tǒng)通過(guò)rewrite_question節(jié)點(diǎn)優(yōu)化查詢,再重新進(jìn)入檢索流程,避免重復(fù)無(wú)效檢索。

6.7.5 實(shí)際應(yīng)用架構(gòu)優(yōu)化建議

  • 分層圖結(jié)構(gòu)設(shè)計(jì):對(duì)于復(fù)雜場(chǎng)景(如多數(shù)據(jù)源檢索),可采用分層架構(gòu),將節(jié)點(diǎn)按“策略層-執(zhí)行層-優(yōu)化層”分組,提升可維護(hù)性。
  • 并行檢索節(jié)點(diǎn):在多智能體場(chǎng)景中,可添加并行檢索節(jié)點(diǎn)(如同時(shí)查詢內(nèi)部知識(shí)庫(kù)和外部API),通過(guò)聚合節(jié)點(diǎn)合并結(jié)果。
  • 超時(shí)熔斷機(jī)制:在檢索節(jié)點(diǎn)中加入超時(shí)控制,當(dāng)響應(yīng)時(shí)間超過(guò)閾值時(shí)自動(dòng)觸發(fā)備用流程(如使用緩存數(shù)據(jù)或降級(jí)回答)。

6.7.6 圖結(jié)構(gòu)的核心優(yōu)勢(shì)

  1. 可視化流程管理:通過(guò)狀態(tài)圖可直觀監(jiān)控系統(tǒng)運(yùn)行路徑,便于調(diào)試和優(yōu)化。
  2. 可擴(kuò)展性:新增功能(如多模態(tài)檢索)時(shí),只需添加新節(jié)點(diǎn)并定義邊的連接規(guī)則,無(wú)需修改現(xiàn)有邏輯。
  3. 故障定位:當(dāng)輸出異常時(shí),可通過(guò)狀態(tài)圖追溯具體節(jié)點(diǎn)的輸入輸出,快速定位問(wèn)題環(huán)節(jié)。

圖片圖片

狀態(tài)圖的組裝標(biāo)志著Agentic RAG系統(tǒng)從組件開(kāi)發(fā)進(jìn)入整體集成階段。通過(guò)圖結(jié)構(gòu)的動(dòng)態(tài)路由能力,系統(tǒng)能夠像人類一樣自主規(guī)劃?rùn)z索策略、修正查詢方向并生成回答。

6.8 運(yùn)行智能體RAG

在完成智能體增強(qiáng)檢索生成(Agentic RAG)系統(tǒng)的圖結(jié)構(gòu)組裝后,需要通過(guò)實(shí)際案例演示完整工作流的執(zhí)行過(guò)程。以下將通過(guò)模擬用戶查詢場(chǎng)景,展示系統(tǒng)如何從問(wèn)題分析、文檔檢索、內(nèi)容評(píng)估到最終答案生成的全流程自主決策能力,并解析關(guān)鍵環(huán)節(jié)的運(yùn)行機(jī)制。

6.8.1 全流程運(yùn)行演示

通過(guò)graph.stream()方法啟動(dòng)流式運(yùn)行,實(shí)時(shí)觀察每個(gè)節(jié)點(diǎn)的輸出和狀態(tài)流轉(zhuǎn)。以下是完整的運(yùn)行代碼及輸出解析:

代碼實(shí)現(xiàn):

# 定義用戶查詢:關(guān)于Lilian Weng對(duì)獎(jiǎng)勵(lì)黑客類型的觀點(diǎn)
user_query = "What does Lilian Weng say about types of reward hacking?"

# 啟動(dòng)流式運(yùn)行,獲取每個(gè)節(jié)點(diǎn)的實(shí)時(shí)輸出
for chunk in graph.stream(
    {
        "messages": [
            {
                "role": "user",
                "content": user_query
            }
        ]
    }
):
    for node, update in chunk.items():
        print(f"【節(jié)點(diǎn)輸出:{node}】")
        print("-" * 50)
        
        # 解析消息內(nèi)容,區(qū)分AI回復(fù)、工具調(diào)用等類型
        messages = update["messages"]
        for msg in messages:
            if msg.role == "assistant"and msg.tool_calls:
                # 處理工具調(diào)用指令
                tool_call = msg.tool_calls[0]
                print(f"AI決策:調(diào)用工具 {tool_call.name}")
                print(f"工具參數(shù):{tool_call.args}")
            elif msg.role == "tool":
                # 處理工具返回結(jié)果
                print(f"工具響應(yīng):{msg.content[:100]}...")  # 截?cái)嚅L(zhǎng)內(nèi)容便于展示
            else:
                # 處理最終答案
                print(f"最終回答:{msg.content}")
        
        print("\n" + "=" * 60 + "\n")

6.8.2 運(yùn)行流程分步解析

第一步:查詢生成節(jié)點(diǎn)(generate_query_or_respond)
【節(jié)點(diǎn)輸出:generate_query_or_respond】
--------------------------------------------------
AI決策:調(diào)用工具 retrieve_blog_posts
工具參數(shù):{'query': 'types of reward hacking'}
==================================================
  • 核心邏輯:系統(tǒng)分析用戶問(wèn)題后,判斷需要調(diào)用檢索工具(retrieve_blog_posts),并生成關(guān)鍵詞查詢“types of reward hacking”。
  • 決策依據(jù):用戶問(wèn)題涉及特定領(lǐng)域知識(shí)(Lilian Weng的研究),需外部文檔支持,因此觸發(fā)工具調(diào)用。
第二步:檢索節(jié)點(diǎn)(retrieve)
【節(jié)點(diǎn)輸出:retrieve】
--------------------------------------------------
工具響應(yīng):Detecting Reward Hacking#In-Context Reward Hacking#...(截?cái)囡@示)
==================================================
  • 核心邏輯:檢索工具根據(jù)查詢?cè)~從向量數(shù)據(jù)庫(kù)中獲取相關(guān)文檔,返回包含“獎(jiǎng)勵(lì)黑客分類”的內(nèi)容片段。
  • 關(guān)鍵信息:文檔中明確提到“獎(jiǎng)勵(lì)黑客可分為兩類:環(huán)境或目標(biāo)指定錯(cuò)誤(environment or goal misspecification)和獎(jiǎng)勵(lì)篡改(reward tampering)”。
第三步:文檔評(píng)分節(jié)點(diǎn)(grade_documents)
  • 隱式執(zhí)行:在圖結(jié)構(gòu)中,檢索節(jié)點(diǎn)輸出后自動(dòng)觸發(fā)grade_documents評(píng)分,判斷文檔是否相關(guān)。
  • 評(píng)分結(jié)果:文檔包含用戶問(wèn)題的關(guān)鍵詞(“types”“categorized”),評(píng)分結(jié)果為“yes”,流程跳轉(zhuǎn)至答案生成節(jié)點(diǎn)。
第四步:答案生成節(jié)點(diǎn)(generate_answer)
【節(jié)點(diǎn)輸出:generate_answer】
--------------------------------------------------
最終回答:Lilian Weng categorizes reward hacking into two types: environment or goal misspecification, and reward tampering. She considers reward hacking as a broader concept that includes both of these categories. Some work defines reward tampering separately, but Weng includes it under the umbrella of reward hacking.
==================================================
  • 核心邏輯:系統(tǒng)基于用戶問(wèn)題和檢索到的上下文,生成結(jié)構(gòu)化回答,明確分類內(nèi)容并補(bǔ)充概念范疇說(shuō)明。
  • 格式控制:回答符合提示詞要求的“三句話限制”,同時(shí)保持學(xué)術(shù)表述的嚴(yán)謹(jǐn)性。

6.8.3 全流程狀態(tài)圖追溯

  • 關(guān)鍵跳轉(zhuǎn)

起始節(jié)點(diǎn)→查詢生成節(jié)點(diǎn):觸發(fā)工具調(diào)用決策。

檢索節(jié)點(diǎn)→答案生成節(jié)點(diǎn):因文檔評(píng)分“相關(guān)”,跳過(guò)問(wèn)題重寫(xiě)環(huán)節(jié)。

6.8.4 異常場(chǎng)景模擬:文檔不相關(guān)時(shí)的流程

若檢索工具返回不相關(guān)內(nèi)容(如“meow”),系統(tǒng)會(huì)進(jìn)入問(wèn)題重寫(xiě)流程:

# 模擬不相關(guān)檢索結(jié)果的運(yùn)行(簡(jiǎn)化輸出)
for chunk in graph.stream({...}):
    # 第一步:同上,調(diào)用檢索工具
    # 第二步:工具返回不相關(guān)內(nèi)容
    【節(jié)點(diǎn)輸出:retrieve】
    工具響應(yīng):meow
    ==================================================
    
    # 第三步:文檔評(píng)分結(jié)果為“no”,跳轉(zhuǎn)至問(wèn)題重寫(xiě)節(jié)點(diǎn)
    【節(jié)點(diǎn)輸出:rewrite_question】
    重寫(xiě)后的問(wèn)題:What specific categories of reward hacking are discussed in Lilian Weng's research papers?
    ==================================================
    
    # 第四步:重新進(jìn)入查詢生成節(jié)點(diǎn),觸發(fā)二次檢索
    【節(jié)點(diǎn)輸出:generate_query_or_respond】
    AI決策:調(diào)用工具 retrieve_blog_posts
    工具參數(shù):{'query': 'Lilian Weng reward hacking categories research papers'}
    ==================================================
    
    # 第五步:檢索到相關(guān)文檔,生成答案
    【節(jié)點(diǎn)輸出:generate_answer】
    最終回答:...(同正常流程)
  • 核心機(jī)制:通過(guò)“檢索-評(píng)估-重寫(xiě)”的閉環(huán),系統(tǒng)能自主修正查詢策略,提升檢索成功率。

6.8.5 性能優(yōu)化與監(jiān)控建議

  • 實(shí)時(shí)日志追蹤:在生產(chǎn)環(huán)境中,可記錄每個(gè)節(jié)點(diǎn)的輸入輸出、處理耗時(shí)及決策依據(jù),便于后續(xù)分析優(yōu)化。
  • 緩存機(jī)制:對(duì)高頻查詢的檢索結(jié)果和答案進(jìn)行緩存,當(dāng)相同問(wèn)題再次出現(xiàn)時(shí)直接返回緩存結(jié)果,降低延遲。
  • 資源監(jiān)控:監(jiān)控向量數(shù)據(jù)庫(kù)查詢耗時(shí)、LLM調(diào)用頻率等指標(biāo),設(shè)置閾值觸發(fā)告警(如檢索超時(shí)、成本超限)。

6.8.6 Agentic RAG的核心價(jià)值體現(xiàn)

  • 自主決策能力:系統(tǒng)能根據(jù)實(shí)時(shí)反饋動(dòng)態(tài)調(diào)整檢索策略,無(wú)需人工干預(yù)。
  • 上下文連貫性:通過(guò)狀態(tài)圖維護(hù)對(duì)話歷史,確保多輪交互中檢索策略的一致性(如持續(xù)優(yōu)化同一問(wèn)題)。
  • 錯(cuò)誤容錯(cuò)機(jī)制:當(dāng)檢索失敗時(shí),自動(dòng)觸發(fā)問(wèn)題重寫(xiě)等補(bǔ)救措施,提升系統(tǒng)魯棒性。

運(yùn)行智能體RAG標(biāo)志著從理論架構(gòu)到實(shí)際應(yīng)用的落地。通過(guò)上述案例可以看到,Agentic RAG系統(tǒng)不僅能完成“檢索-生成”的基礎(chǔ)任務(wù),還具備類似人類的“反思-修正”能力。

責(zé)任編輯:武曉燕 來(lái)源: AIGC深一度
相關(guān)推薦

2025-07-04 09:02:48

2024-05-28 09:24:32

2023-10-14 17:46:17

RAG提示工程GPT-3

2025-04-01 09:25:09

2025-02-11 08:00:00

大語(yǔ)言模型檢索增強(qiáng)生成CAG

2025-04-29 08:20:51

2024-05-20 08:31:33

檢索增強(qiáng)生成LLM大型語(yǔ)言模型

2025-06-13 02:25:00

2024-02-18 09:00:00

RAG工具LlamaIndexChatGPT

2024-04-19 14:27:26

檢索增強(qiáng)生成大型語(yǔ)言模型

2024-10-31 14:46:31

2025-05-28 01:25:00

RAG人工智能語(yǔ)言模型

2024-11-19 13:05:40

2025-02-27 10:55:44

2025-02-13 09:01:03

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2024-06-18 15:36:50

2024-09-18 08:42:10

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)