资讯动态

第一个工作流 Skill:从需求到实现,用 TaoToken 打通 Prompt Chaining 全链路

发布时间:2026/10/17 2:42:19 来源:尧图企业网站定制
1. 为什么零散 Prompt 拼不出一个能用的工作流很多人第一次接触 Skill 这个概念会以为它就是把一段长 Prompt 存成文件。我一开始也这么想直到把「会议纪要整理」这件事反复做了十几遍才发现问题根本不在 Prompt 写得好不好而在于步骤之间没有稳定的衔接。你回想一下自己整理会议纪要的过程先看谁参加了、什么时候开的再从一堆聊天记录里挑出讨论了什么然后判断哪些是已经拍板的决策最后把「谁在什么时候做什么」拎出来。这四件事如果塞进一段 Prompt 里让模型一次做完短会议还行一旦记录超过两千字模型就会开始漏——要么把决策混进讨论要点要么待办事项里没有负责人。这不是模型不行是单次调用的上下文压力太大。Prompt Chaining 解决的正是这个问题把一个大任务拆成若干个有明确输入输出的小节点前一个节点的输出就是后一个节点的输入每个节点只干一件事。这样每一步的 Prompt 都很短、很聚焦模型不容易跑偏而且中间结果可以单独检查、单独重跑。而 Skill 是把这套链路固化下来的载体。它包含三样东西一个描述触发条件的元信息什么时候该用这个 Skill、一套固定的执行步骤先做什么后做什么、以及可复用的资源文件比如输出模板。有了 Skill你下次不用重新想「该怎么拆步骤」直接说一句「整理会议纪要」就能跑起来。这篇文章要做的就是带你从零把「meeting-minutes」这个 Skill 落地先拆需求再写 SKILL.md然后配置 Prompt Chaining 的各个节点最后用 TaoToken 的统一 Key 把多步调用串起来跑通。全程可复制你跟着做就能得到一个能用的工作流。适合谁看写过一些 Prompt 但总觉得输出不稳定的人想把重复性文本处理任务自动化的人以及准备给自己的 Agent 加第一个 Skill 的人。不需要你会写复杂代码会建目录、会改配置文件就够了。2. TaoToken 前置准备一个 Key 打通多步调用在动手写 Skill 之前得先把「调用通道」准备好。因为 Prompt Chaining 意味着一次任务要发好几次请求如果每个节点都去配一遍不同的 Key、不同的 Base URL光是管理这些配置就够烦的。TaoToken 在这里的作用就是统一入口一个 API Key、一个 Base URL所有节点都走它。先说清楚它是什么。TaoToken 提供的是兼容 OpenAI 接口规范的调用服务你拿到的 Key 可以直接用在任何支持自定义 Base URL 的客户端或代码里。对做 Skill 的人来说这意味着你写在 SKILL.md 里的调用逻辑、写在脚本里的请求代码不需要为不同模型改来改去——换模型只改一个 Model ID 字段就行。前置准备分三步。第一步拿到 API Key。打开 https://taotoken.net/api-keys 登录后创建一个新的 Key。建议给这个 Key 起个能认出来的名字比如meeting-minutes-skill方便以后排查是哪个项目在用。创建完立刻复制保存页面刷新后就看不到了。第二步确认 Base URL。所有请求的地址是https://taotoken.net/api。注意这里不要加任何多余的路径后缀客户端一般会自动补/v1/chat/completions。如果你用的是 OpenAI 官方 SDK就把base_url设成这个值。第三步选一个 Model ID。会议纪要这种任务对模型的要求是「指令跟随稳、中文输出自然」不需要最强的推理模型。你可以先用一个中等档位的模型跑通确认链路没问题后再按需升级。Model ID 的具体取值在 https://taotoken.net/doc 的模型列表里能查到复制那个字符串填进去就行。把这三样东西凑齐就是所谓的「三件套」配置项值说明Base URLhttps://taotoken.net/api所有节点共用API Keysk-开头的一串从 API Keys 页面获取Model ID从文档模型列表复制可按节点不同而不同这里有个我踩过的坑要提醒你不要把 Key 直接写进 SKILL.md 然后提交到 Git。SKILL.md 是会被 Agent 读取的文本文件Key 写进去等于公开。正确做法是把 Key 放在环境变量里SKILL.md 里只写「从环境变量TAOTOKEN_API_KEY读取」。后面配置节点时我会给出具体写法。如果你更习惯用现成的编码工具来验证TaoToken 也支持 Claude Code、Cline 这类客户端接入配置方式在文档里都有。但对做 Skill 来说直接用 HTTP 请求或 SDK 调用更可控因为你要精确控制每个节点的输入输出。3. 可复制配置SKILL.md 模板与 Prompt Chaining 节点这一节是全文的核心我会把 meeting-minutes 这个 Skill 的完整文件结构和配置都给你你复制过去改改就能用。先看目录结构。不同工具的 Skill 存放位置不一样Claude Code 用.claude/skills/Cursor 用.cursor/skills/Qoder 用.qoder/skills/。下面统一以.qoder/skills/为例你按自己用的工具替换前缀即可。.qoder/skills/meeting-minutes/ ├── SKILL.md └── assets/ └── minutes-template.mdassets/放输出模板好处是以后想换格式只改模板文件不用动主指令。这个设计在 Prompt Chaining 里特别重要因为「格式化输出」是链路的最后一个节点模板独立出来意味着这个节点可以单独替换。先写输出模板。创建.qoder/skills/meeting-minutes/assets/minutes-template.md# 会议纪要{meeting_topic} ## 基本信息 - **时间**{meeting_date} - **参会人**{attendees} - **记录人**{note_taker} ## 讨论要点 {discussion_points} ## 决策 {decisions} ## 待办事项 {action_items} ## 下次会议如有 {next_meeting}模板用{placeholder}标记待填充位置这样最后一个节点只需要做「填空」这一件事输出格式自然稳定。再写 SKILL.md。这是整个 Skill 的大脑包含元信息和执行步骤。注意 YAML 头部的name必须和目录名完全一致description要覆盖用户可能用的各种说法--- name: meeting-minutes description: Generate structured meeting minutes from raw notes, transcripts, or chat logs for internal meetings under 60 minutes. Use when the user asks to summarize a meeting, write meeting notes, create minutes, organize meeting records, or draft meeting minutes in Chinese. --- # 会议纪要整理 Skill ## 触发条件 当用户提到以下任一请求时激活本 Skill - 整理会议纪要 - 生成会议记录 - 总结会议内容 - 把这段会议记录整理一下 - 写一份会议纪要 ## 工作流 按以下步骤执行不要跳过任何一步 ### Step 1确认输入 确认用户已经提供了会议的原始材料。如果用户只给了一句话目标先请用户粘贴会议内容。 ### Step 2提取元信息 从原始材料中提取会议主题、日期、参会人、记录人。 未明确的信息用合理推断并在输出中标注推断。 ### Step 3提取讨论要点 按议题分组每个议题 3-5 条 bullet points保留关键论点。 ### Step 4提取决策 列出明确达成的决策。没有则标注本次会议未记录明确决策。 ### Step 5提取待办事项 格式- [ ] {任务描述} —— {负责人}{截止日期} 截止日期未明确则标注待定。 ### Step 6加载模板并输出 加载 assets/minutes-template.md填充所有占位符输出最终纪要。 ## 输出要求 - 使用中文输出 - 每个议题不超过 5 个 bullet points - 待办事项必须有负责人 - 不要添加原始材料中没有的信息。到这里Skill 的「静态部分」就完成了。但要让 Prompt Chaining 真正跑起来还需要把上面这六个 Step 映射成可独立调用的节点。下面给出节点配置我用 JSON 格式写你可以直接放进自己的调度脚本里{ skill: meeting-minutes, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, nodes: [ { id: extract_meta, model: your-model-id, system: 你是会议信息提取器。只输出 JSON字段topic, date, attendees, note_taker。未提及的字段填 null。, input: {{raw_notes}}, output_key: meta }, { id: extract_points, model: your-model-id, system: 你是讨论要点提取器。按议题分组每组 3-5 条要点。只输出 JSON 数组。, input: {{raw_notes}}, output_key: points }, { id: extract_decisions, model: your-model-id, system: 你是决策提取器。只提取明确达成一致的结论输出 JSON 数组。没有则返回空数组。, input: {{raw_notes}}, output_key: decisions }, { id: extract_actions, model: your-model-id, system: 你是待办提取器。输出 JSON 数组每项含 task, owner, due。owner 缺失则填 null。, input: {{raw_notes}}, output_key: actions }, { id: render, model: your-model-id, system: 你是格式化器。读取模板用给定数据填充占位符只输出最终 Markdown。, input: {{meta}} {{points}} {{decisions}} {{actions}}, template: assets/minutes-template.md, output_key: final } ] }这份配置的关键点有三个。第一前四个节点并行执行因为它们都只依赖原始记录互不干扰这样比串行快很多。第二每个节点的 system prompt 都极短只干一件事这是 Prompt Chaining 稳定的根本。第三最后一个render节点只做填空不做任何提取所以格式不会跑偏。如果你用的是 Claude Code 或 Cline 这类工具配置方式略有不同但三件套Base URL、Key、Model ID是一样的。以 Claude Code 为例它的配置文件里需要填ANTHROPIC_BASE_URL和ANTHROPIC_API_KEYModel ID 填在模型选择处。Cline 的 MCP 配置则是把 Base URL 和 Key 写进 MCP server 的环境变量。不管哪种核心都是让所有节点走同一个入口。4. 验证请求从原始记录到结构化纪要配置写完必须实际跑一遍才知道链路通不通。这一节给你一个最小验证脚本用 Python 直接调 TaoToken 的接口把五个节点串起来。先装依赖pip install openai然后写验证脚本run_skill.pyimport os import json from openai import OpenAI client OpenAI( base_urlhttps://taotoken.net/api, api_keyos.environ[TAOTOKEN_API_KEY], ) MODEL your-model-id raw_notes 今天 2026-07-14 下午 3 点产品周会。 参会人张三产品经理、李四后端、王五前端。 张三我们下周要上线用户画像功能需要后端先完成数据聚合接口。 李四接口预计周三完成但字段定义还没定。 王五前端页面已经画好等接口文档。 张三那就周三前把接口文档发出来周四联调。 李四我来负责接口和文档。 王五我来负责联调。 def call(system, user): resp client.chat.completions.create( modelMODEL, messages[ {role: system, content: system}, {role: user, content: user}, ], temperature0.2, ) return resp.choices[0].message.content meta call( 你是会议信息提取器。只输出 JSON字段topic, date, attendees, note_taker。未提及填 null。, raw_notes, ) points call( 你是讨论要点提取器。按议题分组每组 3-5 条要点。只输出 JSON 数组。, raw_notes, ) decisions call( 你是决策提取器。只提取明确达成一致的结论输出 JSON 数组。没有则返回空数组。, raw_notes, ) actions call( 你是待办提取器。输出 JSON 数组每项含 task, owner, due。owner 缺失填 null。, raw_notes, ) with open(.qoder/skills/meeting-minutes/assets/minutes-template.md) as f: template f.read() final call( 你是格式化器。读取模板用给定数据填充占位符只输出最终 Markdown。, f模板\n{template}\n\n数据\nmeta{meta}\npoints{points}\ndecisions{decisions}\nactions{actions}, ) print(final)运行前先设置环境变量export TAOTOKEN_API_KEYsk-你的key python run_skill.py如果链路通了你会看到类似这样的输出# 会议纪要产品周会 ## 基本信息 - **时间**2026-07-14 - **参会人**张三产品经理、李四后端、王五前端 - **记录人** ## 讨论要点 ### 用户画像功能上线 - 下周计划上线用户画像功能 - 后端需先完成数据聚合接口 - 接口字段定义尚未确定 - 前端页面已完成等待接口文档 ## 决策 - 周三前发布接口文档周四进行前后端联调 ## 待办事项 - [ ] 完成数据聚合接口及接口文档 —— 李四2026-07-16 - [ ] 前后端联调 —— 王五2026-07-17 ## 下次会议如有 无看到这个结果说明 Prompt Chaining 的五个节点全部跑通了。你可以拿一段更长的真实会议记录再试一次重点观察两件事待办事项里是不是每条都有负责人讨论要点是不是按议题分了组。这两点是最容易出问题的地方。如果你想在对话界面里直接验证模型表现可以打开 https://taotoken.net/chat 把同样的原始记录粘进去对比一下单次调用和链路调用的差异。你会发现链路调用的输出明显更规整因为每个节点都被约束在很小的任务范围内。5. 常见报错排查401、local proxy failed 与格式错乱链路跑不通的时候报错信息往往很含糊。这一节把几个高频错误和对应解法列出来你对照着查。报错一401 Unauthorized。这是最常见的九成是 Key 的问题。先确认环境变量有没有真正生效在终端里执行echo $TAOTOKEN_API_KEY如果输出为空说明没设置成功。注意export只在当前终端会话有效换个窗口就没了建议写进~/.bashrc或~/.zshrc。如果 Key 确实存在但还是 401检查一下有没有多余的空格或换行——从网页复制时经常带上不可见字符。还有一种情况是 Key 被删了或者过期了去 https://taotoken.net/api-keys 重新生成一个。报错二local proxy failed 或 connection refused。这个错误通常出现在你本地配了某个转发工具的情况下。TaoToken 的 Base URL 是直连的不需要任何本地转发。如果你之前为了别的服务配过HTTP_PROXY或HTTPS_PROXY环境变量它们会干扰请求。执行unset HTTP_PROXY HTTPS_PROXY清掉再试。另外确认 Base URL 写的是https://taotoken.net/api不要自己加/v1之类的后缀也不要漏掉https。报错三reading choices 时 undefined。这个报错说明请求发出去了但返回结构里没有choices字段。常见原因是 Model ID 填错了——比如填了一个不存在的模型名服务端返回的是错误对象而不是正常的 completion 结构。去 https://taotoken.net/doc 核对一下模型列表把 Model ID 复制准确。还有一种可能是请求体格式不对比如messages写成了字符串而不是数组检查一下你的调用代码。报错四OAuth 相关错误。如果你用的是 Claude Code 这类客户端可能会遇到 OAuth 认证失败的提示。这是因为客户端默认走的是官方登录流程而你要用的是 API Key 方式。需要在配置里显式指定用 API Key 认证把ANTHROPIC_API_KEY设成你的 TaoToken Key同时把ANTHROPIC_BASE_URL设成https://taotoken.net/api。改完重启客户端。报错五输出格式错乱模板占位符没被替换。这不是网络问题是最后一个 render 节点的问题。检查两点一是模板文件路径对不对脚本里读的是.qoder/skills/meeting-minutes/assets/minutes-template.md如果你换了工具路径前缀要跟着改二是 render 节点的 system prompt 里有没有明确说「只输出最终 Markdown」如果模型在输出前后加了「好的以下是整理结果」之类的话占位符替换就会失败。把 temperature 调到 0.1 以下也有帮助。报错六Skill 不被触发。你说「整理会议纪要」但 Agent 没加载这个 Skill。先检查目录名和 SKILL.md 里的name字段是否完全一致差一个字符都不行。再检查 YAML 头部有没有语法错误比如冒号后面没空格、缩进用了 Tab。可以用在线的 YAML 校验工具过一遍。如果都没问题试着用更明确的说法比如「用 meeting-minutes skill 整理会议纪要」强制触发一次。排查的时候有个通用思路先确认单节点能通再确认链路能通。也就是说先用最简单的curl或一段十行的 Python 发一个请求确认 Key 和 Base URL 没问题再去跑完整的五节点链路。这样能把网络问题和逻辑问题分开省很多时间。6. 把 Skill 用起来从验证到日常链路跑通之后接下来就是把它变成日常能用的东西。这里给几个实操建议。第一把验证脚本改造成命令行工具。现在的run_skill.py里原始记录是写死的你可以改成从文件读取import sys with open(sys.argv[1]) as f: raw_notes f.read()这样每次整理会议纪要只要把记录存成meeting.txt执行python run_skill.py meeting.txt就行。第二中间结果落盘。Prompt Chaining 的一个好处是每一步的输出都能单独看。建议把meta、points、decisions、actions都写进一个 JSON 文件出问题时能快速定位是哪个节点提取错了。比如待办事项少了负责人你直接看actions的原始输出就知道是提取阶段的问题还是渲染阶段的问题。第三按需替换节点模型。提取类节点对模型要求不高可以用便宜快速的渲染节点要求格式稳定可以用指令跟随更好的。因为都走 TaoToken 的统一入口换模型只改配置里的 Model ID不用动代码。第四给 Skill 加版本。SKILL.md 和模板都会迭代建议在目录里加个CHANGELOG.md记录每次改了什么、为什么改。比如你发现某类会议总是漏掉「下次会议时间」就在 Step 2 里加一条提取规则然后记一笔。如果你打算把这个 Skill 用在团队里可以考虑把它接到 Coding Plan 上做长期自动化——比如每天定时扫描共享文档里的会议记录自动生成纪要并归档。具体怎么接https://taotoken.net/coding-plan 里有说明。最后说一个我自己的经验别一上来就追求完美的工作流。我最早做的版本只有三个节点提取、整理、输出跑了几次发现待办事项总是缺负责人才拆出独立的extract_actions节点。Skill 是迭代出来的不是设计出来的。你先让链路跑起来再根据实际输出一点点加约束比一开始就想清楚所有边界要快得多。现在你手上有一个能跑的 meeting-minutes Skill 了。下一步可以试着把同样的模式套到别的场景周报整理、需求评审记录、客户反馈归类思路都是一样的——拆节点、定输入输出、用统一 Key 串起来。第一个跑通了后面的就是复制粘贴改改的事。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑