«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как создать локальный агент RAG с помощью Ollama и LangChain

Как создать локальный агент RAG с помощью Ollama и LangChain

Опубликовано 14 августа 2024 г.
Просматривать:467

How to Create a Local RAG Agent with Ollama and LangChain

Что такое РАГ?

RAG означает Поисковая дополненная генерация, мощный метод, предназначенный для повышения производительности больших языковых моделей (LLM) путем предоставления им конкретного, релевантного контекста в форме документов. В отличие от традиционных LLM, которые генерируют ответы исключительно на основе предварительно обученных знаний, RAG позволяет вам более точно согласовать выходные данные модели с желаемыми результатами, получая и используя данные в реальном времени или информацию, специфичную для предметной области.

RAG против тонкой настройки

Хотя и RAG, и точная настройка направлены на повышение производительности LLM, RAG часто является более эффективным и ресурсосберегающим методом. Точная настройка предполагает переобучение модели на специализированном наборе данных, что требует значительных вычислительных ресурсов, времени и опыта. RAG, с другой стороны, динамически извлекает соответствующую информацию и включает ее в процесс генерации, обеспечивая более гибкую и экономичную адаптацию к новым задачам без обширного переобучения.

Создание агента RAG

Установка требований

Установить Олламу

Ollama предоставляет серверную инфраструктуру, необходимую для локального запуска LLaMA. Чтобы начать, зайдите на сайт Олламы и загрузите приложение. Следуйте инструкциям, чтобы настроить его на локальном компьютере.

Установите требования LangChain

LangChain — это среда Python, предназначенная для работы с различными LLM и векторными базами данных, что делает ее идеальной для создания агентов RAG. Установите LangChain и его зависимости, выполнив следующую команду:

pip install langchain

Кодирование агента RAG

Создайте функцию API

Во-первых, вам понадобится функция для взаимодействия с локальным экземпляром 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

Затем интегрируйте эту функцию в собственный класс 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"

Интеграция агента RAG

Настройка ретривера

Получатель отвечает за получение соответствующих документов на основе запроса пользователя. Вот как его настроить с помощью 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

Теперь вы можете протестировать свой агент 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 в контексте реального времени. Эту настройку можно адаптировать к различным областям и задачам, что делает ее универсальным решением для любого приложения, где генерация с учетом контекста имеет решающее значение.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/dmuraco3/how-to-create-a-local-rag-agent-with-ollama-and-langchain-1m9a?1 Если есть какие-либо нарушения, свяжитесь с Study_golang. @163.com удалить
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3