Stream-режим AI-агента: README.md

This commit is contained in:
2026-05-27 15:22:02 +00:00
parent 6fc7aa5736
commit ea0eefc66e
@@ -1,106 +1,107 @@
# Streamрежим AI‑агента
# StreamMode AI Agent
## Описание проекта
Этот проект реализует **AI‑агент**, построенный на основе LangGraph и LangChain, который использует модели из Ollama (по умолчанию `llama3`) и векторную базу Qdrant для хранения эмбеддингов.
Главная особенность – **потоковый вывод** (`stream()`), благодаря которому ответы генерируются токен за токеном и сразу отображаются в консоли, а не после завершения работы.
## 📖 Описание проекта
Проект реализует **AI‑агента**, способного выполнять задачи, используя:
- **LangChain** – фреймворк для построения цепочек и агентов;
- **Ollama** локальный LLM (model `llama3`);
- **Qdrant** – векторная база данных для хранения эмбеддингов;
- **langchainqdrant** интеграция LangChain с Qdrant;
- **langchainollama** обёртка Ollama для LangChain.
## Предварительные требования
Главной особенностью является переход от синхронного вызова `.invoke()` к потоковому выводу через `.stream()`. Теперь ответы агента появляются в консоли токен за токеном, что делает взаимодействие более отзывчивым и похожим на ChatGPT.
| Пакет | Версия | Зачем нужен |
|-------|--------|-------------|
| `ollama` | любой актуальный | Запускает локальную модель LLM (llama3) |
| `qdrant` | 1.x+ | Хранит векторные эмбеддинги для быстрых запросов |
| `python>=3.10` | – | Язык выполнения |
> **Важно**: Установите и запустите Ollama и Qdrant перед запуском агента.
## ⚙️ Предварительные требования
- **Python 3.10+**
- **Ollama** (установить можно по инструкции: https://ollama.ai/)
```bash
curl -fsSL https://ollama.com/install.sh | sh
```
После установки скачайте нужную модель:
```bash
ollama pull llama3
```
- **Qdrant**
Можно запустить локально через Docker:
```bash
docker run -p 6333:6333 qdrant/qdrant
```
## 📦 Установка зависимостей
```bash
# Пример установки Ollama (Linux)
curl -fsSL https://ollama.ai/install.sh | sh
# Запуск модели llama3
ollama run llama3
# Установка Qdrant (Docker)
docker pull qdrant/qdrant
docker run -p 6333:6333 qdrant/qdrant
```
## Установка проекта
```bash
git clone https://github.com/yourname/stream-ai-agent.git
cd stream-ai-agent
pip install -r requirements.txt
```
`requirements.txt` содержит все необходимые пакеты, включая `langchain`, `langchain-ollama`, `langchain-qdrant`, `qdrant-client` и др.
`requirements.txt` содержит:
```
langchain==0.2.*
langgraph==0.1.*
langchain-ollama==0.1.*
langchain-qdrant==0.1.*
nomic-embed-text==0.3.*
python-dotenv
```
## Запуск
## 🚀 Запуск
### 1. Инициализация агента (agent.py)
```bash
# 1. Убедитесь, что Ollama и Qdrant запущены.
# 2. Запустите агента:
python agent.py
```
### Пример команды с аргументами (если добавлены CLI‑параметры)
```bash
python agent.py --prompt "Расскажи о последних новостях в области AI"
При запуске агент будет ждать ввода команды в консоли, например:
```
> What is the capital of France?
```
## Пример использования
После запуска вы увидите интерактивный ввод:
### 2. Пример использования с потоковым выводом
После запуска вы можете вводить запросы. Ответ будет печататься токен за токеном:
```
> Какую роль играет Qdrant в работе агента?
> Tell me a short story about a robot learning to dance.
Robot: I was built in a factory...
Robot: ...and then I discovered music...
Robot: ...
```
Ответ будет выводиться токен за токеном:
### 3. Остановка
Нажмите `Ctrl+C` или введите команду `exit`.
```
Qdrant используется как быстрый
векторный хранилище для эмбеддингов,
что позволяет быстро находить релевантные
тексты и ускорять генерацию ответов.
```
### Пример кода, который можно вставить в `agent.py` (потоковый вывод)
## 📄 Пример использования кода
```python
from langchain_ollama import ChatOllama
from langchain.agents import create_agent, AgentExecutor
from langchain.tools import tool
from langchain_ollama import OllamaLLM
from langchain_qdrant import QdrantStore
import os
# Инициализация LLM
llm = ChatOllama(model="llama3")
# LLM
llm = OllamaLLM(model="llama3", temperature=0.7, timeout=60)
# Потоковый вызов
for chunk in llm.stream(prompt):
print(chunk.content, end="", flush=True)
print() # Перевод строки после завершения
# Векторная база (Qdrant)
store = QdrantStore(
url=os.getenv("QDRANT_URL", "http://localhost:6333"),
collection_name="my_collection",
embedding_function=OllamaLLM(model="nomic-embed-text")
)
# Инструмент
@tool
def check_wish(wish: str) -> str:
"""Проверка желания на наличие подвоха."""
return f"Wish '{wish}' looks safe."
tools = [check_wish]
# Агент
agent = create_agent(
llm=llm,
tools=tools,
verbose=True
)
executor = AgentExecutor(agent=agent, tools=tools, max_iterations=5)
# Потоковый вывод
for chunk in executor.stream("Will I get a promotion?"):
print(chunk, end="", flush=True)
```
> **Совет**: При работе с LangGraph используйте `AgentExecutor` в режиме `stream=True`, чтобы получать токен за токеном из всех инструментов.
## Вклад
1. Форкните репозиторий.
2. Создайте ветку (`git checkout -b feature/stream-mode`).
3. Сделайте коммит и отправьте PR.
Убедитесь, что тесты проходят: `pytest`.
## 📚 Что дальше?
- Добавить более сложные инструменты (запросы к API, работа с файлами и т.д.).
- Настроить хранение истории диалога в Qdrant для контекстуального ответа.
- Интегрировать с веб‑интерфейсом или чат‑ботом.
---
**Автор:** Ваше имя
**Дата создания:** 20260527
**Happy coding!**