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/)
После установки скачайте нужную модель:
curl -fsSL https://ollama.com/install.sh | shollama pull llama3 - Qdrant
Можно запустить локально через Docker:docker run -p 6333:6333 qdrant/qdrant
📦 Установка зависимостей
pip install -r requirements.txt
requirements.txt содержит все необходимые пакеты, включая langchain, langchain-ollama, langchain-qdrant, qdrant-client и др.
🚀 Запуск
1. Инициализация агента (agent.py)
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.
📄 Пример использования кода
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!