theme: cyanosis
在 《Coze 扣子 | AI 养育计划 - "Flutter 大师"》 一文中,介绍了 Coze 中创建 AI Bot 的过程,并且基于 知识库 和 数据库 作为 AI Bot 的大脑,提供知识储备打造 Flutter 大师。AI Bot 的聊天产出内容相对随机,如何能让 AI Bot 准确地通过自然语言,来精确处理任务呢?
本文就介绍一下,基于 Coze 扣子 插件,打造一款自然语言执行工具箱 "匠心千刃" 。
一、 插件拓展 AI Bot 的上限
插件官网介绍: https://www.coze.cn/docs/guides/create_plugin
1. 插件是什么
AI Bot 可以接收用户的输入指令,通过知识库大脑进行分析产出结果,相当于与用户交互的 客户端。而插件可以向 AI Bot 提供精确的接口运算数据,就相当于 服务端 提供 api 接口。当用户的输入,命中插件中的接口时,可以通过对应 api 返回的数据,进行回复。
插件可以大大拓展 AI Bot 的上限。知识库 和 数据库 作为 AI Bot 的大脑,它只能基于数据做 感性 的分析;而缺乏理性的判断。插件则是通过编程语言,绝对理性地执行命令。同时用户只需通过 自然语言 来触发调用,这是非常有想象空间的。
2. 插件的价值
就像你的大脑再怎么强悍,网络查询到实时信息、对一百万个数字排序这些任务不借助外物是无法实现的。而插件就相当 让 AI Bot 的大脑,拥有编程的能力 。比如下面通过插件让 AI Bot 拥有搜索 github 仓库的功能:
或是可以给出自然语言描述,让 AI Bot 通过接口插件产出数据。如下所示,批量生成指定长度、个数的随机秘钥:
3. 插件带来的前后端分离
这样的视角下,就可以有一个很有趣现象。插件是提供数据的服务,相当于 服务端接口 。发布插件相当于部署服务,插件的代码逻辑相当于后端开发。这样 AI Bot 在发布之后,后端的数据可以发布,而不需要重新更新 AI Bot 。这就是前后端分离的思想:
打个比方,指南 命令,可以展示当前 匠心千刃
的能力。这个输出数据是通过插件接口得到的,所以可以进行更改,AI Bot 作为 前端
可以随时访问 后端
最新数据,不需更新。
二、通过 Coze IDE 创建插件
Coze 插件可以通过 python 和或 Node.js 编写代码,提供访问的 api。
官网介绍: https://www.coze.cn/docs/guides/ide
1. 创建插件
在扣子 主页/个人中心/插件/创建插件 中创建插件。由两种方式:
- 基于已有服务,是基于已经有的服务器接口,提供数据
- Coze IDE 创建插件,可以自己编辑服务代码,产出数据,灵活性非常高。
先通过一个简单的例子,介绍一下插件接口最简单的使用。如下所示,输入 指南 可以输出匠心千刃当前的功能。
下面是进入插件后的编辑区,可以展示当前插件中的所有接口。在代码区中书写接口代码。右侧可以运行测试,以及发布插件:
每个接口都有一个 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
函数获取数据:
```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 库,需要增加依赖包:
3. 随机数生成器
除了调用网络接口得到数据外,插件中的代码还可以执行逻辑,产出数据。这里拿 随机数生成器
来说,输入秘钥长度和生成的个数:
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 中通过人设和回复逻辑中,设计命中和回复逻辑。在中间的技能区,可以在插件中选择前面设计的插件:
AI Bot 作为和用户交互的前端,人设和回复逻辑 以及中间的面板,就相当于前端开发的组件。而一个 AI Bot 可视为一个应用程序。
``` [] 中是盛放输入关键字 你需要严格调用 [匠心千刃] 插件 工具应该严格输出插件接口的输出内容,禁止更改
- 输入 [指南] 时, 调用 help 接口,输出内容
- 输入 [随机秘钥] 调用 random 接口,[长度]为入参 length , [个数] 为入参 outputCount
- 输入为 [日期] 或 [date] 调用 date 接口
- 输入包含 [帮助]时, 调用 help 接口,输出内容
- 输入包含[ github 搜索], 调用 github_search 接口 , 命令中下一个单词作为入参 args。输出 10 个结果,输出包含 Star 个数 ```
按照这个视角,如果 AI Bot 可以提供一些交互的组件,比如选择、输入、导入文件图片等。那么它的上限就可以非常高,常规的应用程序核心是视觉元素的渲染,而 AI Bot 是一个以回复数据为核心的应用程序。它可以依赖插件接口,基于输入通过代码获取输出结果。
这样 匠心千刃 可以作为一个工具箱,使用者可以通过自然语言进行使用,这是和常规应用最大的区别。匠心千刃 目前只是简单介绍插件的使用,后续有时间会逐步完善。
现在 Coze 可以发布的平台越来越多了,希望 Coze 扣子可以发展的越来越强大。本文就到这里,后面有机会再介绍一下工作流的使用,谢谢观看 ~
bot ID: 7361120595800604712