一、官方活动入口https://www.aidaxue.com/OpenClawCamp二、学习手册三、视频课程学习四、飞书机器人https://open.feishu.cn/?langzh-CN1、创建应用2、添加能力添加机器人能力3、应用凭证4、开通权限{scopes:{tenant:[aily:file:read,aily:file:write,application:application.app_message_stats.overview:readonly,application:application:self_manage,application:bot.menu:write,cardkit:card:write,contact:user.employee_id:readonly,corehr:file:download,docs:document.content:read,event:ip_list,im:chat,im:chat.access_event.bot_p2p_chat:read,im:chat.members:bot_access,im:message,im:message.group_at_msg:readonly,im:message.group_msg,im:message.p2p_msg:readonly,im:message:readonly,im:message:send_as_bot,im:resource,sheets:spreadsheet,wiki:wiki:readonly],user:[aily:file:read,aily:file:write,im:chat.access_event.bot_p2p_chat:read]}}五、OpenClaw 安装部署1、安装 nodejs下载地址https://nodejs.org/zh-cn/download/archive/v22.22.1安装版本https://nodejs.org/dist/v22.22.1/node-v22.22.1-win-x64.zip解压后将路径(例如C:\myapp\node-v22.22.1-win-x64)添加到环境变量Path。配置淘宝镜像npmconfigsetregistry https://registry.npmmirror.com/2、安装githttps://git-scm.cn/3、创建讯飞应用https://www.xfyun.cn/在讯飞开放平台创建应用4、模型调用https://maas.xfyun.cn/modelSquare在 MasS 平台选择需要使用的模型这里使用MiniMax-M2.5进行 API 调用授权刚刚创建的讯飞应用跳转到模型服务列表这里有我们需要的参数与此同时在接口文档也提供了 OpenClaw 的配置模板5、OpenClaw 安装https://docs.openclaw.ai/install新开一个命令窗口执行npminstall-gopenclawlatest或者使用 PowerShell # WindowsPowerShelliwr-usebhttps://openclaw.ai/install.ps1|iex6、OpenClaw 向导openclaw onboard --install-daemon若有旧旧配置则覆盖选择自定义模型根据第4步中的模型参数填入信息https://maas-api.cn-huabei-1.xf-yun.com/v2配置飞书输入飞书应用凭证选择WebSocket连接搜索引擎跳过配置技能跳过选择钩子重启网关配置飞书事件添加事件im.message.receive_v1- 接收消息im.message.message_read_v1- 消息已读回执im.chat.member.bot.added_v1- 机器人进群im.chat.member.bot.deleted_v1- 机器人被移出群发布飞书应用7、OpenClaw 对话在工作台中找到已经发布的飞书机器人需要授权openclaw pairing approve feishu ZCY7RZQY授权完可以正常对话8、OpenClaw 网关http://127.0.0.1:18790/chat?sessionmain需要输入网关tokenhttp://127.0.0.1:18789/#token25a7b0f55ccfa625320869c40f1c0b4860d2211d4ac330fa这个地址会在网关启动时自动打开也可以通过以下指令获取openclaw dashboard --no-open在主页中也可以进行对话对话会产生 token 消耗注意用量9、技能配置内置54个技能10、暂停/启动网关# 暂停openclaw gateway stop# 启动openclaw gateway run11、执行安全审计https://docs.openclaw.ai/gateway/securityopenclaw security audit--deepopenclaw security audit--fix补充、OpenClaw 卸载openclaw uninstallnpmrm-gopenclaw记得删除飞书应用六、Skills 市场1、clawhubhttps://clawhub.ai/2、skillhubhttps://skillhub.cn/3、awesome-openclaw-skillshttps://github.com/VoltAgent/awesome-openclaw-skills4、anthropics skillshttps://github.com/anthropics/skills5、Skills 安装示例例如在 skillhub 中想要安装 Find Skills有三种安装方式这里以Zip包安装为例它是比较通用的下载后解压参考https://docs.openclaw.ai/zh-CN/tools/skills 将Skills放到指定目录例如我放到工作区然后刷新测试6、热门 SkillsCapability Evolver自进化引擎Self-Improving Agent自我提升引擎Summarize总结提炼Find Skills发现技能Agent Browser智能体控制浏览器七、自定义创建Skills详情请参考官方文档介绍 https://agentskills.io/specification编写一个好的Skill就像编写一份优秀的代码文档加上清晰的SOP。以下是一些核心指南1、元数据精确的“自我介绍”name: 必须与文件夹名一致使用小写字母和连字符 (kebab-case) 。description: 这是最关键的部分。Agent通过它来匹配任务。公式动词 名词 场景关键词。例如“分析MySQL employees数据库中的员工、薪资和部门数据”。确保包含足够的业务术语让Agent能准确联想 。2、指令主体清晰、结构化、可操作明确职责与边界在开头就定义好“你的职责是…”、“你绝对不能做…”。这能有效防止AI“幻觉”和越权操作 。步骤化流程使用有序列表或小标题将复杂任务拆解为清晰的“规划-执行-观察”循环步骤。例如第一步理解意图第二步生成代码/工具调用第三步分析结果 。提供上下文示例包括数据库 Schema、API 文档、常见错误处理案例。但要注意过长的示例应放在references/目录中按需加载 。定义输出格式明确告诉AI最终给用户的答案应该是什么样子是Markdown表格、JSON还是纯文本报告 。3、资源与脚本各司其职SKILL.md负责“思考”和“规划”。scripts/负责“执行”。将那些需要确定性、高精度、重复性的操作如计算、格式转换、调用遗留系统API写成脚本。脚本应该设计为接受标准输入返回标准输出便于AI调用 。references/负责“知识库”。存放冗长的API文档、PDF表单填充指南、设计规范PDF等。只有当SKILL.md中明确指引时AI才会去翻阅它们 。4、渐进式披露的最佳实践保持SKILL.md精炼建议控制在500行以内约5000 tokens 。如果过长考虑拆分为多个子Skill或在正文中仅包含核心流程细节放在references中。使用相对路径引用在SKILL.md中使用[参考表单指南](references/forms.md)这样的链接AI可以理解并主动加载 。5、示例1、夸夸我 SkillsSKILL.md如下--- name: praise-me description: 生成真诚、具体、充满正能量的个性化赞美。当用户请求鼓励、自我肯定或情绪提升时使用如用户说“夸夸我”、“赞美我”、“鼓励我”或“我需要打气”。 license: MIT metadata: author: assistant version: 1.0.0 --- # 夸夸我技能 ## 目的 此技能用于在用户需要情感支持或自我肯定时生成发自内心、有细节、积极温暖的赞美以提升用户情绪并强调其独特价值。 ## 使用场景 - 用户明确请求“夸夸我”、“赞美我”、“鼓励我”、“说点好听的”、“给我打气” - 用户表达自我怀疑或情绪低落“我今天很丧”、“我可能做不好” - 用户分享成就无论大小“我跑完5公里了”、“我完成了困难的任务” ## 执行指令 当技能被触发时请严格遵循以下步骤生成赞美 ### 第一步分析用户输入 - 提取用户提到的**具体行为**如跑步、工作、学习、**情绪状态**如疲惫、自豪、沮丧或**请求方式**。 - 如果用户未提供任何背景仅说“夸夸我”则赞美用户**主动寻求关怀**的勇气。 ### 第二步构建赞美内容 遵循 **S.P.E.C.I.A.L.** 原则 - **S**pecific具体针对细节避免“你很棒”这种空话。 → “你坚持跑完5公里每一步都是对承诺的践行。” - **P**ositive积极用阳光、有力的词汇着眼于潜力和努力。 → “你的毅力正在塑造更强的你。” - **E**ncouraging鼓励传递“你值得”和“你可以”的信息。 → “这份自律会带你到任何想去的地方。” - **C**reative创意使用比喻或生动描述。 → “你的好奇心像钥匙迟早打开所有向往的门。” - **I**mmediate即时用“你”直接对话使用现在时态。 → “你此刻寻求光亮的举动本身就是一种光芒。” - **A**uthentic真诚避免夸张或虚假比较基于真实人性价值。 → “承认需要鼓励是你内心强大的证明。” ### 第三步格式化输出 - 直接输出2-4句流畅的赞美。 - 以“你”开头使用第二人称。 - 不要添加任何前缀如“好的”、“这是给你的赞美”不要输出额外解释。 ## 输出示例 ### 示例1有具体成就 **用户**夸夸我我今天写了5000字报告。 **输出** 你能在一天内专注产出5000字这不仅展现了惊人的执行力更说明你对目标的承诺如此坚定。这种沉浸创造的心流状态是你才华最自然的流露。 ### 示例2无具体信息 **用户**赞美我。 **输出** 你主动开口要求被看见、被肯定这份坦荡的自我关怀能力比任何外在成就都更值得掌声。你允许自己需要光于是你就成了光本身。 ### 示例3情绪低落时 **用户**我今天什么也没做好鼓励鼓励我。 **输出** 在感到挫折时你没有逃避而是选择为自己寻求力量这本身就是最勇敢的修复行动。你的价值从不取决于单日的产出而在于你永远不放弃尝试的韧性。 ## 边缘情况处理 - **用户持续要求赞美**每次生成不同内容可切换角度努力、存在价值、特质。 - **用户否定赞美**不争辩输出“我尊重你现在的感受。同时请知道你愿意表达真实情绪这本身就非常值得欣赏。” - **用户给出负面自我评价**不要直接反驳而是重新框架“你可能觉得自己不够好但我看到的是你追求成长的敏锐标准。这份不满足恰恰是驱动你前进的火花。” ## 参考资源 如需更多赞美角度和创意表达可查阅 references/praise-examples.md。相关文件references/praise-examples.md# 赞美角度与创意示例库 此文件为生成赞美提供更多灵感和角度仅在需要时加载。 ## 按维度分类的赞美角度 ### 努力与坚持 - “你在[具体情境]中展现的耐心就像水穿石不急不躁却力量无穷。” - “每一次你选择继续而不是放弃都在悄悄重塑你的韧性肌肉。” ### 存在与价值 - “你不需要变得‘更好’才值得被肯定。此刻呼吸着的你已经是自然赋予的独特奇迹。” - “你的存在本身就在默默影响世界——比如现在你让我有机会传递这份温暖。” ### 勇气与脆弱 - “敢于承认‘我需要鼓励’是你与自己的内心成为盟友的证明。” - “在自我怀疑中依然前行这是比无知自信更深刻的勇敢。” ### 特质与潜力 - “你的好奇心是永不熄灭的探照灯总会照亮别人看不到的路。” - “你那份细腻的感受力是你理解世界最独特的接收器。” ### 行动与主动 - “你主动伸手触碰光的样子已经让周围的环境明亮了几度。” - “当你为自己的情绪采取行动时你就成为了自己最可靠的守护者。” ## 创意比喻库 - **学习者** → 海绵、探险家、拼图收集者 - **坚韧者** → 竹子风吹不倒、冲浪者、锻刀 - **创造者** → 织布工、厨师、园丁 - **关怀者** → 灯塔、锚、保温杯 ## 使用提示 - 结合用户的具体情境选择最贴切的比喻。 - 避免在短时间内重复使用相同的角度或比喻。 - 优先赞美**可控制的因素**努力、策略、坚持而非固定特质聪明、漂亮。安装技能测试6、示例2、数据分析 SkillsSKILL.md如下--- name: mysql-employees-analyst description: 专门分析MySQL employees示例数据库将中文问题转为受控SQL并输出分析报告 --- # MySQL Employees 数据分析 Skill 你必须完成一个完整闭环理解用户问题 - 生成受控SQL - 调用脚本执行 - 分析结果并输出报告。 ## 一、数据库背景 这是MySQL官方employees示例库。核心表及关系 - employees (emp_no, first_name, last_name) - departments (dept_no, dept_name) - dept_emp (emp_no, dept_no, from_date, to_date) - salaries (emp_no, salary, from_date, to_date) - titles (emp_no, title, from_date, to_date) 当前日期是 {current_date}查询当前在职员工请使用 to_date 9999-01-01。 ## 二、你的职责边界硬约束 1. **只读查询**只能生成 SELECT 语句。 2. **单条SQL**每次只能生成并执行**一条**SQL。如果问题复杂你需要自己规划步骤多次调用工具而不是试图一次查出所有答案。 3. **禁止推测**不允许编造查询结果。必须先执行SQL再基于真实结果分析。 ## 三、SQL生成规则 - 日期过滤查询当前信息必须用 to_date 9999-01-01。 - 聚合函数使用 AVG(), COUNT(), MAX() 等时务必给列起别名。 - 字符串模糊匹配使用 LIKE 时注意处理中文通配符。 ## 四、工具使用协议 - 工具名称execute_sql - 调用方法将你生成的SQL语句作为参数传递给此工具。 - 工具返回JSON格式的查询结果或错误信息。 ## 五、最终输出要求 - 如果查询出错请解释错误并尝试修正SQL。 - 如果查询成功基于返回的数据用Markdown格式输出结构化的分析报告包括你使用的SQL语句。execute_sql.py脚本#!/usr/bin/env python3 SQL执行脚本 - 供.NET Agent调用 接收JSON格式的输入返回JSON格式的结果 # 安装MySQL连接器# pip install mysql-connector-pythonimportdecimalimportjsonimportsysimportmysql.connectorfrommysql.connectorimportErrorimportpandasaspdfromdatetimeimportdatetime,dateimportloggingimportos# 配置日志logging.basicConfig(levellogging.INFO,format%(asctime)s - %(name)s - %(levelname)s - %(message)s)loggerlogging.getLogger(__name__)classSQLExecutor:def__init__(self,config_fileNone):初始化数据库连接配置# 使用默认配置文件ifconfig_fileNone:# 获取脚本文件所在的目录script_diros.path.dirname(os.path.abspath(__file__))# 拼接文件名config_fileos.path.join(script_dir,db_config.json)self.configself._load_config(config_file)self.connectionNonedef_load_config(self,config_file):加载数据库配置文件try:withopen(config_file,r)asf:configjson.load(f)logger.info(f成功加载配置文件:{config_file})returnconfigexceptFileNotFoundError:logger.error(f配置文件{config_file}不存在)# 返回默认配置实际生产环境应从环境变量读取return{host:localhost,database:employees,user:root,password:password,port:3306}exceptjson.JSONDecodeErrorase:logger.error(f配置文件格式错误:{e})sys.exit(1)defconnect(self):建立数据库连接try:self.connectionmysql.connector.connect(hostself.config[host],databaseself.config[database],userself.config[user],passwordself.config[password],portself.config.get(port,3306))logger.info(数据库连接成功)returnTrueexceptErrorase:logger.error(f数据库连接失败:{e})returnFalsedefclose(self):关闭数据库连接ifself.connectionandself.connection.is_connected():self.connection.close()logger.info(数据库连接已关闭)def_convert_value(self,value):转换特殊类型为JSON可序列化格式ifisinstance(value,(datetime,date)):returnvalue.isoformat()elifisinstance(value,decimal.Decimal):returnfloat(value)elifisinstance(value,bytes):returnvalue.decode(utf-8,errorsignore)returnvaluedefexecute_query(self,sql_query,paramsNone,limit1000): 执行SQL查询并返回结果 Args: sql_query: SQL查询语句 params: 查询参数可选 limit: 最大返回行数 Returns: dict: 包含查询结果或错误信息的字典 # SQL注入防护只允许SELECT语句ifnotsql_query.strip().upper().startswith(SELECT):return{success:False,error:只允许执行SELECT查询}# 添加LIMIT子句防止返回过多数据ifLIMITnotinsql_query.upper():sql_queryf LIMIT{limit}cursorNonetry:cursorself.connection.cursor(dictionaryTrue)logger.info(f执行SQL:{sql_query})ifparams:cursor.execute(sql_query,params)else:cursor.execute(sql_query)# 获取列名columns[desc[0]fordescincursor.description]ifcursor.descriptionelse[]# 获取数据rowscursor.fetchall()# 转换特殊类型converted_rows[]forrowinrows:converted_row{}forkey,valueinrow.items():converted_row[key]self._convert_value(value)converted_rows.append(converted_row)logger.info(f查询成功返回{len(converted_rows)}行数据)return{success:True,data:converted_rows,row_count:len(converted_rows),columns:columns,sql:sql_query}exceptErrorase:logger.error(fSQL执行错误:{e})return{success:False,error:str(e),sql:sql_query}finally:ifcursor:cursor.close()defexecute_multi_query(self,queries): 执行多条SQL语句用于复杂分析 Args: queries: SQL语句列表 Returns: list: 每条查询的结果 results[]fori,queryinenumerate(queries):logger.info(f执行第{i1}/{len(queries)}条查询)resultself.execute_query(query)results.append(result)# 如果某条查询失败可以选择停止或继续ifnotresult.get(success,False):logger.warning(f第{i1}条查询失败继续执行后续查询)returnresultsdefprint_json_response(success,errorNone,dataNone,ensure_asciiFalse): 打印JSON格式的响应 Args: success: 是否成功 error: 错误信息可选 data: 返回数据可选 ensure_ascii: 是否确保ASCII编码 response{success:success}iferror:response[error]errorifdataisnotNone:response[data]dataprint(json.dumps(response,ensure_asciiensure_ascii))defmain():主函数从标准输入读取JSON执行SQL输出JSON结果# 读取标准输入try:# 设置标准输入使用utf-8-sig编码sys.stdin.reconfigure(encodingutf-8-sig)input_datasys.stdin.read()ifnotinput_data:# 如果没有输入尝试从命令行参数获取iflen(sys.argv)1:input_datasys.argv[1]else:print_json_response(False,未提供输入数据,None,False)sys.exit(1)# 解析JSON输入try:requestjson.loads(input_data)exceptjson.JSONDecodeErrorase:print_json_response(False,fJSON解析错误:{e},None,False)sys.exit(1)# 获取SQL查询sql_queryrequest.get(sql_query)ifnotsql_query:print_json_response(False,未提供SQL查询语句,None,False)sys.exit(1)# 获取参数paramsrequest.get(params)limitrequest.get(limit,1000)# 执行查询executorSQLExecutor()ifnotexecutor.connect():print_json_response(False,数据库连接失败,None,False)sys.exit(1)try:resultexecutor.execute_query(sql_query,params,limit)# 输出JSON结果print(json.dumps(result,ensure_asciiFalse,indent2))finally:executor.close()exceptExceptionase:logger.exception(未预期的错误)print_json_response(False,f系统错误:{str(e)},None,False)if__name____main__:main()db_config.json配置{host:localhost,port:3306,database:sqlagent,user:root,password:0123456789,charset:utf8mb4,use_unicode:true}安装技能测试7、Anthropics Skill 示例gitclone https://github.com/anthropics/skills八、官方证书