Rumah > Artikel > pembangunan bahagian belakang > Cara Mencipta Ejen RAG Tempatan dengan Ollama dan LangChain
RAG adalah singkatan kepada Retrieval-Augmented Generation, teknik berkuasa yang direka untuk meningkatkan prestasi model bahasa besar (LLM) dengan menyediakannya konteks khusus dan relevan dalam bentuk dokumen. Tidak seperti LLM tradisional yang menjana respons semata-mata berdasarkan pengetahuan pra-latihan mereka, RAG membolehkan anda menyelaraskan output model dengan lebih dekat dengan hasil yang anda inginkan dengan mendapatkan dan menggunakan data masa nyata atau maklumat khusus domain.
Walaupun kedua-dua RAG dan penalaan halus bertujuan untuk meningkatkan prestasi LLM, RAG selalunya merupakan kaedah yang lebih cekap dan mesra sumber. Penalaan halus melibatkan latihan semula model pada set data khusus, yang memerlukan sumber pengiraan, masa dan kepakaran yang signifikan. RAG, sebaliknya, mengambil semula maklumat yang berkaitan secara dinamik dan memasukkannya ke dalam proses penjanaan, membolehkan penyesuaian yang lebih fleksibel dan menjimatkan kos kepada tugas baharu tanpa latihan semula yang meluas.
Ollama menyediakan infrastruktur bahagian belakang yang diperlukan untuk menjalankan LLaMA secara tempatan. Untuk bermula, pergi ke tapak web Ollama dan muat turun aplikasi. Ikut arahan untuk menyediakannya pada mesin tempatan anda.
LangChain ialah rangka kerja Python yang direka untuk berfungsi dengan pelbagai LLM dan pangkalan data vektor, menjadikannya sesuai untuk membina ejen RAG. Pasang LangChain dan kebergantungannya dengan menjalankan arahan berikut:
pip install langchain
Pertama, anda memerlukan fungsi untuk berinteraksi dengan tika LLaMA tempatan anda. Begini cara anda boleh menyediakannya:
from requests import post as rpost def call_llama(prompt): headers = {"Content-Type": "application/json"} payload = { "model": "llama3.1", "prompt": prompt, "stream": False, } response = rpost( "http://localhost:11434/api/generate", headers=headers, json=payload ) return response.json()["response"]
Seterusnya, integrasikan fungsi ini ke dalam kelas LLM tersuai dalam LangChain:
from langchain_core.language_models.llms import LLM class LLaMa(LLM): def _call(self, prompt, **kwargs): return call_llama(prompt) @property def _llm_type(self): return "llama-3.1-8b"
Retriever bertanggungjawab untuk mengambil dokumen yang berkaitan berdasarkan pertanyaan pengguna. Begini cara untuk menyediakannya menggunakan FAISS untuk storan vektor dan pembenaman pra-latihan HuggingFace:
from langchain.vectorstores import FAISS from langchain_huggingface import HuggingFaceEmbeddings documents = [ {"content": "What is your return policy? ..."}, {"content": "How long does shipping take? ..."}, # Add more documents as needed ] texts = [doc["content"] for doc in documents] retriever = FAISS.from_texts( texts, HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2") ).as_retriever(k=5)
Tentukan templat gesaan yang akan digunakan ejen RAG untuk menjana respons berdasarkan dokumen yang diambil:
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder faq_template = """ You are a chat agent for my E-Commerce Company. As a chat agent, it is your duty to help the human with their inquiry and make them a happy customer. Help them, using the following context: <context> {context} </context> """ faq_prompt = ChatPromptTemplate.from_messages([ ("system", faq_template), MessagesPlaceholder("messages") ])
Gabungkan pengambilan dokumen dan penjanaan LLaMA ke dalam rantaian yang padu:
from langchain.chains.combine_documents import create_stuff_documents_chain document_chain = create_stuff_documents_chain(LLaMa(), faq_prompt) def parse_retriever_input(params): return params["messages"][-1].content retrieval_chain = RunnablePassthrough.assign( context=parse_retriever_input | retriever ).assign(answer=document_chain)
Sebelum menjalankan ejen RAG anda, pastikan pelayan Ollama sedang aktif dan berjalan. Mulakan pelayan dengan arahan berikut:
ollama serve
Kini, anda boleh menguji ejen RAG anda dengan menghantar pertanyaan:
from langchain.schema import HumanMessage response = retrieval_chain.invoke({ "messages": [ HumanMessage("I received a damaged item. I want my money back.") ] }) print(response)
Jawapan:
"Saya sangat kesal mendengar bahawa anda menerima item yang rosak. Mengikut polisi kami, jika anda menerima item yang rosak, sila hubungi pasukan khidmat pelanggan kami dengan segera dengan gambar kerosakan. Kami akan mengaturkan penggantian atau bayaran balik untuk anda. Adakah anda mahu saya membantu anda mendapatkan bayaran balik? Saya memerlukan beberapa maklumat daripada anda, seperti nombor pesanan anda dan butiran tentang item yang rosak Bolehkah anda memberikannya supaya saya boleh membantu memproses permintaan anda?"
Dengan mengikuti langkah-langkah ini, anda boleh mencipta ejen RAG tempatan berfungsi sepenuhnya yang mampu meningkatkan prestasi LLM anda dengan konteks masa nyata. Persediaan ini boleh disesuaikan dengan pelbagai domain dan tugas, menjadikannya penyelesaian serba boleh untuk sebarang aplikasi yang penjanaan sedar konteks adalah penting.
Atas ialah kandungan terperinci Cara Mencipta Ejen RAG Tempatan dengan Ollama dan LangChain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!