ChatGPT-3.5能回答的问题,局限于2021年之前的知识库,而且只能做成一个“千人一面”的机器人。
有许多时候,我们需要一个“个性化”的机器人。就好像,世界上有60亿人口, 每人都有不同。 对话机器人也将随着不同场景,而有不同。
使用chatbot, 你可以轻松创建“角色”。 开发者可以允许用户轻松创建他们的“角色”。
从易至难, 创建角色可以有几个层级:
- 指定“角色设定”文本。 这段文本会自动发送给chatgpt。
- 如果1还不够, 你可以再指定“知识库”——你的机器人将学习这些个性化的知识信息, 并运用这些信息与用户对话。
- 如果2还不够, 你可以通过指定completion函数, 来做充分的个性化。或许在这个函数中,你想要记录某些新知识, 并且动态的调整提示词。
注: chatbot的内部实现中, 1、2都被统一成3的方式来实现。
基于通用性考虑, 本项目通过命令行使用。 因此,你可以把本项目嵌入到你的服务器中,也可以嵌入到任何地方。
$ chatbot create
运行命令后,
输入你的角色文本即可。
一个角色文本可以是:
- 一段角色设定文字。
- 一个json文件,包含一个object, 形式如下:
{
"role-setting": ".....", // 机器人设定
// facts的说明:未来可以支持某个url, 这个url可以是普通网页,也可以是pdf,甚至是某个docx附件, 某个托管在互联网上的“文件夹”, 某个互联网上的zip文件。从而用户可以把自己的文件夹压缩后,上传到某个托管站点, 然后通过指定facts, 即可。
"facts": "...." // 机器人需要知道的事实性知识。(可选)
}
- 一个python项目, 必须包含一个completion函数:(TODO: 研究python以什么形式打包,供别人调用?)
completion(context, chats)==>new-chats
开发者可以在这个函数里, 发起多个openai请求, 记录重要信息, 甚至升级“事实”, 升级这个角色自身等等。
- 记录用户的重要信息: 开发者可以使用mongodb的数据修改语句, 来修改“角色”或者“角色-用户”的记忆。
- 升级角色自身: 开发者可以通过调用命令
chatbot update <roleid> new-python-role.py
来升级自身。
事实上, 前两种文本方式,在chatbot项目内部,都会被统一包装成第三种形式, 也就是说, chatbot会为前两种方式的“角色”生成一个python格式的角色。 并且在内部统一使用python格式的角色。
当然, 你也可以使用shell的输入重定向, 来把你的“文件”导入成角色。
$ chatbot create < py-coach.json
$ chatbot update <role-id>
输入内容同上。只是把新的role覆盖掉老的role而已。
$ chatbot introduce <role-id>
输出这个role本身。
$ chatbot talk from-user-id to-role-id
输入之前的聊天对话历史, 直到最后一句是用户发起的。
其中,如果<from-user-id>
为0, 表示匿名用户。
程序应该输出补全的部分。
例如:
输入:
$ chatbot talk 123 111
123: 你好
111: 你好呀, 我是考级助手。 可以辅助你刷题, 你想开始吗?还是有其他问题想讨论?
123: 请给我一道题目
输出:
111: 输入一个整数n, 输出1~n之间的奇数。
作为completion函数的第一个参数。 这包括:
- db: 一个mongodb数据库, 使用monger库来访问。(TODO: 待研究)
- user_id: 聊天的用户id。 如果为空,则为匿名用户。
- role_id: 我这个角色的id。
chatbot与应用(角色)的用户系统没有耦合。 这意味着chatbot没有自己的用户系统。
但是chatbot会记住某个role传给他的user-id。
具体这个user-id有什么意义, chatbot不关心。 这是role的开发者所需要关心的。