乐于分享
好东西不私藏

OpenClaw从入门到入土:保姆式教学,如何用龙虾自动生成项目周报 08

OpenClaw从入门到入土:保姆式教学,如何用龙虾自动生成项目周报 08

一.声明

没有套路,只有真诚。接下来,请允许我手把手服侍您如何用龙虾生成项目周报。

功能靠谱实用,牺牲了本人十来个日夜的青春,冷落了多少老师才换来的突破性成果,请务必重视。

当然,要掌握的不仅是实现一个功能,更重要的是理解龙虾以及AI大模型的套路,总结出一套行之有效并且可以复制的打法,去驾驭AI,真正做到为己所用。

二.拆解生成项目周报的工作流

要实现一个功能,必须先了解其应用场景,用户以及工作流程。

否则就算把功能弄出来,也达不到实用功效。

让龙虾自动生成项目周报的功能,我们可以按以上思路拆解如下:

应用场景:在飞书APP里进行消息对话

用户:某个项目组成员,飞书用户

工作流程:

1. 触发关键词:飞书用户在与龙虾助手的聊天对话框里,输入自动生成项目周报的提示词,例如:“/单个项目周报 5060项目”

2. 检查关键词:龙虾助手收到提示词,先检查提示词有没有错误,有问题就报错,没问题就把先设定好的prompt(指令提示)、项目周报模板以及skill发给AI大模型

3. 搜集信息:AI大模型根据prompt提示以及skill工具,搜集并整理飞书聊天群信息,

4. 生成周报:AI模型把整理后聊天信息灌进项目周报模板里,生成项目周报

5. 发送周报:最后,龙虾把项目周报发送到与用户的聊天对话框里,完成功能应用

三.龙虾与AI大模型的尿性

正式实现功能前,我们得先了解龙虾与AI大模型的工作尿性。如果弄不明白,那么接下来的工作就会被这两坑货带进沟里。

首先要搞清的是龙虾如何给AI大模型发送消息?

龙虾收到用户的指令后,会把相关的所有prompt(具体表现为markdown文件,后缀名.md),以及skill(具体表现为JavaScript或Python文件,后缀名.js 或.py)拼接成上下文发给AI大模型。

为啥龙虾要这样搞?

因为当前的AI大模型只认上下文,也就是一个超大的prompt指令。

其次是龙虾塞给AI大模型的上下文,具体包含哪些东西,AI大模型阅读上下文的时候有没有一个优先次序?

龙虾塞给AI大模型的上下文包括如下文件,按序号体现优先级,1为最高:

1. AGENTS.md,龙虾的系统性的自我描述或者要求,本人直接干掉了里面所有内容。不是因为穷怕浪费token,而是单纯地想让AI大模型猜猜我是谁

2. Skill.md,对某个被调用的功能描述以及对AI模型的具体操作要求

3. History,用户与龙虾助手的聊天记录

4. User message,用户后续发送的消息

从上面可以看出,龙虾里的skill工具是不会直接传给AI大模型的,那么AI大模型如何调用skill工具呢?

这就是最后你必须搞清楚的AI大模型的工作尿性,这也是很多人卸载龙虾的真正原因:

如果你不在prompt里面规定死AI大模型必须调用哪些工具,AI大模型会自由发挥,信马由缰,保证你每次发出相同的指令会收到各种不同的答案。

四.构建功能模块【重要

搞懂了龙虾和AI大模型的工作尿性,我们开始按照工作流构建功能模块:

1. 我们向龙虾发送生成项目周报的指令,得保证龙虾认识这些指令,所以要构建一个registry.js命令注册表文件,里面存放用户指令,以及指令对应的skill工具名称:

module.exports = [{commands:["/单个项目周报 5060项目"], skill: "project-weekly-report"}];

2. 不同的项目有不同的周报,所以我们还得构建一个projects.js项目集合文件,里面存放所有的项目名称以及对应的项目飞书聊天群id,保证AI大模型能够从正确的渠道获取正确的信息:

module.exports = {"5060项目":{manager: "张三",groupId: "飞书群id(复制粘贴后替换成实际飞书群id)"  },"5060项目":{manager: "李四",groupId: "飞书群id(复制粘贴后替换成实际飞书群id)"}};

3. 接下来就是编制Prompt,为了方便理解,我们把Prompt构建成SKILL.md文件,并在文件强制规定AI大模型必须使用我们提供的skill工具,而不能随意发挥:

---name: project-weekly-reportdescription: 基于飞书群聊记录自动生成项目周报,输出为Markdown格式,直接发送给用户---# 执行指令收到 `/单个项目周报 <项目名>` 指令后,**立即且只执行以下 exec 命令**,不做任何其他操作:node {baseDir}/index.js node 脚本已自行完成全部工作:拉取群消息 → AI提炼 → 填充MD模板 → 通过飞书API直接发送给用户。agent 的职责只有一个:**触发 exec,然后什么都不做**

4. 为了防止AI大模型输出五花八门的周报,我们还得做一个模板,统一输出格式。所以继续构建project-weekly-report-template.md文件,作为项目周报模板:

# XXX项目周报# 一、本周工作完成情况| 上周工作任务 | 计划开始时间 | 计划完成时间 | 负责人 | 完成情况 | 未完成任务说明 |:--- | :--- :--- | :--- :--- | :--- ||| || || |# 二、本周工作问题点| 问题点 | 发生时间 | 解决方案 | 负责人 | 完成时间 |:--- | :--- :--- | :--- :--- || || || |# 三、下周工作计划| 下周工作任务 | 计划开始时间 | 计划完成时间 | 负责人 | 预计风险 | 应对措施 || :--- :--- | :--- :--- | :--- :--- || || || ||

5. 前面都算是准备工作,从现在开始,我们开始构建skill工具,分别为index.js,FeishuAPI.js以及DocProcessor.js,其中:

index.js是主程序,前面提到过工作流(读取群消息,AI提炼,填充模板,通过飞书发送给用户)都通过它推动执行:

async function main(ctx):1. const match = matchSkill(messageText) 2. await MessageSender.reply4. if (userSession.stage === "waiting_template")5. const userIds = messageProcessor.extractAllUserIds(ctx);6. await WeeklyReportGenerator.generate7. sessions.delete(userId); feishuAPI.clear(); messageProcessor.clear();

FeishuAPI.js是飞书会话程序,主程序index.js运行过程中,与飞书来回通信,并调用飞书数据,所以必须构建FeishuAPI.js,明确使用的飞书API接口,否则飞书鸟都不鸟你:

class FeishuAPI { … }:1. asyncgetTenantToken(ctx)2. async batchGetUserNames()3. async sendMessageDirect(ctx, chatId, text, msgType = "text")4. async setDocEditable(ctx, docToken, memberIds = [])

DocProcessor.js是周报文档处理程序,它包括让AI大模型去指定地方收集消息,指导大模型如何有效提取有用信息,找到模板,并生成最终的项目周报:

const WeeklyReportGenerator = { … }1. getTimeRange()2. asyncgenerate(ctx, deps, config)3. return docUrl;

五.文件存放位置

我们一共构建了7个文件,分别是:

registry.jsprojects.jsindex.jsSKILL.mdproject-weekly-report-template.mdFeishuAPI.jsDocProcessor.js

那么问题来了,这些文件要放到哪里,可以让龙虾读取并运行?

我们在龙虾的workplace里新建一个文件夹,取名为skills

打开skills,再新建一个文件夹,取名为:project-weekly-report

然后把上面7个文件全部复制粘贴到project-weekly-report文件夹里:

这样,龙虾就可以顺利执行我们的指令了。

至于skills文件夹能不能放在其他地方,其实也是可以的,不过龙虾对于不同地方的skills有着不同的执行优先级,workplace里面的skills执行优先级最高。

六.功能实用性解析

先看看我之前发的视频,体验一下最终效果:

11 用龙虾实现一键生成项目周报

再来聊一下这个功能框架的实用性:

1. 此功能架构设计可以随意扩展项目,只需要在project.js和registry.js里增加项目信息。

2. 现实工作环境中,一个项目一堆群,可以在project.js里随意增加群信息,然后AI自动搜集信息,大大减轻PM的工作量。

3. 如果工作沟通软件用的是个人微信,企业微信或者钉钉,那么只要替换FeishuAPI.js文件即可,保证APP平台的可移植

4. 只要在工作沟通软件 + 龙虾 + AI大模型的环境下,任何生成项目相关的文档功能,都可以复用这套框架设计,大大减轻了skill的开发工作量。

吹完了牛X,接下来准备把上述7个文件的源代码出来,共享给大家,敬请期待。

(未经本人许可,请勿转载或商业用途)