# Stream‑Mode AI Agent ## 📖 Описание проекта Проект реализует **AI‑агента**, способного выполнять задачи, используя: - **LangChain** – фреймворк для построения цепочек и агентов; - **Ollama** – локальный LLM (model `llama3`); - **Qdrant** – векторная база данных для хранения эмбеддингов; - **langchain‑qdrant** – интеграция LangChain с Qdrant; - **langchain‑ollama** – обёртка Ollama для LangChain. Главной особенностью является переход от синхронного вызова `.invoke()` к потоковому выводу через `.stream()`. Теперь ответы агента появляются в консоли токен за токеном, что делает взаимодействие более отзывчивым и похожим на ChatGPT. ## ⚙️ Предварительные требования - **Python 3.10+** - **Ollama** (установить можно по инструкции: https://ollama.ai/) ```bash curl -fsSL https://ollama.com/install.sh | sh ``` После установки скачайте нужную модель: ```bash ollama pull llama3 ``` - **Qdrant** Можно запустить локально через Docker: ```bash docker run -p 6333:6333 qdrant/qdrant ``` ## 📦 Установка зависимостей ```bash pip install -r requirements.txt ``` `requirements.txt` содержит все необходимые пакеты, включая `langchain`, `langchain-ollama`, `langchain-qdrant`, `qdrant-client` и др. ## 🚀 Запуск ### 1. Инициализация агента (agent.py) ```bash python agent.py ``` При запуске агент будет ждать ввода команды в консоли, например: ``` > What is the capital of France? ``` ### 2. Пример использования с потоковым выводом После запуска вы можете вводить запросы. Ответ будет печататься токен за токеном: ``` > 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`. ## 📄 Пример использования кода ```python 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 = OllamaLLM(model="llama3", temperature=0.7, timeout=60) # Векторная база (Qdrant) store = QdrantStore( url=os.getenv("QDRANT_URL", "http://localhost:6333"), 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) ``` ## 📚 Что дальше? - Добавить более сложные инструменты (запросы к API, работа с файлами и т.д.). - Настроить хранение истории диалога в Qdrant для контекстуального ответа. - Интегрировать с веб‑интерфейсом или чат‑ботом. --- **Happy coding!**