The enterprise AI landscape has shifted dramatically. Mid-2026 marks the inflection point where organizations move beyond conversational chatbots to deploy action-oriented, governance-compliant agentic workflows at scale.
In 2025, the dominant pattern was RAG (Retrieval-Augmented Generation): agents could read enterprise data and answer questions. In 2026, the expectation has shifted to Action-Oriented Agents — systems that don't just retrieve, but execute: resetting passwords, provisioning licenses, updating CRM records, and deploying code.
This shift introduces a fundamentally different risk profile. A read-only agent that hallucinates produces a wrong answer; an action-oriented agent that hallucinates can delete a database, approve a fraudulent transaction, or deploy broken code to production.
| Dimension | 2025 Pilot (RAG-Based) | 2026 Production (Action-Oriented) |
|---|---|---|
| Primary Function | Information retrieval & summarization | Autonomous task execution & workflow automation |
| System Access | Read-only (vector DB, document store) | Read/Write (APIs, databases, UI automation) |
| Failure Mode | Wrong answer (low impact) | Wrong action (high impact — data loss, compliance breach) |
| Governance | Optional content filtering | Mandatory HITL, RBAC, immutable audit trails |
The most common blocker for enterprise agent deployment isn't the LLM — it's the legacy system landscape. Monolithic ERPs, mainframe terminals, and internal tools built in the 2000s lack modern APIs. Simply saying "agents need APIs" is insufficient. The 2026 solution is a two-pronged integration architecture:
For systems that do have REST/SOAP APIs, enterprises deploy a Semantic Layer that translates raw API endpoints into LLM-friendly OpenAPI Tool Specifications. The agent doesn't call POST /api/v2/users/{id}/password directly — it calls a semantic tool named reset_user_password with typed parameters, auto-validated by the gateway.
Tools: Hasura DDN, Apollo GraphQL Federation, custom OpenAPI-to-ToolSpec wrappers
For systems with no API at all (legacy mainframes, desktop ERP clients), a new class of Vision-Language Model (VLM) agents can directly interact with the UI. These "UI-Agents" take screenshots, understand the interface visually, and execute click/type actions — essentially a Generative RPA layer powered by models like GPT-4o or Gemini's multimodal capabilities.
Tools: Anthropic Computer Use, Microsoft UFO, UiPath Autopilot with VLM
The #1 concern from enterprise CISOs and CTOs is: "What prevents the agent from doing something catastrophic?" The answer is a layered security architecture with three non-negotiable components:
Every agent action must carry two credentials simultaneously:
This prevents Privilege Escalation — even if the agent's system token has broad API access, the action is bounded by the human's role.
All agent activity — including the full Chain-of-Thought (CoT), tool call parameters, and execution results — must be written to a write-once, read-many (WORM) audit log in real time. This is not optional for regulated industries (finance, healthcare, government).
Critical actions (financial transactions > $5K, production deployments, PII data exports) must trigger a hard interrupt. The agent pauses execution, sends an approval request (via Slack, email, or an internal dashboard), and resumes only after explicit human authorization. In LangGraph, this is implemented natively via interrupt() at the node level.
In Q1 2026, a Fortune 500 financial services company transitioned their IT Helpdesk from a GPT-powered chatbot (which could only answer questions about IT policies) to a full agentic workflow that autonomously executes Tier-1 support tasks: password resets, software license provisioning, VPN certificate renewal, and intelligent escalation routing.
The implementation uses LangGraph with the latest Command API for state updates, interrupt() for HITL approval on sensitive operations, and structured tool calling with audit logging.
from typing import Literal
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.types import Command, interrupt
from langgraph.checkpoint.memory import MemorySaver
import logging
# Immutable audit logger (write to WORM-compliant store)
audit_log = logging.getLogger("agent.audit")
class TicketState(TypedDict):
ticket_id: str
user_email: str
issue_type: str # classified by the agent
action_result: str
requires_approval: bool
audit_trail: list[str]
def classify_ticket(state: TicketState) -> Command[Literal["execute_action", "escalate"]]:
"""Use LLM tool-calling to classify the ticket intent."""
# In production: call LLM with structured output
issue = "password_reset" # simplified
audit_log.info(f"[{state['ticket_id']}] Classified as: {issue}")
if issue in ("password_reset", "license_provision", "vpn_renewal"):
return Command(
update={"issue_type": issue, "audit_trail": [f"Classified: {issue}"]},
goto="execute_action"
)
return Command(
update={"issue_type": "complex", "audit_trail": [f"Classified: {issue} → escalate"]},
goto="escalate"
)
def execute_action(state: TicketState) -> Command[Literal["hitl_approval", END]]:
"""Execute the Tier-1 action via enterprise tool APIs."""
if state["issue_type"] == "password_reset":
# Dual-token auth: agent_token + user_oauth_token
result = "Password reset link sent to user"
needs_approval = False
elif state["issue_type"] == "license_provision":
result = "License provisioned (pending approval)"
needs_approval = True # costs money → requires HITL
else:
result = "VPN certificate renewed"
needs_approval = False
trail = state["audit_trail"] + [f"Action: {result}"]
audit_log.info(f"[{state['ticket_id']}] {result}")
if needs_approval:
return Command(
update={"action_result": result, "requires_approval": True, "audit_trail": trail},
goto="hitl_approval"
)
return Command(
update={"action_result": result, "requires_approval": False, "audit_trail": trail},
goto=END
)
def hitl_approval(state: TicketState) -> Command[Literal[END]]:
"""Hard interrupt: pause for human manager approval."""
decision = interrupt(
f"Approve license provision for {state['user_email']}? "
f"Ticket: {state['ticket_id']}. (yes/no)"
)
trail = state["audit_trail"] + [f"HITL decision: {decision}"]
if decision == "yes":
return Command(update={"action_result": "Approved & provisioned", "audit_trail": trail}, goto=END)
return Command(update={"action_result": "Rejected by manager", "audit_trail": trail}, goto=END)
def escalate(state: TicketState) -> dict:
"""Route complex issues to human L2 support."""
audit_log.info(f"[{state['ticket_id']}] Escalated to L2 support")
return {"action_result": "Escalated to L2 human agent"}
# Build the graph
builder = StateGraph(TicketState)
builder.add_node("classify_ticket", classify_ticket)
builder.add_node("execute_action", execute_action)
builder.add_node("hitl_approval", hitl_approval)
builder.add_node("escalate", escalate)
builder.add_edge(START, "classify_ticket")
builder.add_edge("escalate", END)
# Compile with checkpointer for time-travel & interrupt support
memory = MemorySaver()
graph = builder.compile(checkpointer=memory)
Enterprise leadership doesn't approve budgets based on "resolution time." They need cost efficiency, SLA compliance, and audit readiness. Here's the real-world data from production deployments:
| Metric | 2025 Pilot (RAG-Based) | 2026 Production (Action-Oriented) | Impact |
|---|---|---|---|
| Resolution Time | 4.5 hours (human-assisted) | 12 minutes (autonomous) | -95% |
| Cost per Ticket | $22.00 (L1 human agent) | $1.40 (agent + API costs) | -94% |
| SLA Attainment | 72% (missed targets on weekends) | 99.2% (24/7 autonomous) | +27% |
| Escalation Rate | 85% (chatbot couldn't act) | 28% (only complex issues) | -57% |
| System Access Model | Read-Only (RAG) | Read/Write (Tool Calling + APIs) | Transformative |
| Audit Compliance | Manual log review (quarterly) | Real-time WORM audit trail | Regulatory Ready |
The ROI leap from pilot to production is driven not by the LLM itself, but by the integration depth (API + UI automation), governance infrastructure (dual-token auth, HITL), and 24/7 availability. Organizations that skip the governance layer in pursuit of speed will face compliance failures that negate any cost savings.
El panorama de la IA empresarial ha cambiado drásticamente. Mediados de 2026 marca el punto de inflexión donde las organizaciones pasan de chatbots conversacionales a flujos de trabajo agénticos orientados a la acción y compatibles con la gobernanza.
En 2025, el patrón dominante era RAG (Generación Aumentada por Recuperación): los agentes podían leer datos empresariales y responder preguntas. En 2026, la expectativa cambió a Agentes Orientados a la Acción — sistemas que no solo recuperan, sino que ejecutan: restablecen contraseñas, aprovisionan licencias, actualizan registros CRM y despliegan código.
Este cambio introduce un perfil de riesgo fundamentalmente diferente. Un agente de solo lectura que alucina produce una respuesta incorrecta; un agente orientado a la acción que alucina puede eliminar una base de datos o aprobar una transacción fraudulenta.
| Dimensión | Piloto 2025 (RAG) | Producción 2026 (Acción) |
|---|---|---|
| Función Principal | Recuperación y resumen de información | Ejecución autónoma de tareas y automatización |
| Acceso al Sistema | Solo lectura (BD vectorial) | Lectura/Escritura (APIs, bases de datos, UI) |
| Modo de Fallo | Respuesta incorrecta (bajo impacto) | Acción incorrecta (alto impacto — pérdida de datos) |
| Gobernanza | Filtrado de contenido opcional | HITL obligatorio, RBAC, auditoría inmutable |
El mayor bloqueador no es el LLM — son los sistemas heredados. ERP monolíticos, terminales mainframe y herramientas internas carecen de APIs modernas. La solución de 2026 es una arquitectura de integración de dos frentes:
Para sistemas con APIs REST/SOAP, las empresas despliegan una Capa Semántica que traduce endpoints crudos en Especificaciones de Herramientas OpenAPI amigables para el LLM.
Herramientas: Hasura DDN, Apollo GraphQL Federation
Para sistemas sin API, los agentes VLM (Modelo de Visión-Lenguaje) interactúan directamente con la interfaz visual, tomando capturas de pantalla y ejecutando acciones de clic/escritura.
Herramientas: Anthropic Computer Use, Microsoft UFO, UiPath Autopilot
La principal preocupación de CISOs y CTOs empresariales es: "¿Qué impide que el agente haga algo catastrófico?" La respuesta es una arquitectura de seguridad en capas con tres componentes no negociables:
Cada acción del agente debe llevar dos credenciales simultáneamente: el Token del Sistema del Agente y el Token OAuth del Usuario. Esto previene la escalación de privilegios.
Toda la actividad del agente — incluyendo la Cadena de Pensamiento (CoT), parámetros de herramientas y resultados — debe escribirse en un registro de auditoría WORM (Write-Once, Read-Many) en tiempo real.
Las acciones críticas (transacciones >$5K, despliegues, exportación de PII) deben activar una interrupción dura. El agente pausa y espera aprobación humana explícita.
In Q1 2026, a Fortune 500 financial services company transitioned their IT Helpdesk from a GPT-powered chatbot (which could only answer questions about IT policies) to a full agentic workflow that autonomously executes Tier-1 support tasks: password resets, software license provisioning, VPN certificate renewal, and intelligent escalation routing.
The implementation uses LangGraph with the latest Command API for state updates, interrupt() for HITL approval on sensitive operations, and structured tool calling with audit logging.
from typing import Literal
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.types import Command, interrupt
from langgraph.checkpoint.memory import MemorySaver
import logging
# Immutable audit logger (write to WORM-compliant store)
audit_log = logging.getLogger("agent.audit")
class TicketState(TypedDict):
ticket_id: str
user_email: str
issue_type: str # classified by the agent
action_result: str
requires_approval: bool
audit_trail: list[str]
def classify_ticket(state: TicketState) -> Command[Literal["execute_action", "escalate"]]:
"""Use LLM tool-calling to classify the ticket intent."""
# In production: call LLM with structured output
issue = "password_reset" # simplified
audit_log.info(f"[{state['ticket_id']}] Classified as: {issue}")
if issue in ("password_reset", "license_provision", "vpn_renewal"):
return Command(
update={"issue_type": issue, "audit_trail": [f"Classified: {issue}"]},
goto="execute_action"
)
return Command(
update={"issue_type": "complex", "audit_trail": [f"Classified: {issue} → escalate"]},
goto="escalate"
)
def execute_action(state: TicketState) -> Command[Literal["hitl_approval", END]]:
"""Execute the Tier-1 action via enterprise tool APIs."""
if state["issue_type"] == "password_reset":
# Dual-token auth: agent_token + user_oauth_token
result = "Password reset link sent to user"
needs_approval = False
elif state["issue_type"] == "license_provision":
result = "License provisioned (pending approval)"
needs_approval = True # costs money → requires HITL
else:
result = "VPN certificate renewed"
needs_approval = False
trail = state["audit_trail"] + [f"Action: {result}"]
audit_log.info(f"[{state['ticket_id']}] {result}")
if needs_approval:
return Command(
update={"action_result": result, "requires_approval": True, "audit_trail": trail},
goto="hitl_approval"
)
return Command(
update={"action_result": result, "requires_approval": False, "audit_trail": trail},
goto=END
)
def hitl_approval(state: TicketState) -> Command[Literal[END]]:
"""Hard interrupt: pause for human manager approval."""
decision = interrupt(
f"Approve license provision for {state['user_email']}? "
f"Ticket: {state['ticket_id']}. (yes/no)"
)
trail = state["audit_trail"] + [f"HITL decision: {decision}"]
if decision == "yes":
return Command(update={"action_result": "Approved & provisioned", "audit_trail": trail}, goto=END)
return Command(update={"action_result": "Rejected by manager", "audit_trail": trail}, goto=END)
def escalate(state: TicketState) -> dict:
"""Route complex issues to human L2 support."""
audit_log.info(f"[{state['ticket_id']}] Escalated to L2 support")
return {"action_result": "Escalated to L2 human agent"}
# Build the graph
builder = StateGraph(TicketState)
builder.add_node("classify_ticket", classify_ticket)
builder.add_node("execute_action", execute_action)
builder.add_node("hitl_approval", hitl_approval)
builder.add_node("escalate", escalate)
builder.add_edge(START, "classify_ticket")
builder.add_edge("escalate", END)
# Compile with checkpointer for time-travel & interrupt support
memory = MemorySaver()
graph = builder.compile(checkpointer=memory)
Los directivos no aprueban presupuestos basándose en "tiempo de resolución." Necesitan eficiencia de costos, cumplimiento de SLA y preparación para auditorías.
| Métrica | Piloto 2025 (RAG) | Producción 2026 (Acción) | Impacto |
|---|---|---|---|
| Tiempo de Resolución | 4.5 horas | 12 minutos | -95% |
| Costo por Ticket | $22.00 | $1.40 | -94% |
| Cumplimiento SLA | 72% | 99.2% | +27% |
| Tasa de Escalación | 85% | 28% | -57% |
| Modelo de Acceso | Solo Lectura (RAG) | Lectura/Escritura (Tool Calling) | Transformador |
| Cumplimiento Regulatorio | Revisión manual trimestral | Auditoría WORM en tiempo real | Listo para Regulación |
El salto en ROI de piloto a producción está impulsado por la profundidad de integración, la infraestructura de gobernanza y la disponibilidad 24/7.
Die KI-Landschaft im Unternehmen hat sich dramatisch verändert. Mitte 2026 markiert den Wendepunkt, an dem Organisationen von Konversations-Chatbots zu handlungsorientierten, governance-konformen agentischen Workflows übergehen.
2025 dominierte RAG (Retrieval-Augmented Generation): Agenten konnten Unternehmensdaten lesen und Fragen beantworten. 2026 hat sich die Erwartung zu Handlungsorientierten Agenten verschoben — Systeme, die nicht nur abrufen, sondern ausführen: Passwörter zurücksetzen, Lizenzen bereitstellen, CRM-Datensätze aktualisieren und Code deployen.
Diese Verschiebung führt ein fundamental anderes Risikoprofil ein. Ein schreibgeschützter Agent, der halluziniert, liefert eine falsche Antwort; ein handlungsorientierter Agent, der halluziniert, kann eine Datenbank löschen oder betrügerische Transaktionen genehmigen.
| Dimension | Pilot 2025 (RAG) | Produktion 2026 (Aktion) |
|---|---|---|
| Primärfunktion | Informationsabruf & Zusammenfassung | Autonome Aufgabenausführung & Workflow-Automatisierung |
| Systemzugriff | Nur-Lesen (Vektor-DB) | Lesen/Schreiben (APIs, Datenbanken, UI) |
| Fehlermodus | Falsche Antwort (geringer Einfluss) | Falsche Aktion (hoher Einfluss — Datenverlust) |
| Governance | Optionale Inhaltsfilterung | Pflicht-HITL, RBAC, unveränderliche Audit-Trails |
Der häufigste Blocker ist nicht das LLM — es sind die Legacy-Systeme. Monolithische ERPs und Mainframe-Terminals der 2000er haben keine modernen APIs. Die Lösung 2026 ist eine zweistufige Integrationsarchitektur:
Für Systeme mit REST/SOAP-APIs setzt die Semantische Schicht rohe API-Endpunkte in LLM-freundliche OpenAPI-Tool-Spezifikationen um.
Tools: Hasura DDN, Apollo GraphQL Federation
Für Systeme ohne API interagieren VLM-Agenten direkt mit der Benutzeroberfläche über Screenshots und Klick-/Tipp-Aktionen.
Tools: Anthropic Computer Use, Microsoft UFO, UiPath Autopilot
Die größte Sorge von CISOs und CTOs: "Was verhindert, dass der Agent etwas Katastrophales tut?" Die Antwort ist eine mehrschichtige Sicherheitsarchitektur:
Jede Agent-Aktion muss zwei Credentials gleichzeitig tragen: den Agent-System-Token und den Benutzer-OAuth-Token. Dies verhindert Rechteeskalation.
Alle Agent-Aktivitäten — einschließlich Chain-of-Thought (CoT), Tool-Parameter und Ergebnisse — müssen in Echtzeit in ein WORM-Audit-Log geschrieben werden.
Kritische Aktionen (Transaktionen >$5K, Deployments, PII-Export) müssen eine harte Unterbrechung auslösen. Der Agent pausiert und wartet auf explizite menschliche Genehmigung.
In Q1 2026, a Fortune 500 financial services company transitioned their IT Helpdesk from a GPT-powered chatbot (which could only answer questions about IT policies) to a full agentic workflow that autonomously executes Tier-1 support tasks: password resets, software license provisioning, VPN certificate renewal, and intelligent escalation routing.
The implementation uses LangGraph with the latest Command API for state updates, interrupt() for HITL approval on sensitive operations, and structured tool calling with audit logging.
from typing import Literal
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.types import Command, interrupt
from langgraph.checkpoint.memory import MemorySaver
import logging
# Immutable audit logger (write to WORM-compliant store)
audit_log = logging.getLogger("agent.audit")
class TicketState(TypedDict):
ticket_id: str
user_email: str
issue_type: str # classified by the agent
action_result: str
requires_approval: bool
audit_trail: list[str]
def classify_ticket(state: TicketState) -> Command[Literal["execute_action", "escalate"]]:
"""Use LLM tool-calling to classify the ticket intent."""
# In production: call LLM with structured output
issue = "password_reset" # simplified
audit_log.info(f"[{state['ticket_id']}] Classified as: {issue}")
if issue in ("password_reset", "license_provision", "vpn_renewal"):
return Command(
update={"issue_type": issue, "audit_trail": [f"Classified: {issue}"]},
goto="execute_action"
)
return Command(
update={"issue_type": "complex", "audit_trail": [f"Classified: {issue} → escalate"]},
goto="escalate"
)
def execute_action(state: TicketState) -> Command[Literal["hitl_approval", END]]:
"""Execute the Tier-1 action via enterprise tool APIs."""
if state["issue_type"] == "password_reset":
# Dual-token auth: agent_token + user_oauth_token
result = "Password reset link sent to user"
needs_approval = False
elif state["issue_type"] == "license_provision":
result = "License provisioned (pending approval)"
needs_approval = True # costs money → requires HITL
else:
result = "VPN certificate renewed"
needs_approval = False
trail = state["audit_trail"] + [f"Action: {result}"]
audit_log.info(f"[{state['ticket_id']}] {result}")
if needs_approval:
return Command(
update={"action_result": result, "requires_approval": True, "audit_trail": trail},
goto="hitl_approval"
)
return Command(
update={"action_result": result, "requires_approval": False, "audit_trail": trail},
goto=END
)
def hitl_approval(state: TicketState) -> Command[Literal[END]]:
"""Hard interrupt: pause for human manager approval."""
decision = interrupt(
f"Approve license provision for {state['user_email']}? "
f"Ticket: {state['ticket_id']}. (yes/no)"
)
trail = state["audit_trail"] + [f"HITL decision: {decision}"]
if decision == "yes":
return Command(update={"action_result": "Approved & provisioned", "audit_trail": trail}, goto=END)
return Command(update={"action_result": "Rejected by manager", "audit_trail": trail}, goto=END)
def escalate(state: TicketState) -> dict:
"""Route complex issues to human L2 support."""
audit_log.info(f"[{state['ticket_id']}] Escalated to L2 support")
return {"action_result": "Escalated to L2 human agent"}
# Build the graph
builder = StateGraph(TicketState)
builder.add_node("classify_ticket", classify_ticket)
builder.add_node("execute_action", execute_action)
builder.add_node("hitl_approval", hitl_approval)
builder.add_node("escalate", escalate)
builder.add_edge(START, "classify_ticket")
builder.add_edge("escalate", END)
# Compile with checkpointer for time-travel & interrupt support
memory = MemorySaver()
graph = builder.compile(checkpointer=memory)
Die Unternehmensführung genehmigt keine Budgets auf Basis von "Lösungszeit." Sie brauchen Kosteneffizienz, SLA-Einhaltung und Audit-Bereitschaft.
| Metrik | Pilot 2025 (RAG) | Produktion 2026 (Aktion) | Auswirkung |
|---|---|---|---|
| Lösungszeit | 4,5 Stunden | 12 Minuten | -95% |
| Kosten pro Ticket | $22,00 | $1,40 | -94% |
| SLA-Einhaltung | 72% | 99,2% | +27% |
| Eskalationsrate | 85% | 28% | -57% |
| Zugriffsmodell | Nur-Lesen (RAG) | Lesen/Schreiben (Tool Calling) | Transformativ |
| Regulatorische Compliance | Manuelle Quartalsüberprüfung | WORM-Echtzeit-Audit | Regulierung-Ready |
Der ROI-Sprung von Pilot zu Produktion wird durch die Integrationstiefe, die Governance-Infrastruktur und die 24/7-Verfügbarkeit angetrieben.
エンタープライズAIの状況は劇的に変化しました。2026年半ばは、組織が会話型チャットボットから、アクション指向でガバナンスに準拠したエージェント型ワークフローへと移行する転換点です。
2025年の主要パターンはRAG(検索拡張生成)でした:エージェントは企業データを読み取り、質問に回答できました。2026年には期待がアクション指向エージェントに移行しました。パスワードのリセット、ライセンスのプロビジョニング、CRMレコードの更新、コードのデプロイを実行するシステムです。
この変化は根本的に異なるリスクプロファイルをもたらします。読み取り専用のエージェントが幻覚を起こすと誤った回答が生成されますが、アクション指向のエージェントが幻覚を起こすとデータベースの削除や不正取引の承認につながる可能性があります。
| 次元 | 2025年パイロット(RAG) | 2026年本番(アクション) |
|---|---|---|
| 主要機能 | 情報の検索と要約 | 自律的なタスク実行とワークフロー自動化 |
| システムアクセス | 読み取り専用(ベクターDB) | 読み書き(API、データベース、UI) |
| 障害モード | 誤回答(低影響) | 誤操作(高影響 — データ損失、コンプライアンス違反) |
| ガバナンス | 任意のコンテンツフィルタリング | 必須HITL、RBAC、不変の監査証跡 |
最大のブロッカーはLLMではなく、レガシーシステムランドスケープです。モノリシックERP、メインフレーム端末にはモダンAPIがありません。2026年のソリューションは二方向の統合アーキテクチャです:
REST/SOAP APIを持つシステムに対して、セマンティックレイヤーがAPIエンドポイントをLLMフレンドリーなOpenAPI Tool仕様に変換します。
ツール: Hasura DDN, Apollo GraphQL Federation
APIのないシステムに対して、VLM(視覚言語モデル)エージェントがスクリーンショットを取得し、UIを視覚的に理解してクリック/入力操作を実行します。
ツール: Anthropic Computer Use, Microsoft UFO, UiPath Autopilot
企業のCISOとCTOの最大の懸念は:「エージェントが壊滅的なことをするのを何が防ぐのか?」 答えは、3つの譲れない要素を持つ多層セキュリティアーキテクチャです:
すべてのエージェントアクションは2つの認証情報を同時に保持する必要があります:エージェントシステムトークンとユーザーOAuthトークン。これにより権限昇格を防止します。
すべてのエージェント活動(思考連鎖(CoT)、ツールパラメータ、結果を含む)は、リアルタイムでWORM(一度書き込み、多数読み取り)監査ログに書き込まれる必要があります。
クリティカルなアクション($5K超の取引、本番デプロイ、PII データのエクスポート)はハードインタラプトをトリガーする必要があります。エージェントは一時停止し、明示的な人間の承認を待ちます。
In Q1 2026, a Fortune 500 financial services company transitioned their IT Helpdesk from a GPT-powered chatbot (which could only answer questions about IT policies) to a full agentic workflow that autonomously executes Tier-1 support tasks: password resets, software license provisioning, VPN certificate renewal, and intelligent escalation routing.
The implementation uses LangGraph with the latest Command API for state updates, interrupt() for HITL approval on sensitive operations, and structured tool calling with audit logging.
from typing import Literal
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.types import Command, interrupt
from langgraph.checkpoint.memory import MemorySaver
import logging
# Immutable audit logger (write to WORM-compliant store)
audit_log = logging.getLogger("agent.audit")
class TicketState(TypedDict):
ticket_id: str
user_email: str
issue_type: str # classified by the agent
action_result: str
requires_approval: bool
audit_trail: list[str]
def classify_ticket(state: TicketState) -> Command[Literal["execute_action", "escalate"]]:
"""Use LLM tool-calling to classify the ticket intent."""
# In production: call LLM with structured output
issue = "password_reset" # simplified
audit_log.info(f"[{state['ticket_id']}] Classified as: {issue}")
if issue in ("password_reset", "license_provision", "vpn_renewal"):
return Command(
update={"issue_type": issue, "audit_trail": [f"Classified: {issue}"]},
goto="execute_action"
)
return Command(
update={"issue_type": "complex", "audit_trail": [f"Classified: {issue} → escalate"]},
goto="escalate"
)
def execute_action(state: TicketState) -> Command[Literal["hitl_approval", END]]:
"""Execute the Tier-1 action via enterprise tool APIs."""
if state["issue_type"] == "password_reset":
# Dual-token auth: agent_token + user_oauth_token
result = "Password reset link sent to user"
needs_approval = False
elif state["issue_type"] == "license_provision":
result = "License provisioned (pending approval)"
needs_approval = True # costs money → requires HITL
else:
result = "VPN certificate renewed"
needs_approval = False
trail = state["audit_trail"] + [f"Action: {result}"]
audit_log.info(f"[{state['ticket_id']}] {result}")
if needs_approval:
return Command(
update={"action_result": result, "requires_approval": True, "audit_trail": trail},
goto="hitl_approval"
)
return Command(
update={"action_result": result, "requires_approval": False, "audit_trail": trail},
goto=END
)
def hitl_approval(state: TicketState) -> Command[Literal[END]]:
"""Hard interrupt: pause for human manager approval."""
decision = interrupt(
f"Approve license provision for {state['user_email']}? "
f"Ticket: {state['ticket_id']}. (yes/no)"
)
trail = state["audit_trail"] + [f"HITL decision: {decision}"]
if decision == "yes":
return Command(update={"action_result": "Approved & provisioned", "audit_trail": trail}, goto=END)
return Command(update={"action_result": "Rejected by manager", "audit_trail": trail}, goto=END)
def escalate(state: TicketState) -> dict:
"""Route complex issues to human L2 support."""
audit_log.info(f"[{state['ticket_id']}] Escalated to L2 support")
return {"action_result": "Escalated to L2 human agent"}
# Build the graph
builder = StateGraph(TicketState)
builder.add_node("classify_ticket", classify_ticket)
builder.add_node("execute_action", execute_action)
builder.add_node("hitl_approval", hitl_approval)
builder.add_node("escalate", escalate)
builder.add_edge(START, "classify_ticket")
builder.add_edge("escalate", END)
# Compile with checkpointer for time-travel & interrupt support
memory = MemorySaver()
graph = builder.compile(checkpointer=memory)
経営層は「解決時間」だけで予算を承認しません。コスト効率、SLA遵守、監査対応力が必要です。
| 指標 | 2025年パイロット(RAG) | 2026年本番(アクション) | 影響 |
|---|---|---|---|
| 解決時間 | 4.5時間 | 12分 | -95% |
| チケットあたりコスト | $22.00 | $1.40 | -94% |
| SLA達成率 | 72% | 99.2% | +27% |
| エスカレーション率 | 85% | 28% | -57% |
| アクセスモデル | 読み取り専用(RAG) | 読み書き(Tool Calling) | 変革的 |
| 規制コンプライアンス | 手動の四半期レビュー | WORMリアルタイム監査 | 規制対応 |
パイロットから本番へのROIの飛躍は、統合の深さ(API + UI自動化)、ガバナンスインフラ(デュアルトークン認証、HITL)、および24/7可用性によって推進されます。