Files
dz/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG_памятью/README.md
T

3.7 KiB
Raw Blame History

Агент с RAG‑памятью

Описание проекта

solution.py реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM llama3 и эмбеддинговая модель nomic-embed-text).
Агент использует LangChain для:

  • RAG RetrievalAugmented Generation
  • Инструменты поиска (search_knowledge_base) и добавления (add_to_knowledge_base) в базу знаний
  • Чанкинга больших документов через RecursiveCharacterTextSplitter
  • Взаимодействия с Qdrant через QdrantVectorStore

Стек технологий

Технология Версия
Python 3.10+
Ollama 0.1+
Qdrant 1.x
LangChain 0.2+

Установка зависимостей

# 1️⃣ Загрузить модели в Ollama
ollama pull llama3
ollama pull nomic-embed-text

# 2️⃣ Установить Python‑пакеты
pip install langchain langchain-qdrant langchain-ollama

Важно
Qdrant должен быть запущен локально (по умолчанию localhost:6333).
Если у вас нет Docker, установите Qdrant через официальную инструкцию:

docker run -p 6333:6333 qdrant/qdrant

Запуск

python solution.py --help

Основные команды

Флаг Описание
--add FILE Добавить документ из файла в базу знаний
--search QUERY [--max N] Выполнить семантический поиск по базе
--agent Запустить интерактивного агента, который сам будет использовать RAG

Пример добавления документа

python solution.py --add docs/guide.txt

Пример поиска

python solution.py --search "Как настроить Qdrant?" --max 5

Запуск интерактивного агента

python solution.py --agent

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

Пример использования в коде

from langchain_ollama import ChatOllama
from langchain_qdrant import QdrantVectorStore
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.tools import tool
from langchain.agents import create_agent, AgentExecutor, Tool
from langchain.schema import Document

# Инициализация клиента Qdrant
store = QdrantVectorStore(
    url="http://localhost:6333",
    collection_name="knowledge_base",
    embedding_function=OllamaEmbeddings(model="nomic-embed-text")
)

# Чанкинг текста
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_text("Многострочный текст...")

# Добавление в базу
store.add_documents([Document(page_content=d) for d in docs])

# Поиск
results = store.similarity_search_with_score("Как настроить Qdrant?", k=3)

for doc, score in results:
    print(f"[{score:.2f}] {doc.page_content[:200]}...")

Структура проекта

project/
├── solution.py          # Основной скрипт
└── docs/                # Пример документов для добавления

Лицензия

MIT © 2026.