零、摘要
✨ 本文主要讲述了作为一位研发同学,在遇到问题时的
拆解流程&思考方案&实现思路,并在文末推荐一款令我心动的显示器~
一、提出问题
❓小组内同学在工作中遇到了一些问题时,如何
反馈?如何解答?如何记录?如何追踪?
在看下方的图之前,可以先想一下目前自己组内,在遇到类似场景时,是如何的一个流程呢?
以上是一个我们构想的,属于比较理想化的流程,涵盖【反馈】→【讨论】→【记录】→【回顾】四个阶段,大部分小组的流程应该是它的一个子集,因为能够按这个流程严格执行的团队少之又少。
对于为什么没有很多团队能够如此执行,经过讨论,大家认为以上流程存在部分痛点:
- 问题反馈群的
聊天记录平铺,不成组,看问题时不直观 - 问题总结时,
人工翻找、记录聊天记录上下文比较费时 - 问题总结时,人工根据聊天记录再进行总结,若需
组织一个措辞完善、重点突出的总结文案,是比较费时费力的 - 问题记录后,需要定时
人工统计问题现状,并催促相关同学进行处理 人工同步问题记录到周会、月会中时,需要一定的同步成本
痛点关键词:人工、不直观
由于存在以上痛点,大部分同学认为组织一个问题反馈流程的ROI并不高(换句话说就是:没有必要!) ,因为需要占用一定的人力来做这些事。
经过一些调研和实践,我们基于以上流程,着重优化其中需要人工的节点,减轻人工成本,提高小组建立问题反馈流程的ROI。
二、解决方案
我们针对以上痛点,case by case的通过工具显著的提升了效率:
❓:问题反馈群的聊天记录平铺,不成组,不方便以问题维度进行查看
💡:使用飞书话题群代替普通群,可以更直观的by问题维度查看消息
❓:问题总结时,人工翻找、记录聊天记录上下文比较费时
💡:直接调用飞书open api,一次性获取对应范围的聊天记录
❓:问题总结时,人工根据聊天记录进行总结,难以组织措辞完善、重点突出的总结文案
💡:使用大模型来根据聊天记录生成一个措辞完善、重点突出的文案,它很擅长
❓:问题记录后,需要定时人工统计问题现状,并催促相关同学进行处理
💡:使用定时任务,通过工具来分析问题现状(替代人工),并通知到对应同学及时处理
❓:人工同步问题记录到周会、月会中时,需要一定的同步成本
💡:使用多维表格来承载问题列表,使用多维表格的仪表盘、嵌入至飞书文档能力代替人工同步
小助手示例动图
三、方案实现
全链路时序图
1. 轻量级函数
介绍
FaaS,函数即服务,遵循服务函数化理念,支持用户
一键创建和部署函数,支持快速构建任何类型的应用和服务。各个厂家的云平台都有FaaS的服务,大家可以按自己的意愿来使用哈~
我的使用
基于轻量级函数,我实现了以下功能,串联起了 飞书 + Coze+ 多维表格 这三个平台。
- 获取群聊天记录
- 将聊天记录进行总结
- 将总结内容存到多维表格
每个步骤的细节实现会在后续模块展开~
// 伪代码
// 事件入口
addEventListener("fetch", async (event) => {
// 处理入参相关
const { url, method } = event.request;
const { pathname } = new URL(url);
// 判断当前调用类型(卡片回调、@事件处理等)
const isChallengeMode = requestJson.challenge;
const isCardCallback = requestJson.event && requestJson.event.host === "im_message";
// 事件分发:处理@事件
if (isAtMsg) {
const messageId = jsonEvent.message.message_id;
// 1. 获取飞书token
validByLark().then(async (validByLarkRes) => {
// 2. token验证
if (validByLarkRes && validByLarkRes.tenant_access_token) {
// 旧卡片messageId
let cardMsgId = "";
// 3. 先发一个loading状态的消息卡片到群里
sendCard(messageId, token, "让我康康怎么个事儿", "正在读取当前话题聊天记录数据,并尝试总结中...").then(res => {
cardMsgId = res.data.message_id;
})
// 4. 获取话题聊天记录,话题里的聊天记录(没有被撤回的)
const threadList = await getThreadTalkList(token, jsonEvent.message.thread_id);
// 5. 获取发送者信息
const userIds = uniq(threadList.map(item => {
return item.sender.id;
}))
const userInfoMap = await batchGetUserInfo(token, userIds);
// 6. 格式化聊天记录
const talkList = threadList.map(recordItem => {
const userItem = userInfoMap[recordItem.sender.id];
const userName = userItem ? userItem.name : "用户";
let talkContent = recordItem.body.content;
if (recordItem.mentions?.length) {
recordItem.mentions.forEach(mention => {
talkContent = talkContent.replace(mention.key, `@${mention.name}`)
})
}
return { userName, talkContent }
})
// 7. 生成AI建议
const aiSuggest = await getAISuggest(JSON.stringify(talkList));
if (aiSuggest && aiSuggest.output) {
const {title, suggest} = aiSuggest.output;
// 8. 发送消息卡片
await updateCard(cardMsgId, token, title, suggest, "一键记录该问题到多维表格中~", outputStr);
}
}
})
return event.respondWith(new Response(JSON.stringify({ success: true }), {
headers: { "content-type": "application/json" }
}));
}
event.respondWith(new Response(JSON.stringify(requestJson), {
headers: { "content-type": "application/json" }
}));
});
//# sourceMappingURL=index.js.map
2. 飞书开放平台
介绍
开放平台:一个封闭的平台往往是无法cover用户的各种使用场景的,把平台的相关能力开放给使用者,使用者可以根据这些能力开发一些更贴合业务的定制化功能,最终提高用户粘性。
飞书开放平台: 将飞书的部分能力以API的方式开放给业务开发者,通过这些API,你可以开发各种企业应用,来增强你在使用飞书时的体验。
我的使用
2.1. 飞书机器人
与用户在聊天中交互的应用,可以向用户或群组自动发送消息、响应用户的消息、管理群组。
在使用机器人时,需要为对应的功能开启相关权限:
- 接收群聊中@机器人消息事件(
通过在群中通过@来唤起机器人) - 查看群消息(
查看群聊上下文) - 获取用户基本信息(
获取用户名称) - 查看、评论、编辑和管理多维表格(
存储记录到多维表格中)
2.2. 飞书消息卡片
相比于普通的消息体,消息卡片是一个交互更友好、展示更直观的载体。
基于该功能,我们搭建了一个交互卡片,主要的交互逻辑很简单:用户点击【记录到多维表格中】,我们将当前聊天记录、聊天总结一起保存到多维表格中。
2.3. 事件与回调
2.3.1. 事件
通过【事件】,我们可以绑定At动作,用户在@机器人后,可以把这个动作同步触发到我们的开发者服务器。
- 先配置请求地址,这个地址代表我们的开发者服务器
- 再添加相关事件,只有我们显式添加的事件,才会触发到开发者服务器(白名单逻辑)
2.3.2. 回调
通过【回调】,我们可以绑定机器人的交互(卡片的按钮),在用户点击卡片上的按钮后,会同步触发到我们的开发者服务器。
3. Coze
介绍
Coze是新一代 AI 应用开发平台。无论你是否有编程基础,都可以在扣子上快速搭建基于大模型的各类Bot,并将 Bot 发布到各个社交平台、通讯软件或部署到网站等其他渠道。
一句话总结:
产品:你可以在coze平台上快速开发一些AI应用(Bot机器人等),发布到各种社交平台中。
API:你可以通过OpenAPI的方式,丝滑的通过接口调用的方式,将你搭建的应用 or 模块嵌入到你的业务流程中。
我的使用
Coze有很多简单实用的功能,比如逻辑编排、知识库等,这里我只介绍本次使用到的workflow(工作流) 。
-
工作流
工作流支持通过
可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排,例如旅行规划、报告分析等。当目标任务场景包含较多的步骤,且
对输出结果的准确性、格式有严格要求时,适合配置工作流来实现。
工作流配置截图
工作流运行示意图
👍🏻 比较惊喜的一点是工作流可以通过open api的方式单独调用! 这样就为在轻量级函数中调用提供了前提条件~ 可以低成本的接入到用户的业务中~
const getAISuggest = (talkList) => {
return fetch(`https://api.coze.cn/v1/workflow/run`, {
method: "POST",
headers: {
Authorization: `你的Token`,
"Content-Type": "application/json",
"Connection": "keep-alive",
"Accept": "*/*"
},
body: JSON.stringify({
"workflow_id": "Workflow的ID",
"parameters": {
// 入参
"CUSTOM_INPUT": `${talkList}`
}
})
}).then(res => res.json())
.then(res => {
const dataStr = res.data;
return JSON.parse(dataStr || "{}");
})
}
4. 多维表格
介绍
多维表格是一个非常强大的工具,它是一个以表格形态存在的在线数据库,用来存储和管理数据,区别于常规电子表格,多维表格不仅可以实现数据的存储,还可以实现数据分析、可视化。
我的使用
4.1. 机器人添加记录
通过点击机器人卡片上的【添加到多维表格中】按钮,一键将聊天记录、总结内容保存到表格中。
暂时无法在飞书文档外展示此内容
// 新增记录示例代码
// appToken: https://open.larkoffice.com/document/server-docs/docs/bitable-v1/notification
// tableId: https://open.larkoffice.com/document/server-docs/docs/bitable-v1/notification
const addRecordToLarkExcel = async (valueObj, token) => {
const result = await fetch(`https://open.larkoffice.com/open-apis/bitable/v1/apps/appToken(自行获取)/tables/表格Id(地址栏上有)/records/batch_create`, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8', // 如果发送JSON数据
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
records: [
{
fields: {
标题: valueObj.title,
话题内对话内容: valueObj.content,
AI给出的建议: valueObj.suggest,
记录时间: new Date().getTime(),
任务状态: "待跟踪",
}
}
]
}),
}).then(res => res.json())
return result;
}
4.2. 仪表盘监控
可以快速添加一些图表来从各种视角看数据表,这里我们按
解决状态、近90天趋势两个视角来看数。
四、最终效果
1. 机器人使用效果
2. 周报使用效果
五、后续规划
目前它的已涵盖了
【反馈】→【讨论】→【记录】→【回顾】四个能力,属于是可以用起来的阶段啦~
同时对于它的一些后期构想我们简单列了下,如:
- 使用机器人定期(如周五上午)向业务群内推送目前的各种任务的状态,
并让大模型根据项目管理经验,给出一些管理上的建议 - 补充一些其他机器人,当讨论问题时,没太有思路的时候,可以
@机器人给一些建议(把一些基建、项目管理、协作相关的知识放到coze的知识库)
六、One More Thing~
我是一个喜欢新事物的同学
2012~2015这几年,正是手机行业井喷的几年,也正是我的高中时代
我前后折腾了不下30款手机
三星、LG、小米、魅族、海信、摩托、天语、黑莓......
塞班S40、塞班S60、原生安卓、黑莓、MIUI、Flyme、WP......
品牌多到我好像真的两只手... 都数不过来...
但是,自从19年工作至今,近5年的时间里,我只换了两个手机,红米k20pro 和 小米11
那股想折腾、喜欢新鲜事物的劲儿,好像一夜之间就没了
“我好像对现在的手机提不起兴趣了,没一个心动的...”
“不是你的原因,是现在的手机之间越来越没有差异了”
“或许是这样的...”
可是就在最近,我关注并入手了一款显示器,它让我有了久违的对电子产品的那种心动的感觉...
“它与其他显示器,有那么一点不一样,因为它是为程序员专门设计的”
有趣的显示比例
首先我对显示器的要求一点儿也不高,我不是一个狂热爱好者,我之前秉持的理念是:“能用就行,好用更好”。
公司和家里都有显示器,4K 27寸,16:9
这是一个非常常见的配置,长得扁扁长长,好像无论你到哪里,都能看到这种比例的显示器。
就像... 我杂乱的工位上的傻乎乎的它...
而这次入手的显示器就很不一样!它的比例很少见:4K 28寸,3:2
具体什么样呢?大概是......?
哈哈哈,我第一反应也是如此,不过它是这样的!
新的显示比例,带给我新的开发体验,我可以一屏看更多的代码了!(粗估能多展示近20%的代码)
这真的非常重要!
特别是在读代码的时候,大一些的屏幕,可以有更强一些的掌控感~
极致的显示效果(for程序员)
之前看过很多显示器的评测,大多数在显示效果上都是for剪辑、设计师这些同学,因为他们对色彩要求更高,这我能理解。
但是!
真正for程序员群体的显示器调优,我认为也是非常有必要的!(中国有那么多程序员,那么多不差钱的程序员😁)
我放几张图来直接展示它的极致点吧!
1. 深得我心的专业编程模式
可以看到右侧,在专业编程模式下,它的黑色更纯粹,代码仿佛要从背景中凸出来一样,体验真的会好上很多!像什么呢?好像是眼镜刚刚被擦干净,戴上的那一瞬间。
来看下效果!
想进入编码模式,也不需要多复杂的切换,只需要点一下功能栏中央的编程触键,就能丝滑切换到专业编程模式啦!
2. 惊艳的抗反光效果
如果有工位在窗户边上的同学难免会遇到有出现光源直射的情况,屏幕上的眩光会极大的干扰我们的编码工作,而这款显示器搭载了抗反射涂层,能有效避免屏幕眩光。
3. 有点意思的配套软件
显示器还搭配了明基自研的display pilot2软件,能在电脑上就调整显示器相关参数设施,还支持便捷的桌面分区、快捷键,以及我最感兴趣的功能——应用颜色模式 ,可以给不同软件设置自己专属的颜色模式,告别一刀切模式!
这样在不同的编辑器、浏览器等,我们可以case by case的处理其颜色模式,在每种场景都能展示最优的效果!
以上
以上几点就是这款显示器让我非常感兴趣的几点,也在此推荐给热爱编程的同学~
我觉得它真的是站在程序员的角度上认真考虑过的,每个卖点都挺让我心动,特别是那个3:2的屏幕哈哈哈,真爽呐!
这maybe是一个软广,占用了你一定的时间,不过如果感兴趣,真的可以去搜搜看~ 它的型号是:
明基 RD280U
感谢你的阅读~