Files
T

3.9 KiB
Raw Blame History

StreamMode AI Agent

📖 Описание проекта

Проект реализует AI‑агента, способного выполнять задачи, используя:

  • LangChain – фреймворк для построения цепочек и агентов;
  • Ollama – локальный LLM (model llama3);
  • Qdrant – векторная база данных для хранения эмбеддингов;
  • langchainqdrant – интеграция LangChain с Qdrant;
  • langchainollama – обёртка Ollama для LangChain.

Главной особенностью является переход от синхронного вызова .invoke() к потоковому выводу через .stream(). Теперь ответы агента появляются в консоли токен за токеном, что делает взаимодействие более отзывчивым и похожим на ChatGPT.

⚙️ Предварительные требования

  • Python 3.10+
  • Ollama (установить можно по инструкции: https://ollama.ai/)
    curl -fsSL https://ollama.com/install.sh | sh
    
    После установки скачайте нужную модель:
    ollama 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!