Практическое задание №3: Память и подтверждение действий: README.md
This commit is contained in:
+122
@@ -0,0 +1,122 @@
|
||||
# Практическое задание №3: Память и подтверждение действий
|
||||
|
||||
## Описание проекта
|
||||
В этом проекте реализован агент на базе LangGraph, который умеет:
|
||||
- **Поминать** историю диалога (MemorySaver + `thread_id`);
|
||||
- **Подтверждать** каждый вызов инструмента пользователем (`interrupt_before=['tools']`).
|
||||
|
||||
Библиотека `rich` используется для красивого вывода в консоль.
|
||||
|
||||
## Структура файлов
|
||||
```
|
||||
.
|
||||
├── agent.py # Создание и настройка агента
|
||||
├── main.py # Точка входа: запуск диалога с пользователем
|
||||
└── tools.py # Пример пользовательского инструмента
|
||||
```
|
||||
|
||||
## Установка зависимостей
|
||||
|
||||
```bash
|
||||
# Клонируйте репозиторий (если ещё не сделали)
|
||||
git clone https://github.com/your-username/your-repo.git
|
||||
cd your-repo
|
||||
|
||||
# Создайте виртуальное окружение (рекомендуется)
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||||
|
||||
# Установите зависимости
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
`requirements.txt` содержит:
|
||||
```text
|
||||
langgraph
|
||||
rich
|
||||
openai # или любой другой LLM, который вы используете
|
||||
```
|
||||
|
||||
## Запуск проекта
|
||||
|
||||
### 1. Создание агента (`agent.py`)
|
||||
Файл `agent.py` экспортирует функцию `create_agent`, которая возвращает готовый агент.
|
||||
|
||||
```bash
|
||||
python -c "from agent import create_agent; print('Agent ready')"
|
||||
```
|
||||
|
||||
> **Важно**: перед запуском убедитесь, что переменная окружения `OPENAI_API_KEY` (или аналогичная) установлена.
|
||||
|
||||
### 2. Запуск диалога (`main.py`)
|
||||
Файл `main.py` запускает интерактивный чат с агентом.
|
||||
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
Пример работы:
|
||||
|
||||
```
|
||||
> Привет, как дела?
|
||||
Agent: Я в порядке, спасибо! Как я могу помочь?
|
||||
|
||||
> Сколько будет 12 * 8?
|
||||
[Подтверждение] Вы хотите вызвать инструмент `calculator`? (y/n): y
|
||||
Agent: Результат вычисления: 96
|
||||
|
||||
> Спасибо!
|
||||
```
|
||||
|
||||
### 3. Добавление новых инструментов (`tools.py`)
|
||||
В файле `tools.py` определены пользовательские инструменты.
|
||||
Чтобы добавить новый, создайте функцию и зарегистрируйте её в списке `TOOLS`.
|
||||
|
||||
```python
|
||||
def my_new_tool(arg1: str) -> str:
|
||||
"""Описание нового инструмента."""
|
||||
return f"Вы передали {arg1}"
|
||||
```
|
||||
|
||||
## Пример использования
|
||||
|
||||
```python
|
||||
from agent import create_agent
|
||||
from tools import TOOLS
|
||||
from langgraph.checkpoint.memory import MemorySaver
|
||||
from rich.console import Console
|
||||
|
||||
console = Console()
|
||||
|
||||
# Инициализируем память
|
||||
memory = MemorySaver()
|
||||
|
||||
# Создаём агента с подтверждением перед каждым инструментом
|
||||
agent = create_agent(
|
||||
model="gpt-4o-mini",
|
||||
tools=TOOLS,
|
||||
system_prompt="Вы — полезный помощник.",
|
||||
checkpointer=memory,
|
||||
interrupt_before=["tools"],
|
||||
)
|
||||
|
||||
config = {"configurable": {"thread_id": "session-1"}}
|
||||
|
||||
# Запускаем диалог
|
||||
response = agent.stream(
|
||||
{"messages": [{"role": "user", "content": "Сколько будет 7 * 6?"}]},
|
||||
config=config,
|
||||
)
|
||||
for chunk in response:
|
||||
console.print(chunk["output_text"], end="")
|
||||
```
|
||||
|
||||
## Что дальше?
|
||||
- Добавьте собственные инструменты в `tools.py`.
|
||||
- Настройте более сложный `system_prompt` и правила взаимодействия.
|
||||
- Используйте другие LLM (например, Anthropic) заменив `"gpt-4o-mini"` на нужную модель.
|
||||
|
||||
---
|
||||
|
||||
**Автор:** [Ваше имя]
|
||||
**Дата:** 2026‑05‑26
|
||||
Reference in New Issue
Block a user