Повторный экзамен: Граф с рефлексией и доработкой: README.md
This commit is contained in:
@@ -1,3 +1,126 @@
|
|||||||
# task-6a1d75d1-povtornyy-ekzamen-graf-s-
|
# Повторный экзамен: Граф с рефлексией и доработкой
|
||||||
|
|
||||||
Решения домашних заданий
|
## Описание проекта
|
||||||
|
В этом проекте реализован **LangGraph**‑агент, который сам проверяет свой ответ на заданный вопрос.
|
||||||
|
1. Агент генерирует *черновик* ответа (`draft_answer`).
|
||||||
|
2. Затем отдельный узел‑критик оценивает качество черновика и выдаёт вердикт `ok` или `needs_revision`, а также список замечаний (`critique`).
|
||||||
|
3. Если критик требует доработки, агент вносит изменения в ответ через узел `rewrite`. Процесс повторяется не более `max_rounds` раз (по умолчанию 2).
|
||||||
|
|
||||||
|
Таким образом реализуется «самопроверка» без использования случайных инструментов и с акцентом на рефлексию LLM.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Стек технологий
|
||||||
|
- Python 3.10+
|
||||||
|
- **langgraph** – библиотека для построения графов взаимодействия LLM‑узлов
|
||||||
|
- **langchain-openai** (или **langchain-ollama**) – клиент OpenAI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install langgraph langchain-openai
|
||||||
|
```
|
||||||
|
|
||||||
|
> Если вы хотите использовать Ollama вместо OpenAI, замените `langchain-openai` на `langchain-ollama` и настройте соответствующий провайдер.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Файлы проекта
|
||||||
|
| Файл | Описание |
|
||||||
|
|------|----------|
|
||||||
|
| `solution.py` | Основная реализация графа: состояние, узлы и запуск. |
|
||||||
|
| `README.md` | Текущий файл – инструкция по использованию. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создайте виртуальное окружение (необязательно)
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
|
# Установите зависимости
|
||||||
|
pip install langgraph langchain-openai
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Важно**: для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`.
|
||||||
|
> ```bash
|
||||||
|
> export OPENAI_API_KEY="sk-..."
|
||||||
|
> ```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Запуск проекта
|
||||||
|
|
||||||
|
### 1. Пример запуска из командной строки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py "Объясни студенту разницу между tool и resource в MCP"
|
||||||
|
```
|
||||||
|
|
||||||
|
Вы увидите лог, где показаны:
|
||||||
|
|
||||||
|
1. **Draft** – первоначальный ответ
|
||||||
|
2. **Critique** – замечания критика
|
||||||
|
3. **Verdict** – `ok` или `needs_revision`
|
||||||
|
4. При необходимости — **Rewrite** (доработанный ответ)
|
||||||
|
|
||||||
|
### 2. Запуск в интерактивном режиме
|
||||||
|
|
||||||
|
Если вы хотите задать вопрос вручную, просто запустите скрипт без аргументов:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Скрипт запросит ввод вопроса через `input()`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Пример использования (output)
|
||||||
|
|
||||||
|
```text
|
||||||
|
Question: Объясни студенту разницу между tool и resource в MCP
|
||||||
|
|
||||||
|
Draft:
|
||||||
|
Tool – это конкретный инструмент, который можно использовать для выполнения задачи. Он обычно имеет определённый набор функций и может быть применён к различным данным. Resource – это более общий термин, обозначающий любой материал или информацию, которые могут поддерживать работу с инструментом (например, документация, обучающие материалы, примеры).
|
||||||
|
|
||||||
|
Critique:
|
||||||
|
- Не хватает конкретики: какие именно инструменты рассматриваются?
|
||||||
|
- Нет упоминания о том, как resource помогает использовать tool.
|
||||||
|
- В ответе присутствует лишняя информация о "данных".
|
||||||
|
|
||||||
|
Verdict: needs_revision
|
||||||
|
|
||||||
|
Rewrite:
|
||||||
|
Tool – это конкретный программный компонент (например, API или библиотека), который позволяет выполнять определённые операции. Resource – это любой материал, помогающий понять и эффективно использовать инструмент: документация, примеры кода, обучающие видео. Таким образом, tool предоставляет функциональность, а resource обеспечивает поддержку и обучение при работе с этим функционалом.
|
||||||
|
|
||||||
|
Verdict: ok
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Как изменить параметры
|
||||||
|
|
||||||
|
- **max_rounds** – максимальное количество итераций доработки (по умолчанию 2).
|
||||||
|
Вызовите скрипт так:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py "Вопрос" --max-rounds 3
|
||||||
|
```
|
||||||
|
|
||||||
|
- **model** – используемая модель LLM. По умолчанию `gpt-4o-mini`.
|
||||||
|
Изменить можно в функции `draft_answer` и `reflect`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что дальше
|
||||||
|
|
||||||
|
- Добавьте более сложные критерии критика (например, оценку фактической точности).
|
||||||
|
- Интегрируйте с внешними инструментами для проверки фактов.
|
||||||
|
- Создайте веб‑интерфейс на FastAPI или Streamlit для интерактивного использования.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
|
||||||
|
MIT License – свободно используйте и модифицируйте код под свои нужды.
|
||||||
Reference in New Issue
Block a user