Coze 扣子 | 用插件打造 "匠心千刃" 工具


theme: cyanosis

《Coze 扣子 | AI 养育计划 - "Flutter 大师"》 一文中,介绍了 Coze 中创建 AI Bot 的过程,并且基于 知识库数据库 作为 AI Bot 的大脑,提供知识储备打造 Flutter 大师。AI Bot 的聊天产出内容相对随机,如何能让 AI Bot 准确地通过自然语言,来精确处理任务呢?

本文就介绍一下,基于 Coze 扣子 插件,打造一款自然语言执行工具箱 "匠心千刃"

image.png


一、 插件拓展 AI Bot 的上限

插件官网介绍: https://www.coze.cn/docs/guides/create_plugin

1. 插件是什么

AI Bot 可以接收用户的输入指令,通过知识库大脑进行分析产出结果,相当于与用户交互的 客户端。而插件可以向 AI Bot 提供精确的接口运算数据,就相当于 服务端 提供 api 接口。当用户的输入,命中插件中的接口时,可以通过对应 api 返回的数据,进行回复。

image.png

插件可以大大拓展 AI Bot 的上限。知识库数据库 作为 AI Bot 的大脑,它只能基于数据做 感性 的分析;而缺乏理性的判断。插件则是通过编程语言,绝对理性地执行命令。同时用户只需通过 自然语言 来触发调用,这是非常有想象空间的。


2. 插件的价值

就像你的大脑再怎么强悍,网络查询到实时信息、对一百万个数字排序这些任务不借助外物是无法实现的。而插件就相当 让 AI Bot 的大脑,拥有编程的能力 。比如下面通过插件让 AI Bot 拥有搜索 github 仓库的功能:

image.png


或是可以给出自然语言描述,让 AI Bot 通过接口插件产出数据。如下所示,批量生成指定长度、个数的随机秘钥:

image.png


3. 插件带来的前后端分离

这样的视角下,就可以有一个很有趣现象。插件是提供数据的服务,相当于 服务端接口 。发布插件相当于部署服务,插件的代码逻辑相当于后端开发。这样 AI Bot 在发布之后,后端的数据可以发布,而不需要重新更新 AI Bot 。这就是前后端分离的思想:

image.png


打个比方,指南 命令,可以展示当前 匠心千刃 的能力。这个输出数据是通过插件接口得到的,所以可以进行更改,AI Bot 作为 前端 可以随时访问 后端 最新数据,不需更新。

image.png


二、通过 Coze IDE 创建插件

Coze 插件可以通过 python 和或 Node.js 编写代码,提供访问的 api。

官网介绍: https://www.coze.cn/docs/guides/ide

1. 创建插件

在扣子 主页/个人中心/插件/创建插件 中创建插件。由两种方式:

  • 基于已有服务,是基于已经有的服务器接口,提供数据
  • Coze IDE 创建插件,可以自己编辑服务代码,产出数据,灵活性非常高。

image.png


先通过一个简单的例子,介绍一下插件接口最简单的使用。如下所示,输入 指南 可以输出匠心千刃当前的功能。

image.png


下面是进入插件后的编辑区,可以展示当前插件中的所有接口。在代码区中书写接口代码。右侧可以运行测试,以及发布插件:

image.png

每个接口都有一个 handler 函数,用于逻辑处理。其中 Args 可以获取输入参数,当前接口没有使用输入,后面其他接口再做介绍。返回值里传出当前接口产出的数据:

```python from runtime import Args from typings.help.help import Input, Output

def handler(args: Args[Input])->Output: return {"message": """ 文字处理 随机秘钥, 参数:长度、个数

日期工具 输入: [日期] 或者 [date] 查看当前日期 输入: [时间戳] 转换 Unix 时间戳

搜索: 搜索 github 仓库

调用方式,命令+参数: 例: 日期 例: 随机秘钥,长度 30;个数10 """} ```


2. 通过网络访问接口请求数据

如下所示,github 搜索仓库可以通过 python 进行网络请求相关接口,传入搜索的仓库名:

```python def searchgithubrepo(reponame): baseurl = "https://api.github.com" searchpath = "/search/repositories" params = {"q": reponame} response = requests.get(baseurl + searchpath, params=params) ret = [] if response.statuscode == 200: data = response.json() repos = data.get("items", []) for repo in repos: mydict = {} mydict['name'] = "名称:" + repo.get("name"), mydict['star'] = "Star:" + str(repo.get("stargazerscount")), mydict['URL'] = "URL:" + repo.get("htmlurl"), mydict['description'] = "描述:" + str(repo.get("description")), ret.append(my_dict) else: ret.append("查询失败:"+response.text) return ret

```

接口中的元数据,可以设定 输入参数输出参数 。在 handler 方法中, Args 参数的 input 可以访问对应设置的参数,调用 search_github_repo 函数获取数据:

image.png

```python from runtime import Args from typings.githubsearch.githubsearch import Input, Output import requests

def handler(args: Args[Input])->Output: args = args.input.args ret = searchgithubrepo(args) return {"message": ret } ```

网络请求中用到的的 requests 库,需要增加依赖包:

image.png


3. 随机数生成器

除了调用网络接口得到数据外,插件中的代码还可以执行逻辑,产出数据。这里拿 随机数生成器 来说,输入秘钥长度和生成的个数:

image.png

python def handler(args: Args[Input])->Output: len = args.input.length count = args.input.outputCount ret = gen(len,count) return { "message": ret }

如下所示,提供 gen 方法生成数据,从大写字母、小写字母、数字和特殊字符中随机挑选字符组合:

```python def gen(len, outputCount): lettermap = { LetterType.low: rangeletter(ord('a'), ord('z') + 1), LetterType.up: rangeletter(ord('A'), ord('Z') + 1), LetterType.num: rangeletter(ord('0'), ord('9') + 1), LetterType.sp: ['@', '#', '$', '%', '^', '&', '*'] } ret = [] for _ in range(outputCount): value = gensecret(length=len, lettermap=letter_map) ret.append(value) return ret

class LetterType(Enum): low = 1 # 小写字母 up = 2 # 大写字母 num = 3 # 数字 sp = 4 # 特殊符号

def gensecret(length=8, enables=None, lettermap=None): if enables is None: enables = list(LetterType)

if letter_map is None:
    letter_map = {
        LetterType.low: range_letter(ord('a'), ord('z') + 1),
        LetterType.up: range_letter(ord('A'), ord('Z') + 1),
        LetterType.num: range_letter(ord('0'), ord('9') + 1),
        LetterType.sp: ['@', '#', '$', '%', '^', '&', '*']
    }

result = []
for _ in range(length):
    type_index = random.randint(0, len(enables) - 1)
    letters = letter_map.get(enables[type_index], [])
    if letters:
        result.append(random.choice(letters))

return ''.join(result)

def range_letter(start, end): return [chr(i) for i in range(start, end)] ```


三、AI Bot 中使用插件

插件作为强大的后备武器库,可以在 AI Bot 中通过人设和回复逻辑中,设计命中和回复逻辑。在中间的技能区,可以在插件中选择前面设计的插件:

image.png

AI Bot 作为和用户交互的前端,人设和回复逻辑 以及中间的面板,就相当于前端开发的组件。而一个 AI Bot 可视为一个应用程序。

``` [] 中是盛放输入关键字 你需要严格调用 [匠心千刃] 插件 工具应该严格输出插件接口的输出内容,禁止更改

  • 输入 [指南] 时, 调用 help 接口,输出内容
  • 输入 [随机秘钥] 调用 random 接口,[长度]为入参 length , [个数] 为入参 outputCount
  • 输入为 [日期] 或 [date] 调用 date 接口
  • 输入包含 [帮助]时, 调用 help 接口,输出内容
  • 输入包含[ github 搜索], 调用 github_search 接口 , 命令中下一个单词作为入参 args。输出 10 个结果,输出包含 Star 个数 ```

按照这个视角,如果 AI Bot 可以提供一些交互的组件,比如选择、输入、导入文件图片等。那么它的上限就可以非常高,常规的应用程序核心是视觉元素的渲染,而 AI Bot 是一个以回复数据为核心的应用程序。它可以依赖插件接口,基于输入通过代码获取输出结果。


这样 匠心千刃 可以作为一个工具箱,使用者可以通过自然语言进行使用,这是和常规应用最大的区别。匠心千刃 目前只是简单介绍插件的使用,后续有时间会逐步完善。

现在 Coze 可以发布的平台越来越多了,希望 Coze 扣子可以发展的越来越强大。本文就到这里,后面有机会再介绍一下工作流的使用,谢谢观看 ~

image.png

bot ID: 7361120595800604712

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值