首个COZE应用开发实战篇

背景

​ 由于coze等智能体兴起,将脚本性项目(非复杂业务)平移到coze是一个不错的选择,由平台为你封装了流程与大模型相关,不仅可以实现组件化,获取到数据后,可以借助大模型进行一定的分析,也可轻松发布应用或者智能体。

初识coze

​ 过去一年是大模型兴起的一年,Agent+项目也同时兴起,字节coze 也是同时兴起,字节变态的执行力,很快在Agent市场占有一席之地;

​ 由于coze官网文档写的比较清晰,包括《使用指南》和《API 》再加上层出不穷的学习笔记,例如前字节AI产品经理,COZE深度开发者写了一篇《4万字教程-COZE/扣子与智能体入门》,所以笔者不在写全面教程,而是从一个新手入门实战项目中,重点攻克的问题出发,写今天这篇《首个COZE插件、workflow、应用开发》

准备工作

​ 由于是个人学习使用,暂时使用基础版本,后期如果需要项目上线或者其他限制,再升级为专业版。

功能模块 扣子基础版 扣子专业版
团队 每个基础版账号最多可创建 5 个团队。 每个基础版团队人数上限为 50 人。 每个专业版账号最多可创建 10 个团队。 每个专业版团队人数上限为 100 人。
知识库空间 1 GB,不支持扩容。 默认 10 GB,可购买额外的知识库空间。费用说明可参考知识库空间
多人协作 基础版团队空间中,最多 3 个智能体、3 个应用和 3 个工作流可开启多人协作模式,每个智能体、工作流或应用最多可添加 5 位协作者。 专业版团队空间中,支持开启多人协作的智能体、应用和工作流的数量无限制,每个智能体、应用和工作流最多可添加 100 位协作者。
工作流 基础版每个工作流每天最多试运行 500 次,否则会报错。试运行工作流指在扣子平台工作流编排页面试运行工作流。 专业版不限制试运行工作流的次数,无免费试运行额度,按照每次试运行消耗的模型 token 计费。
API 流控 发起对话 API 的流控限制为 10 QPS。 执行工作流执行工作流(流式响应)执行对话流 API 的流控限制为 100 QPS。 2024年8月15日之后,扣子 API 的免费额度为每个账号 100 次 API 调用。一旦累计调用次数超过免费额度,此账号将无法继续使用任何扣子 API。API 免费额度不适用于通过扣子平台、其他发布渠道或 SDK 产生的请求。 发起对话 API 的流控限制为 50 QPS。 执行工作流执行工作流(流式响应)执行对话流 API 的流控限制为 100 QPS。
模型流控 基础版用户调用发起对话执行工作流执行工作流(流式响应)执行对话流等涉及模型处理的 API 时,每个用户使用模型的频率受限。 模型的流控限制为: QPS:2 QPM:60 QPD:3000 专业版模型的流控限制取决于火山方舟平台中设置的 RPM,最大可设置为 12000。 设置方式可参考为扣子专业版接入模型。 如需提高频控,可通过工单平台沟通需求。
SDK Web SDK 的免费额度为每个账号 100 次对话。一旦累计对话次数超过免费额度,此账号将无法继续使用扣子 SDK。 免费额度不适用于通过扣子平台、其他发布渠道或直接通过 API 发起的请求。 频控 :不限制通过 SDK 和智能体对话的次数,但每个账号限制调用频率 RPM 12000。如需提高频控,可通过工单平台沟通需求。 费用 :使用 SDK 时,根据对话次数统计智能体调用次数,根据每次对话的 Token 统计方舟模型 Token费用。
方舟模型资源 不支持接入火山方舟模型资源。 模型列表 :支持通过火山方舟接入模型资源,支持的模型可参考火山方舟文档。根据扣子专业版计费方式收费。 频控 :智能体调用频率限制 RPM 12000。如需提高频控,可通过工单平台沟通需求。 费用 : 不限制智能体调用次数。在豆包中使用智能体不收取智能体调用费用,其他渠道根据扣子专业版计费方式收费。 根据 Token 收取火山引擎方舟模型费用。
免费豆包模型 模型列表 :支持豆包 Function call 等豆包免费模型版本。模型列表可参考大语言模型免费额度:对于使用豆包模型的智能体,扣子基础版提供智能体调用次数免费额度 500次/天,用量超出免费额度之后不可调用智能体。 2024年8月15日之后,免费额度调整,使用豆包模型的智能体在豆包渠道不限制请求次数,在其他渠道限制请求次数 100次/天。 暂不支持豆包 Function call 等豆包免费模型版本,但可以付费使用方舟提供的豆包模型版本。
其他免费模型 模型列表 :支持 Kimi、通义千问等模型,模型列表可参考大语言模型。不收取模型费用,但每日调用数量有一定限制。 免费额度:对于使用Kimi、通义千问等免费模型的智能体,扣子提供智能体调用次数免费额度 100次/天,用量超出免费额度之后不可调用智能体。 2024年8月15日之后,免费额度调整为: 通过扣子智能体商店、豆包、掘金调试或调用智能体时,限制调用 50次/天。 通过抖音、微信、飞书渠道调用智能体调用次数限制调整为免费体验累计 100 次智能体调用,包括使用扣子支持范围内所有模型的智能体。 模型列表 :支持 Kimi、通义千问等模型,模型列表可参考大语言模型。不收取模型费用,但每日调用数量有一定限制。 免费额度:对于使用Kimi、通义千问等免费模型的智能体,扣子提供智能体调用次数免费额度 100次/天,用量超出免费额度之后不可调用智能体。

基本概念

​ 了解COZE 中的插件、workflow、应用、Agent/Bot 等概念:

  1. 首先 COZE 存在形式有两种,一是应用、二是智能体,Agent/Bot都是智能体不同叫法。由于笔者需要做的是应用,所以本篇侧重应用实战。

  2. 插件概念:插件可以理解为单一功能的工具,需要注意的是,单一插件执行有超时限制。(支持python语音和nodejs)

  3. 注意:如果工作流或节点运行超时,智能体可能无法提供符合预期的回复。各场景的超时时间说明如下:

    • 未开启工作流异步运行时,工作流整体超时时间为 3 分钟,模型节点 3 分钟,IDE 插件节点 1 分钟,其他类型的插件节点 3 分钟,其他节点 1 分钟。

    • 开启工作流异步运行后,工作流整体超时时间为 24 小时,模型节点 5 分钟,IDE 插件节点 1 分钟,插件节点 3 分钟,其他节点 1 分钟。

    • 一次对话中,智能体连续两次回复的时间间隔限制为 2 分钟。

    • 由于插件超时问题,在爬虫项目中必须攻破,解决方案有几种:

      • 不用COZE插件(不可行,那就没必要迁移了)

      • 使用《流式插件配置教程

      • 使用将插件原子化后使用循环插件(根据实现难易程度,笔者选择这种方式实现项目迁移)

实战

迁移插件

  1. 创建插件(由于原项目使用python,为减少不必要的迁移麻烦,依然选用python)

  2. 插件初始化代码

python 复制代码
import { Args } from '@/runtime';
import { Input, Output } from "@/typings/first/first";

/**
  * Each file needs to export a function named `handler`. This function is the entrance to the Tool.
  * @param {Object} args.input - input parameters, you can get test input value by input.xxx.
  * @param {Object} args.logger - logger instance used to print logs, injected by runtime
  * @returns {*} The return data of the function, which should match the declared output parameters.
  * 
  * Remember to fill in input/output in Metadata, it helps LLM to recognize and use tool.
  */
export async function handler({ input, logger }: Args<Input>): Promise<Output> {
  return {
    "message": "123",
    "data":"a_"+input.before
  };
};
  1. 初始方法handler 为插件入口和出口(Input, Output)

  2. 定义入参和出参字段(String、Integer、Number、Object、Array、Boolean)

  1. 代码迁移涉及的问题
  • 避免使用本地文件写入,coze 对本地文件权限限制比较严格,只能读不能写,如必须使用本地文件,可以查/tmp/文件夹,且文件格式有一定要求,
  • 创建 IDE 插件时,只支持在/tmp目录下读写临时文件,文件最大为 512MB。TMP_DIR = "/tmp"----参考
  • 如果期望插件返回文件流,根据元数据支持的类型:String、Integer、Number、Object、Array、Boolean,暂时无法实现,可能需要通过base64或者其他手段曲折实现。
  1. 日志可以使用:args.logger输入到在线IDE中,可自测插件,插件测试通过后,可以选择发布到COZE商城。

创建workflow

  • 循环节点的使用(有限循环,如果超出,参考超时限制)

  • 循环中数据的传递(可以使用变量或者中间变量)

    • 应用变量:用于配置应用中多处开发场景需要访问的数据,每次新请求均会初始化为默认值。
    • 用户变量:用于存储每个用户使用项目过程中,需要持久化存储和读取的数据,如用户的语言偏好、个性化设置等。
    • 系统变量:可选择开启你需要获取的,系统在用户在请求自动产生的数据,仅可读不可修改。如用于通过ID识别用户或处理某些渠道特有的功能。
    • 中间变量:(循环组件特有)
  • 循环体内可插入插件或其他

  • 输入对象的格式化(简单逻辑可以用代码节点(比插件更方便))

  • 最后是输出格式化后的数据到结束节点

创建应用

  • 新增列表,数据绑定

  • 新增事件(加载时,自动调用工作流)

    Item点击事件:

成品参考1:预览&发布应用

  • 优化:循环+变量传递数据,如果在数据量特别大的时候,可能有问题,笔者没试极限,为了防止这种情况发生,笔者还是将变量传递数据修改为本地文件(存+取)

其他功能:由于本项目循环执行,需要及时通知失败信息,需要接入微信、飞书、钉钉等在线及时推送

发布

其他玩法

  • 对话流使用(大模型)
  • 简单插件实现大模型初始promt
python 复制代码
from runtime import Args
from typings.actor.actor import Input, Output
import json
"""
Each file needs to export a function named `handler`. This function is the entrance to the Tool.

Parameters:
args: parameters of the entry function.
args.input - input parameters, you can get test input value by args.input.xxx.
args.logger - logger instance used to print logs, injected by runtime.

Remember to fill in input/output in Metadata, it helps LLM to recognize and use tool.

Return:
The return data of the function, which should match the declared output parameters.
"""
def handler(args: Args[Input])->Output:
    name = args.input.actor
    userInput = args.input.input
    # 构建输出对象
    arr = [
            {"name":"唐诗","history":"是一位精通中国古代唐诗的好学生,你能熟悉每一首唐诗,并且能够精确用唐诗回答用户问题","ask":userInput},
            {"name":"宋词","history":"是一位精通中国古代宋词的好学生,你能熟悉每一首宋词,并且能够精确用唐诗回答用户问题","ask":userInput},
        ]
    # 过滤出匹配的项
    filtered_items = next((item for item in arr if item["name"] == name), {})

    # 返回 JSON 对象
    return {"data": filtered_items}
  • 关键插件-AI对话(支持语音)

成品参考2:预览&发布应用

其他tips:页面数据传递

其他问题

  • 问题1:对于想白嫖大模型的用户,首先要考虑的就是收费问题,coze内置大模型,基本全部收费(如要做应用,基本费用需要考虑)

  • 问题2:应用界面无法完全自定义(内置组件的弊端)

引用

相关推荐
青阳流月1 分钟前
js读书笔记(补充知识)
前端·javascript
木心操作1 分钟前
css动画实现铃铛效果
前端·css·css3
亦良Cool24 分钟前
将Exce中工作簿的多个工作表拆分为单独的Excel文件
前端·html·excel
Moment2 小时前
从方案到原理,带你从零到一实现一个 前端白屏 检测的 SDK ☺️☺️☺️
前端·javascript·面试
鱼樱前端2 小时前
Vue3 + TypeScript 整合 MeScroll.js 组件
前端·vue.js
拉不动的猪3 小时前
刷刷题29
前端·vue.js·面试
野生的程序媛3 小时前
重生之我在学Vue--第5天 Vue 3 路由管理(Vue Router)
前端·javascript·vue.js
codingandsleeping3 小时前
前端工程化之模块化
前端·javascript
CodeCraft Studio3 小时前
报表控件stimulsoft操作:使用 Angular 应用程序的报告查看器组件
前端·javascript·angular.js
阿丽塔~3 小时前
面试题之vue和react的异同
前端·vue.js·react.js·面试