首頁  >  文章  >  後端開發  >  使用 LlamaIndex 建立簡單的 RAG 代理

使用 LlamaIndex 建立簡單的 RAG 代理

DDD
DDD原創
2024-10-01 06:38:02353瀏覽

Building a simple RAG agent with LlamaIndex

LlamaIndex 是一個使用法學碩士建立情境增強生成式 AI 應用程式的框架。

什麼是上下文增強?

上下文增強是指向 LLM 模型提供附加相關資訊或上下文的技術,從而提高其對給定查詢的理解和回應。這種增強通常涉及檢索、整合外部資料來源(例如文件、嵌入)或將其附加到模型的輸入。目標是透過為模型提供必要的上下文來幫助模型提供更好、更準確和細緻的答案,從而使模型更加明智。檢索增強生成(RAG)是上下文增強最受歡迎的範例。

什麼是代理?

代理是由法學碩士提供支援的自動推理和決策引擎,它們使用工具來執行研究、資料擷取、網路搜尋和更多任務。它們可用於簡單的用例,例如基於資料回答問題,以便能夠決定並採取行動來完成任務。

在這篇文章中,我們將使用 LlamaIndex 建立一個簡單的 RAG 代理程式。

建構 RAG 代理

安裝依賴項

我們將使用 Python 使用 LlamaIndex 建立簡單的 RAG 代理程式。讓我們先安裝所需的依賴項,如下所示:

pip install llama-index python-dotenv

設定LLM並載入文檔

我們將使用 OpenAI 的 gpt-4o-mini 作為法學碩士。您需要將 API 金鑰放入環境變數檔案中。您可以在此處閱讀有關使用 LLamaIndex 設置本地法學碩士的更多資訊。

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings
from llama_index.llms.openai import OpenAI
from dotenv import load_dotenv

# Load environment variables (e.g., OPENAI_API_KEY)
load_dotenv()

# Configure OpenAI model
Settings.llm = OpenAI(model="gpt-4o-mini")

# Load documents from the local directory
documents = SimpleDirectoryReader("./data").load_data()

# Create an index from documents for querying
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

  • 首先,我們使用 OpenAI 設定 LLM 模型並指定 gpt-4o-mini 模型。您可以根據您的需求切換到其他可用的模型/LLM。
  • 然後,我們使用 SimpleDirectoryReader 從本機 ./data 目錄載入文件。此閱讀器掃描目錄、讀取檔案並建構資料以供查詢。
  • 接下來,我們從載入的文件建立向量儲存索引,使我們能夠在查詢執行期間執行高效的基於向量的檢索。

為代理程式建立自訂函數

現在,讓我們定義代理可以用來執行任務的一些基本函數。

def multiply(a: float, b: float) -> float:
    """Multiply two numbers and returns the product"""
    return a * b

def add(a: float, b: float) -> float:
    """Add two numbers and returns the sum"""
    return a + b

為代理程式創建工具

接下來,我們將根據先前定義的函數和查詢引擎建立工具,代理程式將使用這些工具來執行任務。這些工具可作為代理在處理不同類型的查詢時可以利用的實用程式。

from llama_index.core.tools import FunctionTool, QueryEngineTool

# Wrap functions as tools
add_tool = FunctionTool.from_defaults(fn=add)
multiply_tool = FunctionTool.from_defaults(fn=multiply)

# Create a query engine tool for document retrieval
space_facts_tool = QueryEngineTool.from_defaults(
    query_engine,
    name="space_facts_tool",
    description="A RAG engine with information about fun space facts."
)

  • FunctionTool 包裝了加法和乘法函數並將它們公開為工具。代理現在可以存取這些工具來執行計算。
  • QueryEngineTool 包裝了 query_engine,以允許代理從向量儲存中查詢和檢索資訊。我們將其命名為 space_facts_tool 並附有說明,表明工具可以檢索有關空間事實的資訊。您可以攝取任何內容並根據攝取的資料自訂工具。

創建代理

我們現在將使用 ReActAgent 建立代理程式。代理將負責決定何時使用這些工具以及如何回應查詢。

from llama_index.core.agent import ReActAgent

# Create the agent with the tools
agent = ReActAgent.from_tools(
    [multiply_tool, add_tool, space_facts_tool], verbose=True
)

該代理程式使用 ReAct 框架,該框架允許模型透過以邏輯順序利用給定工具來推理並採取行動。代理程式使用我們建立的工具進行初始化,並且 verbose=True 標誌將輸出有關代理如何推理和執行任務的詳細資訊。

運行代理

最後,讓我們在互動式循環中執行代理,它會處理使用者查詢,直到我們退出。

while True:
    query = input("Query: ")

    if query == "/bye":
        exit()

    response = agent.chat(query)
    print(response)
    print("-" * 10)

RAG 代理如何工作?

  • 當您提出與您攝取的文件相關的問題時,space_facts_tool(即向量儲存工具)會使用 query_engine 檢索相關資訊。
  • 當您要求計算時,代理程式會使用 add_tool 或 multiply_tool 來執行這些任務。
  • 代理程式根據使用者查詢即時決定使用哪個工具並提供輸出。

以上是使用 LlamaIndex 建立簡單的 RAG 代理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn