
1. 项目概述从“技能”到“创造者”的范式转变最近在跟几个做AI应用开发的朋友聊天大家不约而同地提到了一个词skill-creator。这听起来像是一个工具或者框架的名字但深入聊下去才发现它背后代表的是一种全新的工作流和思维方式。简单来说它不再是让你去“使用”一个现成的AI技能而是让你成为那个“创造”技能的人。这有点像从“乐高积木的拼装者”变成了“乐高积木的设计师”甚至是你自己定义积木的形状和连接方式。这个转变的核心源于当前大语言模型比如Claude、GPT等能力边界的一次关键突破。过去我们依赖“提示词工程”Prompt Engineering通过精心设计的文本指令来引导模型完成特定任务。这很有效但天花板也很明显复杂的任务需要极其冗长且脆弱的提示词逻辑难以复用调试过程像在黑暗中摸索。而skill-creator 模式本质上是将这种一次性的、文本化的“提示”升级为可编程、可调试、可复用的“技能模块”。它把大模型当作一个功能强大的“计算内核”而我们通过一套更工程化的方法可能结合代码、配置、工作流定义来封装和调用它的能力。对于开发者、产品经理甚至是业务分析师来说这意味着什么意味着你可以将那些重复、复杂、需要特定领域知识的AI交互过程沉淀为标准化的“技能”。比如一个自动分析财报并生成摘要的skill一个根据用户需求生成SQL查询语句的skill或者一个按照公司风格检查代码规范的skill。一旦创建这个skill就可以像调用一个函数库一样被集成到各种应用和自动化流程中。这不仅仅是效率的提升更是将AI能力产品化、工程化的关键一步。接下来我将结合当前的实践深度拆解skill-creator背后的核心逻辑、实现路径以及那些只有踩过坑才知道的细节。2. 核心理念与架构拆解为什么是“Skill”而非“Prompt”要理解skill-creator首先得厘清“Skill”与传统的“Prompt”到底有何不同。这不仅仅是命名上的差异而是设计哲学上的分水岭。2.1 定义边界Prompt、Skill与Agent很多人容易把这几个概念混淆我们先来划清界限。提示词Prompt 这是一段文本指令是你与模型单次对话的“开场白”和“约束条件”。它的生命周期很短通常只服务于一次交互。它的质量高度依赖于撰写者的经验和临场发挥难以进行系统性测试和版本管理。技能Skill 你可以把它理解为一个封装好的、功能特定的AI微服务。一个完整的Skill通常包含几个核心部分系统指令System Prompt 定义该Skill的角色、能力范围和行为规范这是技能的“宪法”。处理逻辑可选 可能包含前置的数据处理、后置的结果解析或者简单的控制流比如判断模型输出是否合格不合格则重试。这部分有时用自然语言描述在Prompt中有时则需要借助少量代码或模板。输入/输出接口I/O Schema 明确定义这个Skill接收什么格式的参数返回什么格式的数据。这使得Skill可以被程序化调用。智能体Agent Agent是更高一层的概念它是一个可以自主决策、调用多个工具Tools或技能Skills来完成复杂目标的系统。Skill是Agent可用的“工具集”中的重要组成部分。一个Agent可能根据任务类型决定调用“数据分析Skill”还是“文案撰写Skill”。所以Skill-Creator的目标就是让创建这种标准化、可复用的“AI微服务”变得像搭积木一样简单、规范。2.2 核心架构模式解析目前业界并没有一个统一的“skill-creator”标准但几种主流的架构模式已经浮现。模式一提示词模板化与参数注入这是最轻量、最易上手的方式。你将核心的Prompt写成一个模板其中的变量用特定占位符如{{参数名}}表示。Skill-Creator工具帮你管理这些模板并在调用时动态注入用户提供的参数。优势 简单直观无需编码适合快速将现有Prompt工程化。劣势 逻辑能力弱无法处理复杂判断或数据转换。实战场景 生成固定格式的邮件、创建标准化的产品描述、简单的文本润色。模式二代码驱动与函数封装这种模式下Skill本身就是一段代码可能是Python函数、JavaScript模块等。这段代码内部封装了与AI模型交互的细节包括构造Prompt、调用API、解析响应、错误处理等。Skill-Creator框架负责提供运行时环境、模型连接和Skill的生命周期管理。优势 能力强大且灵活可以利用编程语言的全部能力循环、条件、调用其他API、数据处理库等易于单元测试和调试。劣势 需要一定的开发能力上手门槛较高。实战场景 从非结构化文本中提取实体并存入数据库、自动执行多步骤分析任务、实现复杂的对话逻辑。模式三可视化工作流编排这是面向非开发者的高级形态。通过拖拽节点每个节点可以是一个基础Skill、逻辑判断、数据操作模块并连接成流程图来定义一个复杂的Skill。Skill-Creator平台负责将这张图编译成可执行的流程。优势 降低了复杂技能创建的门槛逻辑可视化易于理解和沟通。劣势 灵活性可能不如直接编码性能可能受限于平台。实战场景 客户服务自动化流程、内容审核与分发流水线、跨系统数据同步与AI处理。注意 在实际项目中这三种模式往往是混合使用的。一个复杂的Skill可能内部采用代码驱动但对上游暴露一个简单的参数化模板接口一个可视化编排的工作流中某个节点可能就是一个封装好的代码型Skill。2.3 关键设计考量是什么决定了一个Skill的优劣创建一个能用的Skill不难但创建一个可靠、高效、易维护的Skill需要关注以下几个设计要点单一职责原则 一个Skill只做好一件事。不要试图创建一个“既能写代码又能做PPT还能分析数据”的万能Skill。职责单一意味着Prompt更聚焦、逻辑更简单、调试更容易、复用性更强。接口设计先行 在动手写Prompt或代码之前先明确它的输入和输出。输入参数应该尽可能明确、有约束例如article_text: strsummary_length: Literal[‘short‘ ‘medium‘ ‘long‘]。清晰的接口是Skill之间协作的基础。可观测性与调试支持 Skill不能是一个黑盒。优秀的Skill-Creator工具会提供日志记录功能让你能看到模型接收到的完整Prompt、生成的原始响应以及内部逻辑的执行路径。这是排查“模型突然发疯”问题的唯一途径。版本管理与迭代 和软件一样Skill也需要迭代优化。你需要能管理不同版本的Skillv1.0 v1.1并能方便地进行A/B测试比较不同Prompt或逻辑调整带来的效果差异。3. 从零到一手把手构建你的第一个生产级Skill理论说得再多不如动手实践。我们以构建一个“技术博客大纲生成器”为例演示如何用代码驱动的模式创建一个健壮的Skill。我们将使用Python和OpenAI API其理念与Claude API相通进行演示但重点在于方法论这些步骤可以平移到任何支持类似功能的Skill-Creator框架或平台。3.1 环境准备与基础框架搭建首先我们摒弃那种在Jupyter Notebook里写一次性脚本的做法。我们要像开发一个微服务一样来创建这个Skill。# 1. 创建项目目录结构 mkdir blog-outline-skill cd blog-outline-skill mkdir skill tests docs touch skill/__init__.py skill/blog_outline.py touch requirements.txt main.py # 2. 定义依赖项 requirements.txt openai1.0.0 pydantic2.0.0 # 用于强类型输入输出校验 python-dotenv1.0.0 # 管理环境变量 loguru0.7.0 # 更友好的日志记录# 3. 技能核心类定义 skill/blog_outline.py import os from typing import List Optional Literal from pydantic import BaseModel Field from openai import OpenAI from loguru import logger import dotenv # 加载环境变量API密钥等 dotenv.load_dotenv() # --- 第一步定义清晰的输入输出模型 --- class BlogOutlineInput(BaseModel): 生成博客大纲的输入参数 topic: str Field(… description“文章的核心主题例如‘如何理解Skill-Creator’) target_audience: str Field(default“初级到中级的开发者” description“目标读者群体) depth: Literal[‘overview‘ ‘detailed‘] Field(default‘detailed‘ description“大纲详细程度) key_points: Optional[List[str]] Field(defaultNone description“必须包含的关键点列表) class BlogOutlineOutput(BaseModel): 生成博客大纲的输出结果 title: str Field(… description“生成的博客标题) outline: List[str] Field(… description“大纲条目列表通常为H2/H3标题) suggested_keywords: List[str] Field(… description“建议的关键词列表) reasoning: Optional[str] Field(defaultNone description“模型生成此大纲的简要理由用于调试) # --- 第二步技能主类 --- class BlogOutlineSkill: def __init__(self model: str “gpt-4-turbo-preview” api_key: Optional[str] None): self.client OpenAI(api_keyapi_key or os.getenv(“OPENAI_API_KEY”)) self.model model # 初始化计数器、缓存等此处省略 logger.info(f“BlogOutlineSkill initialized with model: {self.model}) def _build_system_prompt(self) - str: 构建系统指令。这里是技能‘灵魂’所在。 return “““你是一位资深的科技博客作者擅长撰写结构清晰、内容深入的技术教程类文章。 你的任务是根据用户提供的主题和需求生成一份高质量的博客文章大纲。 要求 1. 大纲必须逻辑连贯层层递进从概述到细节。 2. 使用Markdown的二级##和三级###标题格式来呈现层级。 3. 确保大纲覆盖主题的核心方面并能引导读者逐步深入理解。 4. 如果用户提供了关键点务必将其合理融入大纲中。 5. 最后为这篇博客生成一个吸引人的标题和3-5个SEO关键词。 ”“” def _build_user_prompt(self input_data: BlogOutlineInput) - str: 根据输入参数构建用户指令。 prompt_lines [ f“请为以下主题生成一篇博客文章的大纲”, f“主题{input_data.topic}”, f“目标读者{input_data.target_audience}”, f“详细程度{input_data.depth}”, ] if input_data.key_points: prompt_lines.append(f“必须包含的关键点{‘ ‘.join(input_data.key_points)}”) prompt_lines.append(“请严格按照要求返回标题、大纲Markdown格式、关键词和简要理由。”) return “\n”.join(prompt_lines) def _parse_model_response(self response_content: str) - BlogOutlineOutput: 解析模型的原始响应。 这是最易出错的部分绝不能假设模型总会返回完美格式。 # 这里是一个简单的解析示例。实践中你可能需要更复杂的解析甚至让模型以JSON格式返回。 lines response_content.strip().split(‘\n’) title “” outline [] keywords [] reasoning “” current_section None for line in lines: if line.startswith(‘标题‘) or line.startswith(‘Title‘): title line.split(‘‘ 1)[1].strip() elif line.startswith(‘关键词‘): kw_str line.split(‘‘ 1)[1].strip() keywords [k.strip() for k in kw_str.split(‘’)] elif line.startswith(‘理由‘): reasoning line.split(‘‘ 1)[1].strip() elif line.startswith(‘##’) or line.startswith(‘###’): outline.append(line) # 可以添加更多解析逻辑... # 兜底逻辑如果解析失败尝试提取第一行作为标题其余作为大纲 if not title and lines: title lines[0].replace(‘#’ ‘’).strip() if not outline: outline [l for l in lines if l and not l.startswith((‘标题’ ‘关键词’ ‘理由’))] return BlogOutlineOutput( titletitle or f“关于{input_data.topic}的探讨” outlineoutline or [“## 引言” “## 主体” “## 结论”], suggested_keywordskeywords or [input_data.topic “教程”], reasoningreasoning ) def execute(self input_data: BlogOutlineInput) - BlogOutlineOutput: 执行技能的主方法。 logger.info(f“Executing skill with input: {input_data.dict()}”) # 1. 构建消息 messages [ {“role”: “system” “content”: self._build_system_prompt()}, {“role”: “user” “content”: self._build_user_prompt(input_data)} ] try: # 2. 调用大模型API response self.client.chat.completions.create( modelself.model, messagesmessages, temperature0.7 # 创造性任务可以稍高结构化任务建议0.3-0.5 max_tokens1500 ) raw_content response.choices[0].message.content logger.debug(f“Raw model response: {raw_content}”) # 3. 解析响应 result self._parse_model_response(raw_content) logger.success(f“Skill executed successfully. Generated title: {result.title}”) return result except Exception as e: logger.error(f“Skill execution failed: {e}”) # 优雅降级返回一个预设的兜底输出而不是让整个系统崩溃 return BlogOutlineOutput( titlef“【生成失败】{input_data.topic}”, outline[“## 大纲生成暂时不可用” “## 请稍后重试或联系管理员”], suggested_keywords[“error”], reasoningf“技能执行过程中发生错误{str(e)}” )这个基础框架已经体现了一个可维护Skill的核心要素清晰的输入输出定义Pydantic模型、模块化的Prompt构建、专门的响应解析器、完整的错误处理与日志记录。3.2 系统指令System Prompt的精细化雕刻上面代码中的_build_system_prompt方法只是一个起点。一个高效的System Prompt需要精心设计。以下是一些进阶技巧角色扮演与人格设定 不要只说“你是一个助手”。要具体。“你是一位有10年全栈开发经验的资深博主擅长用通俗类比解释复杂概念文风直接、不废话。”输出格式的强制约束 在Prompt中明确指定格式甚至给出示例Few-Shot Learning。例如“请严格按照以下JSON格式输出{‘title‘: str ‘outline‘: [str] ‘keywords‘: [str]}”。这能极大提高后续解析的可靠性。思维链Chain-of-Thought引导 对于需要推理的任务要求模型“逐步思考”。例如“在给出最终答案前请先分析用户需求的核心矛盾再列举可能的解决方案最后评估并选择最优解。”负面约束 明确告诉模型“不要”做什么。例如“不要使用‘首先、其次、然后’这类流水账连接词。”“不要生成任何营销口号或夸张的形容词。”一个优化后的System Prompt示例你是一位专注于人工智能与软件开发领域的资深技术布道师Developer Advocate拥有超过8年的实战和写作经验。 你的写作风格以“说人话、做实事”著称擅长将晦涩的技术概念转化为生动的比喻和可实操的步骤文章结构像工程师的思维一样清晰、逻辑严密。 【你的核心任务】 根据用户提供的主题和需求生成一篇高质量、可直接作为写作蓝图的技术博客大纲。 【你必须遵守的规则】 1. 结构规则大纲必须采用“总-分-总”的递进结构。以“项目概述/问题引入”开头以“总结与展望”结尾中间主体部分按逻辑分块每块下再细分。 2. 格式规则使用Markdown标题语法。主章节用##如## 1. 问题背景与挑战子章节用###如### 1.1 传统方案的瓶颈。禁止使用一级标题#。 3. 内容规则每个大纲条目都必须是完整的、动宾结构的句子明确指示该章节要“写什么”。例如用“**拆解XXX的核心组件**”而非简单的“核心组件”。 4. 风格规则杜绝任何“随着技术的发展”、“综上所述”、“通过本文”等套路化表达。思考如何像朋友分享经验一样起标题和小节名。 5. 输出规则你必须输出一个JSON对象且只输出这个JSON对象不要有任何额外解释。格式如下 { “title”: “一个吸引目标读者的、带有一点‘干货感’的标题” “outline”: [“## 1. ...” “### 1.1 ...” ...] “keywords”: [“关键词1” “关键词2” “关键词3”] “tone_and_style”: “用一两句话描述这篇文章建议采用的语气和风格例如‘直接严谨的工程师口吻穿插生活化类比’” } 现在开始思考用户的需求并生成大纲。3.3 输入验证、错误处理与降级策略生产级Skill必须健壮。我们不能假设用户输入总是合理的也不能假设模型总是可靠的。输入验证 Pydantic模型已经帮我们做了基础的类型验证。但我们还可以添加自定义验证器。例如检查topic字段是否过短或包含不适当词汇。from pydantic import validator class BlogOutlineInput(BaseModel): topic: str Field(… min_length5 max_length200) validator(‘topic‘) def topic_must_be_valid(cls v): forbidden_words [‘暴力‘ ‘色情‘] # 示例 for word in forbidden_words: if word in v: raise ValueError(f“主题包含不当词汇‘{word}’”) return v模型调用容错 网络可能超时API可能限流。我们需要重试机制。from tenacity import retry stop_after_attempt wait_exponential class BlogOutlineSkill: retry(stopstop_after_attempt(3) waitwait_exponential(multiplier1 min4 max10)) def _call_model_api(self messages): # 将API调用封装在这个函数中 return self.client.chat.completions.create(…)响应解析的鲁棒性 如前所述_parse_model_response要有兜底逻辑。更好的做法是在System Prompt中强制要求JSON输出然后用json.loads()解析并捕获JSONDecodeError。优雅降级 当所有尝试都失败时返回一个预设的、对用户友好的默认输出而不是抛出异常让上游服务崩溃。这在上述execute方法的except块中已经体现。3.4 技能测试与性能评估创建Skill后如何确保它的质量我们需要测试。单元测试 测试解析逻辑、输入验证等代码部分。# tests/test_skill.py def test_parse_response(): skill BlogOutlineSkill() mock_response “”“标题Skill-Creator深度指南\n## 1. 概述\n### 1.1 是什么\n关键词AI 工程化 自动化\n理由用户需要一份详细指南。”“” output skill._parse_model_response(mock_response) assert output.title “Skill-Creator深度指南” assert “## 1. 概述” in output.outline assert “AI” in output.suggested_keywords集成测试/端到端测试 用一组代表性的输入调用完整的execute方法检查输出是否符合预期。这需要消耗API额度可以标记为慢测试。pytest.mark.slow def test_end_to_end(): skill BlogOutlineSkill(model“gpt-3.5-turbo”) # 测试时用小模型省钱 input_data BlogOutlineInput(topic“Python虚拟环境管理”) output skill.execute(input_data) assert output.title assert len(output.outline) 3 # 可以断言输出结构但不要断言具体文字内容因为模型输出具有随机性。评估指标 对于大纲生成器我们可以定义一些自动化评估指标需人工标注部分测试集相关性 生成的大纲是否紧扣主题可用嵌入向量余弦相似度粗略评估结构完整性 是否包含引言、主体、结论等必要部分格式合规率 输出是否符合指定的Markdown标题格式人工评分 定期抽样请专家从“实用性”、“创意性”、“逻辑性”维度打分。4. 进阶实战构建技能工作流与Agent集成单个Skill的能力是有限的。真正的威力在于将多个Skill组合起来形成自动化工作流或者将其嵌入到一个自主Agent中。4.1 编排多个Skill从大纲到初稿假设我们除了“大纲生成器”BlogOutlineSkill还有一个“章节扩写器”SectionWriterSkill和一个“文章润色器”PolishSkill。我们可以创建一个简单的顺序工作流。# skill/workflow/blog_draft_workflow.py class BlogDraftWorkflow: def __init__(self): self.outline_skill BlogOutlineSkill() self.writer_skill SectionWriterSkill() # 假设已实现 self.polish_skill PolishSkill() # 假设已实现 def run(self topic: str) - str: logger.info(f“Starting workflow for topic: {topic}”) # 步骤1生成大纲 outline_input BlogOutlineInput(topictopic depth“detailed”) outline_result self.outline_skill.execute(outline_input) logger.info(f“Outline generated: {outline_result.title}”) full_draft f“# {outline_result.title}\n\n” # 步骤2遍历大纲扩写每个章节 for section in outline_result.outline: if section.startswith(‘##’): # 只扩写二级标题 section_content self.writer_skill.execute( SectionWriterInput(topictopic section_titlesection) ) full_draft f“{section}\n{section_content}\n\n” # 步骤3整体润色 polished_draft self.polish_skill.execute(PolishInput(textfull_draft)) logger.success(“Workflow completed successfully.”) return polished_draft这个工作流虽然简单但已经实现了从主题到完整草稿的自动化。在实际中你可能需要更复杂的逻辑比如判断某个章节是否需要额外研究调用搜索Skill或者根据扩写质量决定是否重试。4.2 将Skill封装为Agent的工具Tool在LangChain、AutoGen等Agent框架中Skill可以通过“工具”的形式被Agent调用。这需要你的Skill暴露一个符合框架要求的接口。例如为LangChain定义一个工具from langchain.tools import BaseTool from pydantic import BaseModel Field class BlogOutlineInputSchema(BaseModel): topic: str Field(description“博客文章的主题”) audience: str Field(default“developers” description“目标读者”) class BlogOutlineLangchainTool(BaseTool): name “generate_blog_outline” description “根据给定主题和目标读者生成一篇技术博客的详细大纲。” args_schema BlogOutlineInputSchema # LangChain会利用这个schema让LLM知道如何调用 def _run(self topic: str audience: str “developers”) - str: “”“同步执行的方法。”“” skill BlogOutlineSkill() input_data BlogOutlineInput(topictopic target_audienceaudience) result skill.execute(input_data) # 将输出格式化为Agent容易理解的字符串 return f“标题{result.title}\n大纲\n” “\n”.join(result.outline) async def _arun(self topic: str audience: str “developers”) - str: “”“异步执行的方法。”“” # 实现异步调用例如使用httpx raise NotImplementedError(“此工具暂不支持异步调用。”)现在一个规划型Agent在决定“需要为一款新产品写篇技术博客”时就可以自主调用这个generate_blog_outline工具来获取大纲然后再调用其他工具进行后续步骤。4.3 技能的管理、发现与共享当团队内创建了数十个Skill后管理就成了问题。一个理想的Skill-Creator生态应该包含技能仓库 一个中心化的存储库像GitHub一样可以存放、搜索、版本化管理Skill代码和配置。技能描述文件 每个Skill配有一个skill.yaml或skill.json文件描述其名称、功能、输入输出格式、作者、版本号等元数据。这便于自动化发现和集成。技能沙箱/测试台 提供一个无需编码的界面让使用者可以输入参数实时测试Skill的效果降低试用门槛。使用度监控与反馈 记录每个Skill的被调用次数、成功率、平均延迟。收集用户的评分或反馈用于持续优化。5. 避坑指南与最佳实践实录在这一年多的Skill开发和落地过程中我踩过不少坑也总结出一些让Skill从“玩具”变为“生产级工具”的关键点。5.1 提示词工程中的常见陷阱与对策幻觉Hallucination与事实性错误问题 模型可能会自信地生成错误信息或编造不存在的细节。对策提供知识源 在System Prompt中强调“如果你不确定请明确说明‘根据我所知的信息无法确认这一点’”或者构建RAG检索增强生成Skill让模型基于你提供的文档片段来回答。后置验证 对于关键事实如日期、数据、引用可以设计一个独立的“事实核查”Skill进行二次校验。温度Temperature参数 对于需要严谨输出的任务将temperature设为0.1或0.2降低随机性。指令遵循失败问题 模型忽略了你指定的输出格式或规则。对策结构化输出要求 如前所述明确要求JSON、XML等格式并在代码中严格解析。使用OpenAI的response_format参数如果模型支持是更可靠的方法。分解任务 不要在一个Prompt里塞入太多指令。可以拆分成两个Skill第一个Skill生成内容第二个Skill专门负责格式检查和转换。Few-Shot示例 在Prompt中给出1-2个完美的输入输出示例这是引导模型行为最有效的方式之一。上下文长度与信息丢失问题 在处理长文档或复杂对话历史时关键信息可能被挤到上下文窗口之外。对策总结与提炼 设计一个“总结器”Skill将冗长的历史对话或文档提炼成关键要点再送入主Skill。分层处理 对于长文档先让模型生成一个目录或摘要然后针对特定章节进行深入处理。5.2 工程化实践中的经验之谈成本控制 AI API调用是主要成本。务必设置预算和告警 在云服务商处设置每月预算和用量告警。缓存结果 对于输入相同、输出必然相同的Skill如文本翻译、固定格式转换引入缓存机制如Redis可以大幅节省成本。选择合适模型 不是所有任务都需要GPT-4。对于格式转换、简单分类等任务GPT-3.5-Turbo甚至更小的专用模型可能更划算、更快。延迟与超时问题 模型响应慢导致用户体验卡顿或服务超时。对策设置合理超时 在客户端和服务端都设置超时时间如30秒并准备好超时后的友好提示或降级内容。异步处理 对于耗时长超过10秒的任务采用“提交任务 - 立即返回任务ID - 后台处理 - 通过轮询或WebSocket通知结果”的异步模式。流式输出 对于文本生成类Skill如果平台支持使用流式响应Streaming让用户看到生成过程感知上会更快。技能的版本化与灰度发布像管理代码一样管理你的Prompt和Skill配置。使用Git进行版本控制。当对一个核心Skill的Prompt进行重大修改时不要直接全量替换。可以采用A/B测试将新旧两个版本同时部署将少量流量导入新版本对比效果如生成质量、用户满意度后再决定是否全量上线。5.3 从“能用”到“好用”的优化方向可配置性 将Prompt中的一些魔法数字或风格选项提取为Skill的参数。比如让用户可以指定“文章风格严谨 / 活泼 / 幽默”、“字数要求1000字 / 2000字”。可解释性 除了返回结果Skill还可以返回“推理过程”或“置信度”。这有助于用户理解模型的思考路径增加信任感也便于调试。人机协同 设计Skill时不要追求全自动。思考在哪些环节需要人工介入审核、微调。例如大纲生成器生成后允许用户手动调整条目顺序或增删内容再将调整后的大纲送入扩写器。Skill-Creator的旅程始于一个简单的Prompt但通向的是一套系统化的AI能力工程体系。它要求我们不仅是一个会写提示词的人更要成为一个懂得设计接口、编写可靠代码、构建可维护系统的工程师。这个过程充满挑战但当你看到自己创建的Skill像乐高积木一样被组合起来自动化地解决一个又一个实际问题时那种成就感是无与伦比的。