3.7 KiB
3.7 KiB
Агент с RAG‑памятью
Описание проекта
solution.py реализует AI‑агента, способного хранить и извлекать знания из локальной векторной базы Qdrant при помощи Ollama (LLM llama3 и эмбеддинговая модель nomic-embed-text).
Агент использует LangChain для:
- RAG – Retrieval‑Augmented 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.