4.3 KiB
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 |
Официальная инструкция |
LLM‑модель (llama3) |
Доступна в Ollama | ollama pull llama3 |
| Qdrant (необязательно, если используете внешнее хранилище) | Любая версия | docker run -p 6333:6333 qdrant/qdrant |
⚠️ Если вы не планируете хранить состояние в Qdrant, можно использовать встроенный
MemorySaver.
Установка
# Клонируйте репозиторий (или скачайте файлы)
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 содержит:
langgraph==0.1.*
langchain==0.2.*
langchain-ollama==0.0.*
nomic-embed-text==0.3.*
python-dotenv==1.0.*
Запуск
1. Инициализация агента (файл agent.py)
# Убедитесь, что переменная окружения OLLAMA_MODEL установлена (по умолчанию "llama3")
export OLLAMA_MODEL=llama3 # Linux/macOS
set OLLAMA_MODEL=llama3 # Windows
python agent.py
Внутри
agent.pyреализован потоковый вывод:for chunk in graph.stream(state): print(chunk, end="", flush=True)
2. Тестирование с примером запроса
# Запускаем скрипт и вводим запрос вручную
python agent.py
Пример ввода:
User: Расскажи мне о последних достижениях в области квантовых вычислений.
Вывод будет появляться токен за токеном, пока модель генерирует ответ.
Пример использования
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.