轻量ERP skill实战:用TaoToken统一Key给AI Agent接入微型进销存API
1. 为什么我要给 AI Agent 接一套微型进销存小店老板最常问的一句话是「还剩多少瓶可乐」。如果这句话由人来回答就得翻账本、点货架如果交给 AI Agent理想状态是它自己查库存、自己记销售、自己提醒补货。问题在于大多数 ERP 对个人开发者和小店来说太重了要装数据库、配队列、买订阅光部署就能劝退。我想要的是一套「能发 HTTP 请求就能管库存」的后端然后让 Agent 通过一个统一的 Key 去调用它。这样 Agent 不需要理解数据库只需要理解几个 action。TaoToken 在这里扮演的角色是统一 Key 与 API 通道Agent 侧只认一个凭证入口背后接的是轻量 ERP skill 的进销存接口。适合谁适合正在做 Agent 工具链、想让 Agent 自动完成库存查询、订单录入、进销存对账的开发者也适合想给自己小店做个自动化账本的人。这篇要交付的是可复制的config.toml与settings.json骨架、curl 验证命令以及 Agent 调用链路的检查清单目标是一次配置跑通闭环。下面所有步骤我都按「先配通道、再验接口、最后接 Agent」的顺序来你可以直接跟着敲。2. TaoToken 前置统一 Key 与 API 通道怎么准备在写配置之前先把凭证和通道理清楚。TaoToken 的定位是给 AI Agent 提供统一的模型与工具调用入口轻量 ERP skill 作为其中一个可调用的能力挂在这条通道上。你需要准备两样东西一个可用的 API Key以及确认通道地址。API 基地址用https://taotoken.net/api注意这个地址不带任何查询参数配置里直接写死即可。Key 的获取在控制台的 API Keys 页面完成生成后只显示一次建议立刻写进本地配置文件而不是硬编码在脚本里。注意Key 属于敏感凭证不要提交到 Git 仓库也不要在 Agent 的提示词里明文回显。用环境变量或本地配置文件读取是更稳的做法。如果你后面要做长期编码或 Agent 常驻任务可以了解 Coding Plan如果只是先验证模型对话链路模型对话页面能直接试接入文档里有完整的鉴权说明。这几个入口按需选不要一上来就全铺开。通道确认的一个简单办法是先发一次最小请求看返回结构是否符合预期。下面这段 curl 只做连通性验证不涉及业务数据curl -s -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: ping}], max_tokens: 8 }返回里能看到choices字段就说明 Key 和通道都通了。这一步过了再往下配 ERP skill否则后面报错你分不清是通道问题还是业务参数问题。3. 可复制配置config.toml 与 settings.json 骨架配置分两层config.toml放通道与凭证引用settings.json放 Agent 侧的 skill 声明和调用参数。这样拆的好处是换 Key 只动一处Agent 逻辑不用改。先看config.toml# ~/.taotoken/config.toml [channel] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY timeout_seconds 30 retry 2 [erp] skill_name light-erp endpoint /shop-ai.txt auth_header Authorization auth_scheme Bearer token_env ERP_API_TOKEN token_ttl_days 90 [erp.actions] products products receipts receipts stats stats update_product update_product stock_in stock_in sale sale这里把通道和 ERP 的凭证分开TAOTOKEN_API_KEY走 TaoToken 通道ERP_API_TOKEN走进销存接口。两个都从环境变量读配置文件本身不含明文。再看settings.json这是给 Agent 读的 skill 声明{ skills: [ { name: light-erp, description: 微型进销存商品管理、进货入库、销售出库、库存统计, transport: http, base_url: https://taotoken.net/api, endpoint: /shop-ai.txt, auth: { type: bearer, token_env: ERP_API_TOKEN }, actions: { list_products: { method: GET, query: { action: products } }, list_receipts: { method: GET, query: { action: receipts } }, get_stats: { method: GET, query: { action: stats } }, update_product: { method: POST, body_action: update_product }, stock_in: { method: POST, body_action: stock_in }, sale: { method: POST, body_action: sale } }, field_map: { product_code: product_code, product_name: product_name, items_name: name, items_code: code } } ] }field_map是我特意加的因为进销存接口在不同 action 下字段名不一致新增商品用product_name进货销售时 items 里用name。Agent 如果按直觉填name去建商品会直接失败。把映射写进配置Agent 生成参数时就有依据。环境变量这样导出export TAOTOKEN_API_KEY你的通道Key export ERP_API_TOKEN你的进销存Token写进~/.bashrc或~/.zshrc后source一次即可。Token 有效期按 90 天算过期要重新登录换取所以账号密码也要单独存一份别只存 Token。4. 验证请求curl 跑通进销存闭环配置写完先别急着接 Agent用 curl 把四个核心动作各跑一遍确认返回结构。顺序是建商品 → 进货 → 销售 → 查统计。新增商品注意字段名是product_code和product_namecurl -s -X POST https://taotoken.net/api/shop-ai.txt \ -H Authorization: Bearer $ERP_API_TOKEN \ -H Content-Type: application/json \ -d {action:update_product,product_code:001,product_name:矿泉水,price:2.0}返回里带商品 ID 就说明建成功了。接着进货入库items 数组里用的是code和namecurl -s -X POST https://taotoken.net/api/shop-ai.txt \ -H Authorization: Bearer $ERP_API_TOKEN \ -H Content-Type: application/json \ -d {action:stock_in,items:[{code:001,name:矿泉水,quantity:50},{code:002,name:可乐,quantity:30}]}销售出库时total_amount必须等于 items 里各商品price × quantity之和否则服务端可能拒绝curl -s -X POST https://taotoken.net/api/shop-ai.txt \ -H Authorization: Bearer $ERP_API_TOKEN \ -H Content-Type: application/json \ -d {action:sale,items:[{code:001,name:矿泉水,quantity:3,price:2.0}],total_amount:6.0}最后查统计面板curl -s https://taotoken.net/api/shop-ai.txt?actionstats \ -H Authorization: Bearer $ERP_API_TOKEN返回里能看到商品种类、总库存、缺货商品、今日销售额。四个动作都通了说明通道、凭证、字段映射三件事都对上了。这时候再把 Agent 接进来出问题就只可能是 Agent 的参数生成逻辑排查范围小很多。5. 本篇常见错排查Agent 调用链路检查清单接 Agent 之后最常见的不是接口挂了而是参数对不上。下面这份清单按调用链路从上到下排出问题逐条过。第一通道层。Agent 发出的请求是否真的带上了Authorization: BearerKey 是否从环境变量正确读取。如果 Agent 框架有自己的 HTTP 客户端确认它没有覆盖 header。第二字段层。建商品用product_name进货销售用name这是最容易混的地方。我试过让 Agent 自由发挥它十次有八次会把建商品的字段写成name。把field_map喂给它或者直接在 skill 描述里写死字段名。第三金额层。销售请求的total_amount必须和明细加总一致。Agent 如果先算总价再改数量很容易对不上。建议让 Agent 先定 items 再算 total不要反过来。第四凭证层。Token 90 天过期过期后所有请求返回鉴权失败。检查清单里要有一条「Token 是否在有效期内」并保留账号密码用于重新登录。第五数据量层。products 和 receipts 接口没有分页商品或小票多了返回体会很大。Agent 侧要设响应体大小上限或者只取需要的字段别把整包塞进上下文。第六幂等层。进货和销售不是幂等的网络重试可能导致重复入库。Agent 的重试逻辑要区分「请求未发出」和「响应未收到」后者不要盲目重发。提示排查时先用 curl 复现 Agent 发出的原始请求确认是接口问题还是 Agent 参数问题。这一步能省掉大量猜测。6. 把 Key 管好Agent 才能长期跑整套链路跑通之后真正决定它能不能长期用的是凭证管理。我的做法是把账号密码单独存一个文件权限设成 600Token 过期时用脚本自动重新登录并刷新环境变量。Agent 本身不接触账号密码只读刷新后的 Token。echo {username:你的账号,password:你的密码} ~/.taotoken/erp_cred.json chmod 600 ~/.taotoken/erp_cred.json刷新脚本读这个文件登录把新 Token 写回环境变量文件Agent 启动时 source 一次。这样即使 Token 过期重启 Agent 就能恢复不需要人工介入。如果你打算让 Agent 常驻做库存监控和自动补货提醒长期编码类任务可以走 Coding Plan把通道和额度统一管理只是验证模型对话链路的话模型对话页面足够接入细节以接入文档为准Key 在 API Keys 页面生成。配置骨架和 curl 命令都在上面照着跑一遍你的 Agent 就能自己管库存了。