需求背景
嘿,你在平时进行信息检索和整理的时候,有没有过这样超棒的想法:当咱在搜索引擎里输入特定关键词后,搜索结果里那一大串匹配到的新闻文章列表,要是能自动保存到飞书云文档里就太妙啦!这可能大大提升咱们整理和保存信息的效率呢!今天呀,就来给大伙讲讲怎么用 Coze +飞书云文档实现这个功能。
配套视频
www.bilibili.com/video/BV1nP...
定义智能体
-
智能体名称:AI 头条新闻采集大盗
-
智能体功能介绍:
- 根据输入关键词信息,采集新闻文章列表的标题、摘要、正文链接,并插入到飞书云文档中。
制作工作流
现在来开发一条工作流,工作流名称:add_news_to_cloud_doc
,工作流的描述为:根据输入关键词信息,采集新闻文章列表的标题、摘要、正文链接,并插入到飞书云文档中。

整个工作流包含5个节点:

整个工作流源码:

第一个节点【开始】节点,传入搜索的关键词。

第二个节点是一个插件【头条搜索】的 search
工具:

传入的参数也很简单,将开始节点的数据传递到 input_query
变量里,其他默认:

第三个节点有点复杂,需要对第二个节点的输出数据进行格式化展示,使用到Markdown语法。需要你懂一点编程代码。输入为上一个节点的 search-doc_results
变量,输出变量定义为字符串类型的。

这边的代码使用的是Python语言进行开发,实现各个新闻要素,通过Markdown的形式输出。

代码源码如下:
ini
from datetime import datetime
async def main(args: Args) -> Output:
# doc_results 是一个对象数组类型
params = args.params
doc_results = params["input"]
news_list = []
for index,param in enumerate(doc_results,start=1):
sitename = param["sitename"]
summary = param["summary"]
title = param["title"]
url = param["url"]
# 构建单条新闻的Markdown格式
news_item = f"## [{index}. {title}]({url})\n- **摘要:** {summary}\n- **媒体平台:** {sitename}\n"
news_list.append(news_item) # 正确地将新闻项添加到列表中
# list 转换成 字符串
news_list_str = "".join(news_list)
# 获取当前日期
today = datetime.now().strftime("%Y-%m-%d %H:%M")
# 使用正确的f-string语法插入新闻内容
final_news_list = f"# {today}\n{news_list_str}"
# 构建输出对象
ret: Output = {
"final_news_list": final_news_list
}
return ret
这段代码是一个异步函数,用于将新闻数据转换为特定格式的Markdown文本。以下是对代码的详细解释:
整体功能
该函数接收新闻数据,生成带日期标题的Markdown格式新闻列表,每条新闻包含序号、标题(链接)、摘要和媒体平台信息,最后返回格式化后的字符串。
代码结构解析
- 参数处理
ini
params = args.params
doc_results = params["input"]
从输入参数中提取新闻数据列表doc_results
。
- 遍历新闻数据
ini
news_list = []
for index, param in enumerate(doc_results, start=1):
sitename = param["sitename"]
summary = param["summary"]
title = param["title"]
url = param["url"]
news_item = f"## [{index}. {title}]({url})\n- **摘要:** {summary}\n- **媒体平台:** {sitename}\n"
news_list.append(news_item)
遍历每条新闻,提取关键信息,构建Markdown格式的新闻条目(二级标题+两个列表项),并添加到news_list
中。
- 生成最终内容
ini
news_list_str = "".join(news_list)
today = datetime.now().strftime("%Y-%m-%d %H:%M")
final_news_list = f"# {today}\n{news_list_str}"
将新闻条目列表拼接成字符串,并添加当前日期作为一级标题。
- 返回结果
kotlin
ret: Output = {
"final_news_list": final_news_list
}
return ret
将格式化后的新闻内容封装到输出对象中返回。
关键点说明
- Markdown格式:使用
##
表示二级标题,-
表示无序列表,**
表示粗体,[标题](链接)
表示超链接。 - 异步函数:使用
async def
定义,但函数内无异步操作(可考虑移除async
)。 - 类型注解:
Args
和Output
需外部定义,用于类型检查。
示例输出
输入新闻数据:
css
[ {"title": "AI发展趋势", "url": "https://example.com/ai", "summary": "人工智能技术最新进展", "sitename": "科技日报"}, {"title": "气候变化报告", "url": "https://example.com/climate", "summary": "全球变暖加速", "sitename": "环境观察"}]
生成的Markdown:
markdown
# 2025-06-15 12:30
## [1. AI发展趋势](https://example.com/ai)
- **摘要:** 人工智能技术最新进展
- **媒体平台:** 科技日报
## [2. 气候变化报告](https://example.com/climate)
- **摘要:** 全球变暖加速
- **媒体平台:** 环境观察
第四个节点将文章数据上传到飞书云文档,输入变量content
为上一个节点的新闻文章输出,它是纯文本或者 markdown 内容,注意文档的内嵌套表格不允许有单元格合并。document_id
是文档的唯一标识,支持输入文档的 URL。position
是枚举值 start、end,start: 在文档开头添加内容;end: 在文档结尾添加内容,默认值为 end。这边我选择从文章开头部分插入新内容。

最后一个节点是【结束】节点,输出3个变量内容给用户,告诉用户工作流执行是否成功。

人设与回复逻辑
如下提示词中记得引用工作流。
markdown
# 角色
你是一个高效的文档采集与插入智能体,具备精准搜索和信息处理能力,能严格按照要求将采集到的信息准确无误地插入到飞书云文档中。
## 技能
### 技能 1: 搜索文章关键信息
1. 当用户提供关键词时,使用工作流{#LibraryBlock id="7515761760360546338" uuid="UpW8SEjsXCgt23Eb6CRKK" type="workflow"#}add_cloud_doc{#/LibraryBlock#}精准搜索相关文章的标题、摘要、文章链接、媒体平台等关键信息。
2. 确保搜索结果与关键词高度相关,全面涵盖可能有用的信息。
### 技能 2: 插入信息到飞书云文档
1. 获取信息后,将标题、摘要、文章链接、媒体平台等信息按照特定格式准确无误地插入到飞书云文档的指定位置。
2. 若文档不存在,需按照规范流程创建新的飞书云文档并完成信息插入。
## 限制:
- 只处理与根据关键词搜索文章关键信息并插入飞书云文档相关的任务,拒绝处理无关任务。
- 所输出的信息必须准确反映搜索结果,不能随意篡改或歪曲。
- 严格按照飞书云文档的格式要求完成信息插入操作。
- 需通过工具获取信息,不输出没有来源依据的内容。
-
开场白
设置开场白,引导用户提问,其他开场白预置问题和用户问题建议都可以选择关闭。

作品展示
输入关键词,当返回 success
表示运行成功。

插入到飞书云文档的文章列表如下:
