写一个让 agent 构建工具的提示词:3 个部分
工具放在哪里、它做什么、哪些细节是固定的:一个基于 DeepSeek Creator Mode 示例的三段式提示词,以及一次构建会话的成本。

你让一个 agent“做一个工具”,结果得到一些模糊、不适合你应用的东西。解决办法不是写更长的提示词,而是写一个包含三个具体部分的提示词:工具放在哪里、它做什么,以及必须满足的具体细节。也要预期不止一轮:就连 DeepSeek 也说,它的一些演示插件经过了好几轮对话才打磨好。
DeepSeek 为 Harness Creator Mode 演示视频收集的提示词大多呈现这种三段式结构。该页面(DeepSeek 的 Creator Mode 提示词合集,查阅于 2026 年 11 月 3 日,页面上没有发布日期)列出了七个插件:著名地标的 3D 画廊、Transformer 3D 可视化、像素化的 DSH 界面、海报设计工作台、视频编辑工作台、论文阅读器和对话统计。要使用其中一个,你把提示词粘贴到 DeepSeek Harness 中,并选择 Creator Mode 选项。每个提示词都提供英文和中文版本。
三个部分在真实提示词中是什么样#
以该页面上的 Transformer 3D 可视化提示词为例。它以“Create a DeepSeek Harness plugin with a left sidebar entry”开头。这是第一部分:工具放在哪里。然后它描述功能:一个解释 Transformer 计算过程的交互式 3D 演示游戏。这是第二部分。最后是一个容易忘记、事后修复又很烦人的要求:面板标题和工具栏不得与 macOS 原生窗口按钮重叠。这是第三部分。
页面上的其他提示词遵循同样的结构,只是有所不同。入口点各不相同:其中三个是左侧边栏条目,两个是从对话中进入的位置,论文阅读器则是右侧边栏。结尾部分才是具体细节所在:五种样式,其中一种是像素化的,或者默认页面标题为“Everything is a plugin”。这就是值得照搬的模式,而且差别很快就会显现:
比较
模糊 vs 三个部分
之前
给我的对话做一个工具。
之后
创建一个带左侧边栏条目的插件。它显示我的对话统计:有多少个对话、每个对话有多长,以及哪一天最忙。面板标题不得与窗口按钮重叠。
第一个版本让 agent 对一切都靠猜。它放在哪里?侧边栏、命令,还是单独窗口?什么算“给我的对话”?第二个版本在 agent 不得不问之前就回答了这些问题。

自己写,一部分一部分来#
假设你想要一个小面板,用来阅读论文并让你就论文提问。按顺序过一遍这些部分。
它放在哪里。 一句话,并指明确切位置:“一个带左侧边栏条目的插件”、“工具栏中的一个按钮”、“从菜单打开的页面”。如果你不写,agent 就会替你选。
它做什么。 描述你看到和点击的内容,而不是它如何构建。“你拖入一个 PDF,左侧显示文本,右侧有一个关于它的聊天。”除非有理由指定某个框架,否则跳过框架。
具体要求。 上次出问题的地方就写在这里。布局规则、不得重叠的东西、语言、文件格式、像“不发起网络请求”这样的限制。简短、可检查的行。如果你无法通过查看结果判断某个要求是否满足,就重写它,直到你能判断为止。
组合起来:
Create a plugin with a left sidebar entry.
It is a paper reader: I open a PDF, the text is shown
on the left, and a chat about the paper is on the right.
Requirements:
- the panel title must not overlap the window buttons
- the chat answers only from the paper's text
- keep everything in one file通过 API 发送#
Creator Mode 是 DeepSeek Harness 的功能;提示词本身是纯文本,所以任何能读取提示词的东西都能运行它,包括调用 CheapTokens API 的脚本。下面的提示词就是上面的那个,发送给 DeepSeek-V4-Flash(完整 id 为 deepseek-,380K 上下文,单次回答最多 32,768 个 token,这为在一次回复中生成整个插件留出了空间):
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
prompt = """Create a plugin with a left sidebar entry.
It is a paper reader: I open a PDF, the text is shown
on the left, and a chat about the paper is on the right.
Requirements:
- the panel title must not overlap the window buttons
- the chat answers only from the paper's text
- keep everything in one file"""
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": prompt}],
max_tokens=8000,
)
print(resp.choices[0].message.content)
print(resp.choices[0].finish_reason, resp.usage)密钥放在环境变量中,绝不要放在文件里。如果 finish_reason 打印出 length,说明插件被 max_tokens 截断了:提高限制。用自定义提供商设置 DeepSeek Harness 本身是另一项工作,见将 DeepSeek Harness 连接到 CheapTokens。首次请求的基础知识见 CheapTokens 文档。
为什么一个提示词很少够用#
DeepSeek 说得很直白:一些演示插件经过了好几轮对话才打磨好,所以单个提示词可能无法精确复现视频。把它想象成向承包商交代任务。第一张图能让你看到房间的大部分,然后你走一遍并说“门开反了”。
自己试试试一试:第二轮应该说什么?显示答案
说出你看到的东西,而不是你的感受。“标题与关闭按钮重叠;把它向右移动 40 px”会得到修复。“布局不对”只会得到又一次猜测。每次修正都会成为下次要求部分中的又一行。

钱就是在这里花掉的。agent 每一轮都会重新发送对话(效果与为什么长对话更贵相同),所以第五轮会携带提示词、之前的四个回答以及到目前为止的所有代码。
一次构建会话的成本#
这是一个假设的会话,不是实测:五轮,每轮发送约 12,000 个 token(提示词、历史记录、当前代码),写回约 6,000 个 token。下表使用每个模型的 CheapTokens 实时价格;OpenRouter 列用于按总量比较同一会话,输入和输出合并计算。
| 模型 | 输入 $/1M | 输出 $/1M | 每次请求 | 5 次请求 | OpenRouter,5 次请求 |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00048 | $0.0024 | $0.0045 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00078 | $0.0039 | $0.0084 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0015 | $0.0075 | $0.09 |
每次请求 12,000 个输入 token 和 6,000 个输出 token。每 100 万 token 的价格为当前价格,会随我们的资费一同变动;OpenRouter 列显示相同工作负载的参考价格。
对于一轮 DeepSeek-V4-Flash,同样的数字合计为 $0.00078。如果你的插件更大,历史记录每轮都会增长,所以修改这两个数字并重新运行估算。更多关于估算 agent 账单的内容见如何估算 AI agent 的成本,模型列表在定价页面上。
发送前检查#
清单
发送构建提示词之前
写下第一个提示词,阅读返回的内容,并把每次修正加入下一版要求中。经过两三次会话后,你会得到一份简短的行列表,可以粘贴到每个新提示词中,第一轮的结果就会更接近你的本意。关于任何提示词的底层习惯,见如何写出好的提示词。



