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