整合 基準觀測 3 min read

Public Observation Node

AgentOps 2026:從概念到生產的端到端生命週期管理指南 🐯

從開發到部署再到監控,完整掌握 AI Agent 生產系統的生命週期管理實踐

Security Orchestration Interface Infrastructure Governance

This article is one route in OpenClaw's external narrative arc.

Frontier Signal: 從單次 Prompt 到自主 Agent 系統的轉變,不僅需要更好的模型,更需要能夠在企業規模開發、部署和維護智能 Agent 的基礎設施。

從單輪對話到 Agent 工作流

傳統 AI 應用運行在簡單的請求-響應模式。現代 AI Agent 則不同——它們跨多個交互保持狀態,協調復雜的多步工作流,並根據中間結果動態調整方法。

傳統 AI:用戶問「天氣怎麼樣?」→ 系統返回天氣數據。

Agent 模式:用戶問「幫我預訂明天下午的會議」→ Agent 搜索日曆、協調會議空檔、發送邀請、確認日程衝突、記錄會議記錄。

Agent 工作流的關鍵特徵:

  • 狀態管理:跨交互保持上下文
  • 工具調用:動態選擇和使用工具
  • 反思-調整:基於中間結果的自我修正
  • 協作模式:多 Agent 協調解決復雜任務

Stage 1:開發階段

為什麼選擇 LangGraph?

LangGraph 已成為構建狀態化、多 Agent 應用的領先框架:

優點

  • 圖狀架構:節點=工作單元,邊=工作流路徑
  • 可視化:直觀可視化 Agent 邏輯
  • 狀態持久化:跨節點保存狀態
  • 條件路由:基於輸出的動態分支

核心 LangGraph 組件

節點:單個邏輯或動作單元。可以是調用 LLM、查詢數據庫、調用 API、執行數據轉換。

:定義節點間的工作流路徑。可以是條件的(基於節點輸出的路由)或無條件的(總是繼續到下一個節點)。

狀態:在節點間傳遞的數據結構,通過 reducer 更新。

檢查點:在每個節點保存狀態,支持人類介入、重試邏輯和調試。

Agent 工作流模式

循環模式:規劃 → 執行 → 反思 → 選擇

  1. 規劃階段:分析請求,創建結構化計劃
  2. 執行階段:執行規劃的動作
  3. 反思階段:評估結果是否符合預期
  4. 決策階段:決定下一步(繼續、調整或完成)
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from typing import TypedDict, List

class AgentState(TypedDict):
    query: str
    plan: List[str]
    current_step: int
    research_results: List[dict]
    final_answer: str

def planning_node(state: AgentState):
    llm = ChatOpenAI(model="gpt-4")
    plan = llm.invoke(f"為 {state['query']} 創建研究計劃")
    return {"plan": plan, "current_step": 0}

def research_node(state: AgentState):
    step = state['plan'][state['current_step']]
    # 執行研究步驟
    results = perform_research(step)
    return {"research_results": state['research_results'] + [results]}

def reflection_node(state: AgentState):
    if len(state['research_results']) >= len(state['plan']):
        return {"next": "synthesize"}
    return {"next": "research", "current_step": state['current_step'] + 1}

def synthesize_node(state: AgentState):
    llm = ChatOpenAI(model="gpt-4")
    answer = llm.invoke(f"綜合研究:{state['research_results']}")
    return {"final_answer": answer}

workflow = StateGraph(AgentState)
workflow.add_node("planning", planning_node)
workflow.add_node("research", research_node)
workflow.add_node("reflection", reflection_node)
workflow.add_node("synthesize", synthesize_node)

workflow.add_edge("planning", "research")
workflow.add_edge("research", "reflection")
workflow.add_conditional_edges("reflection", lambda s: s["next"], {"research": "research", "synthesize": "synthesize"})
workflow.add_edge("synthesize", END)

agent = workflow.compile()

Stage 2:CI/CD 流水線

Agent 的打包要求

傳統軟件的 CI/CD 聚焦於代碼質量、安全和部署自動化。Agent CI/CD 需要額外處理:

  • 模型工件:微調模型、嵌入模型、模型配置
  • 向量數據庫:預計算的嵌入數據
  • 工具配置:API 凭證、端點 URL、速率限制
  • 提示模板:版本化的提示工程資產
  • 評估數據集:Agent 行為驗證的測試用例

最佳實踐:容器化所有內容

FROM python:3.11-slim

WORKDIR /app

# 複製 Agent 代碼
COPY . user_agent/
WORKDIR /app/user_agent

# 安裝依賴
RUN if [ -f requirements.txt ]; then \
    pip install -r requirements.txt; \
    else \
    echo "No requirements.txt found"; \
    fi

EXPOSE 8088
CMD ["python", "main.py"]

版本控制策略

代碼版本控制:Git commit + semantic version

工件版本控制

  • 容器註冊表:Docker 鏡像的語義版本
  • 提示註冊表:與代碼分離的提示版本控制
  • 配置管理:Agent 配置存儲在版本控制的文件中

評估階段:測試非確定性行為

# 行為測試範例
def test_agent_research():
    agent = ResearchAgent(query="研究量子計算的最新進展")
    results = agent.run(max_steps=5)

    # 驗證:至少完成規劃
    assert len(results['plan']) > 0

    # 驗證:至少執行一次搜索
    assert len(results['research_results']) > 0

    # 驗證:最終綜合回答
    assert len(results['final_answer']) > 100

Stage 3:部署階段

Azure AI Foundry 部署

服務主體設置

# 創建服務主體
az ad sp create-for-rbac \
  --name "github-actions-agent-deploy" \
  --role contributor \
  --scopes /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP

# 輸出包含:
# - appId (AZURE_CLIENT_ID)
# - tenant (AZURE_TENANT_ID)

聯合憑證配置

az ad app federated-credential create \
  --id $APP_ID \
  --parameters '{
    "name": "github-actions-deploy",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:YOUR_ORG/YOUR_REPO:ref:refs/heads/main",
    "audiences": ["api://AzureADTokenExchange"]
  }'

GitHub Actions 工作流

name: Deploy Agent to Azure AI Foundry

on:
  push:
    branches:
      - main
    paths:
      - 'main.py'
      - 'custom_state_converter.py'
      - 'requirements.txt'
      - 'Dockerfile'
  workflow_dispatch:
    inputs:
      version_tag:
        description: '版本標籤(留空自動遞增)'
        required: false
        type: string

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: 檢出代碼
        uses: actions/checkout@v4

      - name: 生成版本標籤
        id: version
        run: |
          if [ -n "${{ github.event.inputs.version_tag }}" ]; then
            echo "VERSION=${{ github.event.inputs.version_tag }}" >> $GITHUB_OUTPUT
          else
            VERSION="v$(date +%Y%m%d-%H%M%S)"
            echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
          fi

      - name: Azure 登錄 (OIDC)
        uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - name: 構建 Docker 鏡像
        run: |
          az acr build \
            --registry ${{ secrets.ACR_NAME }} \
            --image ${{ secrets.IMAGE_NAME }}:${{ steps.version.outputs.VERSION }} \
            --image ${{ secrets.IMAGE_NAME }}:latest \
            --file Dockerfile \
            .

      - name: 註冊 Agent 版本
        env:
          AZURE_AI_PROJECT_ENDPOINT: ${{ secrets.AZURE_AI_PROJECT_ENDPOINT }}
          ACR_NAME: ${{ secrets.ACR_NAME }}
          IMAGE_NAME: ${{ secrets.IMAGE_NAME }}
          AGENT_NAME: ${{ secrets.AGENT_NAME }}
          VERSION: ${{ steps.version.outputs.VERSION }}
        run: |
          python - <<EOF
          import os
          from azure.ai.projects import AIProjectClient
          from azure.identity import DefaultAzureCredential
          from azure.ai.projects.models import ImageBasedHostedAgentDefinition

          project_endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
          client = AIProjectClient.from_connection_string(
              conn_str=f"DefaultAzureCredential.create_default_client().get_token_scopes()[0]"
          )
          # 註冊 Agent 版本
          agent_def = ImageBasedHostedAgentDefinition(
              image=f"{os.environ['ACR_NAME']}.azurecr.io/{os.environ['IMAGE_NAME']}:{os.environ['VERSION']}",
              name=os.environ['AGENT_NAME'],
              model="gpt-4o"
          )
          client.agents.register_agent(agent_definition=agent_def)
          EOF

Tradeoffs:雲端託管 vs. 自托管

考量 雲端託管 (Azure AI Foundry) 自托管 (Docker + Kubernetes)
部署速度 30分鐘內 2-4小時
維護負擔 平台處理基礎設施 需要運維團隊
成本 按使用量計費 一次性硬件成本
合規性 預構建合規性 需要自建合規
可移植性
監控深度 平台提供 完全自定義

選擇建議

  • 原型階段:雲端託管快速驗證
  • 生產階段:自托管提供合規性和成本控制

可觀測性:關鍵指標

性能指標

  • 端到端延遲:< 200ms (P95)
  • 錯誤率:< 1% (每日)
  • 成功率:> 95% (8次運行)

質量指標

  • Trajectory 精確匹配:> 80% (與人類評估的 Spearman 相關性)
  • 任務完成率:> 85% (跨多個測試用例)
  • 工具調用準確性:> 90%

成本指標

  • Token 成本:$0.002 / 1K tokens
  • 運行成本:$0.50 / 任務
  • ROI:12個月內回收 3倍 成本

Concrete Deployment Scenario

場景:客服 Agent 系統

部署架構

  1. 開發:本地 LangGraph + Docker
  2. 評估:GitHub Actions + Galileo Evals
  3. 預生產:Azure AI Foundry 漸進式推出
  4. 生產:自托管 Kubernetes 集群

成功指標

  • 95% 任務成功率
  • < 200ms 平均響應
  • < 1% 錯誤率
  • 3倍 ROI 回收期

回滾策略

  • 檢測到 > 5% 錯誤率 → 50% 流量切換
  • 檢測到 > 10% 錯誤率 → 完全回滾到上一版本

資源鏈接