Галоўная / Артыкулы

Графы фінансавых злочынаў, у якіх беруць удзел калькольнікі, з LangChain, LangGraph і LangSmith

Граф фінансавых злочынаў з удзелам калькольнікаў, створаны за дапамою LangChain, LangGraph і LangSmith: маршрутаванне адпаведальных адамоў, падграфы, перарывы з боку людзя, ацэнка, правілы карання.

Выдавец: REACTAPP.TOP10 хв чытання2374 слоў

Крыніцы: Building Multi-Agent Financial Crime Detection Systems with LangGraph, LangChain, and LangSmith

Проблемы на практыцы

Анаіз фінансавых злочынаў — гэта не адна-едынстая задача. Для розгляду паводку можа знадобіцца даполненне інформацыі па прынцыпу KYC, перагляд санкцый, анаіз негатыўных паведамленняў у медыі, выявленне заканамасцей транзакцый і стварэнне нарады для следчых — кожна з гэтых задач выкарыстоўвае разныя інструменты, паказнікі якосці службы і способы выявлення адказоў. Аднальная сістэма, якая намагаецца зробіць усё сама, становіцца незрозумелай, важкай для тэставання і рызыковай, калі які-небудзь з інструментаў перастае працаваць.

Чаму кансорцыум спеціялістаў лепшы за адну велікую сістэму

Спецыялізаваныя агенты дапамагаюць зберагчы фокус на задачах і інструментах. Керавальнік можа распрацоўваць заведамення або раздзеляць ўсё на часткі. Адказы за адмовы застаюцца локальнымі. Людская пераглядка можа контролаваць высакарызыкованыя перэходы. Можлівасць абзору дапамагае прызначыць вартасці і адказы па кожнай ролі, а не проста стварваць ўсёўказальную лінію дзеяння.

Тры слоі: LangChain, LangGraph, LangSmith

LangChain апранае модэлі, інструменты і срэдства для апрацоўкі паведамленняў. LangGraph керуе становым оркестрацыям — спільным станам задач, рэшткамі, перазберагчыцтвам дадзэнняў і перарывамі. LangSmith апранае функцыі трэйсінгу, працю з набрамі дадзэнняў і ўстройствах для ацэнкі. Агент на базе простага цыклу while можа вызываць інструменты, але рэдка калі забезпечвае стойкую памяць задачы, паралельныя перагляды, паўторнае выкарыстоўванне сабграфаў чы першасортны HITL.

Спільны стан задачы

Пачніце з чыткага шэмату стану: ідэнтыфікатор задачы, паведамлення, балы, флагі, рашэнні па маршрутацыі і запісы следчага.

from typing import TypedDict, Annotated, Literal
from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from operator import add

class CaseState(TypedDict):
    case_id: str
    customer_id: str
    transactions: list[dict]
    messages: Annotated[list, add_messages]
    kyc_flags: Annotated[list[str], add]
    sanctions_hits: Annotated[list[dict], add]
    risk_score: float
    narrative: str
    requires_human_review: bool

Одын вузол агента з інструментамі

Прыўяжыце модэль да інструментаў, прызначаных для конкрэтной сферы (пошук санкцый, выкарыстоўванне спіску пад наглядам) і дазвольце вузлу інструментаў выканаць вызывы.

from langchain_anthropic import ChatAnthropic
from langchain_core.tools import tool

@tool
def screen_ofac(name: str, dob: str | None = None) -> dict:
    """Screen an individual or entity name against the UK list."""
    # In production: call a real screening API (e.g. UK100, Refinitiv)
    return {"name": name, "match": False, "score": 0.02}

@tool
def screen_un_sanctions(name: str) -> dict:
    """Screen a name against the UN Consolidated Sanctions List."""
    return {"name": name, "match": False, "score": 0.0}
llm = ChatAnthropic(model="claude-sonnet-4-6", temperature=0)
sanctions_llm = llm.bind_tools([screen_ofac, screen_un_sanctions])

def sanctions_agent(state: CaseState) -> dict:
    response = sanctions_llm.invoke(state["messages"])
    return {"messages": [response]}

Складанне графа

Прыўяжыце вузлы агента і інструментаў, выкарыстоўваючы tools_condition (או адпоўнюючы елемент) для цыклу, пакуль модэль не перастане вызываць інструменты, а пасля — перайдзіце да наступнага этапу.

from langgraph.prebuilt import ToolNode, tools_condition

graph = StateGraph(CaseState)
graph.add_node("kyc_agent", kyc_agent)
graph.add_node("sanctions_agent", sanctions_agent)
graph.add_node("sanctions_tools", ToolNode([screen_ofac, screen_un_sanctions]))
graph.add_node("tx_monitoring_agent", tx_monitoring_agent)
graph.add_node("narrative_agent", narrative_agent)
graph.set_entry_point("kyc_agent")
graph.add_edge("kyc_agent", "sanctions_agent")
# Conditional edge: loop back to tools if the LLM requested a tool call
graph.add_conditional_edges(
    "sanctions_agent",
    tools_condition,
    {"tools": "sanctions_tools", END: "tx_monitoring_agent"},
)
graph.add_edge("sanctions_tools", "sanctions_agent")
graph.add_edge("tx_monitoring_agent", "narrative_agent")
graph.add_edge("narrative_agent", END)
app = graph.compile()

Перад стварэнням цэлага графа тэставайце вузлы з фальшывым станам:

def test_sanctions_agent_flags_high_score_match():
    fake_state = {
        "messages": [HumanMessage(content="Screen: Igor Petrov, DOB 1978-03-11")],
    }
    result = sanctions_agent(fake_state)
    assert "tool_calls" in result["messages"][-1].additional_kwargs

Маршрутызацыя адпраўніка

Клас паведамлення адпраўніка класыфікуе наступнага спецяліста — KYC, санкцыі, негатыўныя медыйныя матэрыялы — або завершаецца падсумкам.

from langchain_core.messages import SystemMessage

SUPERVISOR_PROMPT = """You are a financial crime case supervisor.
Route to exactly one of: kyc_agent, sanctions_agent, tx_monitoring_agent,
adverse_media_agent, narrative_agent, or FINISH if the case is fully investigated."""

def supervisor(state: CaseState) -> dict:
    routing_llm = llm.with_structured_output(RouteDecision)
    decision = routing_llm.invoke(
        [SystemMessage(content=SUPERVISOR_PROMPT)] + state["messages"]
    )
    return {"next": decision.next_agent}

def route_next(state: CaseState) -> str:
    return state["next"] if state["next"] != "FINISH" else END
graph.add_node("supervisor", supervisor)
for agent_name in ["kyc_agent", "sanctions_agent", "tx_monitoring_agent", "adverse_media_agent"]:
    graph.add_edge(agent_name, "supervisor")
graph.add_conditional_edges("supervisor", route_next)

Паралельны распад

Незалежныя перакантрольванні можна адрабатваць пасля KYC без неабяжнага апрацоўкі всего:

graph.add_edge("kyc_agent", "sanctions_agent")
graph.add_edge("kyc_agent", "adverse_media_agent")
graph.add_edge("kyc_agent", "tx_monitoring_agent")

# Fan-in: all three must complete before scoring
graph.add_edge("sanctions_agent", "risk_scoring_agent")
graph.add_edge("adverse_media_agent", "risk_scoring_agent")
graph.add_edge("tx_monitoring_agent", "risk_scoring_agent")

Участка чалавека

Зробіце паазначэнне, перарвіце працэс, калі рызык праўяжыць за правіламі, перадайце частковы стан у інтэрфейс справы, а пасля — продажыце працэс з інформацыяй ад расследавача.

from langgraph.checkpoint.memory import MemorySaver
from langgraph.types import interrupt, Command

def compliance_review(state: CaseState) -> dict:
    if state["risk_score"] > 0.7:
        decision = interrupt({
            "narrative": state["narrative"],
            "risk_score": state["risk_score"],
            "action_needed": "approve_or_reject_sar",
        })
        return {"requires_human_review": False, "human_decision": decision}
    return {"requires_human_review": False}

checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)
config = {"configurable": {"thread_id": "case-2026-00931"}}
result = app.invoke({"case_id": "case-2026-00931", ...}, config=config)

# Later, once a human reviews in your case management UI:
final = app.invoke(Command(resume={"approved": True, "reviewer": "j.smith"}), config=config)
for chunk in app.stream(
    {"case_id": "case-2026-00931", ...},
    config=config,
    stream_mode="updates",
):
    for node_name, node_output in chunk.items():
        print(f"[{node_name}] emitted: {node_output}")
        # push node_output to a websocket / case UI here

Падграфы для павтарна выкарыстоўваных ейкатак

Упакавайце рашэнне па KYC як самастоятны граф і прыўяжыце яго як вузел, каб іншыя тыпы справ моглі выкарыстоўваць тую ж ейкатаку.

kyc_subgraph = StateGraph(CaseState)
kyc_subgraph.add_node("resolve_entity", resolve_entity_node)
kyc_subgraph.add_node("verify_documents", verify_documents_node)
kyc_subgraph.add_node("pep_check", pep_check_node)
kyc_subgraph.set_entry_point("resolve_entity")
kyc_subgraph.add_edge("resolve_entity", "verify_documents")
kyc_subgraph.add_edge("verify_documents", "pep_check")
kyc_subgraph.add_edge("pep_check", END)
compiled_kyc = kyc_subgraph.compile()
parent_graph = StateGraph(CaseState)
parent_graph.add_node("kyc_process", compiled_kyc)  # subgraph as a node

Візуабільнасць за дапамогою LangSmith

Увімкніце трэйсінг і пазначайце запускі за ідэнтыфікаторамі справ і ролямі агентаў.

import os

os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = "ls__..."
os.environ["LANGSMITH_PROJECT"] = "financial-crime-agents"
result = app.invoke(
    {"case_id": "case-2026-00931", ...},
    config={
        "configurable": {"thread_id": "case-2026-00931"},
        "metadata": {"case_id": "case-2026-00931", "customer_tier": "high_risk"},
        "tags": ["sar_pipeline", "prod"],
    },
)

Ітэрацыя на адной основе ацэнкі

Набор дадзеных адначыць на змены ў рэгрэсіях, калі змінююцца запіты або інструменты. LLM-як суддзі можа оценіць яснасць наратыў для апуснакоў у стылі SAR — пры важлівых сітуацыях завжды выкарыстоўваецца людская пераканальнае ацэнкі.

from langsmith import Client
from langsmith.evaluation import evaluate

client = Client()
def correctness_evaluator(run, example) -> dict:
    predicted_risk = run.outputs.get("risk_score", 0)
    actual_risk = example.outputs.get("risk_score", 0)
    return {
        "key": "risk_score_accuracy",
        "score": 1.0 if abs(predicted_risk - actual_risk) < 0.15 else 0.0,
    }
results = evaluate(
    lambda inputs: app.invoke(inputs, config={"configurable": {"thread_id": "eval"}}),
    data="aml-labeled-cases-2026-h1",
    evaluators=[correctness_evaluator],
    experiment_prefix="sar-pipeline-v3",
)
from langsmith.evaluation import LangChainStringEvaluator

narrative_judge = LangChainStringEvaluator(
    "criteria",
    config={
        "criteria": {
            "cites_evidence": "Does the narrative cite specific transaction IDs and dates?",
            "regulatory_tone": "Is the language neutral and factual, avoiding speculation?",
        },
        "llm": ChatAnthropic(model="claude-sonnet-4-6", temperature=0),
    },
)
results = evaluate(
    lambda inputs: app.invoke(inputs, config=config),
    data="aml-labeled-cases-2026-h1",
    evaluators=[correctness_evaluator, narrative_judge],
    experiment_prefix="sar-narrative-v2",
)

Меры захоплення і адрабатка неудач

Павтараць спробы з ненадзеянымі інструментамі, обмежыць рэкурсію, а ў разе збояў пры санкціях — адразу паставіць статус неудачы, а не выдумваць чысты рэзультат.

from langgraph.pregel import RetryPolicy

graph.add_node(
    "sanctions_tools",
    ToolNode([screen_ofac, screen_un_sanctions]),
    retry=RetryPolicy(max_attempts=3, backoff_factor=2.0),
)
result = app.invoke(initial_state, config={**config, "recursion_limit": 25})

Падступы ў працоўных схемах AML

Закрытыя, спільныя, зменныя глобальныя змэннікі, самастойнае фіксаванне без нагляду, відсутнасць лінійной прыяжы з оцэнкі да доказаў, а таксама наглядачы, якія без канца падазроўваюць той самы агент. Обмежыць ціклы, выкарыстоўваць цытаты ў стане і заставляць усі дзеяння з фіксаванням выконвацца праз HITL.

Фармат апавядання

Практычная топалогія: супервайзар у цэнтры, спецыялісты-агенты з кольцамі інструментаў, неабавязковыя паралельныя галузі, вузел злучэння/нараджання сюжэта, брама перарыву, а пасля — экспорт; включэнне павторныя можна выкарыстоўваць сабграфаў, дзе елементы павтараюцца.

             ┌─────────────┐
             │  Supervisor │◄───────────────-─┐
             └──────┬──────┘                  │
     ┌───────────────┼───────────────┐        │
     ▼               ▼               ▼        │
┌─────────┐   ┌──────────────┐  ┌───────────┐ │
│   KYC   │   │ Sanctions    │  │ TX Monitor│ │
│Subgraph │   │ Agent + Tools│  │  Agent    │ │
└────┬────┘   └──────┬───────┘  └─────┬─────┘ │
     └───────────────┴────────────────┘       │
                       ▼                      │
              ┌─────────────────┐             │
              │ Risk Scoring    │─────────────┘
              └────────┬────────┘
                       ▼
              ┌─────────────────┐        ┌──────────────┐
              │ Narrative Agent │───────►│ Human Review │
              └─────────────────┘        │ (interrupt)  │
                                         └──────┬───────┘
                                                 ▼
                                          SAR Filed / Closed

Косты і затрымкі

Распад на фан-ауты спалюе токены; кэш зберагае стабільныя профілі KYC; для маршрутызацыі выкарыстоўваюць меньшыя мадэлі, а для нараджання сюжэта — большыя; абнаўленні UI праказваюцца стрымам, так што следчыя бачаць прыгодзі ў пераддзеўстве фінальнага апісу.

Заключныя заўважэнні

Сістэмы фінансавых злочынаў з колькама агентамі ўспыхваюць, калі стан ёсць чыста выразны, спецыялісты можна тэставаць, оркестрацыя ёсць відная, а людзі застаюцца часткай працэсу для незворачных дзеянняў. LangGraph забезпечвае план керавання; LangChain — інструменты; LangSmith — цікл зворотнай свярзанасці, які падтрымлеў чыстасцю графа ў меру эвалюціі тыпалогій.

Рэгулюванне для агентаў, якія здзейснююць рэгульваныя розследавання

Команды, які займаюцяся борьбай з валютнымі праваляваннямі і шахрайствамі, вжо падпадаюць пад дэсктрыматычны рызык і трэбаванні аўдыту. Граф агента павінен ствараць следы доказоў, якія могуць выкарыстоўваць следчыя і рэгуляторы: якія інструменты былі запусцаны, якія спіскі падтрымаліся, якія порогі былі перакроены, хто затвердзіў адхіленне ад правілаў, і якая версія модэлі стварыла аналіз. Храніце гэтыя даны ў стане справы і экспортуйце іх разам з файлам справы, а не толькі ў прыватным інтэрфейсе для аналізу.

Змены ў запытах і інструментах павінны праходзіць па той самым працэсе карыстоўвання менеджамента змян, як і для двойкаў правілаў. Апробавайце новыя запыты над історычнымі справамі, парабяльце распадзел роутавання і вымагайце затверджэння перш чым пераводзіць іх у стацыонарны статус. Дасканалікі LangSmith дапамагаюць, але адпаведальныя за керуванне все рава патрабуюць пісьмовага затверджэння.

Людзкі фактары маюць значэнне. Калі пераскокі выходзяць занадта часта, слухачы іх ігнаруюць; калі занадта рэдка, рызык застаецца неконтрольваным. Налагодзіце прагі за дапамою перагляду выбраных прыкладаў. У потоках з проміжным станамі трэба адзначаць неяснасці, а не толькі впэўненыя выводы, каб слухачы зналі, дзе шукаць.

Стойкасць да атак ёсць частка надзеямоўнасці: рэзультаты інструментаў можу быць спантаннымі або враждэбнымі (напрыклад, заражаны тэкст у негатыўных медыя). Узлы па верыфікацыі должны чыставаць інформацыю і наводзіць апавяданні. Ніколі не дазволяйце адзінаму параграфу, выкаранаванаму з інтэрнэта, узгадваць можлівасць запуску процедуры без падтверджэння.

Працуячы над мерамі успеху, паўнаважна супарышчайце ступень автаматызаціі з якасцю: процэнт справ, якія заканчыліся аўтоматычна, сярэдні час розгляду, практыка хыбных схвалэнняў у пераглядах выбраных прыкладаў, а такса кожнай справы. Графікі, якія эканомяюць час аналітыкаў, але прыводзяць да хыбных схвалэнняў, не ёсць парадкамі. Зберагачыце можласць абараняючага выключэння, якае перадае усё людзям, калі партнеры паслабляюць свае стандарты.

Этыя практыкі ператвараюць архітэктуру-аспэкт з прыемнага дыяграмату на функцыйнальную сістэму. Прыведзеныя вышэй прыклады коду ўжо ёсць фундаментам; сама мадэль керавання – гэта тое, што дапамагае зберагчы довяроўнасць агентам, якіе борацца з фінансавымі праваламі.

Стварэнне спецыялістскіх запітоў без дуплікацыі

Кожны спецыялістскі агент павінен отрымваць толькі тую частку стану справы, якая йому патрэбна. Занос усіх дакладаў расследавання ў кожны запіт марнуе рэсурсы і прыводзіць да выкрадання нерэлевантных персональных дадзеных у інструменты, якімі ўсё гэта не патрэбна. Неабходна задаць функцыі прыводу дадзеных: sanctions_view(state), kyc_view(state), і працаваць з іхі праз тэсты. Керуючыя бачаюць статыстыку маршрутаў; тэкстарабітчыкі – пакеты доказаў.

Кліенты спольнага абладнання должны знаходзіцца ў бібліятэке, якая включае функцыі павторных спроб і метрыку. Агенты не должны самастайна настраіваць таймауты HTTP рознакаў. Неабходна цэнтрызаваць кранты доступу да баз дадзеных і механізмы захісту, каб перыводы ў працы сістэмы з санкціямі паўтараліся ўсюды в графе.

Лініяй збору дадзейнаў і хранення атрыбутаў

Атрыбуты транзакцый, якія вікорыстоўваюцца агентамі для стварэння шаблонаў, павінны походзіць з керованых пайплайнаў, а не з спецыяльных запытаў SQL унутрь інструмента. Неабходна ведаць версіі адзначэнняя атрыбутаў. Калі аналітык не пагаджаецца з рэзультатам, трэба перазбудаваць вхідныя даны. Графы, якія не можаюць поясніць рэзультат, не перазберуцца пад час адарожнення рызыка модэля.

Паралелізм і адпаведнасць

Галузі, якія расходзяцца, павінны з’едынацца дэтэрміністычна. Неабходна візначыць функціі для скарачэння дадзейнаў у лістоўых полях і правіла „пасляльнага запісувальніка“ для скалярных значэнняў. Тэставаць канкурантныя абнаўленні. Калі як негатыўныя медыйныя даны, так і санкціі запішуць значэння risk_flags, трэба вікорыстоўваць анотаваныя функціі скарачэння, каб флагі былі аб’еднаны, а не перазапісаны.

Інтэграцыя з робочымі працэсамі людзей

Сістэмы караткавання спрабоў (падобныя да Jira, індывідуальныя CRM) павінны кераваць перарывамі. Падаюць навантажэння перарываў як задачы; пасля ўжоўвання вызываюць API для прызначэння працы з рэзультатам задачы. Не ствараць окрэмага веб-сайту для затверджэння, калі агенты вядуць працу ў існуючай консолі — інтэгруйце яго там.

Атакі на граф

Сімулюйце отруўванне інструментаў, вставку спрамаў у нотаткі клёянтаў і несувязанае рашэння па айдэнтыках. Забяжцеся, каб граф адмовіўся прыймаць даныя, калі падтрымкі слабкія. Запісвайце гэтыя сімуляцыі як кейсы для адгукнення. Агенты, якія борацца з фінансавымі правапарадкамі, можуць выкарыстоўвацца і для зловжытак; атакавальнікі будуць прабаваць прымусіць ўсё даўаць позытывныя рэзультаты.

Кантроль віток

Таг LangSmith (альбо адэкватны) працюе з параметрамі case_type, agent і model. Бюджэт назначаецца на кожны тып справы. Аўтаматычныя апавешчэння пра адхыленнія. Для явных спрэчак/адзынакоў вялікага значэння лепш выкарыстоўваць дэтэрміністычныя правілы, а LLM-ы — толькі для працы з неяснымі сценарыямі. Гібрыдныя сістэмы праўейшыя за чыстыя LLM-ы як па вітратах, так і па можлівасцях аўдытавання.

Працоўнае скарыстанне і адпаведальнасць

Назначыце адпаведальнага за оркестрацыю, адпаведальнага за інструменты/даныя і адпаведальнага за салідарнасць з правіламі. Неяснасці ў гэтым аспекце ствараюць складныя дыяграмы, якія ніхто не можа безпечна зменіць. Планавайце саюзныя адарожнення праз кожны раз, калі дадаеце новага спецыяліста-агента — кожны новы вузел ёсць новая зона можлівых абяканняў.

За дапамогою такіх практык патэрн LangGraph з многама агентамі стае оператывной сістэмай для расследаванняў, а не толькі дэманстрацыяй, якая працуе толькі у аднам конкрэтным случае.

Ад пілотнага праекту да шырокага вжывання

Пілоты частаўка працуюць з колькама сінтэтычнымі прыкладамі. Для ўжывання ў бізнес-процэсах неабходна локалізацыя тыпологій, падтрымка мов для нарадзей, а таксі інтэграцыя з існуючымі механізмамі контролю часу выканання задач і паказначэнняяў якосці. Планаваце поступовы запуск па сегментам: спачатку продукты з нізкім рызыкам, пазней — тыя з вышэйшым рызыкам. Зберагаеце контрольную групу з ручна пераглянутых прыкладаў, каб мераваць эфекты. Ясна паведаміце, што праца за дапамою модэля не значыць працу без нагляду. Навучэнне службовыках, якія здзейсняюць розследаванні, должна включаць інструкцыі пра тое, як чытаць графічныя выкладкі, як перакрываць ўстановленыя правілы і як адмаўляць даныя з неякісных інструментаў. Тэхналогія без такога людскага курсу прадстаўляе сабою недастатковы рэзультат, нават калі схема архітэктуры ідэальная.

Можна спакоючыся, што прадавцы і внутршнія каманды з обработкі дадзеных будуць змянюваць API-і пад вашым кераваннем. Версыйны фіксацыі, графічныя інструменты для тэставання і флагі функцый на падставе запросаў керавальніка ёсць обовязковымі. Сістэма борьбы з фінансавымі праваламі, якая выкорыстоўвае калькуляцыю колькасці агентаў, ёсць жывым сервісам, а не одноразовай перакладчыком дадзеных.

Спісак перагляду пры пачатку працы продукту

Схема працы пераглянутая аддзелам з дапэўнення супакоўкі; інструменты захаваны з механізмамі аўтэнтыфікацыі і тайма-аўтаўматам; керавальнік ацэнюе практычны досвід з паўнай історыяю аналогічных кейсаў; шлях HITL перапрацаваны ад початку да канца; панелі керування LangSmith (або іншых аналогічных срэдстваў) працуюць; заданы ліміты рэкурсіі; документаваны механізм абаранення; установлены аўтаматычныя павесткі пра перакрыцце бюджэтаў; узгоджана версіяванне сабграфаў; перапрацаваны апараты для паралельнага з’еднання дадзеных; неабходныя нарадчыя цітаты; опублікованы інструкцыі для працы у экстрэных сітуацыях. Адкрыць фінансавых злочынаў за дапамойкай калькулятораў з удзелам колькасці агентаў — гэта не столькі пра хытрыя запіты, сколькі пра гэтыя не такія прыгожыя механізмы. Прызначыце галочкі па кожным пункту, а потым астаткаўна збільшайце колькасць кейсаў, ўвесь першы квартал стачыраючыся за прыкладамі хыбна-пазначаных рэзультатаў.

Саавучаснасць з рэчынікамі як пользоватэлямі продукту

Следчыя не ўжо выканакуецца пасля іншых элементаў інтэрфейсу. Работайце з ямі пад час тэставання. Спазірваце, дзе яны не давяруют канспектам, дзе ў іх патрэбны неапдэйтаваныя даны з інструментаў, і дзе яны хочуць можлівасць мгновеннага паднятка прыорытэта. Кодавайце гэтыя патрэбны як поля стану і часткі пакетаў дадзеных. Граф, які оптымізуецца толькі па шчыльнасці аўтаматызацыі, будзе айснаваны, а такія айснаванні знішчаюць прынтэсы аўдыту, якія вы прызналі.

Разрабатывайце разам панелі керування, якія паказваюць, чаму на аднам конкрэтным вёснікаванні керуючы выбраў санкцыі раней, чым адбылася перапрацавка дадзеных. Прозрачнасць спрыяе ўжыццю, а ўжыцце стварае зворотныя запывы, якія палепшаюць інструкцыі і порогі. Без гэтага цыклу нават ідэальная архітэктура рэферэнса застойваецца пасля першага тыдня запуску.

Публікуйце месячныя звытнікі пра якасць, у стварэнні якіх дапамагаюць аналітыкі. Раздзелена адпаведальнасць дапамагае кансольнай сістэме застаўляцца на місію — борьбу з фінансавымі правалямі — а не толькі на показнікі дэмаверыянтных тэстаў. Якшчы так рабіць адносова стабільна, кансольная схема LangGraph здобудзе довер'е — едынны спосаб, які мае значэнне у працы з фінансавымі правалямі: дзякуючы выжыванню ў контактах з рэальнымі кейсамі, рэальнымі следчымі і рэальнымі аўдытамі, а не толькі дзякуючы вялікай прыемнасці ў схематычным атласе.