2.0.8 • Published 1 year ago

@tomlbz/koishi-plugin-openai v2.0.8

Weekly downloads
-
License
GNU AGPLv3
Repository
github
Last release
1 year ago

@tomlbz/koishi-plugin-openai 简介

本插件用于聊天用机器人,而非功能性机器人。为 Koishi.js 调用 OpenAI 的语言模型。暂无本地化支持。

npm

欢迎使用★,°:.☆( ̄▽ ̄)/$:.°★

  1. 更新日志
  2. 可能的问题
  3. 配置参考
  4. 与ChatGPT对比
  5. 有趣的对话

Ver 2.0.7 更新日志

  1. 修复了 Issue#35
  2. 添加了 Issue#27
  3. 添加了 API 可用余额查询

Ver 2.0.x 主要新功能

  1. 支持使用pinecone向量数据库(可以免费注册)存储长期记忆,大大提升了记忆范围。(未启用时仅在本地存储短期记忆)(注意!OpenAIEmbeddings长度为1536,所以你的向量数据库创建时的索引长度(Index Dimensions)需要是1536!否则Embeddings保存不全)。相似度算法(Metric)请使用默认的Cosine
  2. 基于pinecone关联检索功能,可以更准确地从听过的话中获取信息。
  3. 提供WolframAlpha推理模块来尽可能计算参考答案(可以免费申请AppID),可以更好地回答如“3^99等于几”、“sin(x^2)的积分是什么”、“一加仑等于多少毫升”这类问题。需要能访问Google非API,可能被限制,需要代理)。如果不行,则需要提供Bing翻译API免费注册)。如果两者都不可用,推理模块就只对英语有反应了( ╯□╰ )2333
  4. 利用google搜索(非API,可能被限制,需要代理)实现检索模块,对回答中的常识性无知进行规避(可以更好地回答时效性强的问题,比如新闻)。如果不行,可以用Bing搜索API(免费注册)。两者都不可用时使用Baidu搜索。注意!个大搜索引擎的搜索结果的质量参差不齐,有时候会搜到广告
  5. 简化了模型配置项,加载插件时自动选择一类模型中的最新版(如选择turbo则自动应用gpt-3.5-turbo)。
  6. 重构了记忆的储存方式,使用Embeddings文本形式分别储存长期记忆短期记忆,提升了记忆检索的效率。
  7. 移除了对openaipinecone等库的依赖,全面换用ctx.http.post/getkoishi的API,以便解决代理问题。
  8. 改善了Logger的输出,方便调试。

你也许要问:

  1. “为什么挂了代理一直报错?”

    • 答:因为你没有配置好代理。详见这个友情文档(感谢@yi03),可以帮你设置好代理。代理有问题的话你的错误信息很可能包含connect ETIMEDOUThandleRequestError之类字样。
  2. “为什么某个功能好像没用?”

    • 答:因为你没有正确配置相关的功能。详见配置参考
  3. 为什么长时间没更新?

    • 开发者太蔡了,而且最近忙着搞毕设,没什么时间写代码……///(つ﹏⊂)///……
    • 如果你有想实现的功能,欢迎PR~

关于产生 AI 回复的几种情况

  1. ta 被直接呼叫了(@名字,或回复/引用其消息,或者聊天时直呼其名
  2. ta 正在和你私聊
  3. 你取得了 ta 的随机注意

关于回复比较奇怪的情况

  1. 插件刚刚开始运行时,机器人的记忆有大量空白,因此表现具有随机性可塑性。尤其是连接向量数据库后,最开始会返回看似毫不相关的联想结果(不过基本上都被各种逻辑过滤掉了,如果你关注控制台就可以看到联想有多么的奇葩)。经过一段时间、一定量的对话以后,随着记忆逐渐成型,机器人的说话方式也逐渐定型(联想也越来越准)。因此建议机器人刚刚建立的时候走心地ta说话,因为你最初和ta说的话决定了ta是个什么样的机器人。
  2. 机器人的人设示例对话大有讲究,可以多试试。
  3. 如果回复巨慢无比,是因为你的网络环境不怎么好,或者是OpenAI的服务器高负载,无力了……

配置参考

OpenAI 配置

参数作用取值范围建议值
apiKey调用OpenAI API-填写你的OpenAI API Key
apiAddress调用OpenAI API的地址-填写你的OpenAI API调用地址
chatModel选择语言模型turbodavincibabbagecurieadaturbo是效果最好的
keywordModel选择关键词模型curiebabbageadacurie是效果最好的
codeModel选择代码模型davincicushmandavinci是效果最好的

机器人身份配置

参数作用取值范围建议值
botName机器人的名字-不要太长
isNickname是否允许全局设置中的昵称触发AI回复truefalsetrue
botIdentity机器人人设的重要组成部分-提到名字请用<NAME>代替。建议不超过200
sampleDialog机器人初始说话习惯的主要组成部分-维持自洽,且不要太多/太长,否则容易消耗大量token。建议5条以内,每条20字左右

机器人记忆配置

参数作用取值范围建议值
cacheSize机器人短期记忆的容量/2~32根据回答长度酌情调整,固定占用token数为条数x每条的token数
cacheSaveInterval机器人短期记忆保存间隔>=1单位,建议每隔4~8条保存一次
cacheSaveDir机器人短期记忆保存路径-koishi根目录开始的相对目录。建议保留默认的'cache'
pineconeKeypinecone数据库的API密钥,填写后启动长期记忆联想搜索等功能-填写你自己的API密钥
pineconeRegpinecone数据库的地区,形如us-east1-gcp-填写你自己的数据库实例的地区
pineconeIndexpinecone数据库的索引名-填写你自己的数据库实例的索引名
pineconeNamespacepinecone数据库的命名空间-填写你自己的命名空间,或保留默认的'koishi'
pineconeTopKpinecone数据库的最大返回条数1~3建议2,提高则快速消耗token数且会让AI分心

机器人知识配置

参数作用取值范围建议值
wolframAppIdwolframappid,用于计算-填写你自己的appid
azureTranslateKeyBing翻译API密钥,用于在Google不可用时为wolfram提供翻译-填写你自己的API密钥
azureTranslateRegionBing翻译API的地区,形如eastasia-填写你自己的API地区,默认是global
searchOnWeb搜索模块开关truefalse默认开启,视网络情况和具体用例填写
searchTopK搜索模块最大条数,用于提升知识广度1~3建议1,提高则快速消耗调用次数且会让AI分心
azureSearchKeyBing搜索API密钥,用于在Google不可用时为搜索模块提供搜索-填写你自己的API密钥
azureSearchRegionBing搜索API的地区,形如eastasia-填写你自己的API地区,默认是global

机器人回复配置

参数作用取值范围建议值
isReplyWithAt是否在回复消息时@发送者,仅用于群聊truefalsefalse
msgCooldown消息冷却时间/,在此期间机器人不会响应消息1~3600根据网络情况酌情调整,使得API总在下次调用之前返回
nTokens机器人回复的最大长度16~512必须是16的整数倍,建议128~256之间。提高则快速消耗token
temperature回复温度,越小越固定,越大越随机0~1建议0.7~1之间
presencePenalty越大越会避免出现过的token,和出现次数无关-2~2建议0左右
frequencyPenalty越大越会避免频繁出现的token,出现次数越多越受该参数影响-2~2建议0左右
randomReplyFrequency随机对某句话产生兴趣并回复的概率0~1不要太高,否则万一被刷屏容易消耗大量token。建议0.1~0.3之间

调试配置

参数作用取值范围建议值
isLog向控制台输出日志信息truefalse建议true,有助于了解运行状态
isDebug向控制台输出调试信息truefalse建议false,否则会大大增加日志长度

与ChatGPT对比

ChatGPT@tomlbz/koishi-plugin-openai
npm.ionpm.ionpm.io
npm.ionpm.ionpm.io
npm.ionpm.ionpm.io

有趣的对话

从下面这张图可以看到几个功能: 1. 大部分时候长期记忆都发挥着主要作用,机器人不需要不会一直上网搜索。 2. 当OpenAIAPI报错的时候,机器人的当条回复中断了,但这并不影响它继续回复下一条消息。 3. 机器人的联想乱七八糟(仔细一看发现跟话题八竿子打不着),但是话题并不很受到乱七八糟的联想的影响(费了老鼻子劲了!)。 4. 你可以用它给他自己debug(npm.io

2.0.3

1 year ago

2.0.2

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

2.0.7

1 year ago

2.0.6

1 year ago

2.0.8

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago