RAG означает Поисковая дополненная генерация, мощный метод, предназначенный для повышения производительности больших языковых моделей (LLM) путем предоставления им конкретного, релевантного контекста в форме документов. В отличие от традиционных LLM, которые генерируют ответы исключительно на основе предварительно обученных знаний, RAG позволяет вам более точно согласовать выходные данные модели с желаемыми результатами, получая и используя данные в реальном времени или информацию, специфичную для предметной области.
Хотя и RAG, и точная настройка направлены на повышение производительности LLM, RAG часто является более эффективным и ресурсосберегающим методом. Точная настройка предполагает переобучение модели на специализированном наборе данных, что требует значительных вычислительных ресурсов, времени и опыта. RAG, с другой стороны, динамически извлекает соответствующую информацию и включает ее в процесс генерации, обеспечивая более гибкую и экономичную адаптацию к новым задачам без обширного переобучения.
Ollama предоставляет серверную инфраструктуру, необходимую для локального запуска LLaMA. Чтобы начать, зайдите на сайт Олламы и загрузите приложение. Следуйте инструкциям, чтобы настроить его на локальном компьютере.
LangChain — это среда Python, предназначенная для работы с различными LLM и векторными базами данных, что делает ее идеальной для создания агентов RAG. Установите LangChain и его зависимости, выполнив следующую команду:
pip install langchain
Во-первых, вам понадобится функция для взаимодействия с локальным экземпляром LLaMA. Вот как это можно настроить:
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"]
Затем интегрируйте эту функцию в собственный класс LLM в 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"
Получатель отвечает за получение соответствующих документов на основе запроса пользователя. Вот как его настроить с помощью FAISS для векторного хранения и предварительно обученных вложений 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)
Определите шаблон запроса, который агент RAG будет использовать для генерации ответов на основе полученных документов:
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} """ faq_prompt = ChatPromptTemplate.from_messages([ ("system", faq_template), MessagesPlaceholder("messages") ])
Объедините поиск документов и создание LLaMA в единую цепочку:
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)
Перед запуском агента RAG убедитесь, что сервер Ollama запущен и работает. Запустите сервер следующей командой:
ollama serve
Теперь вы можете протестировать свой агент RAG, отправив запрос:
from langchain.schema import HumanMessage response = retrieval_chain.invoke({ "messages": [ HumanMessage("I received a damaged item. I want my money back.") ] }) print(response)
Ответ:
«Мне очень жаль слышать, что вы получили поврежденный товар. Согласно нашей политике, если вы получили поврежденный товар, немедленно свяжитесь с нашей службой поддержки клиентов и предоставьте фотографии повреждений. Мы организуем замену или возврат средств для вас. Хотите, чтобы я помог вам получить возмещение? Мне понадобится от вас некоторая информация, например номер вашего заказа и сведения о поврежденном товаре. Можете ли вы предоставить ее, чтобы я мог помочь обработать ваш запрос?"
Следуя этим шагам, вы сможете создать полнофункциональный локальный агент RAG, способный повысить производительность вашего LLM в контексте реального времени. Эту настройку можно адаптировать к различным областям и задачам, что делает ее универсальным решением для любого приложения, где генерация с учетом контекста имеет решающее значение.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3