结论先说

在多数 AI 助手里,临时让模型“做一个调用某云厂商生成图片的技能”,本质上是会话内的一次性产物,不是账号级资产。会话结束、上下文被截断、换了客户端或工作区,这个技能就不存在了。想长期可用,必须把它从对话里“搬出来”,落到配置文件、代码仓库或平台的自定义工具/插件里。

适用场景:用 AI 助手封装过某个 API(生图、语音合成、翻译、内部查询),过几天想继续用却发现“没了”。

为什么会这样

维度 会话内临时技能 持久化技能/工具
存放位置 对话上下文、临时沙箱 本地配置目录、仓库、平台插件
生命周期 一次会话或一段上下文窗口 直到被显式删除
变更风险 低(丢了就没了) 中(改错会影响所有调用方)
谁能用 当前对话 同一账号/同一工作区的所有会话

模型在对话中“写”出来的技能,通常只是若干段提示词加一段调用代码,存在于上下文里。上下文被裁剪、会话被清理、或换了没有历史记录的客户端,模型没有任何地方能“回忆”起这段代码——它不是被删除,而是从来没被保存过。

另一个常见误解是以为模型有跨会话记忆。多数产品的记忆只保存自然语言偏好,不保存可执行代码和凭据。

怎么做

目标是让生成图片这类能力变成有明确入口、可版本管理、可被任何新会话调用的东西。

  1. 先确认它当初落在哪。检查工作目录下是否有 skills/、tools/、.assistant/ 等目录,以及仓库是否提交过相关文件:
find /path/to/app -maxdepth 3 -type d \( -name skills -o -name tools -o -name plugins \) 2>/dev/null

有文件说明还能救;只有对话记录说明需要重建。

  1. 把调用逻辑写成独立脚本,不依赖对话上下文,凭据从环境变量读,参数从命令行传入:
#!/usr/bin/env bash
# /path/to/app/scripts/gen_image.sh
: "${IMAGE_API_KEY:?missing IMAGE_API_KEY}"
curl -sS -X POST "https://example.com/api/v1/images" \
  -H "Authorization: Bearer ${IMAGE_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "{\"prompt\": \"$1\", \"size\": \"1024x1024\"}" \
  | jq -r '.data[0].url'

单独成脚本的好处:可在终端直接验证,AI 助手只是调用方之一,换任何客户端都能复用。

  1. 在助手侧登记这个技能。入口因产品而异,结构一致:名称、触发描述、执行命令或 HTTP 端点。触发描述要写清“什么时候用”,例如“用户要求根据文字描述生成图片时调用”,而不是只写“生图”。
  1. 凭据放环境变量或密钥管理,不要写进技能定义文件——技能文件常被提交到仓库或同步到多台设备,明文密钥等于泄露。
  1. 提交到版本库,README 写清依赖和调用示例。下次“还在么”的答案就是 git log 里的一条记录。

怎么确认成了

  • 在新开的、无历史上下文的会话里用一句自然语言触发(如“生成一张蓝色背景的图标”),看是否命中技能。
  • 终端直接跑脚本,确认返回图片 URL 而非错误 JSON。
  • 失败按层判断:missing IMAGE_API_KEY 是环境变量没注入;401/403 是凭据或权限问题;4xx 带参数错误是请求体字段不对;助手不触发则是触发描述不够具体。

边界与代价

  • 不是所有助手都支持持久化自定义工具,部分产品只允许单次会话内定义,只能靠外部脚本加手动调用兜底。
  • 技能固化成脚本后,接口变更需自己维护,模型不会自动跟进 API 版本升级。
  • 涉及计费的生成类接口,建议在脚本里加调用次数或额度检查,避免反复触发产生意外费用。
  • 凭据轮换时要同步更新环境变量,否则会出现“技能在但调用失败”,这类问题优先查密钥有效期。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注