Stream-режим AI-агента: README.md
This commit is contained in:
@@ -1,106 +1,107 @@
|
|||||||
# Stream‑режим AI‑агента
|
# Stream‑Mode AI Agent
|
||||||
|
|
||||||
## Описание проекта
|
## 📖 Описание проекта
|
||||||
Этот проект реализует **AI‑агент**, построенный на основе LangGraph и LangChain, который использует модели из Ollama (по умолчанию `llama3`) и векторную базу Qdrant для хранения эмбеддингов.
|
Проект реализует **AI‑агента**, способного выполнять задачи, используя:
|
||||||
Главная особенность – **потоковый вывод** (`stream()`), благодаря которому ответы генерируются токен за токеном и сразу отображаются в консоли, а не после завершения работы.
|
- **LangChain** – фреймворк для построения цепочек и агентов;
|
||||||
|
- **Ollama** – локальный LLM (model `llama3`);
|
||||||
|
- **Qdrant** – векторная база данных для хранения эмбеддингов;
|
||||||
|
- **langchain‑qdrant** – интеграция LangChain с Qdrant;
|
||||||
|
- **langchain‑ollama** – обёртка 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
|
```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
|
docker run -p 6333:6333 qdrant/qdrant
|
||||||
```
|
```
|
||||||
|
|
||||||
## Установка проекта
|
## 📦 Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/yourname/stream-ai-agent.git
|
|
||||||
cd stream-ai-agent
|
|
||||||
pip install -r requirements.txt
|
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
|
```bash
|
||||||
# 1. Убедитесь, что Ollama и Qdrant запущены.
|
|
||||||
# 2. Запустите агента:
|
|
||||||
python agent.py
|
python agent.py
|
||||||
```
|
```
|
||||||
|
При запуске агент будет ждать ввода команды в консоли, например:
|
||||||
### Пример команды с аргументами (если добавлены CLI‑параметры)
|
```
|
||||||
|
> What is the capital of France?
|
||||||
```bash
|
|
||||||
python agent.py --prompt "Расскажи о последних новостях в области AI"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Пример использования
|
### 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
|
```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
|
||||||
llm = ChatOllama(model="llama3")
|
llm = OllamaLLM(model="llama3", temperature=0.7, timeout=60)
|
||||||
|
|
||||||
# Потоковый вызов
|
# Векторная база (Qdrant)
|
||||||
for chunk in llm.stream(prompt):
|
store = QdrantStore(
|
||||||
print(chunk.content, end="", flush=True)
|
url=os.getenv("QDRANT_URL", "http://localhost:6333"),
|
||||||
print() # Перевод строки после завершения
|
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`, чтобы получать токен за токеном из всех инструментов.
|
## 📚 Что дальше?
|
||||||
|
- Добавить более сложные инструменты (запросы к API, работа с файлами и т.д.).
|
||||||
## Вклад
|
- Настроить хранение истории диалога в Qdrant для контекстуального ответа.
|
||||||
|
- Интегрировать с веб‑интерфейсом или чат‑ботом.
|
||||||
1. Форкните репозиторий.
|
|
||||||
2. Создайте ветку (`git checkout -b feature/stream-mode`).
|
|
||||||
3. Сделайте коммит и отправьте PR.
|
|
||||||
|
|
||||||
Убедитесь, что тесты проходят: `pytest`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Автор:** Ваше имя
|
**Happy coding!**
|
||||||
**Дата создания:** 2026‑05‑27
|
|
||||||
Reference in New Issue
Block a user