Создание локального приложения RAG с помощью Ollama+LlamaIndex
краткое содержание
В этом документе подробно описано, как использовать фреймворк LlamaIndex для создания локального приложения RAG (Retrieval-Augmented Generation). Интеграция с LlamaIndex позволяет создать локальное RAG Система, объединяющая возможности поиска и генерации информации для повышения эффективности поиска информации и релевантности создаваемого контента. Пути к локальным базам знаний могут быть настроены, проиндексированы через LlamaIndex и затем использованы для контекстного диалога.
Примечание: Этот документ содержит основные фрагменты кода и подробные объяснения. Полный код можно найти по адресу ноутбук .
1. Загрузка моделей
В этом примере используется llama3.1
модель, вы можете использовать подходящую модель в соответствии с конфигурацией вашего компьютера.
ollama pull llama3.1
ollama pull nomic-embed-text
2. Установка зависимостей
pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install -U llama-index-readers-file
3. Загрузка данных
Загружает в память все документы, находящиеся в папке данных текущего каталога.
documents = SimpleDirectoryReader("data").load_data()
4. Построение индексов
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
documents,
)
Settings.embed_model
: Глобальныйembed_model
атрибут. Код примера присваивает созданную встроенную модель глобальномуembed_model
Атрибуты;Settings.llm
: Глобальныйllm
атрибут. Код примера присваивает созданную языковую модель глобальномуllm
Атрибуты;VectorStoreIndex.from_documents
: Создает индекс, используя ранее загруженные документы, и преобразует их в векторы для быстрого поиска.
пройти (законопроект, проверку и т.д.) Settings
Глобальные атрибуты устанавливаются таким образом, чтобы соответствующая модель использовалась по умолчанию в последующем процессе построения индексов и запросов.
5. данные запроса
query_engine = index.as_query_engine()
response = query_engine.query("Datawhale是什么?")
print(response)
index.as_query_engine()
: Создайте механизм запросов на основе ранее созданного индекса. Этот механизм запросов может принимать запросы и возвращать полученные ответы.
6. извлечение контекста для диалога
Поскольку извлеченные контексты могут занимать большое количество доступных контекстов LLM, необходимо настроить историю чата на меньшее количество контекстов жетон Ограничения!
# 检索上下文进行对话
from llama_index.core.memory import ChatMemoryBuffer
memory = ChatMemoryBuffer.from_defaults(token_limit=1500)
chat_engine = index.as_chat_engine(
chat_mode="context",
memory=memory,
system_prompt=(
"You are a chatbot, able to have normal interactions."
),
)
response = chat_engine.chat("Datawhale是什么?")
print(response)
chat_mode
Вы можете выбрать подходящий режим в зависимости от сценария использования; поддерживаются следующие режимы:
best
(по умолчанию): использование прокси (react или openai) с инструментами механизма запросов;context
: Используйте ретривер, чтобы получить контекст;condense_question
: Сократите вопрос;condense_plus_context
: Сократите вопрос и используйте ретривер, чтобы понять контекст;simple
: Простой движок чата, который использует LLM напрямую;react
: Используйте реактивный агент вместе с инструментом запроса;openai
: Используйте агент openai вместе с инструментом запроса.
7. хранение и загрузка векторных индексов
storage_context.persist
Храните векторные индексы.load_index_from_storage
Индекс вектора нагрузки.
# 存储向量索引
persist_dir = 'data/'
index.storage_context.persist(persist_dir=persist_dir)
# 加载向量索引
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir=persist_dir)
index= load_index_from_storage(storage_context)
8. приложения с потоковым освещением
В этом примере также реализовано приложение streamlit, которое можно найти в app.py
Необходимые зависимости перечислены ниже:
llama_index==0.10.62
streamlit==1.36.0
Примечание
существовать app.py
Чтобы не перезагружать модель в последующих диалогах, вы можете настроить переменную окружения OLLAMA_NUM_PARALLEL
ответить пением OLLAMA_MAX_LOADED_MODELS
Первая - поддержка загрузки нескольких моделей, поэтому требуется как минимум дополнительные 8 Гб оперативной памяти.
OLLAMA_NUM_PARALLEL
: Одновременная обработка нескольких запросов на одну модель.
OLLAMA_MAX_LOADED_MODELS
: Одновременная загрузка нескольких моделей.
Примеры
- однотекстовые вопросы и ответы (Q&A)

- сессия вопросов и ответов с использованием нескольких текстов

Ссылки:Документация LlamaIndex
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...