首个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:应用界面无法完全自定义(内置组件的弊端)

引用

相关推荐
mldong1 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排2 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60613 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角4 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!4 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰4 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi6 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen6 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马7 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒7 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端