# Stream‑режим AI‑агента ## Описание проекта Этот проект реализует **AI‑агент**, построенный на основе LangGraph и LangChain, который использует модели из Ollama (по умолчанию `llama3`) и векторную базу Qdrant для хранения эмбеддингов. Главная особенность – **потоковый вывод** (`stream()`), благодаря которому ответы генерируются токен за токеном и сразу отображаются в консоли, а не после завершения работы. ## Предварительные требования | Пакет | Версия | Зачем нужен | |-------|--------|-------------| | `ollama` | любой актуальный | Запускает локальную модель LLM (llama3) | | `qdrant` | 1.x+ | Хранит векторные эмбеддинги для быстрых запросов | | `python>=3.10` | – | Язык выполнения | > **Важно**: Установите и запустите Ollama и 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==0.2.* langgraph==0.1.* langchain-ollama==0.1.* langchain-qdrant==0.1.* nomic-embed-text==0.3.* python-dotenv ``` ## Запуск ```bash # 1. Убедитесь, что Ollama и Qdrant запущены. # 2. Запустите агента: python agent.py ``` ### Пример команды с аргументами (если добавлены CLI‑параметры) ```bash python agent.py --prompt "Расскажи о последних новостях в области AI" ``` ## Пример использования После запуска вы увидите интерактивный ввод: ``` > Какую роль играет Qdrant в работе агента? ``` Ответ будет выводиться токен за токеном: ``` Qdrant используется как быстрый векторный хранилище для эмбеддингов, что позволяет быстро находить релевантные тексты и ускорять генерацию ответов. ``` ### Пример кода, который можно вставить в `agent.py` (потоковый вывод) ```python from langchain_ollama import ChatOllama # Инициализация LLM llm = ChatOllama(model="llama3") # Потоковый вызов for chunk in llm.stream(prompt): print(chunk.content, end="", flush=True) print() # Перевод строки после завершения ``` > **Совет**: При работе с LangGraph используйте `AgentExecutor` в режиме `stream=True`, чтобы получать токен за токеном из всех инструментов. ## Вклад 1. Форкните репозиторий. 2. Создайте ветку (`git checkout -b feature/stream-mode`). 3. Сделайте коммит и отправьте PR. Убедитесь, что тесты проходят: `pytest`. --- **Автор:** Ваше имя **Дата создания:** 2026‑05‑27