跳到正文
土土金API

AI Agent 与工作流自动化

AI Agent 和工作流自动化一般分两层:便宜的小模型把邮件、工单、表单转成固定结构的 JSON,程序据此决定走哪条流程;主力模型通过工具调用(function calling)查询系统、起草回复,退款、发信这类有副作用的操作先进入人工审批,每一步都记审计日志。按每月 5 万条事件、其中 1 万个任务交给 Agent 处理估算,用各模型最低价分组的实时价格计算,模型费用每月约 ¥331。

价格更新于 2026年11月13日 17: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日 17: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日 17: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 分开看。