手把手教你玩转Coze自定义插件
点击关注公众号,“技术干货”及时达!
1. 引言今天摸??的时候,无意间??到掘金又上线了新的搭 「Bot活动」 → 《Code Infinity:AI Bot 技术挑战赛》(https://juejin.cn/post/7355439624100249635)
?? 哦豁,上线了 ??「插件编辑IDE」,点开《扣子帮助文档》(https://www.coze.cn/docs/guides/use_workflow)发现更新了不少内容,比如 「工作流的Code节点」 多了内置三方依赖库的介绍:
???♂? 然后,活动的参加方式:
① 「搭」 「??」 「Bot并上架至扣子商店且并发布到掘金平台」,「不能是纯Prompt的Bot」,需要用到 「插件、工作流、知识库」 等特别能力,可自研插件。② 在掘金 AI Bot技术挑战赛(https://juejin.cn/theme/detail/7355450385752358921?contentType=1)话题下发布一篇文章,分享 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」WebPilotWebPilot 进行互联网搜索、分析以及数据生成。「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库,模拟请求下 https://api.juejin.cn/content_api/v1/article/query_list,简单写下代码:
fromruntimeimportArgs
fromtypings.user_article_list.user_article_listimportInput,Output
importrequests
deffetch_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)
returnresp.text
defhandler(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,然后运行试试:
可以看到右侧输出了作者的文章信息,接着就是做下 「数据提取」,按照 「元数据配置的输出参数」 进行返回~
fromruntimeimportArgs
fromtypings.user_article_list.user_article_listimportInput,Output
importrequests
request_headers={
"Origin":"https://juejin.cn",
"Referer":"https://juejin.cn/editor/drafts/new?v=2",
"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/122.0.0.0Safari/537.36"
}
#文章信息类
classArticleInfo:
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数据
defto_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.tagsifself.tagselse[],
"link_url":self.link_url
}
deffetch_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=[]
ifresp:
article_info=resp.json()
ifarticle_infoandarticle_info["data"]:
#遍历提取文章数据
forarticleinarticle_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(lambdax:x["tag_name"],article["tags"])),
link_url="https://juejin.im/post/"+article["article_id"]).to_json())
returnarticle_info_list
defhandler(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官方插件不够用?手把手教你自己造(白嫖)》(https://juejin.cn/post/7340826749096230951#heading-4)
点击关注公众号,“技术干货”及时达!
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线