Claude AI技能开发实战:从工具集成到复杂工作流构建
在AI智能体(Agent)技术领域,工具调用(Tool Calling)是实现AI与真实世界交互的核心机制。其原理是通过标准化的接口描述(如JSON Schema),让AI模型能够理解并安全执行外部API操作。这项技术的价值在于将大语言模型的推理规划能力与专业系统的执行能力相结合,从而构建出能够处理实际任务的智能助手。典型的应用场景包括自动化办公流程、智能客服、数据查询与分析等。本文以Claude
1. 项目概述:一个为Claude AI打造的技能库
如果你最近在深度使用Claude AI,尤其是Claude Desktop或者API,可能会发现一个痛点:虽然Claude本身能力很强,但当你需要它去操作一个具体的第三方应用,比如读取Notion数据库、发送Slack消息或者控制GitHub仓库时,往往会卡住。Claude知道该做什么,但它缺少一双“手”去实际执行这些操作。这正是“awesome-claude-skills”这个项目要解决的核心问题。它不是一个简单的工具列表,而是一个精心策划的、面向开发者和高阶用户的 Claude AI技能(Skills)与工具(Tools)集成仓库 。
简单来说,你可以把这个项目想象成一个为Claude AI准备的“应用商店”或“插件中心”的蓝图和实现集合。它汇集了社区中各种让Claude能够与真实世界API进行交互的解决方案。这些“技能”本质上是一套标准化的接口描述和连接器,告诉Claude某个外部服务(如Google Calendar、Linear、Figma)有哪些功能可以调用,以及如何安全地调用它们。对于开发者而言,这个仓库是构建AI智能体(Agent)的宝贵资源库;对于普通用户,它则指明了如何将自己的Claude变成一个真正能“干事”的自动化助手的方向。
这个项目由ComposioHQ维护,Composio本身就是一个专注于为AI智能体提供统一工具集成平台的项目。因此,“awesome-claude-skills”带有强烈的实践导向和工程化色彩,里面的内容不是理论探讨,而是可以直接参考、复现甚至直接使用的代码、配置和架构思路。无论你是想快速给Claude增加一个发邮件的技能,还是想设计一个能协调Jira、GitHub和Slack的复杂AI工作流,这里都能找到灵感和脚手架。
2. 核心架构与设计哲学解析
2.1 什么是“AI技能”与“工具”?
在深入这个仓库之前,我们需要统一一下术语。在AI智能体领域,尤其是遵循类似OpenAI的Function Calling或Anthropic的Tool Use范式的系统中,“工具”(Tool)是一个核心概念。一个“工具”定义了AI可以调用的一个具体功能,它通常包括:
- 名称和描述 :告诉AI这个工具是干什么的(例如,
send_slack_message)。 - 输入参数模式(Schema) :以JSON Schema的形式严格定义AI需要提供哪些参数(例如,
channel(字符串),text(字符串))。 - 执行端点 :当AI决定调用这个工具时,实际执行这段逻辑的代码或API地址。
而“技能”(Skill)通常是一个更高层次的抽象,它可能封装了一个或多个相关的“工具”,并提供了更友好的配置、认证管理和错误处理。例如,一个“GitHub技能”可能包含了 create_issue , list_pull_requests , comment_on_issue 等多个工具。
“awesome-claude-skills”项目的设计哲学 就建立在这样的概念之上。它不满足于仅仅列出一些API包装器,而是推崇一种 声明式、标准化、可发现 的技能构建方式。这意味着,一个优秀的Claude技能应该:
- 自描述 :其能力(工具列表)和所需参数必须能以一种机器可读(如OpenAPI Spec, JSON Schema)且AI可理解的方式暴露出来。
- 安全隔离 :技能的执行通常应该在一个与AI主逻辑隔离的“运行时”中,避免AI直接操作敏感凭证或系统资源。
- 易于集成 :应该提供清晰的方式(如SDK、Docker镜像、配置文件)被集成到Claude的调用链路中。
2.2 项目内容模块拆解
浏览该仓库,你会发现内容主要分为几大模块,理解这个结构有助于你高效地找到所需资源:
2.2.1 技能/Tools 实现集锦 这是仓库的核心。里面会分类列出针对不同平台和服务的技能实现。
- 通信协作类 :Slack, Discord, Microsoft Teams, Email (SMTP/Resend) 的技能。例如,如何让Claude监控特定频道并回复消息。
- 开发与运维类 :GitHub, GitLab, Linear, Jira, Docker, Kubernetes的技能。这是自动化开发工作流的关键,比如“根据自然语言描述创建GitHub Issue并关联到Linear任务”。
- 云服务与数据类 :AWS S3, Google Cloud Storage, Airtable, Notion, PostgreSQL的技能。让Claude可以读写数据库、管理文件。
- 办公与效率类 :Google Calendar, Google Sheets, Figma, Trello的技能。实现会议安排、数据更新、设计稿同步等。
- 其他工具类 :搜索引擎、代码解释器、数学计算工具等,增强Claude的基础能力。
每个技能条目通常会包含:项目名称、简短描述、技术栈(如Python、Node.js)、集成方式(如通过Composio、LangChain、自定义API)以及直达链接。
2.2.2 框架与中间件 这部分介绍了如何将上述技能“安装”到Claude上的各种框架和平台。
- 智能体框架 :如何利用LangChain, LlamaIndex, AutoGen等流行框架来组织和编排多个技能,构建复杂的多步骤AI工作流。
- 工具管理平台 :重点介绍像 Composio 这样的平台如何作为“工具网关”,统一管理成百上千个工具的认证、Schema提供和实际调用,让Claude通过一个统一的接口访问所有技能。
- 自定义服务器模板 :提供一些简单的Express.js或FastAPI服务器示例,展示如何从头搭建一个接收Claude Tool Use请求并路由到具体技能的后端。
2.2.3 示例应用与工作流 理论结合实践。这里会展示一些完整的用例。
- “AI项目经理” :Claude读取邮件或Slack中的需求,自动在Jira创建任务,在GitHub创建分支,并在任务完成后发送通知。
- “智能数据分析助手” :用户用自然语言提问,Claude调用工具查询数据库(如PostgreSQL),对结果进行简单处理,并生成图表或更新到Google Sheets。
- “自动化客服工单处理” :Claude监控客服渠道,根据内容自动分类、提取关键信息并填入CRM或工单系统(如Zendesk)。
2.2.4 开发指南与最佳实践 这部分是干货中的干货,包含了社区总结的经验。
- 如何设计一个友好的Tool Schema :描述怎么写才能让Claude更好地理解和使用你的工具。例如,参数描述要具体,枚举值要清晰。
- 认证与安全 :如何处理OAuth、API Keys等敏感信息?是硬编码、环境变量,还是通过动态的凭证管理服务?
- 错误处理与重试 :当工具调用失败时,应该给Claude返回什么样的结构化信息,以便它能决定重试或采取备用方案?
- 技能的组合与编排 :如何设计技能间的数据传递?如何处理异步操作?
2.3 技术栈选型背后的考量
仓库里出现的技能实现技术栈多样,但以Python和Node.js为主,这背后有清晰的逻辑:
- Python :在AI和数据处理领域生态无敌。大量的服务官方SDK(如boto3 for AWS, google-api-python-client)、数据科学库(pandas, numpy)以及AI框架(LangChain)都是Python首选。如果你技能涉及复杂的数据处理或与Python系的MLOps工具链集成,选Python是自然的选择。
- Node.js :在Web API、实时应用和云函数场景下性能出色、轻量快速。对于大量与SaaS平台(Slack, GitHub, Notion)的REST API交互,这些平台通常提供优秀的Node.js SDK,且Node.js的异步模型非常适合处理高并发的工具调用。对于构建轻量级、快速响应的技能服务,Node.js往往是更优解。
框架选择上 ,LangChain因其庞大的工具集成生态和成熟的Agent抽象,成为复杂工作流的热门选择。而像Composio这样的专门化平台,则解决了“重复造轮子”的问题——你不需要为每个工具编写认证逻辑、Schema定义和错误处理,只需关注业务逻辑。
注意 :不要盲目追求技术栈的“新”或“全”。选择与你团队现有技术栈匹配、并且有活跃社区和良好文档支持的技术。一个用Python Flask写的、稳定可靠的简单技能,远胜过一个用最新Rust框架写但难以维护的复杂技能。
3. 从零构建一个Claude技能的完整实操
让我们以构建一个“发送企业微信消息”的技能为例,走一遍完整的流程。假设我们使用Node.js和简单的Express服务器,因为企业微信的API调用相对直接。
3.1 环境准备与项目初始化
首先,创建一个新的项目目录并初始化。
mkdir wecom-claude-skill && cd wecom-claude-skill
npm init -y
npm install express axios dotenv
express:用于创建接收Claude请求的Web服务器。axios:用于向企业微信API发送HTTP请求。dotenv:用于管理环境变量,安全存储企业微信的凭证。
创建必要的文件:
touch index.js .env .env.example README.md
在 .env 文件中配置你的企业微信凭证(这些需要从企业微信管理后台获取):
WECOM_CORP_ID=your_corp_id
WECOM_AGENT_ID=your_agent_id
WECOM_AGENT_SECRET=your_agent_secret
WECOM_TO_USER=@all # 或指定成员ID,如 “ZhangSan|LiSi”
在 .env.example 中列出这些变量名(不含真实值),方便他人了解配置项。
3.2 定义Tool Schema
这是最关键的一步,决定了Claude如何理解你的技能。在 index.js 中,我们首先定义一个工具列表。这个列表将被暴露给Claude。
// 工具定义
const tools = [
{
name: "send_wecom_message",
description: "通过企业微信应用向指定用户或部门发送文本消息。可用于发送通知、警报或日常汇报。",
input_schema: {
type: "object",
properties: {
content: {
type: "string",
description: "要发送的文本消息内容。支持换行和部分Markdown语法(如链接)。"
},
to_user: {
type: "string",
description: "接收消息的用户ID列表,多个用‘|’分隔。默认使用环境变量中的配置。特殊值‘@all’表示向该应用可见范围内的所有用户发送。",
default: process.env.WECOM_TO_USER || "@all"
}
},
required: ["content"]
}
}
];
设计要点解析 :
-
name:使用蛇形命名(snake_case),清晰表达动作和对象。 -
description:详细描述工具用途和典型场景,帮助Claude在众多工具中做出正确选择。 -
input_schema:严格遵循JSON Schema格式。required字段指明哪些参数是Claude 必须 提供的。这里content是必填,to_user给了默认值,Claude可以不提供。 - 参数描述 :对每个参数的描述尽可能具体,比如
to_user的格式说明,这能极大减少Claude调用出错的概率。
3.3 实现工具执行逻辑
接下来,实现 send_wecom_message 工具背后的真实逻辑。这需要两步:首先获取企业微信访问令牌,然后发送消息。
const axios = require('axios');
const express = require('express');
require('dotenv').config();
const app = express();
app.use(express.json());
// 获取企业微信Access Token的函数(带缓存)
let accessTokenCache = { token: '', expireTime: 0 };
async function getWeComAccessToken() {
const now = Date.now();
if (accessTokenCache.token && now < accessTokenCache.expireTime) {
return accessTokenCache.token;
}
const { WECOM_CORP_ID, WECOM_AGENT_SECRET } = process.env;
const url = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${WECOM_CORP_ID}&corpsecret=${WECOM_AGENT_SECRET}`;
try {
const response = await axios.get(url);
const { access_token, expires_in } = response.data;
if (access_token) {
// 提前7200秒(2小时)过期,留出缓冲时间
accessTokenCache = {
token: access_token,
expireTime: now + (expires_in - 7200) * 1000
};
return access_token;
} else {
throw new Error(`Failed to get token: ${JSON.stringify(response.data)}`);
}
} catch (error) {
console.error('Error fetching WeCom access token:', error.message);
throw error;
}
}
// 执行发送消息的工具函数
async function executeSendWeComMessage(args) {
const { content, to_user } = args;
const { WECOM_AGENT_ID } = process.env;
const accessToken = await getWeComAccessToken();
const sendUrl = `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${accessToken}`;
const payload = {
touser: to_user,
msgtype: "text",
agentid: parseInt(WECOM_AGENT_ID),
text: {
content: content
},
safe: 0 // 非保密消息
};
try {
const response = await axios.post(sendUrl, payload);
const { errcode, errmsg } = response.data;
if (errcode === 0) {
return { success: true, message: `消息发送成功。消息ID: ${response.data.msgid}` };
} else {
return { success: false, error: `企业微信API错误: [${errcode}] ${errmsg}` };
}
} catch (error) {
console.error('Error sending WeCom message:', error.message);
return { success: false, error: `网络或请求错误: ${error.message}` };
}
}
关键实现细节 :
- 令牌缓存 :企业微信的
access_token有频率限制和有效期(通常2小时)。在内存中缓存并复用令牌是 必须 的,否则频繁获取会触发限流。这里设置了一个简单的缓存对象,并在过期前提前刷新。 - 错误处理 :企业微信API有明确的错误码(
errcode)。我们需要将其转化为对Claude友好的成功/失败结果,而不是直接抛出异常。这能让Claude理解操作结果并决定后续动作。 - 参数处理 :从Claude那里接收到的
args包含了它根据schema填写的参数。我们将其与环境变量中的默认值结合使用。
3.4 创建API端点供Claude调用
现在,我们需要创建一个HTTP端点,它既能向Claude宣告自己有哪些工具,又能接收Claude的调用请求并执行对应的工具。
// 端点1:获取可用工具列表(Claude在会话开始时调用)
app.get('/tools', (req, res) => {
res.json(tools);
});
// 端点2:执行工具(Claude决定调用工具时请求此端点)
app.post('/execute', async (req, res) => {
const { tool_name, arguments: toolArgs } = req.body;
if (tool_name === 'send_wecom_message') {
const result = await executeSendWeComMessage(toolArgs);
res.json(result);
} else {
res.status(404).json({ success: false, error: `未知的工具: ${tool_name}` });
}
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Claude 企业微信技能服务运行在 http://localhost:${PORT}`);
});
3.5 集成到Claude
现在,如何让Claude知道我们这个服务呢?这取决于你使用Claude的方式。
场景一:通过Claude API(编程方式) 如果你通过Anthropic的API调用Claude,你需要在创建消息时,将我们服务器的 /tools 端点返回的JSON Schema提供给API。
// 伪代码示例
const anthropic = new Anthropic({ apiKey: 'your-api-key' });
const myTools = await fetch('http://localhost:3000/tools').then(r => r.json());
const message = await anthropic.messages.create({
model: "claude-3-5-sonnet-20241022",
max_tokens: 1024,
tools: myTools, // 将工具Schema传入
messages: [
{ role: "user", content: "请通知技术部的同事,今晚8点进行系统升级,请提前保存工作。" }
]
});
// 当Claude返回 tool_use 时,你需要调用自己的 /execute 端点,然后将结果以 tool_result 角色送回对话。
场景二:通过Claude Desktop或支持自定义工具的客户端 一些第三方Claude客户端或中间件平台(如Composio提供的桥接服务)允许你配置一个“工具服务器”的URL。你只需将 http://localhost:3000 (或部署后的公网地址)填入配置,客户端会自动获取工具列表并在需要时转发调用请求。
场景三:使用智能体框架(如LangChain) 你可以将我们的工具包装成一个LangChain Tool对象,然后将其加入一个Agent的工具栏中。
# Python LangChain 示例伪代码
from langchain.tools import Tool
import requests
def send_wecom_message(content: str, to_user: str = None):
# 调用我们部署的服务
response = requests.post('http://localhost:3000/execute', json={
'tool_name': 'send_wecom_message',
'arguments': {'content': content, 'to_user': to_user}
})
return response.json()
wecom_tool = Tool(
name="send_wecom_message",
func=send_wecom_message,
description="通过企业微信应用发送文本消息。"
)
# 然后将 wecom_tool 加入到你的Agent中
3.6 部署与安全加固
本地测试没问题后,你需要将其部署到云服务器或Serverless平台(如Vercel, Railway, Fly.io)。
- 获取公网地址 :部署后你会获得一个类似
https://your-app.vercel.app的地址。 - 更新Claude配置 :在Claude客户端或你的代码中,将工具服务器地址改为这个公网地址。
- 安全加固 :
- HTTPS :确保你的服务通过HTTPS访问,防止凭证在传输中被窃听。
- 认证 :在
/tools和/execute端点上添加简单的API密钥认证。可以在请求头中检查一个预共享的密钥。
// 在Express中添加简单的中间件 const API_KEY = process.env.SERVER_API_KEY; app.use('/execute', (req, res, next) => { if (req.headers['x-api-key'] !== API_KEY) { return res.status(403).json({ error: 'Forbidden' }); } next(); });- 环境变量 :永远不要将
WECOM_AGENT_SECRET和SERVER_API_KEY等硬编码在代码中或提交到Git仓库。使用平台的环境变量管理功能。
4. 高级技巧与模式:构建复杂工作流
掌握了单个技能的构建后,“awesome-claude-skills”仓库的精髓在于组合。Claude的强大之处在于其推理和规划能力,可以串联多个工具完成复杂任务。
4.1 技能编排模式
假设我们想实现一个“日报自动汇总与发送”的工作流:Claude每天定时读取GitHub提交、Jira任务更新和Slack特定频道的讨论,生成一份摘要,然后通过企业微信发送给经理。
模式一:顺序执行(Sequential) Claude像编写程序一样,按顺序调用工具:
- 调用
get_github_commits(参数:日期=今天, 仓库=xx) - 调用
get_jira_updates(参数:日期=今天, 项目=xx) - 调用
get_slack_channel_history(参数:频道=日报, 日期=今天) - 将1,2,3的结果作为上下文,让Claude生成文本摘要。
- 调用
send_wecom_message(参数:内容=摘要)
模式二:条件分支(Conditional) Claude根据中间结果决定下一步。例如,一个“智能客服路由”技能:
- 调用
analyze_customer_intent(参数:用户消息) - 如果 分析结果是“技术问题”,则调用
create_github_issue。 - 如果 分析结果是“账单咨询”,则调用
lookup_customer_invoice。 - 如果 分析结果是“普通问候”,则直接调用
send_reply。
模式三:并行与聚合(Parallel & Aggregate) 对于无依赖的独立任务,可以设计让Claude规划并行调用。虽然当前Claude的Tool Use是顺序的,但你可以通过一个“聚合工具”来实现。例如,一个 batch_send_messages 工具,内部并行调用多个消息发送API。
4.2 状态管理与记忆
多步骤工作流中,Claude需要记住之前步骤的结果。在简单的API调用中,这通过将整个对话历史(包含之前的 tool_result )传递给Claude来实现。对于更复杂、长期运行的任务(可能跨越多次对话),你需要引入外部状态存储。
解决方案 :
- 数据库存储 :为每个会话或任务创建一个唯一ID,将中间状态(如收集到的数据、当前步骤)存入PostgreSQL或Redis。
- 使用框架 :像LangChain的
AgentExecutor或AutoGen的GroupChat内置了状态管理机制,可以跟踪执行步骤和结果。 - 设计有状态的工具 :例如,一个
create_draft_report工具返回一个报告ID,后续的add_section_to_report和finalize_report工具都需要这个ID作为参数。
4.3 错误处理与重试策略
在真实环境中,工具调用失败是常态。网络波动、API限流、临时错误都可能发生。
给Claude明确的错误信号 :我们的 execute 端点返回的JSON中, success: false 和 error 字段就是信号。Claude可以读取这个错误信息,并决定下一步。例如,如果错误是“Rate limited”,Claude可能会在回复中说“发送太频繁了,我等一下再试”,或者调用一个 wait_for_seconds 工具。
在工具层面实现智能重试 :对于瞬时的网络错误,可以在工具执行函数内部实现指数退避重试。
async function callWithRetry(apiCall, maxRetries = 3) {
let lastError;
for (let i = 0; i < maxRetries; i++) {
try {
return await apiCall();
} catch (error) {
lastError = error;
if (error.response?.status === 429 || error.code === 'ECONNRESET') {
// 遇到限流或连接重置,等待一段时间再重试
const delay = Math.pow(2, i) * 1000 + Math.random() * 1000; // 指数退避加随机抖动
console.log(`请求失败,${delay}ms后重试 (${i + 1}/${maxRetries})`);
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
// 对于其他错误(如4xx客户端错误),直接跳出重试循环
break;
}
}
throw lastError;
}
5. 常见问题、调试技巧与避坑指南
在实际开发和集成中,你会遇到各种问题。以下是一些高频问题的排查思路和解决方案。
5.1 Claude不调用我的工具
这是最常见的问题。请按以下清单排查:
- 检查Tool Schema :这是首要原因。确保你的Schema严格遵循Anthropic的Tool Use格式。最常见的错误是
input_schema的type不是"object",或者properties字段格式错误。使用JSON Schema验证器检查。 - 描述是否清晰 :
description字段太模糊,Claude无法理解工具用途。确保描述具体,包含关键词。例如,“发送消息”不如“向企业微信的群聊或指定成员发送文本通知消息”清晰。 - 参数设计是否合理 :是否有些参数是必需的但Claude很难从对话中推断?考虑提供更合理的默认值,或将一个复杂工具拆分成多个更简单的工具。
- Claude的“信心”不足 :有时Claude认为用户请求不够明确,它可能选择用文字回答而不是调用工具。在用户提示中更明确地指示,例如:“请使用可用的工具,帮我发送一条企业微信通知。”
5.2 工具调用结果不符合预期
Claude调用了工具,但结果错了。
- 参数传递错误 :在
/execute端点打印收到的req.body,检查Claude传递的参数值是否和你预期的一致。常见问题是字符串格式、数字类型或枚举值不匹配。 - 工具逻辑错误 :单独测试你的工具函数。写一个简单的测试脚本,用模拟参数调用
executeSendWeComMessage,看它是否能正确工作。 - 认证/令牌问题 :检查你的API凭证是否有效、是否过期。对于OAuth工具,确保刷新令牌流程正确。
5.3 性能与延迟问题
工具调用导致对话响应变慢。
- 工具服务性能 :你的技能服务器部署在哪里?如果服务器在海外,而Claude和你的用户在国内,网络延迟会很高。尽量将技能服务器部署在低延迟的区域。
- 同步长耗时操作 :避免在工具执行函数中进行同步的、长时间的操作(如处理大文件、复杂计算)。应将其改为异步任务,立即返回一个“任务已接收”的结果,然后通过其他方式(如回调、轮询)通知完成。Claude的Tool Use模型适合快速(几秒内)返回结果的工具。
- 并行化 :如果工作流中有多个 独立 的工具调用,可以考虑设计一个“批处理工具”,让你的后端服务并行执行这些任务,然后一次性返回结果,减少Claude的等待回合数。
5.4 安全风险管控
将Claude连接到真实系统,安全是重中之重。
| 风险点 | 可能后果 | 缓解策略 |
|---|---|---|
| 权限过度 | Claude滥用工具,删除数据、发送垃圾信息。 | 实施 最小权限原则 。为Claude创建专用的、权限受限的API账号(如GitHub的只读Token,企业微信的仅发送消息应用)。 |
| 提示词注入 | 用户通过巧妙输入,诱使Claude执行未授权的工具调用。 | 在工具执行前进行 输入验证和过滤 。例如,检查 to_user 参数是否在允许的接收列表内。在服务端设定硬性规则。 |
| 凭证泄露 | API密钥、令牌在传输或存储中泄露。 | 强制使用 HTTPS 。使用环境变量或秘密管理服务(如Vault, Doppler)。令牌实现自动刷新,避免长期有效的硬编码令牌。 |
| 不可预测的输出 | Claude对工具结果的解读可能导致它做出错误的下一个决策。 | 为工具设计 结构化的、明确的返回结果 。避免返回过于复杂或歧义的文本。使用 success 布尔值和清晰的 message 字段。 |
5.5 调试与日志记录
建立有效的调试流程至关重要。
- 结构化日志 :在技能服务器中,使用Winston、Pino等日志库,记录每一个工具调用的入参、出参、耗时和错误信息。附上唯一的请求ID,方便追踪。
- 模拟测试 :构建一个“模拟模式”,当环境变量
NODE_ENV=test时,工具函数不执行真实API调用,而是返回预设的模拟数据。这方便进行集成测试,且不会影响生产系统。 - 使用Claude API的调试信息 :Anthropic API的响应中可能包含详细的调试信息,帮助你理解Claude为什么做出某个决定。在开发阶段充分利用这些信息。
- 人机回环(Human-in-the-loop) :对于高风险操作(如生产数据库写入、资金操作),不要完全自动化。可以设计工具在最终执行前,先返回一个待确认的预览,等待用户明确批准(例如,调用一个
request_human_approval工具)后再执行。
构建和维护一个可靠的Claude技能生态,是一个持续迭代的过程。从“awesome-claude-skills”中汲取灵感,从简单的单个技能开始,逐步构建更复杂、更智能的工作流,你会发现Claude从一个强大的对话伙伴,进化成了一个真正能为你处理事务的智能副手。
更多推荐



所有评论(0)