Практическое задание №3: Память и подтверждение действий: README.md
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
|||||||
|
# Практическое задание №3 – Память и подтверждение действий
|
||||||
|
|
||||||
|
## Описание проекта
|
||||||
|
В этом проекте реализован чат‑бот на основе LangChain + LangGraph с поддержкой:
|
||||||
|
- **Памяти разговора** (сохраняется история диалога в памяти `MemorySaver`).
|
||||||
|
- **Подтверждения** каждого вызова инструмента пользователем.
|
||||||
|
- Взаимодействия с локальными моделями Ollama (`llama3`, `nomic‑embed-text`) и хранением эмбеддингов в Qdrant.
|
||||||
|
|
||||||
|
Файлы проекта:
|
||||||
|
- `agent.py` – основной скрипт, создающий агента и запускающий диалог.
|
||||||
|
- `client.py` – пример клиентского кода для взаимодействия с агентом через API.
|
||||||
|
|
||||||
|
## Предварительные требования
|
||||||
|
| Компонент | Версия / Минимальные требования | Как установить |
|
||||||
|
|-----------|---------------------------------|----------------|
|
||||||
|
| **Python** | 3.10+ | `python -m venv .venv && source .venv/bin/activate` |
|
||||||
|
| **Ollama** | Любая версия, поддерживающая модели `llama3` и `nomic-embed-text` | [Скачать Ollama](https://ollama.ai/) |
|
||||||
|
| **Qdrant** | 1.10+ (локальный сервер) | `docker run -p 6333:6333 qdrant/qdrant` |
|
||||||
|
| **Rich** | 13.x | `pip install rich` |
|
||||||
|
|
||||||
|
> ⚠️ Убедитесь, что Ollama запущен и модели `llama3` и `nomic-embed-text` загружены:
|
||||||
|
> ```bash
|
||||||
|
> ollama pull llama3
|
||||||
|
> ollama pull nomic-embed-text
|
||||||
|
> ```
|
||||||
|
|
||||||
|
## Установка зависимостей проекта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# В корне репозитория
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Файл `requirements.txt` содержит:
|
||||||
|
|
||||||
|
```text
|
||||||
|
langchain==0.2.*
|
||||||
|
langgraph==0.1.*
|
||||||
|
langchain-ollama==0.1.*
|
||||||
|
langchain-qdrant==0.1.*
|
||||||
|
rich==13.*
|
||||||
|
```
|
||||||
|
|
||||||
|
> Если вы используете виртуальное окружение, активируйте его перед установкой.
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
|
||||||
|
### 1. Запустить агента (`agent.py`)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python agent.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример вывода:
|
||||||
|
|
||||||
|
```
|
||||||
|
🤖 Agent: Здравствуйте! Чем могу помочь?
|
||||||
|
User: Какой сегодня прогноз погоды в Москве?
|
||||||
|
🤖 Agent (tool: weather): ...
|
||||||
|
```
|
||||||
|
|
||||||
|
> Агент будет запрашивать подтверждение перед каждым вызовом инструмента. Пользователь отвечает `yes`/`no`.
|
||||||
|
|
||||||
|
### 2. Запустить клиент (`client.py`)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python client.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример взаимодействия:
|
||||||
|
|
||||||
|
```
|
||||||
|
Client: Какой сегодня прогноз погоды в Москве?
|
||||||
|
Agent: ...
|
||||||
|
```
|
||||||
|
|
||||||
|
> Скрипт демонстрирует простое API‑взаимодействие с агентом.
|
||||||
|
|
||||||
|
## Пример использования
|
||||||
|
|
||||||
|
1. **Запуск агента**
|
||||||
|
```bash
|
||||||
|
python agent.py
|
||||||
|
```
|
||||||
|
2. **Ввод запроса**
|
||||||
|
```
|
||||||
|
User: Расскажи мне о последних новостях в области ИИ.
|
||||||
|
```
|
||||||
|
3. **Подтверждение вызова инструмента**
|
||||||
|
Агент предложит вызвать инструмент `news`. Вы отвечаете:
|
||||||
|
```
|
||||||
|
yes
|
||||||
|
```
|
||||||
|
4. **Получение ответа**
|
||||||
|
Агент возвращает результат, а история диалога сохраняется для последующих вопросов.
|
||||||
|
|
||||||
|
> Память позволяет агенту учитывать контекст предыдущих сообщений, а подтверждение повышает контроль над выполнением действий.
|
||||||
|
|
||||||
|
## Дополнительные сведения
|
||||||
|
|
||||||
|
- Для изменения модели или параметров памяти отредактируйте `agent.py`.
|
||||||
|
- В `client.py` можно подключить собственный веб‑интерфейс или REST API.
|
||||||
|
- Логи и вывод форматируются библиотекой **Rich** для удобства чтения в терминале.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Если возникли вопросы, откройте issue в репозитории. Удачной работы!
|
||||||
Reference in New Issue
Block a user