Stream-режим AI-агента: README.md
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
# Stream‑режим AI‑агента
|
||||
|
||||
## Описание проекта
|
||||
|
||||
Проект реализует **AI‑агент**, построенный на основе LangGraph и LangChain, который взаимодействует с LLM `llama3` через Ollama и использует эмбеддинги от Nomic.
|
||||
Главная особенность – **потоковый вывод** (`stream`) вместо обычного `.invoke()`. Это позволяет видеть ответ токен за токеном в реальном времени, что особенно полезно при работе с длинными запросами или многократным вызовом инструментов.
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
| Компонент | Версия / Минимальные требования | Как установить |
|
||||
|-----------|---------------------------------|----------------|
|
||||
| **Python** | 3.10+ (рекомендуется 3.11) | `python -m venv .venv && source .venv/bin/activate` |
|
||||
| **Ollama** | Любая версия, поддерживающая `llama3` | [Официальная инструкция](https://ollama.com/download) |
|
||||
| **LLM‑модель** (`llama3`) | Доступна в Ollama | `ollama pull llama3` |
|
||||
| **Qdrant** (необязательно, если используете внешнее хранилище) | Любая версия | `docker run -p 6333:6333 qdrant/qdrant` |
|
||||
|
||||
> ⚠️ Если вы не планируете хранить состояние в Qdrant, можно использовать встроенный `MemorySaver`.
|
||||
|
||||
## Установка
|
||||
|
||||
```bash
|
||||
# Клонируйте репозиторий (или скачайте файлы)
|
||||
git clone https://github.com/your-username/stream-ai-agent.git
|
||||
cd stream-ai-agent
|
||||
|
||||
# Создайте и активируйте виртуальное окружение
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||||
|
||||
# Установите зависимости
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
`requirements.txt` содержит:
|
||||
|
||||
```text
|
||||
langgraph==0.1.*
|
||||
langchain==0.2.*
|
||||
langchain-ollama==0.0.*
|
||||
nomic-embed-text==0.3.*
|
||||
python-dotenv==1.0.*
|
||||
```
|
||||
|
||||
## Запуск
|
||||
|
||||
### 1. Инициализация агента (файл `agent.py`)
|
||||
|
||||
```bash
|
||||
# Убедитесь, что переменная окружения OLLAMA_MODEL установлена (по умолчанию "llama3")
|
||||
export OLLAMA_MODEL=llama3 # Linux/macOS
|
||||
set OLLAMA_MODEL=llama3 # Windows
|
||||
|
||||
python agent.py
|
||||
```
|
||||
|
||||
> Внутри `agent.py` реализован потоковый вывод:
|
||||
> ```python
|
||||
> for chunk in graph.stream(state):
|
||||
> print(chunk, end="", flush=True)
|
||||
> ```
|
||||
|
||||
### 2. Тестирование с примером запроса
|
||||
|
||||
```bash
|
||||
# Запускаем скрипт и вводим запрос вручную
|
||||
python agent.py
|
||||
```
|
||||
|
||||
Пример ввода:
|
||||
|
||||
```
|
||||
User: Расскажи мне о последних достижениях в области квантовых вычислений.
|
||||
```
|
||||
|
||||
Вывод будет появляться токен за токеном, пока модель генерирует ответ.
|
||||
|
||||
## Пример использования
|
||||
|
||||
```python
|
||||
from langgraph.graph import StateGraph, START
|
||||
from langchain_ollama import ChatOllama
|
||||
from nomic_embed_text import NomicEmbedText
|
||||
from langgraph.prebuilt.tool_executor import ToolExecutorNode
|
||||
from langgraph.checkpoint.memory import MemorySaver
|
||||
|
||||
# Инициализация LLM и эмбеддингов
|
||||
llm = ChatOllama(model=os.getenv("OLLAMA_MODEL", "llama3"))
|
||||
embedder = NomicEmbedText()
|
||||
|
||||
# Создание графа с потоковым выводом
|
||||
graph = StateGraph()
|
||||
graph.add_node("agent_executor", ToolExecutorNode(llm=llm, tools=[]))
|
||||
graph.set_entry_point(START)
|
||||
graph.set_finish_point("agent_executor")
|
||||
|
||||
state = {"messages": [HumanMessage(content="Привет!")]}
|
||||
|
||||
# Потоковый вывод
|
||||
for chunk in graph.stream(state):
|
||||
print(chunk, end="", flush=True)
|
||||
```
|
||||
|
||||
> В реальном проекте вы можете подключить собственные инструменты (API‑вызыватели, базы знаний и т.д.) через `ToolExecutorNode`.
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT © 2026.
|
||||
Reference in New Issue
Block a user