hibobmaster / matrix_chatgpt_bot

A simple matrix bot that supports image generation and chatting using ChatGPT, Langchain
https://matrix.to/#/#public:matrix.qqs.tw
MIT License
75 stars 13 forks source link

使用!chat 上下文对话会卡住 #5

Closed mwnu closed 1 year ago

mwnu commented 1 year ago

机器人处于一直正在输入...的状态。

hibobmaster commented 1 year ago

日志有报错吗? 拉取的是最新的docker镜像吗?

最近Openai 对免费账号送的额度做了请求限制,响应很慢,可能出现超时的情形,需要结合日志看看。

此外!gpt 命令也是报错?

mwnu commented 1 year ago

日志有报错吗? 拉取的是最新的docker镜像吗?

最近Openai 对免费账号送的额度做了请求限制,响应很慢,可能出现超时的情形,需要结合日志看看。

此外!gpt 命令也是报错?

是最新镜像,非免费key。 !gpt 命令正常,但如果!pic !chat !bing 其中一个命令没有响应,!gpt也没有响应,应该是被阻塞了。

hibobmaster commented 1 year ago

阻塞的问题我也遇到了,一直没想好怎么解决,我继续研究下,到时候给你反馈。

mwnu commented 1 year ago

阻塞的问题我也遇到了,一直没想好怎么解决,我继续研究下,到时候给你反馈。

顺便反馈下似乎不支持bing 的引用链接和markdown格式?

hibobmaster commented 1 year ago

bing指令 是支持 markdown 的,前提是里面有代码标签 ``` 才会将消息以markdown的形式处理,当然后期可以优化一下,比如考虑更多的markdown标签 代码这里用正则匹配了一下: https://github.com/hibobmaster/matrix_chatgpt_bot/blob/e086568821fdec379a0bd9ed3b78d126dc856dae/send_message.py#L17 image

这么处理是为了避免所有消息都转为 markdown,可能有意料之外的问题。

Bing 引用链接跟所用的api有点关系,返回的信息里没有带链接信息,只有文本 https://github.com/waylaidwanderer/node-chatgpt-api

mwnu commented 1 year ago

bing指令 是支持 markdown 的,前提是里面有代码标签 ``` 才会将消息以markdown的形式处理,当然后期可以优化一下,比如考虑更多的markdown标签 代码这里用正则匹配了一下:

https://github.com/hibobmaster/matrix_chatgpt_bot/blob/e086568821fdec379a0bd9ed3b78d126dc856dae/send_message.py#L17

image 这么处理是为了避免所有消息都转为 markdown,可能有意料之外的问题

了解

hibobmaster commented 1 year ago

另外增加了对*号和|号的判断,当响应有上述符号时自动转为markdown格式 image

阻塞的问题解决了: Screenshot 2023-04-14 at 19-02-10 圈圈之地 e2e-bot-debug Bing 互联网资源引用也解决了: Screenshot 2023-04-14 at 19-33-49 圈圈之地 test---111111-normal-not-docker

请拉取最新镜像 https://github.com/hibobmaster/matrix_chatgpt_bot/releases/tag/v1.0.3

mwnu commented 1 year ago

仍然不能自动转为markdown格式。同样的内容我发的话就能自动转markdown? image

阻塞应该没有了,但是!bing经常无法响应,!chat 从未有响应,!gpt 偶尔也没有响应,也不知道是我的网络问题还是别的原因。多次超时之后,机器人可能不再响应(不显示正在输出...也没有日志) image image

另外还有一个问题是,插件重启之后似乎会把之前的问题重新回答一遍,而且会出现回复房间的错乱和内容上下段之间的错乱。

mwnu commented 1 year ago

!bing经常无法响应

关于!bing无法响应的问题,可能是 Cookie 失效了

hibobmaster commented 1 year ago

你发的内容会转为markdown是客户端自动转换的。

此外配置你添加了吗?https://github.com/hibobmaster/matrix_chatgpt_bot/blob/9a51863d0f9f064c9e7bf4f34fbc7070e144c394/config.json.sample#L13 或者 https://github.com/hibobmaster/matrix_chatgpt_bot/blob/9a51863d0f9f064c9e7bf4f34fbc7070e144c394/.env.example#L13 请将你的配置打码粘贴上来。

hibobmaster commented 1 year ago

另外还有一个问题是,插件重启之后似乎会把之前的问题重新回答一遍

请检查数据库文件是否有持久化保存,比如看看大小是多少,正常情况下应该有几百K到几M

hibobmaster commented 1 year ago

!chat 从未响应是指,机器人没反应也没有任何日志? 这个是matrix.qqs.tw实例使用的配置文件和compose文件。

{
  "homeserver": "https://xxxxxxxxxxxxxxxx",
  "user_id": "@xxxxxxxxx:xxxxxxxx",
  "password": "xxxxxxxxxxxxx9",
  "device_id": "DFYExxxxxxxxx",
  "api_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "bing_api_endpoint": "http://api:3000/conversation",
  "bard_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "jailbreakEnabled": true,
  "bing_auth_cookie": "xxxxxxxxxxxxxxxxxxxxx",
  "markdown_formatted": true
}
services:
  app:
    image: hibobmaster/matrixchatgptbot:latest
    container_name: matrix_chatgpt_bot
    restart: always
    # build:
    #   context: .
    #   dockerfile: ./Dockerfile
    #env_file:
    #  - .env
    volumes:
      # use env file or config.json
      - ./config.json:/app/config.json
      # use touch to create an empty file db, for persist database only
      - ./bot:/app/db
    networks:
      - matrix_network
  api:
  # bing api
    image: hibobmaster/node-chatgpt-api:latest
    container_name: node-chatgpt-api-matrix
    restart: always
    volumes:
      - ./settings.js:/var/chatgpt-api/settings.js
    networks:
      - matrix_network

networks:
  matrix_network:
mwnu commented 1 year ago

我都是照着模板配置的,markdown_formatted这个参数没有,其他一样,jailbreakEnabled这个参数不知道什么意思。 数据之前映射的是没有后缀的文件,机器人没有响应也没用日志,后面我想这大概是SQLite 文件,就给它加了后缀(- ./bot.db:/app/db),可以响应也能看到日志了,但数据库文件一直是0kb。 然后bing没有响应的问题大概还是和网络有关,后面又能用了。

hibobmaster commented 1 year ago

如果你需要机器人发送的代码有高亮,markdown_formatted 这个参数需要开启 jailbreakEnabled 就是解决bing对话次数限制用的

但数据库文件一直是0kb

这也是为什么容器重启之后会把之前的问题重新回答一遍。 你需要在第一次启动容器之前,手动创建一个空的文件,而不是等待容器创建 你可以进终端,使用 touch 指令创建一个空文件

touch db

然后第一次启动后,数据会被保存至数据库里,之后重启就不会再把之前的问题重新回答一遍了

mwnu commented 1 year ago

如果你需要机器人发送的代码有高亮, 这个参数需要开启 就是解决bing对话次数限制用的markdown_formatted``jailbreakEnabled

但数据库文件一直是0kb

这也是为什么容器重启之后会把之前的问题重新回答一遍。 你需要在第一次启动容器之前,手动创建一个空的文件,而不是等待容器创建 你可以进终端,使用 touch 指令创建一个空文件

touch db

然后第一次启动后,数据会被保存至数据库里,之后重启就不会再把之前的问题重新回答一遍了

用root账号

如果你需要机器人发送的代码有高亮,markdown_formatted 这个参数需要开启 jailbreakEnabled 就是解决bing对话次数限制用的

但数据库文件一直是0kb

这也是为什么容器重启之后会把之前的问题重新回答一遍。 你需要在第一次启动容器之前,手动创建一个空的文件,而不是等待容器创建 你可以进终端,使用 touch 指令创建一个空文件

touch db

然后第一次启动后,数据会被保存至数据库里,之后重启就不会再把之前的问题重新回答一遍了

我试过了,终端root, touch bot,重新映射,仍然是okb,我甚至重现安装了一遍容器。 如果重启容器之前有问题卡住了,重启之后会重新回答所有之前问题。 !chat 就是没有任何响应,没有日志。 另外!bing 回答的引用会倒置到头部,例如这样:

[1]: https://www.meishichina.com/Eat/Culture/201005/80965.html "冰淇淋的由来与定义_美食天下"
[2]: https://zh.wikipedia.org/zh-tw/%E5%86%B0%E6%B7%87%E6%B7%8B "冰淇淋 - 維基百科,自由的百科全書"
冰淇淋算不算饮料,这个问题好难啊!🤔
我查了一下,冰淇淋是一种冷冻的甜品,通常以乳制品为原料,加入水果或其他成分和香料混合制成。[^1^][1] [^2^][2]
hibobmaster commented 1 year ago

另外!bing 回答的引用会倒置到头部,这是预期行为,不好修改

我试过了,终端root, touch bot,重新映射,仍然是okb,我甚至重新安装了一遍容器。

你是使用access_token登录的还是账号密码?access_token疑似会有这个问题。

mwnu commented 1 year ago

另外!bing 回答的引用会倒置到头部,这是预期行为,不好修改

我试过了,终端root, touch bot,重新映射,仍然是okb,我甚至重新安装了一遍容器。

你是使用access_token登录的还是账号密码?access_token疑似会有这个问题。

账号登陆的 我试了下matrix中的markdown脚注是要放在前面才能被正确转换为链接,例如这样:

[1]: https://www.meishichina.com/Eat/Culture/201005/80965.html "冰淇淋的由来与定义_美食天下"
[2]: https://zh.wikipedia.org/zh-tw/%E5%86%B0%E6%B7%87%E6%B7%8B "冰淇淋 - 維基百科,自由的百科全書"
我查了一下,冰淇淋是一种冷冻的甜品[1],通常以乳制品为原料,加入水果或其他成分和香料混合制成。[2]

而通常markdown的语法表示脚注的方式需要加上“^”号并把引用放后面:

我查了一下,冰淇淋是一种冷冻的甜品[^1],通常以乳制品为原料,加入水果或其他成分和香料混合制成。[^2]
[^1]: https://www.meishichina.com/Eat/Culture/201005/80965.html "冰淇淋的由来与定义_美食天下"
[^2]: https://zh.wikipedia.org/zh-tw/%E5%86%B0%E6%B7%87%E6%B7%8B "冰淇淋 - 維基百科,自由的百科全書"
hibobmaster commented 1 year ago

Bing/chatGPT/Google's Bard机器人的响应我没法控制,很难进行全局性的微调,很容易误伤~ 我目前是匹配机器人的响应是否有markdown的关键字符,比如```(多行代码), |(表格), *(列表) 来决定是否将响应通过markdown库转为html富文本,否则按照普通文本输出。 image image

所以要实现理想的效果比较难,因为机器人的响应本身就不是规范的。

hibobmaster commented 1 year ago

@mwnu 我突然想到一个办法,应对数据库大小一直是0kb的情况了。 你先不要映射数据库,直接启动,然后将容器里的数据库拷贝出来,再添加数据库的映射,看是否解决问题。

其它人也部署了,没有遇到该问题,请提供更多信息。

有任何想法可以重新开启该issue