跳到正文
土土金API

AI Agent 與工作流自動化

AI Agent 和工作流自動化一般分兩層:便宜的小模型把郵件、工單、表單轉成固定結構的 JSON,程式據此決定走哪條流程;主力模型通過工具呼叫(function calling)查詢系統、起草回覆,退款、發信這類有副作用的操作先進入人工審批,每一步都記審計日誌。按每月 5 萬條事件、其中 1 萬個任務交給 Agent 處理估算,用各模型最低價分組的即時價格計算,模型費用每月約 ¥331。

價格更新於 2026年11月13日 下午5:53

月成本估算

假設:每月 5 萬條事件(郵件、工單、表單)先做分類抽取,每條輸入約 800 tokens、輸出約 120 tokens;其中 1 萬條交給 Agent 處理,每個任務平均 4 次模型呼叫(3 次工具呼叫加 1 次最終回覆),每次輸入約 3,500 tokens(系統提示和工具定義約 1,500、任務和之前步驟的結果約 2,000),輸出約 250 tokens。

¥331/ 月

  • 事件分類與結構化抽取¥31
  • Agent 多步工具呼叫¥300
看用量假設

業務問題

很多後臺工作是固定套路:看一封郵件或一張工單,去幾個系統裡查資訊,按規則處理,再答覆或登記。規則一多、例外一多,寫死的規則程式碼就覆蓋不了,全靠人工處理又慢又容易漏。

大模型能讀懂這些非結構化的輸入,也能通過工具呼叫去查訂單、查庫存、建工單。但它會選錯工具、編造參數,或者在不該行動的時候行動。讓模型直接執行退款、發郵件、改資料,風險很難控制。

更穩的做法是把流程拆開:模型負責理解和起草,程式負責校驗和執行;只讀的查詢可以自動呼叫,有副作用的操作必須經過人工審批;每一步的輸入、輸出和呼叫的工具都記下來,出了問題能追溯。

推薦模型組合

推薦模型按即時目錄自動選取,價格取各模型最低價分組,更新於 2026年11月13日 下午5:53。點模型名可檢視全部分組價格。

參考架構

  1. 1

    接入事件

    事件來自郵件、工單系統、表單提交或定時任務。可以在 n8n、Dify 裡搭工作流接入,也可以在你自己的服務裡消費訊息佇列,模型的呼叫方式都一樣。

  2. 2

    分類與抽取

    小模型把原始內容轉成固定結構的 JSON(類型、訂單號、金額、是否緊急),程式按 JSON Schema 校驗;校驗不過的重試一次,仍不過就轉人工。

  3. 3

    工具呼叫

    主力模型拿到任務和工具定義(查訂單、查庫存、查知識庫、起草回覆等),自己決定呼叫順序。工具由你的程式碼執行,結果再交回模型;單個任務限制最大步數,例如 6 步。

  4. 4

    人工審批

    退款、發郵件、改資料這類有副作用的操作,模型只能提交申請:程式把操作和參數放進審批佇列,有人確認後再由程式執行。只讀的查詢可以自動執行。

  5. 5

    審計記錄

    記錄每一步的輸入、使用的模型、呼叫的工具和參數、工具返回、審批人和時間,以及響應裡的 usage(tokens 用量),方便復盤,也方便和控制台的用量明細對帳。

  6. 6

    額度與監控

    給自動化流程單獨建一把 API Key 並設定額度上限;盯住失敗率、轉人工比例和單個任務的 tokens 用量,異常時暫停自動執行,全部轉人工。

成本估算

假設:每月 5 萬條事件(郵件、工單、表單)先做分類抽取,每條輸入約 800 tokens、輸出約 120 tokens;其中 1 萬條交給 Agent 處理,每個任務平均 4 次模型呼叫(3 次工具呼叫加 1 次最終回覆),每次輸入約 3,500 tokens(系統提示和工具定義約 1,500、任務和之前步驟的結果約 2,000),輸出約 250 tokens。

專案模型用量假設費用
事件分類與結構化抽取gpt-5.4-nano50,000 次 × 輸入 800 + 輸出 120 tokens¥31
Agent 多步工具呼叫gpt-5.4-mini40,000 次 × 輸入 3,500 + 輸出 250 tokens¥300
合計(每月)¥331

按各模型最低價分組的即時價格計算,價格更新於 2026年11月13日 下午5:53。

只含模型呼叫費用,不含工作流平臺、伺服器和人工審批成本。Agent 的費用主要看步數:每多一步,工具定義和之前的結果都要再發送一次,所以要限制最大步數。系統提示詞和工具定義每次都一樣,模型支援上下文快取時命中部分按快取讀取價計費;推理模型的思考過程按輸出計費,部分模型可以用 reasoning_effort 調低思考強度。事件量翻倍,費用大致翻倍。

示例程式碼

小模型先把訊息轉成固定欄位的 JSON;需要處理的任務交給 Agent 迴圈:只讀工具直接執行,退款這類有副作用的工具只進審批佇列,每一步都寫審計日誌,超過最大步數就轉人工。

示例程式碼(Python,結構化分類 + 工具呼叫)
import json
import os
from openai import OpenAI

client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
audit_log, approval_queue = [], []

TICKET = {"name": "ticket", "strict": True, "schema": {
    "type": "object",
    "properties": {
        "category": {"type": "string", "enum": ["refund", "shipping", "invoice", "other"]},
        "order_id": {"type": ["string", "null"]},
        "urgent": {"type": "boolean"},
    },
    "required": ["category", "order_id", "urgent"],
    "additionalProperties": False,
}}


def classify(text):
    """Small model: free text in, fixed fields out. Code decides the workflow."""
    resp = client.chat.completions.create(
        model="gpt-5.4-nano",
        messages=[{"role": "system", "content": "Extract the ticket fields."}, {"role": "user", "content": text}],
        # models without json_schema support: {"type": "json_object"}, then check the fields yourself
        response_format={"type": "json_schema", "json_schema": TICKET},
    )
    return json.loads(resp.choices[0].message.content)


TOOLS = [
    {"type": "function", "function": {
        "name": "get_order", "description": "Look up an order. Read-only.",
        "parameters": {"type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"]},
    }},
    {"type": "function", "function": {
        "name": "refund", "description": "Refund an order. Runs only after a person approves it.",
        "parameters": {"type": "object", "properties": {
            "order_id": {"type": "string"}, "amount": {"type": "number"}, "reason": {"type": "string"}},
            "required": ["order_id", "amount", "reason"]},
    }},
]


def run_tool(name, args):
    if name == "get_order":
        return {"order_id": args["order_id"], "status": "delivered", "paid": 129.0}  # call your order API here
    if name == "refund":
        approval_queue.append(args)  # side effect: a person approves, then your code executes it
        return {"status": "waiting_for_approval"}
    return {"error": "unknown tool"}


def run_agent(task, max_steps=6):
    messages = [
        {"role": "system", "content": "You handle after-sales requests with the tools. Never promise a refund before it is approved."},
        {"role": "user", "content": task},
    ]
    for step in range(max_steps):
        resp = client.chat.completions.create(model="gpt-5.4-mini", messages=messages, tools=TOOLS)
        msg = resp.choices[0].message
        audit_log.append({"step": step, "model": resp.model, "usage": resp.usage.model_dump() if resp.usage else None})
        if not msg.tool_calls:
            return msg.content
        messages.append({"role": "assistant", "content": msg.content, "tool_calls": [c.model_dump() for c in msg.tool_calls]})
        for call in msg.tool_calls:
            try:
                args = json.loads(call.function.arguments or "{}")
                result = run_tool(call.function.name, args)
            except (json.JSONDecodeError, KeyError) as e:
                args, result = call.function.arguments, {"error": "bad arguments: " + str(e)}
            audit_log.append({"step": step, "tool": call.function.name, "args": args, "result": result})
            messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
    return "Step limit reached, handing over to a person."


text = "Order 10086 arrived broken. I want my money back."
if classify(text)["category"] == "refund":
    print(run_agent(text))
    print("waiting for approval:", approval_queue)

用一把 Key 試試這個方案

註冊後在控制台建立 API Key,把上面程式碼裡的 base_url 和 Key 換成你的就能執行。企業採購、開發票可以加客服微信 JsnonoChat。

土土金客服微信二維碼
微信JsnonoChat

掃碼或搜尋微信號新增客服

常見問題

AI Agent 每月要花多少錢?

按每月 5 萬條事件做分類抽取、其中 1 萬個任務交給 Agent、每個任務平均 4 次模型呼叫估算,用最低價分組計算約 ¥331。Agent 的費用主要看步數和每一步帶的上下文長度。

在 Dify 或 n8n 裡能用嗎?

可以。Dify 通過 OpenAI-API-compatible 模型供應商接入;n8n 把 OpenAI 憑據的 Base URL 改成 https://www.tutujin.com/v1 即可。模型名填模型廣場裡的名稱,具體步驟見下方的 Dify 和 n8n 接入文件。在 Dify 裡用工具呼叫,需要模型本身支援,並在新增模型時開啟 Function calling。

怎麼防止 Agent 亂操作?

只給模型完成任務必需的工具;退款、發信、改資料這類有副作用的工具只生成申請,人工確認後由你的程式碼執行;工具參數在執行前由程式再校驗一次,金額、收件人這類欄位不直接信任模型給的值;單個任務限制最大步數,超出就轉人工。

模型不按格式輸出 JSON 怎麼辦?

優先用 response_format 的 json_schema,把欄位、類型和可選值寫進 schema;模型不支援時用 json_object,並在提示詞裡寫清欄位。無論哪種方式,都要在程式碼裡按 schema 校驗,失敗就重試一次或轉人工。

審計日誌要記哪些內容?

至少記錄:觸發事件、每一步使用的模型、呼叫的工具和參數、工具返回、審批人和審批時間、最終結果,以及響應裡的 usage。出了問題能還原過程,也能和控制台的用量明細對帳。

一個流程裡用到不同分組的模型怎麼辦?

一把 Key 可以按優先順序設定多個分組,每次請求使用第一個提供該模型的分組,按實際使用的分組計價;也可以給不同的流程各建一把 Key,分別設定額度上限,帳單按 Key 分開看。