115 lines
3.7 KiB
Markdown
115 lines
3.7 KiB
Markdown
# Агент с 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+ |
|
||
|
||
## Установка зависимостей
|
||
|
||
```bash
|
||
# 1️⃣ Загрузить модели в Ollama
|
||
ollama pull llama3
|
||
ollama pull nomic-embed-text
|
||
|
||
# 2️⃣ Установить Python‑пакеты
|
||
pip install langchain langchain-qdrant langchain-ollama
|
||
```
|
||
|
||
> **Важно**
|
||
> Qdrant должен быть запущен локально (по умолчанию `localhost:6333`).
|
||
> Если у вас нет Docker, установите Qdrant через официальную инструкцию:
|
||
> ```bash
|
||
> docker run -p 6333:6333 qdrant/qdrant
|
||
> ```
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
python solution.py --help
|
||
```
|
||
|
||
### Основные команды
|
||
|
||
| Флаг | Описание |
|
||
|------|----------|
|
||
| `--add FILE` | Добавить документ из файла в базу знаний |
|
||
| `--search QUERY [--max N]` | Выполнить семантический поиск по базе |
|
||
| `--agent` | Запустить интерактивного агента, который сам будет использовать RAG |
|
||
|
||
#### Пример добавления документа
|
||
|
||
```bash
|
||
python solution.py --add docs/guide.txt
|
||
```
|
||
|
||
#### Пример поиска
|
||
|
||
```bash
|
||
python solution.py --search "Как настроить Qdrant?" --max 5
|
||
```
|
||
|
||
#### Запуск интерактивного агента
|
||
|
||
```bash
|
||
python solution.py --agent
|
||
```
|
||
|
||
После запуска агент будет ждать ваших вопросов и отвечать, используя найденную информацию из базы.
|
||
|
||
## Пример использования в коде
|
||
|
||
```python
|
||
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. |