1. 引言
今天摸🐟的时候,无意间👀到掘金又上线了新的搭 Bot活动 → 《Code Infinity:AI Bot 技术挑战赛》
😮 哦豁,上线了 💥插件编辑IDE ,点开《扣子帮助文档》发现更新了不少内容,比如 工作流的Code节点 多了内置三方依赖库的介绍:
🙋♂️ 然后,活动的参加方式:
- ① 搭 🤖 Bot并上架至扣子商店且并发布到掘金平台 ,不能是纯Prompt的Bot ,需要用到 插件、工作流、知识库 等特别能力,可自研插件。
- ② 在掘金 AI Bot技术挑战赛 话题下发布一篇文章,分享 Bot简介、构思、技术实现原理、后续使用场景、商业化场景分析等,文尾需附上自己的 BotID。
😏 接着,活动奖项中的这几个奖项的 评选规则:
- AI Bot 技术先锋奖 → 必须有自研插件。
- AI Bot 创意火花奖 、AI Bot 技术之光奖 → 有自研 工作流/插件 可加分。
😆 所以,尝试 自研插件 不失为一种提高获奖概率的方法,自研👂着很难?其实不然,插件的本质 → API接口调用的封装,🤡 本节就让杰哥手把手教你玩转Coze自定义插件吧 ❗️
🤐 在讲解具体执行技术前, 目前都有哪些可用的 扣子官方插件 ,方便读者在搭Bot时可以 快速定位所需插件 (62个) :
插件工具名 | 所属插件 | 工具作用 |
---|---|---|
DayWeather | 墨迹天气 | 获取指定日期的天气 |
getRoute | 飞常准 | 获取航班列表 |
SearchHotels | 猫途鹰 | 根据城市名称、入住日期和退房日期搜索酒店。 |
SearchFlights | 猫途鹰 | 根据出发地、目的地、日期、行程类型、排序顺序、成人数量、老年人数量和服务等级搜索航班。 |
job_recommendation | 猎聘 | 帮助用户搜索工作招聘,基于用户的工作经验、教育经历、地理位置、薪水、职位名称、工作性质等 |
ExpressDeliveryPlugin | 国内快递查询 | 快递状态查询 |
SecondHandHouse | 幸福里 | 如果想要购买二手房或者查询二手房信息的时候可以使用此工具,输入二手房的城市、户型、小区名称等,可以获取二手房所在的区域,房子图片,二手房总价,每平米价格等信息 |
NewHouse | 幸福里 | 如果你想买新房,可以先用这个工具获取新房的信息,输入想要的户型、区域、城市、小区名称等,可以获取新房的具体信息,包括房子图片,价格,每平米价格等 |
HouseRenting | 幸福里 | 通过此工具获取租房的信息,包括房子所在的区域,小区名称,房子图片,租房的价格 |
search_train_ticket | 携程旅行 | 查询火车票或者高铁票信息,并返回购票链接 |
search_site | 携程旅行 | 查询景点,可以根据景点名称查询。还可以查询某个城市有哪些景点 |
search_hotel | 携程旅行 | 查询酒店,根据酒店名称查询具体酒店。还可以查询某个城市有哪些酒店 |
search_flight_ticket | 携程旅行 | 帮助用户获取机票信息,用户需要输入出发地、目的地 |
smzdm_haojia_articles | 什么值得买 | 帮助用户查询商品的优惠信息,根据用户输入的商品相关提问,返回商品概况、价格、购买渠道、性价比推荐等信息,并给出优惠商品的链接地址 |
get_job | 智联招聘 | 帮助用户根据职位名称、薪水、工作地点、学历、工作经验、公司名称、公司性质等条件搜索智联招聘上提供的招聘信息 |
bingWebSearch | 必应搜索 | 必应搜索引擎。当你需要搜索你不知道的信息,比如天气、汇率、时事等,这个工具非常有用。但是绝对不要在用户想要翻译的时候使用它。 |
browse | 头条搜索 | 从url链接获取正文信息 |
search | 头条搜索 | 搜索用户询问的内容 |
web_pilot | WebPilot | WebPilot 进行互联网搜索、分析以及数据生成。 |
SecondHandCar | 懂车帝 | 当你查询二手车的售卖信息时候可以使用此工具,可以获得二手车的价格、二手车车况图片等信息 |
CarSeries | 懂车帝 | 当你需要查询新车信息或者查询某个特定车系(如宝马3系,奔驰e级)信息的时候可以使用此工具,可以获得新车价格,车辆结构,车辆生产年份,售卖链接等信息 |
xz_pair | 星座乐合集 | 当需要查询星座配对的时候,根据输入对应星座男和星座女即可调用星座配对插件查询配对指数,当用户给的信息不完善的时候,给用户返回固定的话术:需要给我信息是:xx座男和xx座女的星座配对 |
xz_luck | 星座乐合集 | 当需要查询星座运势的时候,根据输入对应星座即可调用星座运势插件查询运势,用户必须输入对应星座和年月日等信息查询运势,当用户给的信息不完善的时候,给用户返回固定的话术:如果想知道具体星座运势,需要给我信息的是:xx座xxxx年xx月xx日星座运势 xx座xxxx年xx月星座运势 xx座xxxx年星座运势 |
xz_zgjm | 星座乐合集 | 根据输入的解梦标题给出相关对应的解梦内容,如果返回的内容为空,给用户返回固定的话术:如果想了解自己梦境的详细解析,需要给我详细的梦见信息,例如: 梦见XXX |
xz_sxys | 星座乐合集 | 根据输入的生肖名称和查询年月日给出相关生肖对应的运势内容,如果返回的内容为空,给用户返回固定的话术:如果想获得自己生肖相关运势,需要给我信息的是: 属x的xx年xx月xx日生肖运势 属x的xxx年生肖运势 属x的xx月生肖运势 |
xz_sxpair | 星座乐合集 | 当需要查询星座配对的时候,根据输入对应生肖男和生肖女即可调用生肖配对插件查询配对指数,当用户给的信息不完善的时候,给用户返回固定的话术:需要给我信息是:生肖x男和生肖x女的生肖配对 |
BankInterestRate | 国内银行利率 | 银行利率查询,可查询指定银行的贷款利率、存款利率、公积金利率 |
text2image | ByteArtist | 通过文字描述生成图片,一次只能生成一张图片。 |
image2image | ByteArtist | 根据用户给的图片和描述生成新的图片,一次只能生成一张图片。 |
new_year_pets_image | ByteArtist | 提供新春萌宠图片生成,当用户上传宠物图片或者提供图片链接时,可以用此工具生成新的新春萌宠图片 |
ImageToolPro | ByteArtist | 根据用户的描述生成多种风格的图片 |
imgUnderstand | 图片理解 | 回答用户关于图像的问题 |
bingImageSearch | 必应图片搜索 | 必应图像搜索API允许您的用户在全球范围内找到图片。 |
LinkReaderPlugin | Link Reader | 当你需要获取网页、pdf、抖音视频内容时,使用此工具。可以获取url链接下的标题和内容。 |
CodeRunner | 代码执行器 | 这个插件将被调用来运行python代码并在60秒内获取结果,尤其处理数学、计算机、图片和文件等。首先,LLM将分析问题,并用python输出解决这个问题的步骤。其次,LLM立即生成代码,按照步骤解决问题。LLM会参考错误消息调整代码,直到成功。当LLM接收到文件链接时,将文件url和文件名放入参数upload_file_url和upload_file_name中,插件将保存。 |
query | Wolfram Alpha | 算式计算,如1+1=2。如果输入的不是数学表达式,需要将输入转换成数学表达式并添加"()"以确保运算的顺序。如果计算失败,尝试再次调用此工具。 |
createDocument | 飞书云文档 | 这是一个可以根据用户输入或者要记录的 Markdown 字符串和总结的标题来创建云文档的工具。 |
GenPdf | Doc Maker | 从您提供的文本生成PDF。 |
AiPPT | AiPPT | 新一代的AI人工智能产品。最快10秒一句话智能生成PPT,自动生成大纲内容,自动选择和设计幻灯片的布局、颜色和字体,自动配图,拥有海量版权模板 ,支持在线编辑、演示、下载、存储等功能。通过先进的AI技术,助您提高学习办公效率。 |
generateTreeMind | TreeMind树图 | AI思维导图软件,输入3000字内的内容一键生成导图,支持脑图、逻辑图、树形图、鱼骨图、组织架构图、时间轴等多种结构,助您高效学习与工作。默认返回给用户思维导图的url(pic),和对应的编辑地址(jumpLink) |
Image2text | OCR | 图片转文字 |
ForexTrendPlugin | 外汇走势 | 外汇走势 |
read_notion_page | Notion | 通过标题读取用户空间中的Notion页面 |
get_notion_document_info | Notion | 获取Notion文件信息 |
write_page_content | Notion | 为用户提供向Notion页面写入内容的功能 |
ckt_intelligent_design | 创客贴智能设计 | 输入设计需求,即刻生成精美设计图;涵盖手机海报、宣传图、电商图、店铺广告、日签、社交媒体配图等多样场景。 |
SearchStockData | 新浪财经 | 根据关键词或者股票代码搜索股票信息,包括财务状况以及市场信息。例子:贵州茅台、600519 |
GetExchangeRate | 新浪财经 | 该工具提供汇率查询能力,入参中的from和to只能是货币代码 |
SearchStockData | 新浪财经 | 根据关键词或者股票代码搜索股票信息,包括财务状况以及市场信息。例子:贵州茅台、600519 |
GetExchangeRate | 新浪财经 | 该工具提供汇率查询能力,入参中的from和to只能是货币代码 |
ip_location | IP地址定位 | ip地址定位,通过ip地址查询归属地,如国家,省份,城市等信息 |
getToutiaoNews | 头条新闻 | 搜索新闻讯息 |
get_video | 抖音视频 | 可以获取抖音视频, 返回字段中的search_id可以保证下次搜索结果与本次搜索不重复,如果有相关分页需求可以把search_id加到请求参数中 |
ToutiaoVideoSearch | 头条视频搜索 | 当你需要查找头条上的视频时,可以使用此插件 |
DouyinVideoSearch | 字节内容搜索 | 获取抖音app的竖版小视频 |
ShortContentSearch | 字节内容搜索 | 获取头条app的微头条 |
XiguaVideoSearch | 字节内容搜索 | 获取西瓜app的横版短视频 |
BaikeSearch | 字节内容搜索 | 获取抖音百科的词条内容 |
ToutiaoArticleSearch | 字节内容搜索 | 获取头条app的文章 |
SmartSearch | 字节内容搜索 | 获取抖音视频、西瓜视频、抖音百科、头条文章、微头条等字节系内容,搜索结果将多体裁混排输出 |
top_news | 搜狐热闻 | 帮助用户获取搜狐网上的每日热闻 |
ToutiaoPictureSearch | 头条图片搜索 | 头条图像搜索API允许用户在头条站内内查找图片。 |
2. 基于已有服务创建
🐶 就是老的那套创建插件的玩法,找个 外部API接口 ,配置下调用规则:
- 插件 → 指定【BaseURL + 默认请求头】
- 插件工具 → 指定【调用接口、输入/输出参数】
插件工具 是 插件 的 子集 ,调用同一插件下的不同插件工具,本质上就是调用 同一域名下的不同接口。
2.1. 创建插件
😄 点击左侧导航栏的 工作区 ,选择 指定团队/个人空间 ,点击顶部的 插件 选项,点击 创建插件 ,然后会弹窗让你 完善插件配置:
- 插件图标:单击默认图标后,你可以上传本地图片文件作为新的图标。
- 插件名称:自定义插件名称,用于标识当前插件。建议输入清晰易理解的名称,便于大语言模型搜索与使用插件。
- 插件描述:插件的描述信息,一般用于记录当前插件的用途。
- 🌟插件工具创建方式 :选中 基于已有服务创建。
- 插件 URL :插件的访问地址或相关资源的链接。例如:www.example.com/api。
- Header 列表:HTTP 请求头参数列表。你需要根据 API 自身的参数配置要求来填写。
- 授权方式:选择插件的鉴权方式,目前支持三种:不需要授权、Service (秘钥或令牌)、Oauth (标准模式)。
2.2. 创建插件工具
配置完点 确认 ,页面会跳转已创建的插件页,点击 创建工具 ,填写工具的 基本信息 (以WanAndroid API为例):
完成配置后点击 保存并继续 ,接着 配置输入参数,比如这里添加一个代表当前页数的page参数:
配置完点 保存并继续 ,紧接着 配置输出参数 ,这里可以手动一个个配,不过建议直接 自动解析,填写输入参数:
平台会根据API响应结果 自动配置输出参数:
点击 保存并继续 来到最后的 调试与检验 ,填写 输入参数 ,点击 运行:
显示 调试通过 的话,说明插件工具可以成功调用了,接着点 完成 ,会跳转到 插件详情页。
2.3. 发布插件
点击右上角的 发布 按钮,会弹出一个 个人信息收集声明 的页面,有就 前去填写 ,我们这里啥都没用到,点 直接发布:
发布完可以看到插件的状态变成 已发布:
😄 然后,如果你是在 个人空间 创建的插件,那只有你自己能调用,如果是在 团队空间 创建,那只有团队成员能调用。此时,你去 插件商店 搜索这个插件,是找不到的,想让所有人用上你的插件,你还需要 上架插件 ❗️
2.4. 上架插件
点击 插件商店 右上角的 上架插件 按钮,选中自己的插件,然后完善下 关于插件 ,选择一个 分类:
配置完,点击提交,然后 等待审核通过,就可以在插件商店搜到我们创建的插件啦~
2.5. 获取API接口的几个思路
自定义扣子插件的流程还是非常简单的,难点是去哪找 满足需求的API接口,传统常规思路有这些:
- 免费/开源接口 :如:玩Android开放API、bilibili-API-collect 等,这个得自己搜,Github上还挺多。
- 付费接口 :如:聚合数据,一般按照调用次数收费,也会提供一定的 免费调用次数(如50次/天),又比如GPT的三方中转API提供商,也有提供付费调用接口。
- 接口破解 :通过 抓包 、逆向破解APP 等方式获取私密API,Github上也有,自己捣鼓的话谨记偷着乐👮。
- 奇招:Mock API 返回固定响应数据。
- 😱 买云服务器自己提供接口:成本较高,首先你得买一个云服务器,然后有技术门槛,你得会一门支持后端的编程语言,然后把站点支棱起来,然后还有备案那些,还挺麻烦。
😏 然后,现在多了一个新的思路 → Coze IDE
扣子提供的在线编码和运行环境,允许您在多种技术栈中创建插件。待插件发布后,IDE 会帮助您托管运行代码,您 无需关心环境配置、服务部署 等步骤。此外,您可以使用 IDE 内置的 AI 助手获取代码方面的帮助,包括生成代码、修改代码、解释代码和添加注释。
接着演示下,如果创建一个获取 掘金作者文章列表 的插件~
3. 在 Coze IDE 中创建
3.1. 玩法速览
点击 创建插件 ,依次输入 插件名称、插件描述 ,插件工具创建方式选择 → 在Coze IDE中创建 ,IDE运行时 → Python3,点击 确认:
页面跳转已创建的插件页,点击 在IDE中创建工具 ,弹窗中输入 工具名称 和 工具介绍 ,然后点击 确定 ,此时会进入IDE的 代码编辑页:
然后点击 元数据 ,在此配置插件的 输入和输出参数:
接着点击 代码 选项,模拟请求需要用到对应的 依赖库 。代码节点里默认有个 async_requests ,点击左下角搜索没找着,那就直接用 requests 请求库:
点击下载后,控制会输出依赖包的安装进度:
随手写个简单的代码试试水 → 获取用户输入的 user_id 打印输出:
右边 测试代码 ,点自动生成会根据 元数据 配置的输入参数自动生成测试数据:
然后Coze IDE 还自带AI助手,支持代码的:生成 、修改 、解释 (/explain)、注释(/doc),可以通过快捷键 Ctrl + I 唤起:
最后编写的代码需要注意两点:
- 请勿删除或修改模板内的 handler 方法,否则将导致函数运行失败。
- 返回内容必须为 JSON 对象。
玩法大概就这些,更详细的内容可以自行翻阅官方文档:《使用 Coze IDE 创建插件》
3.2. 实战:查询掘金作者文章列表的插件
😄 就import下requests库,模拟请求下 api.juejin.cn/content_api...
python
from runtime import Args
from typings.user_article_list.user_article_list import Input, Output
import requests
def fetch_artcile_infos(user_id, cursor):
request_json = {"user_id": user_id, "sort_type": 2, "cursor": str(cursor)}
resp = requests.post("https://api.juejin.cn/content_api/v1/article/query_list", json=request_json)
return resp.text
def handler(args: Args[Input])->Output:
input_user_id = args.input.user_id
input_cursor = args.input.cursor
result = fetch_artcile_infos(input_user_id, input_cursor)
return {"message": str(result)}
随便输入一个作者的ID,然后运行试试:
可以看到右侧输出了作者的文章信息,接着就是做下 数据提取 ,按照 元数据配置的输出参数 进行返回~
python
from runtime import Args
from typings.user_article_list.user_article_list import Input, Output
import requests
request_headers = {
"Origin":"https://juejin.cn",
"Referer":"https://juejin.cn/editor/drafts/new?v=2",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}
# 文章信息类
class ArticleInfo:
def __init__(self, title=None, brief_content=None, view_count=0, collect_count=0, digg_count=0,
comment_count=0, tags=None, link_url=None):
self.title = title
self.brief_content = brief_content
self.view_count = view_count
self.collect_count = collect_count
self.digg_count = digg_count
self.comment_count = comment_count
self.tags = tags
self.link_url = link_url
# 转换为json数据
def to_json(self):
return {
"title": self.title,
"brief_content": self.brief_content,
"view_count": self.view_count,
"collect_count": self.collect_count,
"digg_count": self.digg_count,
"comment_count": self.comment_count,
"tags": self.tags if self.tags else [],
"link_url": self.link_url
}
def fetch_artcile_infos(user_id, cursor):
request_json = {"user_id": user_id, "sort_type": 2, "cursor": str(cursor)}
resp = requests.post("https://api.juejin.cn/content_api/v1/article/query_list", headers=request_headers, json=request_json)
article_info_list = []
if resp:
article_info = resp.json()
if article_info and article_info["data"]:
# 遍历提取文章数据
for article in article_info["data"]:
article_info_list.append(
ArticleInfo(title=article["article_info"]["title"],
brief_content=article["article_info"]["brief_content"],
view_count=article["article_info"]["view_count"],
collect_count=article["article_info"]["collect_count"],
digg_count=article["article_info"]["digg_count"],
comment_count=article["article_info"]["comment_count"],
tags=list(map(lambda x: x["tag_name"], article["tags"])),
link_url="https://juejin.im/post/" + article["article_id"]).to_json())
return article_info_list
def handler(args: Args[Input])->Output:
input_user_id = args.input.user_id
input_cursor = args.input.cursor
result = fetch_artcile_infos(input_user_id, input_cursor)
return {"article_list": result}
再次运行,输出结果就是我们元数据中预设的 输出参数 的格式了:
测试通过,点击右上角进行 发布:
静待 发布成功 ,在插件详情页就可以看到我们 基于 Coze IDE 创建 的插件工具啦~
然后,上架商店的流程和前面 基于已有服务创建 的方式一致,就不在赘述了。
🤔 个人感觉,Coze IDE创建插件 更像是 之前工作流代码节点 的 升级,玩法类似,但功能更强:
- 支持 自定义添加第三方库依赖,可以实现更复杂的代码逻辑。
- 插件封装代码运行细节 ,便于 复用及分享,之前的代码节点,想自己复用的话,得CV代码然后重新配置输入输出参数,想分享给别人用也得如此,非常麻烦。
😏 就提供了一个运行环境直接给你跑 Node.js/Python3 代码,不需要自己折腾服务部署和环境配置,真香 ❗️ 这两种创建插件的方式基本够用了,最后,顺带提下上面 获取API接口的几个思路 提到的 Mock API 返回API接口的玩法,感兴趣的可以选择性地往下阅读,不看也不影响你开发Coze插件哈😁~
4. 附:利用Mock API 实现自定义接口
Mock API
一种模拟的接口服务,用于在开发过程中模拟真实接口的行为和数据,以便于测试和开发前端应用而无需等待后端服务的实现。
简单点说就是:定义接口API ,写死返回的数据 ,每次请求这个API接口都会返回相同的数据 。以 ApiFox 为例讲解一波~
😄 注册账号登录后,点击我的团队,在 My Workspace 里新建一个项目,创建完,点击项目右上角的 请选择环境 ,点击 管理环境 ,定位到 云端Mock ,提示 未开启云端Mock功能 ,点击 去开启 ,跳转页面后,定位到 云端Mock 右侧的 开关,启用:
然后就可以在公网 访问到我们定义的API接口 了,点击复制URL,加上 pet/1,回车发起请求,可以看到返回的数据:
然后,可以配置 Mock期望 实现根据 不同的请求参数 ,返回不同的 响应数据 。另外,官方还提供了API,来 动态更新接口的返回数据,然后可以实现这样的玩法:
写个Python脚本定时请求聚合数据的接口,然后调用下apifox的接口更新下返回数据。
具体实现细节和相关代码可以看下笔者之前写的:《💁♀️Coze官方插件不够用?手把手教你自己造(白嫖)》