Datawhale干货
作者:张浩远,Datawhale开源贡献者
Datawhale干货
作者:张浩远,Datawhale开源贡献者
7 月 26 日,Coze开源核心产品 Coze Studio & Coze Loop 的消息火了,在GitHub已经斩获19k+ Star。

- Coze Studio:低代码可视化 Agent 工厂,支持工作流编排与知识库管理
- Coze Loop:生产级观测平台,实时追踪 Agent 调用链与性能指标
这次Coze 开源对开发者利好的是采用了 Apache 2.0 许可:
- 无限制商用:Apache 2.0 允许用户将 Coze Studio 和 Coze Loop 用于商业项目,无需向字节跳动支付费用或分成。
用开源版 Coze,复刻一个更聪明的滴答清单
这几天在研究 Coze Studio 和 Coze Loop,本想只是动手试试火山引擎的部署流程,没想到顺手就搭出了一个挺实用的 Agent 应用:
一个「AI 任务播报员」,替我从滴答清单中自动提取当天最重要的任务,用自然语言生成摘要,9 点准时发到飞书群里提醒我开工。
对我来说,它已经不是一个被动记录任务的工具,而是一个主动推我去做事的助理。
重点是,整个流程我只用了开源版 Coze,没写几行代码。下面我拆解一下它是怎么做的,以及为什么选了 Coze 开源版。
为什么不是直接用滴答清单,而是“复刻”它?
滴答清单本身很好用,但它主要还是一个记录工具。如果任务多了,它的提醒方式很难形成“主动干预”:
-
今天应该做哪几件最重要的事?它不会自动筛选。 -
如何提醒我去做?靠的是我自己去点开列表看。 -
能不能把任务摘要直接发到飞书?目前官方没有。
这些能力其实 AI 很擅长,但要打通任务系统、定时触发、生成文本,还得考虑数据私有化。如果用外部服务,很容易牵涉到权限暴露或隐私风险。
所以我决定:干脆自己搭一个。
01 Demo 效果预览:一个主动执行的AI任务助手
每天早上 9 点,我的飞书群会收到这样一条自动播报:

背后的流程全自动执行,数据只从我自己的滴答清单拉取,模型分析后自动生成总结。
这个 Demo 本质上实现了三件事:
-
1. 智能筛选:从任务中提取“今天&高优先级”的事项 -
2. 自然语言总结:用 LLM 输出几十字中文摘要 -
3. 主动推送:通过飞书机器人提醒我,完全无感操作
02 Coze 开源版 + 火山引擎一键部署
整个系统我用了两个核心组件:
- Coze Studio
- 火山引擎一键部署
过去开源项目的本地部署通常涉及 Docker 环境配置、依赖安装和网络调试,过程耗时且易出错。火山引擎针对 Coze Studio 和 Coze Loop 提供了官方的一键自动化部署方案,大幅简化了部署流程。
一键部署地址:
https://www.volcengine.com/activity/dev-coze-studio
访问入口: 打开上述链接

页面下滑点击 「立即部署」。

再跳转页面,输入登录邮箱

完成支付: 确认订单并支付(平台自动完成后续所有操作,授权、开通ECS(云服务器)服务、配置环境、拉取镜像、启动服务……)。
获取访问地址: 部署成功后,页面将直接提供 Coze Studio 的公网访问地址。

登录 Coze Studio:
- 打开获取到的公网地址。
- 使用前面填写邮箱和密码(邮箱一致)进行注册/登录(首次登录选择“注册”)。

进入工作台: 登录成功,即可进入您专属的 Coze Studio 后台工作空间。

这是目前国内最适合部署和体验Coze开源版的云。可以支持以下的功能:
- 零配置: 自动化完成 ECS 实例开通、环境配置、镜像拉取和服务启动,开发者无需手动干预。
- 快速启动: 分钟级完成部署,立即可用。
- 弹性伸缩: 资源支持按需弹性扩容。测试完成后可快速销毁实例,避免资源闲置浪费(按小时计费)。
- 官方优化: 作为字节跳动旗下云服务,火山引擎对 Coze 开源组件提供深度优化支持。
- 生产部署: 据官方信息,未来将支持更灵活的生产级部署架构(如独立数据库、中间件),便于支撑企业级应用。
完整的保姆级搭建教程
Coze Studio 的工作流长这样:
-
1. HTTP 请求节点:拉取滴答清单的任务数据 -
2. 代码节点:过滤今日未完成任务,按优先级排序 -
3. 大模型节点:调用豆包模型生成任务摘要 -
4. 飞书推送节点:把摘要消息推送到指定群组

1. 创建工作流
这里和我们日常使用的Coze 一样,先打开工作空间的“资源库”,在右边新建工作流

创建完成后,自动跳转到如下

2. 获取 滴答清单 Access Token和项目 ID
参考:https://developer.dida365.com/docs#/openapi
2.1 授权 URL,获取code
首先让我们打开“https://developer.dida365.com/manage”创建一个“Manage Apps”

URL 不填写,其他自定义

重定向 URL 填写“https://example.com”,保存

保存好了,让我们打开找到“Client ID”
- “Client ID”的值替换下面代码块中“YOUR_CLIENT_ID”
- “state=123”的 123替换为“Name”,比如“state=Coze-cs”
https://dida365.com/oauth/authorize?client_id=YOUR_CLIENT_ID&scope=tasks:read&response_type=code&redirect_uri=https://example.com&state=123

替换后,如下跳转认证

点击允许

到这里我们就获取了“code”,在下面这个例子中code=lt481B

2.2 用 code 换取 Access Token
-
拼接字符串
将 client_id 和 client_secret 拼接,中间用冒号(:)分隔,比如:
bv90T3y3Z9siJH9vBG:nC1*T#ouw)v5T3Y@3D#J2ytG)#omRYY)
将上述字符串进行 Base64 编码。你可以使用在线工具(如 Base64 Encoder)或编程语言来完成这一步,输入后点击编码即可:

在我们工作流页面新建HTTP 节点,点击“导入 cURL”

复制下面代码块到“导入 cURL”的编辑页面
把刚才获得的编码“YnY5MFQzeTNaOXNpSkg5dkJHOm5DMSpUI291dyl2NVQzWUAzRCNKMnl0Rykjb21SWVkp”替换下面“编码”,上面获取的“code”替换下面的“代码”
curl -X POST https://dida365.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Basic 编码" \
-d "grant_type=authorization_code&code=代码&redirect_uri=https://example.com"

导入之后试运行,返回 200 代表正常
这里我的code超时了,重新获取了一遍

在这次返回的输出中,找到“access_token”的值“7eae2693-7299-4590-89aa-0e8c1690992d”后,让我们继续下一步

2.3 获取项目列表
在我们 HTTP 节点,点击“导入 cURL”,记得把上文的“access_token”替换一下
curl -X GET "https://api.dida365.com/open/v1/project" \
-H "Authorization: Bearer 7eae2693-7299-4590-89aa-0e8c1690992d"

然后点击试运行,在输出的结果中找到我们清单的项目,保存 ID“6891ac31e4b02778a09964ee”

2.4 获取某个项目中的任务
把下面的代码块中的 ID 替换为刚才获取的 ID,,点击试运行
https://api.dida365.com/open/v1/project/6891ac31e4b02778a09964ee/data

3. 格式化滴答清单内容
复制下面代码到 Coze 代码节点的 IDE 中
import json
from typing import Any, Dict, List
async def main(args) -> Dict[str, Any]:
"""从输入参数提取任务关键字段"""
# 获取输入参数
params = args.params
input_data = params.get('input', '')
# 准备空任务列表作为默认结果
extracted_tasks: List[Dict[str, Any]] = []
try:
# 解析输入的JSON字符串
input_obj = json.loads(input_data)
# 提取任务数组
tasks = input_obj.get('tasks', [])
# 提取每个任务的指定字段
for task in tasks:
extracted = {
"title": task.get("title", ""),
"content": task.get("content", ""),
"startDate": task.get("startDate", ""),
"dueDate": task.get("dueDate", ""),
"priority": task.get("priority", -1)
}
extracted_tasks.append(extracted)
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}")
except Exception as e:
print(f"处理任务时出错: {e}")
# 构建返回对象
return {"tasks": extracted_tasks}
修改输入、输出变量
- input——String——链接 HTTP 的body
- tasks——Array<Object>

4. 获取当前时间
复制下面代码到 Coze 代码节点的 IDE 中
import asyncio
from datetime import datetime, timezone, timedelta
async def main(args) -> dict:
# 获取当前UTC时间并转换为北京时间 (UTC+8)
utc_now = datetime.now(timezone.utc)
beijing_tz = timezone(timedelta(hours=8))
beijing_now = utc_now.astimezone(beijing_tz)
# 格式化日期组件
year = beijing_now.year
month = str(beijing_now.month).zfill(2)
day = str(beijing_now.day).zfill(2)
# 构建 ISO 8601 格式的日期字符串
date_string = f"{year}-{month}-{day}"
# 返回北京时间结果
return {"time": date_string}

修改输出变量
- 不需要输入
- time——String

5. 大模型节点
新建大模型节点

修改提示词、输入
今天是 {{time}},以下是滴答清单中今天的任务:
{{tasks}}
请用简洁的中文总结今天需要完成的事情,按优先级排序。

好的,做完之后链接闭环

6. 运行效果截图
不需要输入内容,试运行输出:

作为一个开发者,我在这次尝试中体验到了 Coze 开源带来的几个优势:
- 流程可视化:像搭积木一样拖节点,数据流、模型调用、HTTP 请求都能串起来。
- 自定义扩展:所有逻辑都在我控制下,要接哪个平台、加什么字段都很灵活。
- 私有部署:配合火山引擎一键部署,环境预配置好,隐私数据自己托管。
- 模型灵活接入:我用了豆包模型,响应速度快,多模态理解也强,生成效果很满意。
写在最后:开源带来的不仅是自由,更是起点
以前想搭一个自动播报任务的助手,意味着要从零写完后端逻辑、调度系统、模型集成,甚至部署上线都要一整套手动配置。但现在,只用开源 Coze 搭配火山引擎云服务,整个链路几乎可以拖拉拽完成,代码量也压缩到极小。这不仅降低了 Agent 应用的门槛,也让更多非 AI 背景的开发者能加入其中,做出真正实用的小应用。
Coze 开源版本身足够灵活,能轻松集成外部模型服务,而火山引擎围绕 Coze 开源版所提供的云资源、部署工具和开发支持,也进一步降低了实践门槛。此外,像 Responses API 和模型托管等服务,也为后续扩展更复杂的智能体能力打下了基础。
对开发者来说,这次开源带来的不只是“自由改造”的空间,更是一次“轻量试错”的机会。用很低的成本,就可以跑通一个实际落地的 AI Agent。不再局限于实验室,也不再只是大厂内部工具,而是让每一个开发者都能用得起、跑得起、做得出。
这是技术普惠真正的样子:让更多人参与到智能体时代的建设里来。
仓库地址和一键部署入口都放在文末👇
Coze Studio(Agent 开发平台):https://github.com/coze-dev/coze-studio
火山引擎一键部署:https://www.volcengine.com/activity/dev-coze-studio

(文:Datawhale)