/chatbot

ChatGPT based, universal chatbot platform that allows users to customize their own roles based on unique information sources.

Primary LanguagePythonApache License 2.0Apache-2.0

解决什么问题?

ChatGPT-3.5能回答的问题,局限于2021年之前的知识库,而且只能做成一个“千人一面”的机器人。
有许多时候,我们需要一个“个性化”的机器人。就好像,世界上有60亿人口, 每人都有不同。 对话机器人也将随着不同场景,而有不同。
使用chatbot, 你可以轻松创建“角色”。 开发者可以允许用户轻松创建他们的“角色”。
从易至难, 创建角色可以有几个层级:

  1. 指定“角色设定”文本。 这段文本会自动发送给chatgpt。
  2. 如果1还不够, 你可以再指定“知识库”——你的机器人将学习这些个性化的知识信息, 并运用这些信息与用户对话。
  3. 如果2还不够, 你可以通过指定completion函数, 来做充分的个性化。或许在这个函数中,你想要记录某些新知识, 并且动态的调整提示词。

注: chatbot的内部实现中, 1、2都被统一成3的方式来实现。

使用方法

基于通用性考虑, 本项目通过命令行使用。 因此,你可以把本项目嵌入到你的服务器中,也可以嵌入到任何地方。

1. 创建角色


$ chatbot create

运行命令后,
输入你的角色文本即可。
一个角色文本可以是:

  1. 一段角色设定文字。
  2. 一个json文件,包含一个object, 形式如下:
{
    "role-setting": ".....", // 机器人设定
    // facts的说明:未来可以支持某个url, 这个url可以是普通网页,也可以是pdf,甚至是某个docx附件, 某个托管在互联网上的“文件夹”, 某个互联网上的zip文件。从而用户可以把自己的文件夹压缩后,上传到某个托管站点, 然后通过指定facts, 即可。
    "facts": "...." // 机器人需要知道的事实性知识。(可选)
}
  1. 一个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

2. update 角色


$ chatbot update <role-id>

输入内容同上。只是把新的role覆盖掉老的role而已。

3. introduce 角色


$ chatbot introduce <role-id>

输出这个role本身。

4. 和角色对话


$ chatbot talk from-user-id to-role-id

输入之前的聊天对话历史, 直到最后一句是用户发起的。
其中,如果<from-user-id>为0, 表示匿名用户。
程序应该输出补全的部分。
例如:

输入:

$ chatbot talk 123 111
123: 你好
111: 你好呀, 我是考级助手。 可以辅助你刷题, 你想开始吗?还是有其他问题想讨论?
123: 请给我一道题目

输出:

111: 输入一个整数n, 输出1~n之间的奇数。

运行时环境: context

作为completion函数的第一个参数。 这包括:

  1. db: 一个mongodb数据库, 使用monger库来访问。(TODO: 待研究)
  2. user_id: 聊天的用户id。 如果为空,则为匿名用户。
  3. role_id: 我这个角色的id。

用户系统

chatbot与应用(角色)的用户系统没有耦合。 这意味着chatbot没有自己的用户系统。
但是chatbot会记住某个role传给他的user-id。
具体这个user-id有什么意义, chatbot不关心。 这是role的开发者所需要关心的。