Проектирование транзакционных агентных AI с LangGraph
Узнайте, как реализовать транзакционную систему AI с использованием LangGraph и двухфазного коммита.
Обзор
В этом руководстве мы реализуем агентный шаблон AI с использованием LangGraph, который рассматривает рассуждение и действия как транзакционный процесс, а не как единственное решение. Мы моделируем систему двухфазного коммита, в которой агент подготавливает обратимые изменения, валидирует строгие инварианты, делает паузу для одобрения человека через графические прерывания и только потом подтверждает или откатывает.
Безопасность и аудит
С помощью этого подхода мы показываем, как можно проектировать агентные системы с безопасностью, аудитом и контролируемостью в их основе, переходя от реактивных чат-агентов к структурированным, осознающим управление рабочим процессам AI, которые надежно работают в Google Colab с использованием моделей OpenAI.
Настройка окружения
Мы настраиваем окружение выполнения следующим образом:
!pip -q install -U langgraph langchain-openai
import os, json, uuid, copy, math, re, operator
from typing import Any, Dict, List, Optional
from typing_extensions import TypedDict, Annotated
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, AnyMessage
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.types import interrupt, Command
def _set_env_openai():
if os.environ.get("OPENAI_API_KEY"):
return
try:
from google.colab import userdata
k = userdata.get("OPENAI_API_KEY")
if k:
os.environ["OPENAI_API_KEY"] = k
return
except Exception:
pass
import getpass
os.environ["OPENAI_API_KEY"] = getpass.getpass("Введите OPENAI_API_KEY: ")
_set_env_openai()
MODEL = os.environ.get("OPENAI_MODEL", "gpt-4o-mini")
llm = ChatOpenAI(model=MODEL, temperature=0)Абстракция книги
Далее мы определяем основную абстракцию книги:
SAMPLE_LEDGER = [
{"txn_id": "T001", "name": "Asha", "email": "ASHA@Example.com", "amount": "1,250.50", "date": "12/01/2025", "note": "Продление членства"},
{"txn_id": "T002", "name": "Ravi", "email": "ravi@example.com", "amount": "-500", "date": "2025-12-02", "note": "Возврат?"},
{"txn_id": "T003", "name": "Sara", "email": "sara@example.com", "amount": "700", "date": "02-12-2025", "note": "Штраф отменен"},
]
ALLOWED_OPS = {"замена", "удалить", "добавить"}Моделирование рабочего процесса
Мы моделируем внутреннее состояние агента и определяем каждую ноду в рабочем процессе LangGraph:
class TxnState(TypedDict):
messages: Annotated[List[AnyMessage], add_messages]
raw_rows: List[Dict[str, Any]]
sandbox_rows: List[Dict[str, Any]]
patch: List[Dict[str, Any]]
validation: Dict[str, Any]
approved: Optional[bool]
# Определите ваши узлы
...Запуск агента
Наконец, мы выполняем транзакционного агента:
def run():
state = {
"messages": [],
"raw_rows": SAMPLE_LEDGER,
"sandbox_rows": [],
"patch": [],
"validation": {},
"approved": None,
}
out = app.invoke(state)
print(out["messages"][-1].content)
run()Таким образом, данное руководство демонстрирует, как LangGraph позволяет нам создавать агентов, которые рассуждают над состояниями, устанавливают контрольные точки валидации и сотрудничают с людьми в четко определенных контрольных точках. Мы воспринимаем агента не как оракула, а как координатора транзакций, способного планировать, проверять и отменять свои действия, сохраняя полный аудит.
Switch Language
Read this article in English