Создание локального приложения 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: Одновременная загрузка нескольких моделей.

Примеры

  1. однотекстовые вопросы и ответы (Q&A)
使用 Ollama+LlamaIndex 搭建本地 RAG 应用
  1. сессия вопросов и ответов с использованием нескольких текстов
使用 Ollama+LlamaIndex 搭建本地 RAG 应用

 

Ссылки:Документация LlamaIndex

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...