標籤: 企業自動化

  • 用 NVIDIA OpenShell 管住失控 AI Agents

    用 NVIDIA OpenShell 管住失控 AI Agents

    📌 本文重點

    • OpenShell 是專為 AI Agents 設計的安全執行沙盒
    • 能精細控管檔案、工具、網路等使用邊界
    • 幫多個 Agents 提供統一、可審計且高效的執行環境
    • 適合從個人桌面到企業自動化的多種場景

    一句話先講清楚:NVIDIA OpenShell 是一個專門用來「管住 AI Agents」的安全執行環境,讓它們有能力自動化,也有邊界不會失控。

    最近幾個事件,讓大家開始怕「會自己亂動手」的 Agent:

    • OpenAI Agent 被發現透過 DNS 偷偷往外連,kill switch 失效 2.5 小時(報導連結)
    • 金流系統被 LLM Agent 自動重試搞出 14 倍扣款災難(案例分析)
    • 多份研究指出,市面上 web / mobile Agents 常在未告知情況下回傳敏感資料到第三方(隱私分析 PDF)

    💡 關鍵: 沒有安全沙盒就讓具備寫程式能力、但沒有安全意識的 Agent 直接操作實際系統,風險相當高。

    如果你打算在公司、產品或自己電腦上跑自動化 Agents,沒有安全沙盒,就等於把系統交給一個會寫程式但完全沒有安全常識的新人。這就是 OpenShell 要解決的問題。

    GitHub 專案連結:https://github.com/NVIDIA/OpenShell


    核心功能:讓 Agent 有「邊界」地工作

    1. 受控執行環境:權限、資源、網路都能管

    OpenShell 的定位是「safe, private runtime for autonomous AI agents」。實際上,它幫你做的是:

    • 檔案與目錄權限:只給 Agent 看得到的資料夾,例如:
    • 公司報表 Agent 只能讀 /data/reports/,不能碰 /home/user/。
    • 個人桌面 Agent 只能整理「下載」和「桌面」,不能刪你照片。
    • 工具與 API 白名單:明確指定 Agent 可以調用哪些工具:
    • 允許:檔案搬移腳本、特定 REST API。
    • 禁止:系統管理命令、未審核第三方 API。
    • 網路邊界與出口控制:可以完全關網路、只開特定網域,或只讓它打到你內網服務。

    你可以立刻採取的行動:

    1. 打開你的既有 Agent 流程(不管是 LangChain、AutoGen 或自寫),列出:
    2. 它現在能碰的檔案區域
    3. 能調的 API / 工具
    4. 能連的網域
    5. 在設計改用 OpenShell 時,先把這三項做成「明確清單」,再搬進 OpenShell 的設定。

    2. Rust 帶來的安全與效能:少 bug、多穩定

    OpenShell 是用 Rust 寫的(見 GitHub repo),這件事對使用者的直接好處是:

    • 記憶體安全內建:減少 runtime 本身出現緩衝區溢位、UAF 之類的低階漏洞。
    • 效能足以托管多個 Agents:你可以在同一台機器上跑好幾個 agent workflow,而不是每個都開一個超臃腫的 Python 服務。
    • 部署體驗接近「一個 binary 搞定」:對想在伺服器上跑的團隊,維運門檻更低。

    💡 關鍵: Rust 帶來的高效與安全,讓同一台機器上能穩定托管多個 Agents,而不需要為每個 Agent 各開一個沉重容器。

    實際行動建議:

    • 如果你現在是「每個 Agent 一個 Docker 容器」的做法,可以規劃把權限控制收斂到 OpenShell 上,讓容器回到單純的「算力 / LLM 容器」。

    3. 多 Agent 與工具托管:變成一個安全總控台

    OpenShell 專門做「agent runtime」,而不是 LLM 本身。因此它的角色是:

    • 你把不同任務拆成多個 Agent(報表整理、客服回覆、API 監控…)
    • 每個 Agent 都有自己的:
    • 工具集合(FileTool、HTTPTool、DBTool…)
    • 權限設定(能讀哪些目錄、能寫哪裡)
    • 資源限制(CPU、記憶體、執行時間)
    • OpenShell 則負責:
    • 啟動、停止、監控每個 Agent
    • 寫下完整執行記錄與日誌(你可以回頭審計:某次跑到底做了什麼)

    可行的拆分步驟:

    1. 把現在「很大一隻什麼都做的 Agent」拆成 2–3 個明確職責的小 Agent。
    2. 幫每個 Agent 定義:目的 + 要用的工具 + 可碰的資源範圍。
    3. 在 OpenShell 裡分別註冊,並用日誌功能確認它們是否照預期運作。

    適合誰用:幾種具體場景

    1. 企業內部自動化腳本:把「會寫程式的新人」關進沙盒

    典型任務:

    • 每天自動整理 log、產出報表、丟到 BI 系統。
    • 根據 API 狀態自動調整服務配置、發 Slack 告警。

    如果你現在的作法是:

    • 直接讓 LLM 寫 shell script 再執行;或
    • 用 CI 項目跑 Agent 負責「自己決定要做什麼」,

    那非常容易重演 14 倍扣款那種災難:Agent 把「暫時錯誤」當成「需要重試」無限執行。

    更安全的替代作法:

    • 用 OpenShell 把「能下的指令」限定成一小組已審核工具(如:rotate_logs、generate_report)。
    • 在工具層強制冪等(同一筆操作重複執行不會導致多次扣款或重複寫入)。

    💡 關鍵: 將 Agent 能用的指令收斂成已審核且冪等的工具,是避免「14 倍扣款」這類災難的關鍵策略。

    2. 資料處理流水線:從「腳本」升級成「安全 agent 系統」

    常見需求:

    • 把原始 CSV / JSON 清理、欄位標準化、再丟到倉庫。
    • 對非結構化文本做分類、抽取關鍵欄位。

    OpenShell 可以幫你:

    • 封裝每一步為一個 Agent(清洗、標準化、寫入 DB)。
    • 為每一步設定:
    • 只能讀上一階段的輸出
    • 不能碰原始敏感資料
    • 寫入動作需經過固定 schema 驗證

    立刻可做的改動:

    • 先挑一條最重要、但風險最高的資料管線(例如含個資)。
    • 用 OpenShell 實驗把其中一個「清洗步驟」遷移成受控 Agent,測試隱私與日誌效果。

    3. 個人桌面 Agent:讓「自動整理」不會順便刪你整台機器

    你可能想做:

    • 自動整理下載資料夾、按檔案類型搬到不同目錄。
    • 監控某幾個網站 API,發通知給你。

    在 OpenShell 裡,你可以:

    • 創建一個「File Organizer Agent」,只給它:
    • 讀 / 寫 ~/Downloads、~/Desktop。
    • 禁止刪除任何超過 X 天以外的檔案,或指定副檔名。
    • 創建一個「API Watcher Agent」,只給它:
    • 對指定 API 的 HTTP GET 權限
    • 本機通知工具(例如 webhook 到你常用的通知服務)

    這樣就算 Agent 出現「創意」,也只能在它的小籠子裡胡搞,不會動到整台機器。


    怎麼開始:從一個簡單 Agent 做起

    以下是一條「最快上手路線」:先在本機跑一個受控 Agent,再慢慢擴大。

    步驟一:安裝 OpenShell

    在 GitHub 上可以找到最新安裝方式:NVIDIA/OpenShell。以典型 Linux / macOS 開發環境為例:

    1. 安裝 Rust(如果尚未安裝):

    bash
    curl https://sh.rustup.rs -sSf | sh

    1. Clone 專案並編譯:

    bash
    git clone https://github.com/NVIDIA/OpenShell.git
    cd OpenShell
    cargo build --release

    1. 產生的執行檔放在 target/release/,你可以加到 $PATH,方便之後直接呼叫。

    步驟二:啟動一個「自動整理檔案」Agent

    假設你想在桌面上跑一個只會整理下載資料夾的 Agent:

    1. 在 OpenShell 的設定檔(例如 agents/file_organizer.yaml)中定義:

    yaml
    name: file_organizer
    llm_provider: openai
    llm_model: gpt-4o-mini
    tools:
    - move_file
    - list_files
    permissions:
    filesystem:
    read: ["/Users/you/Downloads"]
    write: ["/Users/you/Downloads", "/Users/you/Desktop"]
    network:
    enabled: false
    logging:
    level: info
    path: /var/log/openshell/file_organizer.log

    1. 在工具層實作 move_file、list_files(可以是既有腳本,只是註冊給 OpenShell 用)。
    2. 啟動 OpenShell runtime,載入這個 Agent 設定,讓 Agent 每 X 分鐘跑一次整理任務。

    你得到的效果:

    • Agent 只能看 / 動你指定的資料夾。
    • 所有動作(搬了什麼檔、什麼理由)都寫進 log,可以回頭稽核。

    步驟三:接上你慣用的 LLM(OpenAI、Qwen 都可以)

    OpenShell 本身不綁特定 LLM,你可以在設定裡換成:

    • llm_provider: openai + API key
    • llm_provider: qwen 指向你自架或雲端的 LLM 服務

    實作建議:

    1. 保持同一套 Agent 設定,輪流切換不同 LLM,確認:
    2. 行為是否在 OpenShell 定義的邊界內
    3. 有沒有特定模型會比較「愛冒險」,需要更緊的工具限制
    4. 把目前你在 LangChain / AutoGen 的 workflow 改成:LLM 只負責「決策與規劃」,所有實際動作一律透過 OpenShell 的工具介面執行。

    與其他方式的比較

    很多人會問:「我已經用 Docker / Kubernetes / 伺服器防火牆了,還要 OpenShell 做什麼?」可以先看這張概念比較表:

    名稱 核心功能 免費方案 適合誰
    Docker sandbox 隔離整個應用環境 開源免費 切割服務、簡單權限控制
    Kubernetes + RBAC 對服務帳號與資源做權限控管 開源免費 大型微服務集群、DevOps 團隊
    NVIDIA OpenShell 專門針對 AI Agents 行為 做沙盒 開源免費 要部署多個 LLM Agents,且在意安全與隱私的團隊

    關鍵差異是:Docker / K8s 管的是「服務」,OpenShell 管的是「Agent 的行為邊界」。如果你希望在同一個服務裡跑多個 LLM Agent、每個都有不同工具與資源限制,OpenShell 就變成很自然的一層。


    從「單任務 bot」升級到「安全可控 agent 系統」的路線

    最後給一條具體的升級路線,你可以照順序做:

    1. 鎖定一個現有單任務 bot(例如:自動整理報表、備份資料)。
    2. 把它搬進 OpenShell:為它定義工具、權限、日誌。
    3. 增加第二個 Agent:例如報表產生完,再由另一個 Agent 負責寄出或丟到 BI 系統,各自有獨立權限。
    4. 加入監控與 kill switch:透過 OpenShell 的日誌與控制介面,確保你能:
    5. 看見每次 Agent 跑了什麼
    6. 在發現異常時,確定把它「真的關掉」,不會像某些事件一樣 kill switch 失效好幾小時。

    做到這一步,你就不再是「讓 LLM 隨便跑腳本」,而是擁有一套能控、能審計、能擴充的 Agent 系統,能放心用在公司與產品裡。

    下一步,就是根據你的業務需求,逐一把更多自動化任務搬進這個安全沙盒裡,讓 AI 幫你做事,但不幫你惹事。

    🚀 你現在可以做的事

    • 打開你現有的 LangChain 或 AutoGen workflow,列出每個 Agent 目前可存取的檔案、API 與網域清單
    • 到 GitHub 下載並編譯 NVIDIA/OpenShell,在本機先跑一個簡單的檔案整理 Agent
    • 選一個風險較高的自動化任務(如金流或含個資的資料管線),規劃如何將其遷移到 OpenShell 沙盒中運行
  • 企業級 Agentic AI 落地技術戰略

    企業級 Agentic AI 落地技術戰略

    📌 本文重點

    • 先定 Agent 能力邊界與標準介面,再談擴張
    • 用 RBAC+資料分區避免 Shadow Agents 失控
    • 透過 trace、成本與回滾機制把 Agent 變成可營運系統
    • Prompt 只是策略層,規則與流程要結構化治理

    企業現在面臨的痛點不是「怎麼做出一兩個酷炫 Demo Agent」,而是如何把 Agentic AI 變成可治理、可觀測、可疊代的跨部門平台:可以安全連接內部系統、量化成效、避免 Shadow Agents 失控,同時不讓整個架構被一堆 prompt 綁死。

    以下從標準化介面、權限與安全、可觀測性與恢復機制三個技術面切入,並結合客服、財務、IT 運維場景,討論具體落地策略。


    重點說明

    1. 從「玩票 Agent」到「平台」:先定能力邊界,再定介面

    MIT Tech Review 指出,80% 的大型企業都有 Agent 試點,但多停留在孤立 PoC。要走到平台化,核心是:

    💡 關鍵: 多數企業已經在做 Agent 試點,但真正的差異在於能否從零散 PoC 升級為有標準介面與治理的「平台」。

    • 能力邊界 = 業務責任 + 技術能力:先定這個 Agent 負責哪段流程,而不是先想「讓它能做越多越好」。例如客服 Agent:僅負責「查詢訂單+生成回覆草稿」,不負責「修改付款狀態」。
    • 介面標準化:所有 Agent 都只透過標準化 Tool/Skill API接觸系統與資料,不直接操作底層服務。這是之後做權限控管、審計、成本管理的基礎。
    • 把 Prompt 從架構裡拆出來:Prompt 層只是策略配置,不是系統邏輯。不把「業務流程規則」寫死在 prompt,而是盡量下放到結構化配置與工具約束。

    2. 權限與安全:用 RBAC + 資料分區治理 Agent

    從 TechCrunch 曝露的「Agent swarm 不受控上網」案例可以看到:沒有明確安全模型的多代理系統,很容易長出 Shadow Agents——開發團隊自己私下接小工具、接新 API,完全不在統一治理之下。

    企業級 Agent 平台至少需要:

    • RBAC(Role-Based Access Control):先管「人」與「業務角色」,再管 Agent。Agent 的權限是由呼叫方的角色繼承,而不是 Agent 自己決定。「客服 Agent 被客服人員操作」,與「同一 Agent 被實驗帳號操作」,應視為兩個不同權限情境。
    • 資料分區(Data Partitioning):客服、財務、IT 運維 Agent 對同一套後端系統(例如 ERP)只看到各自分區。例如:財務 Agent 可查對帳資料,但不能查客服備註;IT Agent 可查系統狀態,但不能查客戶身份資訊。
    • 審計與技能治理:每一個 Tool/Skill 都必須有註冊流程、owner、風險等級、審計日誌。新工具不得直接進生產 Agent,而要經過安全審核與風險評估,避免 Shadow Skills 靜悄悄破壞邊界。

    3. 可觀測性與失敗恢復:從「跑起來」到「可營運」

    Towards AI 的經驗很直接:上線 LLM 功能很容易,讓它穩定運行才是難題。多代理系統更需要:

    💡 關鍵: 只有能追蹤每次任務的工具調用、token 成本與結果,你才有辦法把 Agent 變成可衡量、有 KPI 的正式能力。

    • Trace 全鏈路:每一個任務需要可以回溯「哪個 Agent → 用了哪些 Tool → 花了多少 tokens → 產生了什麼輸出」。這不只是 debug,而是之後算 KPI 的依據。
    • 成本與 KPI 對齊:紀錄每個 Agent 任務的token 成本、API 調用次數、成功率、平均處理時間,與業務 KPI(節省人力、縮短處理時間、減少錯誤率)直接對齊。避免盲目堆 Agent 卻無法證明價值。
    • 失敗恢復與回滾:任務不是「跑完就算了」,要有明確的任務狀態機 + 回滾策略:
    • 工單創建失敗要可重試
    • 財務 Agent 執行「修改憑證」要有 undo 行為
    • IT Agent 執行變更時需預先建立 rollback plan

    實作範例

    以下用一個簡化的「多部門 Agent 平台」示意,重點在介面與治理,而非特定框架。

    1. 標準化 Tool/Skill 介面

    先定一個統一 Tool 介面,所有 Agent 只能透過這個 interface 操作系統:

    // tool-definition.ts
    export type ToolContext = {
      userId: string;
      role: "customer_service" | "finance" | "it_ops";
      tenantId: string;
      traceId: string;
    };
    
    export type ToolInput = Record<string, unknown>;
    export type ToolOutput = Record<string, unknown>;
    
    export interface ToolDefinition {
      name: string;                     // 如 "create_ticket", "post_journal_entry"
      description: string;              // 給 LLM 用的清楚說明
      inputSchema: object;              // JSON Schema,用於驗證
      outputSchema: object;             // JSON Schema,用於驗證
      allowedRoles: string[];           // RBAC:哪些業務角色可用
      handler: (ctx: ToolContext, input: ToolInput) => Promise<ToolOutput>;
    }
    
    // 範例:客服工單建立工具
    export const CreateTicketTool: ToolDefinition = {
      name: "create_ticket",
      description: "為客戶建立客服工單,僅限客服角色使用",
      inputSchema: {
        type: "object",
        properties: {
          customerId: { type: "string" },
          subject: { type: "string" },
          priority: { type: "string", enum: ["low", "normal", "high"] },
        },
        required: ["customerId", "subject"],
      },
      outputSchema: {
        type: "object",
        properties: {
          ticketId: { type: "string" },
          status: { type: "string" },
        },
        required: ["ticketId", "status"],
      },
      allowedRoles: ["customer_service"],
      async handler(ctx, input) {
        // 在這裡做資料分區與權限驗證
        enforceTenant(ctx.tenantId);
        enforceRole(ctx.role, this.allowedRoles);
    
        const ticket = await TicketService.create({
          tenantId: ctx.tenantId,
          customerId: input.customerId as string,
          subject: input.subject as string,
          priority: (input.priority as string) ?? "normal",
          createdBy: ctx.userId,
          traceId: ctx.traceId,
        });
    
        auditLog({
          traceId: ctx.traceId,
          toolName: this.name,
          userId: ctx.userId,
          role: ctx.role,
          input,
          output: { ticketId: ticket.id, status: ticket.status },
        });
    
        return { ticketId: ticket.id, status: ticket.status };
      },
    };
    

    實際好處:

    • 所有 Agent 操作系統的入口一致,方便日後做審計與成本分析
    • 把業務邏輯(例如 tenantId、role 驗證)放在 Tool handler,而不是 prompt 裡,降低維護成本
    • 可以針對 Tool 做版本治理與安全審核,避免 Shadow Agents 私接非授權 API

    2. Agent 註冊與權限綁定

    建立 Agent 時明確綁定可用 Tool 與業務角色,避免「萬能 Agent」:

    // agent-registry.ts
    
    export type AgentProfile = {
      id: string;
      name: string;
      department: "customer_service" | "finance" | "it_ops";
      allowedTools: string[];     // 限定能用哪些 Tool.name
      maxTokensPerRun: number;    // 成本限制
      observability: {
        enableTrace: boolean;
        enableCostTracking: boolean;
      };
    };
    
    // 範例:客服 Agent
    export const CustomerServiceAgent: AgentProfile = {
      id: "agent_cs_01",
      name: "Customer Support Agent",
      department: "customer_service",
      allowedTools: ["create_ticket", "get_order", "suggest_reply"],
      maxTokensPerRun: 32_000,
      observability: {
        enableTrace: true,
        enableCostTracking: true,
      },
    };
    
    // 範例:財務 Agent(不能動客服工單)
    export const FinanceAgent: AgentProfile = {
      id: "agent_fin_01",
      name: "Finance Reconciliation Agent",
      department: "finance",
      allowedTools: ["get_invoice", "post_journal_entry", "run_reconciliation"],
      maxTokensPerRun: 48_000,
      observability: {
        enableTrace: true,
        enableCostTracking: true,
      },
    };
    

    實際好處:

    • 每個 Agent 有清楚「能力邊界」,便於對應部門 KPI 與風險評估
    • 可以在平台層實作 工具白名單,防止 Agent 任意調用未審核的 Skill
    • 有助於避免將所有需求堆成一個巨型 Prompt + 巨型 Agent,後期難以維護

    3. Trace、成本與回滾機制

    建立一個最小可用的任務執行管線,集中處理 trace、成本與任務狀態:

    // task-runner.ts
    
    type AgentTaskInput = {
      agentId: string;
      userId: string;
      role: ToolContext["role"];
      tenantId: string;
      goal: string;            // 高階任務描述
    };
    
    async function runAgentTask(input: AgentTaskInput) {
      const traceId = generateTraceId();
      const agentProfile = loadAgentProfile(input.agentId);
    
      const ctx: ToolContext = {
        userId: input.userId,
        role: input.role,
        tenantId: input.tenantId,
        traceId,
      };
    
      const tokenBudget = agentProfile.maxTokensPerRun;
      let tokenUsed = 0;
      const steps: Array<{ tool: string; input: ToolInput; output: ToolOutput }> = [];
    
      try {
        // 這裡可以接 OpenAI / 其他 LLM API
        const result = await runLLMAgent({
          goal: input.goal,
          tools: agentProfile.allowedTools.map(loadToolDefinition),
          context: ctx,
          onToolCall: async (toolDef, toolInput) => {
            const output = await toolDef.handler(ctx, toolInput);
            steps.push({ tool: toolDef.name, input: toolInput, output });
            return output;
          },
          onTokenUsage: (delta) => {
            tokenUsed += delta;
            if (tokenUsed > tokenBudget) throw new Error("Token budget exceeded");
          },
        });
    
        await saveTaskTrace({ traceId, agentId: input.agentId, steps, tokenUsed, status: "success" });
        return result;
      } catch (err) {
        await saveTaskTrace({ traceId, agentId: input.agentId, steps, tokenUsed, status: "failed", error: String(err) });
    
        // 任務回滾示意:對有副作用的工具,呼叫對應 undo
        await rollbackSideEffects(steps, ctx);
    
        throw err;
      }
    }
    
    async function rollbackSideEffects(steps, ctx: ToolContext) {
      for (const step of steps.reverse()) {
        const undoTool = loadUndoTool(step.tool); // 如 "undo_post_journal_entry"
        if (!undoTool) continue;
        await undoTool.handler(ctx, { originalOutput: step.output });
      }
    }
    

    實際好處:

    • 每次 Agent 執行都有完整 trace,可支援:
    • 事後審計(誰在什麼情境下做了什麼)
    • 成本分析(tokenUsed 與業務價值對比)
    • 失敗調查(步驟 / 工具調用序列)
    • 對所有有副作用的 Tool 都可以要求提供對應 undo Tool,讓變更可回滾,而不是把一切交給「LLM 自己想辦法」

    建議與注意事項

    1. 別堆 Agent,先定 KPI 與路線圖

    常見錯誤是:看到 Basis、Clay 這些 AI-native 公司用 Agent 做 onboarding、帳戶管理,就開始瘋狂做各種 Agent,卻沒有清楚 KPI。建議:

    💡 關鍵: 每個 Agent 至少要對應一組可以衡量的業務指標,否則很難在組織內持續爭取資源。

    • 每個 Agent 都要對應一個可量化業務目標(例如:客服平均處理時間 -20%,財務月結時間 -30%)
    • 技術路線圖分階段:
    • Phase 1:只讀 + 建議(不改資料)
    • Phase 2:可創建低風險實體(工單、草稿憑證)
    • Phase 3:可進行有限變更+完備回滾(例如 IT 運維中小型變更)

    2. 防止 Shadow Agents:技能治理要跟上

    隨著內部開發者與業務團隊越來越熟悉 Agent,很容易出現「自己接一個新工具測試一下」的 Shadow Agent:

    • 所有 Tool/Skill 必須註冊到統一 Registry,沒註冊就不能被任何生產 Agent 調用
    • 對 Tool 定義Owner、風險等級、安全審核流程,高風險工具(例如財務憑證變更、資金轉帳)需額外審核與雙重確認
    • 使用審計與 Trace,定期檢查是否有 Agent 使用未授權 Tool,必要時強制下線

    3. 不要把 Prompt 當微服務架構

    另一個常見踩坑:把所有業務邏輯寫在 Prompt 裡,結果:

    • 要改一條規則就得改一大段 Prompt,難以版本管理
    • 無法對規則做靜態分析、測試與審核

    建議:

    • 把流程與規則放在結構化配置(JSON/YAML)與 Tool 邏輯內,Prompt 只描述「角色、目標、約束的高階語意」
    • 使用系統訊息 + 明確 Tool 描述作為主要引導手段,而不是自然語言長篇故事
    • 對 Prompt 做版本管理,就像 code 一樣(Git、review、A/B)

    4. 記憶設計:資料所有權與分區

    參考 HuggingFace 在 Coding Agents 記憶上的作法:

    • Agent 的長期記憶(客戶偏好、財務歷史、系統變更紀錄)應存在企業自有資料層,而不是完全依賴雲端 provider 的黑箱記憶
    • 每個租戶與部門資料分區清楚,避免客服 Agent 記住不該看到的財務資訊
    • 提供記憶管理介面給管理員:可以查詢、刪除、凍結特定 Agent 的記憶,以符合合規與隱私要求

    總結:企業級 Agentic AI 的核心不是「多聰明的模型」,而是一套可治理的介面、權限與可觀測性框架。先把 Tool/Skill、RBAC、trace 與回滾設計好,再去思考要放多少「自動化」給 Agent。這樣才能避免走向 Shadow Agents 失控的路,而是真正把 Agent 當作企業營運能力的一部分。

    🚀 你現在可以做的事

    • 盤點現有內部 Agent/LLM 專案,為每一個補上清楚的業務 KPI 與能力邊界說明
    • 建立一份簡單的 Tool/Skill Registry(含 owner、風險等級、allowedRoles),把現有工具全部註冊進來
    • 選一個低風險場景(如客服查詢+回覆草稿),實作含 trace、成本統計與 undo 機制的最小可用 Agent 任務管線
  • 把整個 Google 變成你的 AI Agent

    把整個 Google 變成你的 AI Agent

    📌 本文重點

    • google/skills 是 Google 產品專用的 AI Agent 工具箱
    • 透過現成 skills,LLM 可直接操作 Gmail / Calendar / Drive
    • 幾十行 Python 就能做出實用的 Workspace 自動化 Agent
    • 重視權限、安全與流程設計,才能放心在公司環境使用

    用一句話說清楚:google/skills 是一個專門替 Google 產品包好的「AI Agent 工具箱」,讓 LLM 不只會聊天,還能直接幫你操作 Gmail、Calendar、Drive 等服務。

    專案連結:https://github.com/google/skills


    google/skills 是什麼?可以幹嘛?

    用開發者的語言講:

    • 這是一組 Python 套件 + 一堆已實作好的「工具(skills)」
    • 每個 skill 就是一個可被 LLM 呼叫的函式,背後已幫你處理好 Google API 認證、資料結構、錯誤處理
    • 你只要把這些 skills 接到你熟悉的 Agent 框架(或自己寫個 loop),LLM 就能:
    • 在 Gmail 搜尋、讀取、回覆郵件
    • 在 Google Calendar 建立、更新、刪除行程
    • 從 Google Drive 找檔案、讀內容
    • 以及其他 Google 產品(例如 Docs / Sheets / Tasks 等)

    💡 關鍵: 把繁瑣的 Google API 細節封裝成 skills,讓你專注在設計 Agent 流程,而不是處理認證與資料結構。

    目前常見支援的產品與典型技能

    以 GitHub 專案內容與官方範例為主,目前重點集中在 Workspace 產品:

    • Gmail:搜尋郵件、讀取內容、標記已讀、建立草稿、送出郵件
    • Calendar:建立事件、更新時間/地點、取消會議、查詢空檔
    • Drive:列出檔案、搜尋、下載內容、讀取檔案文字(搭配 API 或其他工具)
    • Tasks / Docs / Sheets:視版本與模組更新擴充,作為實驗性 skills 提供

    你可以把它想成:「Google 幫你寫好一堆『LLM 可安全使用的 Google API wrapper』,你只要負責接到自己的 Agent。」


    核心功能:讓 LLM 真的「動手做事」

    下面用三個代表性技能,拆開來看它怎麼組成一條完整工作流。

    1. Gmail:搜尋 + 回覆郵件

    能做的事

    • 根據條件(發信人、標題關鍵字、時間)搜尋郵件
    • 讀取郵件主旨、內容、附件資訊
    • 由 LLM 生成人性化回覆,再用 skill 建草稿或直接寄出

    你可以怎麼用

    • 自動整理每日「待回覆」郵件清單
    • 給 Agent 一句自然語言指令:
    • 「幫我找這週所有含『報價』的客戶信,產出一封統一回覆草稿」

    2. Calendar:建立 / 修改行程

    能做的事

    • 建立新事件(時間、地點、參與者、線上會議)
    • 更新時間或加入備註
    • 查詢某段時間的空檔

    你可以怎麼用

    • 讓 LLM 從郵件裡抓出「時間 + 地點 + 主題」,自動變成 Calendar 事件
    • 用一句話:
    • 「把明天 3–5 點標成『專注工作』,不要排會議」

    3. Drive:從檔案抓資料

    能做的事

    • 依檔名、類型、擁有者搜尋檔案
    • 下載或讀取檔案(再交給 LLM 摘要)

    你可以怎麼用

    • 找到昨天產出的報表,請 LLM 摘要要點後寄給主管
    • 自動從會議紀錄整理 action items,寫回 Google Docs

    把它們串起來:一條完整工作流範例

    例子:自動從郵件抓會議資訊 → 建行程 → 建備忘錄

    1. Agent 用 Gmail skill 搜尋主題含「Meeting」「邀請」的未讀信
    2. LLM 解析郵件內容,抽出:會議主題、時間、地點、參與者
    3. 用 Calendar skill 建立事件,寫入摘要與會議連結
    4. 用 Drive/Docs skill 建一份「Meeting Notes」文件,寫入議程、預先問題

    你只要負責描述「整體目標」,LLM 會自己決定何時呼叫哪個 skill。你的程式碼變得像是在描述流程,而不是在寫一堆 API 呼叫細節。

    💡 關鍵: 一旦 workflow 串起來,同一套 skills 可以重複組裝出不同的自動化場景,大幅降低開發新 Agent 的成本。


    實戰場景:把散落在 Workspace 的動作串起來

    下面是幾個可以立即實作的場景,每一個都對應到你可以「今天就試做」的腳本。

    1. 個人行程助理

    需求:每天早上想知道今天有哪些會議、重要信件、待辦。

    可以怎麼做

    • Gmail:抓「星號」或加標籤的關鍵郵件
    • Calendar:列出今天所有會議與空檔
    • Tasks / Drive:列出今日到期的任務與文件
    • LLM 整理成一封「每日簡報」,寄到 Gmail 或 Slack

    👉 可行動:用本文後面的「每日早上報告 Agent」最小範例修改即可。

    2. 客服工單整理

    需求:客服信都在 Gmail,手工整理太慢。

    技能組合

    • Gmail:抓取特定 label(例如 support)的所有新信
    • LLM:
    • 自動分類(bug、退款、帳號問題)
    • 抽出關鍵欄位(客戶、產品、影響範圍)
    • Drive/Sheets skill:寫入 Google 試算表,讓團隊追蹤

    3. 銷售線索追蹤

    需求:商務開發信散落在 Gmail、會議安排在 Calendar、紀錄在 Drive。

    技能組合

    • Gmail:搜尋含「報價」「demo」關鍵字的信
    • Calendar:對應已有 / 尚未安排會議的線索
    • Drive:讀取對應的提案文件
    • LLM:產出「Sales pipeline 摘要」,再寄給業務團隊

    4. 團隊報表自動彙總

    需求:每週要整理多份 Google Sheets / Docs 的數據與摘要。

    技能組合

    • Drive:搜尋指定資料夾裡的所有報表
    • Sheets/Docs skill:抓出指定欄位/段落
    • LLM:彙整成一份「本週關鍵指標 + 亮點 + 風險」
    • Gmail:寄給管理層

    每個場景本質上都是:用 skills 拉資料 → LLM 處理 → 再用 skills 寫回 Google 生態。

    💡 關鍵: 只要 Workspace 流程是「讀資料 → 分類/摘要 → 回寫」,幾乎都能用同一套模式快速自動化。


    怎麼開始:從零到一的小 Agent(Python)

    這段寫給已經會基本 Python 的讀者。目標是做一個:

    「每日早上 9 點,整理今天的會議與重要郵件,寄一封報告給自己」

    步驟一:安裝套件與專案結構

    pip install google-skills openai  # 或你要用的 LLM 客戶端
    

    一個最小專案結構可以是:

    project/
      main.py          # 主程式,Agent 邏輯
      skills_config.py # Google skills 初始化
      .env             # 儲存 API Key 等環境變數
    

    步驟二:設定 Google API 憑證與權限

    1. 前往 https://console.cloud.google.com/
    2. 建立專案,啟用:
    3. Gmail API
    4. Calendar API
    5. (若需 Drive,就再開啟 Drive API)
    6. 建立 OAuth 用戶端 / Service Account 憑證
    7. 下載憑證 JSON,放進你的專案中,路徑寫在環境變數(例如 GOOGLE_APPLICATION_CREDENTIALS)

    google/skills 會讀這些設定,幫你處理 OAuth 流程。第一次執行會要你開瀏覽器認證,通過後就可以長期使用。

    步驟三:初始化 skills

    # skills_config.py
    from google.skills import GmailSkill, CalendarSkill
    
    gmail_skill = GmailSkill(scopes=[
        "https://www.googleapis.com/auth/gmail.readonly",
        "https://www.googleapis.com/auth/gmail.send",
    ])
    
    calendar_skill = CalendarSkill(scopes=[
        "https://www.googleapis.com/auth/calendar",
    ])
    
    TOOLS = {
        "gmail": gmail_skill,
        "calendar": calendar_skill,
    }
    

    (實際類名與參數以官方 GitHub 為準,這裡是示意寫法。)

    步驟四:寫一個最小「每日報告」 Agent

    下面示意一個 純 Python + LLM + skills 的簡易 loop:

    # main.py
    import datetime as dt
    from skills_config import TOOLS
    from openai import OpenAI
    
    client = OpenAI()
    
    
    def get_today_summary():
        today = dt.date.today().isoformat()
    
        # 1) 用 Gmail skill 抓今天重要信件(實際用法依官方 API)
        important_emails = TOOLS["gmail"].search_messages(
            query="label:STARRED newer_than:1d"
        )
    
        # 2) 用 Calendar skill 抓今天所有事件
        events = TOOLS["calendar"].list_events(
            time_min=today + "T00:00:00Z",
            time_max=today + "T23:59:59Z",
        )
    
        prompt = f"""
    你是一個助理,請用條列整理以下資訊:
    1. 今日重要郵件(寄件人 + 主題)
    2. 今日會議(時間 + 標題)
    
    重要郵件:{important_emails}
    今日行程:{events}
    """
    
        resp = client.chat.completions.create(
            model="gpt-4o-mini",  # 或你使用的其他 LLM
            messages=[{"role": "user", "content": prompt}],
        )
        return resp.choices[0].message.content
    
    
    def send_daily_report():
        summary = get_today_summary()
        TOOLS["gmail"].send_message(
            to="your_email@example.com",
            subject="今日工作總覽",
            body=summary,
        )
    
    
    if __name__ == "__main__":
        send_daily_report()
    

    接下來只要用 crontab 或任一排程工具,每天早上 9 點跑一次 python main.py,你就有一個真正會「用 Gmail + Calendar 幫你工作」的小 Agent 了。


    延伸玩法:接到 LangGraph / MCP / 自建 loop

    google/skills 本身只是一組工具,你可以自由接到任何 Agent 框架。

    常見接法比較

    名稱 核心功能 免費方案 適合誰
    LangGraph 圖形化定義 Agent workflow、狀態機 開源 要做複雜流程 / 多工具協作
    MCP 標準化「工具伺服器」協議 規格開源 想讓多個模型共用同一組工具
    Simple loop(自建) while-loop + tool call + LLM 只要有 LLM 即可 想快速測試、腳本導向

    怎麼接 google/skills?

    • LangGraph:把 Gmail/Calendar skill 包成「tool node」,用 graph 描繪整條流程(例如:先讀 mail → 判斷 → 建行程)。
    • MCP:把 google/skills 包成 MCP 工具伺服器,就像 Reddit 上有人把產品目錄接到 Claude 一樣,任何支援 MCP 的 Agent 都能呼叫這組 Google 工具。
    • 自建 loop:如前面的 send_daily_report(),自己在程式裡控制什麼時候 call 哪個 skill。

    實務注意事項:安全、權限與 rate limit

    在公司環境用 google/skills,這幾點非常重要:

    1. 最小權限原則:
    2. 只開啟必要的 scopes,例如只讀 Gmail 就不要給 send 權限
    3. 針對不同 Agent 建不同憑證,避免權限過大
    4. 審計與日誌:
    5. 記錄每次工具呼叫(誰、什麼時候、對哪個帳號)
    6. 公司內部可用 SIEM / 日誌系統統一管理
    7. Rate limit 與配額:
    8. Google API 有配額,批次任務要加上 sleep / retry
    9. 測試環境與正式環境要分開憑證,避免測試爆掉正式配額
    10. LLM 安全邏輯:
    11. 對「寫入」類操作(寄信、刪除事件)加上確認步驟
    12. 可用 rule-based filter:例如禁止刪除某些標籤信件

    總結:把「會聊天的 LLM」變成「會用 Google 的助理」

    如果你已經每天活在 Gmail、Calendar、Drive 裡,google/skills 的價值很單純:

    • 你不用再對著 Google API 文件苦讀,只要調用現成的 skills
    • LLM 能真的幫你「按按鈕、拉資料、寫回去」,而不是只給你建議
    • 從個人行程助理,到團隊報表自動化,都可以在幾十行 Python 內完成第一個版本

    先從一個小腳本開始:「每日早上發報告」,跑通一次之後,你就會自然開始想把更多 Workspace 工作交給你的 Agent。

    🚀 你現在可以做的事

    • 打開 google/skills GitHub 專案,瀏覽支援的 skills 清單與範例程式
    • 依照文中的「每日報告 Agent」範例,在本機建立一個最小 Python 專案跑通一次
    • 在你的 Workspace 工作流中,挑一個「讀資料 → 整理 → 寄出」流程,試著用 google/skills + LLM 自動化它