From 8df98a35fc1ab50f8499d68f85d89c27aee7568a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B8=D1=80=D0=B8=D0=BB=D0=BB=20=D0=9A=D1=83=D1=82?= =?UTF-8?q?=D0=BB=D0=B0=D1=85=D0=BC=D0=B5=D1=82=D0=BE=D0=B2?= Date: Thu, 4 Jun 2026 16:16:12 +0000 Subject: [PATCH] add main.py --- main.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..e5210e0 --- /dev/null +++ b/main.py @@ -0,0 +1,67 @@ +""" +Демонстрация LangGraph-агента с рефлексией. + +Граф: START -> draft_answer -> reflect -> (ok: END | needs_revision: rewrite -> reflect) +max_rounds по умолчанию 2. + +Запуск: + python main.py +""" +import asyncio +import os +from dotenv import load_dotenv + +load_dotenv() + +from graph import graph, ReflectState # noqa: E402 + +async def run(question: str, max_rounds: int = 2) -> ReflectState: + """Запускает граф и возвращает финальное состояние.""" + print(f"Вопрос: {question}") + print(f"max_rounds: {max_rounds}") + print("=" * 60) + + state = await graph.ainvoke({ + "question": question, + "draft": "", + "critique": "", + "verdict": "", + "round": 0, + "max_rounds": max_rounds, + }) + return state + +def main() -> None: + # Демо 1: основной вопрос из задания + state = asyncio.run(run( + question="Объясни студенту разницу между tool и resource в MCP", + max_rounds=2, + )) + print("\n" + "=" * 60) + print(f"Итоговый ответ (раундов доработки: {state['round']}):") + print(state["draft"]) + print(f"Финальный вердикт критика: {state['verdict']}") + + print("\n" + "=" * 60) + + # Демо 2: другой вопрос + state2 = asyncio.run(run( + question="Что такое LangGraph и чем он отличается от обычной цепочки LangChain?", + max_rounds=2, + )) + print(f"Итоговый ответ (раундов доработки: {state2['round']}):") + print(state2["draft"]) + + print("\n" + "=" * 60) + + # Демо 3: короткий вопрос — проверяем что лимит соблюдается + state3 = asyncio.run(run( + question="Что такое StateGraph в LangGraph?", + max_rounds=1, + )) + print(f"Итоговый ответ (max_rounds=1, раундов: {state3['round']}):") + print(state3["draft"]) + + +if __name__ == "__main__": + main()