Rumah >pembangunan bahagian belakang >Tutorial Python >Membina ejen RAG mudah dengan LlamaIndex

Membina ejen RAG mudah dengan LlamaIndex

DDD
DDDasal
2024-10-01 06:38:02394semak imbas

Building a simple RAG agent with LlamaIndex

LlamaIndex ialah rangka kerja untuk membina aplikasi AI generatif ditambah konteks dengan LLM.

Apakah pembesaran konteks?

Pembesaran konteks merujuk kepada teknik di mana maklumat atau konteks tambahan yang berkaitan diberikan kepada model LLM, meningkatkan pemahaman dan responsnya kepada pertanyaan yang diberikan. Pembesaran ini biasanya melibatkan mendapatkan semula, menyepadukan atau melampirkan sumber data luaran seperti dokumen, benam, pada input model. Matlamatnya adalah untuk menjadikan model lebih bermaklumat dengan menyediakannya dengan konteks yang diperlukan yang membantunya memberikan jawapan yang lebih baik, lebih tepat dan bernuansa. Retrieval augmented generation(RAG) ialah contoh pembesaran konteks yang paling popular.

Apakah ejen?

Ejen ialah enjin penaakulan dan keputusan automatik yang dikuasakan oleh LLM yang menggunakan alatan untuk melaksanakan penyelidikan, pengekstrakan data, carian web dan banyak lagi tugas. Ia boleh digunakan untuk kes penggunaan mudah seperti menjawab soalan berdasarkan data untuk dapat membuat keputusan dan mengambil tindakan untuk menyelesaikan tugasan.

Dalam siaran ini, kami akan membina ejen RAG mudah menggunakan LlamaIndex.

Membina ejen RAG

Memasang kebergantungan

Kami akan menggunakan Python untuk membina ejen RAG mudah menggunakan LlamaIndex. Mari kita pasang kebergantungan yang diperlukan dahulu seperti di bawah:

pip install llama-index python-dotenv

Menyediakan LLM dan memuatkan dokumen

Kami akan menggunakan gpt-4o-mini OpenAI sebagai LLM. Anda perlu meletakkan kunci API dalam fail pembolehubah persekitaran. Anda boleh membaca lebih lanjut tentang menyediakan LLM tempatan menggunakan LLamaIndex di sini.

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()

  • Mula-mula kami mengkonfigurasi model LLM menggunakan OpenAI dan menentukan model gpt-4o-mini. Anda boleh bertukar kepada model/LLM lain yang tersedia bergantung pada keperluan anda.
  • Kemudian, kami menggunakan SimpleDirectoryReader untuk memuatkan dokumen daripada direktori ./data tempatan. Pembaca ini mengimbas melalui direktori, membaca fail dan menstruktur data untuk pertanyaan.
  • Seterusnya, kami mencipta indeks kedai vektor daripada dokumen yang dimuatkan, membolehkan kami melakukan pengambilan semula berasaskan vektor yang cekap semasa pelaksanaan pertanyaan.

Mencipta fungsi tersuai untuk ejen

Sekarang, mari kita tentukan beberapa fungsi asas yang boleh digunakan ejen untuk melaksanakan tugas.

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

Mencipta alat untuk ejen

Seterusnya, kami akan mencipta alatan daripada fungsi dan enjin pertanyaan yang kami takrifkan sebelum ini, yang akan digunakan oleh ejen untuk melaksanakan tugas. Alat ini bertindak sebagai utiliti yang boleh dimanfaatkan oleh ejen apabila mengendalikan pelbagai jenis pertanyaan.

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 membungkus fungsi tambah dan darab dan mendedahkannya sebagai alatan. Ejen kini boleh mengakses alatan ini untuk melakukan pengiraan.
  • QueryEngineTool membungkus query_engine untuk membolehkan ejen membuat pertanyaan dan mendapatkan maklumat daripada kedai vektor. Kami telah menamakannya space_facts_tool dengan penerangan, menunjukkan bahawa alat ini boleh mendapatkan maklumat tentang fakta angkasa. Anda boleh menelan apa sahaja dan menyesuaikan alat mengikut data yang dicerna.

Mencipta ejen

Kami kini akan mencipta ejen menggunakan ReActAgent. Ejen akan bertanggungjawab untuk menentukan masa untuk menggunakan alatan dan cara menjawab pertanyaan.

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
)

Ejen ini menggunakan rangka kerja ReAct, yang membolehkan model menaakul dan bertindak dengan menggunakan alatan yang diberikan dalam urutan logik. Ejen dimulakan dengan alatan yang kami cipta, dan verbose=True flag akan mengeluarkan maklumat terperinci tentang cara ejen membuat alasan dan melaksanakan tugas.

Menjalankan ejen

Akhir sekali, mari jalankan ejen dalam gelung interaktif di mana ia memproses pertanyaan pengguna sehingga kami keluar.

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

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

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

Bagaimana ejen RAG berfungsi?

  • Apabila anda bertanya soalan yang berkaitan dengan dokumen yang anda serap, space_facts_tool iaitu alat stor vektor mendapatkan semula maklumat yang berkaitan menggunakan query_enjin.
  • Apabila anda meminta pengiraan, ejen menggunakan sama ada add_tool atau multiply_tool untuk melaksanakan tugas tersebut.
  • Ejen memutuskan dengan cepat alat mana yang hendak digunakan berdasarkan pertanyaan pengguna dan memberikan output.

Atas ialah kandungan terperinci Membina ejen RAG mudah dengan LlamaIndex. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn