AI
Builder Hub
build-ai2026-03-2514 phút

Dapr Agents v1.0: Hướng Dẫn Xây Dựng AI Agent Workflows Production-Ready trên Dapr

CNCF vừa công bố Dapr Agents v1.0 GA ngày 23/3/2026 — đánh dấu sự trưởng thành của nền tảng AI agent cho production. Bài này phân tích architecture, các building blocks cốt lõi, và blueprint triển khai thực tế cho multi-agent workflows đáng tin cậy trên Kubernetes.

Dapr Agents v1.0 GA — Tại Sao Điều Này Quan Trọng

Ngày 23 tháng 3 năm 2026, CNCF chính thức công bố Dapr Agents v1.0 General Availability. Đây không chỉ là một milestone phiên bản — GA có nghĩa là framework này đã đủ trưởng thành để chạy production workloads thực sự: có SLA, có cam kết về API stability, có production support.

Nếu bạn đang xây dựng AI agents và cảm thấy khó khăn với những vấn đề như: task bị mất khi server crash, không biết agent đang ở bước nào, không có cách retry tự động khi LLM call thất bại — thì Dapr Agents được thiết kế đúng cho vấn đề này.

Dapr Agents là gì (chính xác)?

Theo docs chính thức:

"Dapr Agents is a Python framework for building LLM-powered autonomous agentic applications using Dapr's distributed systems capabilities. It provides tools for creating AI agents that can execute durable tasks, make decisions, and collaborate through workflows, while leveraging Dapr's state management, messaging, and observability features for reliable execution at scale."

Nói đơn giản: Dapr Agents = LLM reasoning + distributed systems reliability.


Vấn Đề Thực Sự Của AI Agents Trong Production

Trước khi đi vào technical details, hãy nhìn thẳng vào những gì thực sự xảy ra khi bạn deploy AI agents lên production:

1. Long-running tasks không bền vững

AI agent xử lý pipeline phức tạp (đọc 100 documents, validate, enrich) mất 30-60 phút. Nếu server restart hoặc network drop ở phút thứ 45 — toàn bộ progress bị mất.

2. LLM calls không ổn định

Rate limits, timeouts, provider outages — tất cả đều xảy ra. Agent cần biết cách retry đúng cách mà không bị infinite loop.

3. State không nhất quán trong multi-agent

Khi Agent A xử lý xong và truyền state cho Agent B, làm sao đảm bảo state consistency? Đây là distributed systems problem cổ điển.

4. Không có observability

"Agent đang làm gì?" — câu hỏi này trong production thường không có câu trả lời rõ ràng.

5. Multi-agent coordination phức tạp

Khi nhiều agents phối hợp, security và thứ tự thực thi trở thành vấn đề nghiêm trọng.


Dapr Agents v1.0 Building Blocks

Đây là những thành phần cốt lõi mà Dapr Agents v1.0 cung cấp để giải quyết các vấn đề trên:

🔧 1. Durable Workflow Engine

Giải quyết vấn đề: Long-running tasks, server restart, state loss.

Dapr Workflow Engine cho phép agent workflows được checkpoint sau mỗi step. Nếu process crash ở giữa chừng, khi restart lại nó sẽ tiếp tục từ đúng điểm nó dừng, không phải từ đầu.

from dapr.ext.workflow import WorkflowRuntime, DaprWorkflowContext

@workflow
def document_pipeline(ctx: DaprWorkflowContext, batch_id: str):
    # Mỗi bước được checkpoint tự động
    raw_docs = yield ctx.call_activity(extract_documents, input=batch_id)
    validated = yield ctx.call_activity(validate_batch, input=raw_docs)
    enriched = yield ctx.call_activity(enrich_with_llm, input=validated)
    return enriched

Nếu enrich_with_llm crash, lần restart tiếp theo sẽ bắt đầu từ bước này — extract_documentsvalidate_batch không chạy lại.

💾 2. State Storage — 30+ Database Backends

Dapr hỗ trợ state store với hơn 30 database backends: Redis, PostgreSQL, CosmosDB, DynamoDB, MongoDB...

Agent state được persistent và có thể query:

# Lưu agent state
await client.save_state("statestore", "agent-session-123", {
    "current_step": "enrichment",
    "processed_count": 47,
    "checkpoint_time": "2026-03-25T10:30:00Z"
})

# Đọc lại khi cần
state = await client.get_state("statestore", "agent-session-123")

🔄 3. Automatic Retries & Failure Recovery

Cấu hình retry policy cho từng loại operation:

# resiliency.yaml
apiVersion: dapr.io/v1alpha1
kind: Resiliency
metadata:
  name: llm-resiliency
spec:
  policies:
    retries:
      llm-retry:
        policy: exponential
        maxInterval: 15s
        maxRetries: 5
    timeouts:
      llm-timeout:
        duration: 30s
  targets:
    components:
      openai-binding:
        retry: llm-retry
        timeout: llm-timeout

Dapr sẽ tự động retry với exponential backoff khi LLM provider timeout hoặc rate limit.

🔐 4. Secure Communication via SPIFFE

Multi-agent communication được bảo mật bằng SPIFFE/SPIRE — mutual TLS with workload identity. Mỗi agent có một cryptographic identity riêng, không cần hardcode API keys hay shared secrets trong inter-agent communication.

📊 5. Observability tích hợp

Dapr tự động emit metrics, traces và logs cho mỗi operation:

# Xem traces trên Zipkin/Jaeger
# Metrics trên Prometheus
# Logs structured JSON format

# Sample trace output
{
  "traceId": "abc123",
  "spanId": "def456",
  "operationName": "agent.document_pipeline",
  "duration": "2.3s",
  "status": "SUCCESS",
  "attributes": {
    "agent.name": "document-processor",
    "workflow.step": "enrich_with_llm",
    "llm.provider": "openai",
    "tokens.total": 1847
  }
}

Reference Architecture

Đây là kiến trúc tham khảo cho một production multi-agent system với Dapr Agents:

┌────────────────────────────────────────────────────────┐
│                   Client / Trigger Layer                │
│        (API Gateway / Event Bus / Scheduler)            │
└──────────────────────┬─────────────────────────────────┘
                       │
┌──────────────────────▼─────────────────────────────────┐
│              Orchestrator Agent                         │
│   - Nhận task từ trigger                               │
│   - Phân chia workflow steps                           │
│   - Quản lý sub-agents                                 │
└────────┬──────────────┬───────────────┬────────────────┘
         │              │               │
   ┌─────▼─────┐  ┌─────▼─────┐  ┌─────▼─────┐
   │ Extract   │  │ Validate  │  │  Enrich   │
   │  Agent    │  │  Agent    │  │  Agent    │
   └─────┬─────┘  └─────┬─────┘  └─────┬─────┘
         │              │               │
┌────────▼──────────────▼───────────────▼────────────────┐
│                   Dapr Sidecar Layer                    │
│  State Store │ Pub/Sub │ Bindings │ Secrets │ Resiliency │
└────────────────────────────────────────────────────────┘
         │              │               │
   ┌─────▼─────┐  ┌─────▼─────┐  ┌─────▼─────┐
   │  Redis /  │  │  OpenAI / │  │  Output   │
   │ Postgres  │  │  Anthropic│  │   Store   │
   └───────────┘  └───────────┘  └───────────┘

4 layers chính:

  1. Trigger Layer — API, event, schedule
  2. Agent Layer — Orchestrator + specialized sub-agents
  3. Dapr Sidecar — Infrastructure abstraction
  4. Backend Layer — Databases, LLMs, outputs

Step-by-Step: Xây Dựng Production Workflow Thực Tế

Ví dụ thực tế: Document Extraction + Validation + Enrichment Pipeline

Bước 1: Setup Dapr Agents

# Install Dapr CLI
wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash

# Init Dapr (local development)
dapr init

# Install Python SDK
pip install dapr-agents

Bước 2: Định Nghĩa Workflow Steps

# agents/pipeline.py
from dapr_agents import DaprAgent, workflow, activity
from dapr.ext.workflow import DaprWorkflowContext

@activity
async def extract_documents(batch_id: str) -> list[dict]:
    """Trích xuất documents từ storage"""
    # Logic đọc file/database
    docs = await storage.read_batch(batch_id)
    return [{"id": doc.id, "content": doc.text} for doc in docs]

@activity
async def validate_batch(docs: list[dict]) -> list[dict]:
    """Validate document format và content"""
    valid = []
    for doc in docs:
        if len(doc["content"]) > 100:  # minimum content check
            valid.append(doc)
    return valid

@activity
async def enrich_with_llm(docs: list[dict]) -> list[dict]:
    """Summarize và extract entities với LLM"""
    enriched = []
    for doc in docs:
        summary = await llm.summarize(doc["content"])
        entities = await llm.extract_entities(doc["content"])
        enriched.append({**doc, "summary": summary, "entities": entities})
    return enriched

@workflow
async def document_pipeline(ctx: DaprWorkflowContext, batch_id: str):
    # Mỗi yield = một checkpoint
    docs = yield ctx.call_activity(extract_documents, input=batch_id)
    valid_docs = yield ctx.call_activity(validate_batch, input=docs)
    result = yield ctx.call_activity(enrich_with_llm, input=valid_docs)
    return {"batch_id": batch_id, "processed": len(result), "data": result}

Bước 3: Persist State & Checkpoints

# Lưu checkpoint sau mỗi batch
@activity
async def save_checkpoint(ctx: dict) -> None:
    await dapr_client.save_state(
        store_name="statestore",
        key=f"pipeline-{ctx['batch_id']}-checkpoint",
        value=ctx
    )

Bước 4: Error Handling + Retry Logic

@workflow
async def document_pipeline_resilient(ctx: DaprWorkflowContext, batch_id: str):
    try:
        docs = yield ctx.call_activity(
            extract_documents,
            input=batch_id,
            retry_policy=RetryPolicy(
                max_number_of_attempts=3,
                backoff_coefficients=2.0,
                initial_retry_internal=timedelta(seconds=5)
            )
        )
    except TaskFailedError as e:
        # Log và mark batch as failed
        yield ctx.call_activity(mark_batch_failed, input={
            "batch_id": batch_id,
            "error": str(e)
        })
        return {"status": "FAILED", "reason": str(e)}
    
    # Continue pipeline...

Operational Checklist

Khi đưa Dapr Agents vào production, đây là những thứ cần verify:

✅ Reliability

  • Workflow checkpointing được enable và test (crash-recover test)
  • Retry policies được cấu hình cho mọi LLM binding
  • Dead letter queue cho failed workflows
  • Idempotency keys cho mọi critical operation

✅ Security

  • SPIFFE/SPIRE được enable cho inter-agent comms
  • Secrets được lưu trong Dapr Secrets Management (không hardcode)
  • Network policies giới hạn agent-to-agent communication
  • Audit logs cho mọi LLM call và state change

✅ Observability

  • Distributed tracing connected tới Zipkin/Jaeger/Grafana Tempo
  • Metrics exported tới Prometheus
  • SLO alerts được thiết lập (success rate, p99 latency)
  • Cost tracking: tokens consumed per workflow run

✅ Cost Control

  • Token budget limits per workflow
  • Model routing: cheap model cho simple tasks, expensive model cho complex
  • Caching layer cho repeated LLM patterns

Dapr Agents Phù Hợp Khi Nào?

👍 Good Fit

  • Team đang chạy trên Kubernetes / cloud-native stack
  • Cần durable, long-running workflows (phút đến giờ)
  • Multi-agent coordination với các chuyên gia agent khác nhau
  • Production reliability là ưu tiên hàng đầu
  • Team đã quen với distributed systems concepts

👎 Không Phải Lựa Chọn Tốt

  • Chỉ cần quick prototype hoặc chatbot đơn giản
  • Workflow chạy dưới 30 giây và không cần durability
  • Team không có Kubernetes hoặc không muốn vận hành Dapr infrastructure
  • Budget/timeline không cho phép overhead setup

Next Steps

Thực hành ngay:

# Clone quickstarts chính thức
git clone https://github.com/dapr/dapr-agents.git
cd dapr-agents/quickstarts

# Chạy quickstart đầu tiên
dapr run --app-id agent-quickstart -- python quickstarts/hello_agent/hello_agent.py

Resources:

CTA: Chọn một prototype workflow bạn đang có → Map nó thành durable workflow model → Đo reliability trước và sau. Đây là cách tốt nhất để thực sự hiểu giá trị của Dapr Agents.