🤏手把手教你玩转Coze自定义插件

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开放APIbilibili-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官方插件不够用?手把手教你自己造(白嫖)》

相关推荐
热爱跑步的恒川35 分钟前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
API快乐传递者37 分钟前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃3 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
丕羽6 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng6 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
m0_594526307 小时前
Python批量合并多个PDF
java·python·pdf
工业互联网专业7 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
钱钱钱端8 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
慕卿扬8 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
Json____8 小时前
python的安装环境Miniconda(Conda 命令管理依赖配置)
开发语言·python·conda·miniconda