Главная Веб-разработка Запускаем локально Deepseek-R1 для приложения RAG: подробная инструкция

Запускаем локально Deepseek-R1 для приложения RAG: подробная инструкция

от admin

Как запустить DeepSeek локально и использовать её для поиска по документации? Разбираем ключевые особенности модели, её преимущества перед ChatGPT, влияние на рынок и применение технологии RAG.

0157 открытий450 показов

Последние две недели интернет-общественность активно обсуждает DeepSeek — новую генеративную модель, которая вызвала большой интерес благодаря своей эффективности. Главный сюрприз: при качестве ответов, сравнимом с ChatGPT, её обучение обошлось значительно дешевле. Это уже повлияло на рынок: акции Nvidia потеряли около 20% стоимости всего за один день.

DeepSeek доступна бесплатно как через веб-интерфейс, так и через мобильное приложение. Однако сегодня мы рассмотрим не такой очевидный, но не менее важный аспект — локальный запуск модели.

Разберём это на примере небольшого проекта. Представьте, что у вас есть массив документации, и вам необходимо эффективно искать информацию или проводить анализ данных. Один из подходов, который можно применить, — технология RAG (Retrieval-Augmented Generation), которая сочетает поиск по тексту с генерацией ответов на основе релевантных данных. Давайте разберём, как DeepSeek можно адаптировать под эту задачу.

Что такое RAG?

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

Определяем год рождения по знанию Рунета 2000-хtproger.ru

Процесс работы RAG состоит из трех ключевых этапов. Во-первых, он извлекает соответствующие документы или данные из базы знаний, которая может включать структурированные БД, векторные хранилища или даже API в режиме реального времени. Затем полученная информация объединяется с внутренними знаниями модели (это гарантирует, что ответы будут основаны на актуальных и надежных источниках). Наконец, модель генерирует обоснованный ответ, используя как свои обученные языковые возможности, так и новые полученные данные.

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

Как будет выглядеть архитектура решения?

База знаний — коллекция релевантной и актуальной информации, которая служит основой для RAG. В нашем случае это документы, хранящиеся в каталоге.

Запускаем локально Deepseek-R1 для приложения RAG: подробная инструкция

Перед тем, как начать реализовывать данную архитектуру, необходимо установить следующие библиотеки (тестировалось на Python 3.11):

			llama-index   transformers   torch   sentence-transformers   llama-index-llms-ollama 		

Вот как вы можете загрузить ваши документы в LlamaIndex в виде объектов:

			from llama_index.core import SimpleDirectoryReader  loader = SimpleDirectoryReader(       input_dir=input_dir_path, required_exts=[".pdf"],       recursive=True   )   docs = loader.load_data() 		

Векторные хранилища принимают список объектов Node и строят из них индекс.

Читать также:
GitHub добавит в Copilot ИИ-модели от Anthropic и Google

VectorStoreIndex в RAG

В системе Retrieval-Augmented Generation (RAG) индекс VectorStoreIndex используется для хранения и извлечения векторных вкраплений документов. Это позволяет системе находить релевантную информацию на основе семантического сходства, а не точного совпадения ключевых слов.

Процесс начинается с встраивания документов. Текстовые данные преобразуются в векторные вкрапления с помощью модели. Эти вкрапления представляют смысл текста в числовой форме, что облегчает сравнение и поиск похожего контента. После создания вкрапления хранятся в векторной базе данных — FAISS, Pinecone, Weaviate, Qdrant или Chroma.

Гайд: как настроить API-распознавание документов за 30 минутtproger.ru

Пользователь отправляет запрос, который также преобразуется во вкрапление с помощью той же модели. Затем система ищет похожие вкрапления, сравнивая запрос с сохраненными векторами с помощью метрик сходства — косинусоидального сходства или евклидово расстояния. Наиболее релевантные документы извлекаются на основе их оценок сходства.

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

Использование VectorStoreIndex улучшает системы RAG, обеспечивая семантический поиск, улучшая масштабируемость и поддерживая поиск в реальном времени. Это гарантирует, что ответы будут контекстуально точными и основанными на наиболее релевантной доступной информации.

Построить векторный индекс очень просто:

			from llama_index.core import VectorStoreIndex  index = VectorStoreIndex.from_documents(docs)      # Save the index to a file   index.storage_context.persist(persist_dir="./index") 		

Дальше остается скачать и запустить модель deepseek-R1 с помощью ollama. Для этого необходимо установить ollama https://ollama.com/download.

Запускаем локально Deepseek-R1 для приложения RAG: подробная инструкция

deepseek-r1ollama.com

После того, как вы запустите у себя эту модель командой

			ollama run deepseek-r1:1.5b 		

достаточно выполнить следующий код, чтобы RAG начал работать

			from llama_index.core import StorageContext, load_index_from_storage   from llama_index.core import Settings, PromptTemplate   from llama_index.llms.ollama import Ollama  # rebuild storage context   storage_context = StorageContext.from_defaults(persist_dir="./index")      # load index   index = load_index_from_storage(storage_context)   # Creating a prompt template   qa_prompt_tmpl_str = (       "Context information is below. n"       "__n"       "{context_str} n"       "__in"    "Given the context information above I want you n"       "to think step by step to answer the query in a crisp n"       " manner, incase case you don't know the answer say n"       "'I don't know!'. n"       "Query: {query_str}n"       "Answer: ")   qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)      # Setting up a query engine   llm = Ollama(model="deepseek-r1:1.5b", request_timeout=360.0)      # Setup a query engine on the index previously created   Settings.llm = llm  # specifying the llm to be used   query_engine = index.as_query_engine(       similarity_top_k=10   )   query_engine.update_prompts({"response_synthesizer:text_qa_template": qa_prompt_tmpl})   response = query_engine.query('What is the ACID?')   print(response) 		

Теперь можно встроить данное решение в десктопный клиент, создав пользовательский интерфейс с помощью Streamlit, чтобы обеспечить взаимодействие пользователя через чат с приложением RAG. Либо можно сделать телеграм-бот, тогда создать интерфейс будет ещё проще.

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