107 lines
3.9 KiB
Markdown
107 lines
3.9 KiB
Markdown
# 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!** |