Files
T

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.