npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@tomlbz/koishi-plugin-openai

v2.0.8

Published

Calls OpenAI language models for Koishi.js

Downloads

160

Readme

@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 | 选择语言模型 | turbodavincibabbagecurieada | turbo是效果最好的 | | keywordModel | 选择关键词模型 | curiebabbageada | curie是效果最好的 | | codeModel | 选择代码模型 | davincicushman | davinci是效果最好的 |

机器人身份配置

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

机器人记忆配置

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

机器人知识配置

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

机器人回复配置

| 参数 | 作用 | 取值范围 | 建议值 | | --- | --- | --- | --- | | isReplyWithAt | 是否在回复消息时@发送者,仅用于群聊 | truefalse | false | | 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 | | --- | --- | | | | | | | | | |

有趣的对话

从下面这张图可以看到几个功能:

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