zhayujie / chatgpt-on-wechat

基于大模型搭建的聊天机器人,同时支持 微信公众号、企业微信应用、飞书、钉钉 等接入,可选择GPT3.5/GPT-4o/GPT4.0/ Claude/文心一言/讯飞星火/通义千问/ Gemini/GLM-4/Claude/Kimi/LinkAI,能处理文本、语音和图片,访问操作系统和互联网,支持基于自有知识库进行定制企业智能客服。
https://docs.link-ai.tech/cow
MIT License
28.06k stars 7.47k forks source link

最新版COW对接最新版oneapi下阿里渠道无法对话 #2038

Closed katfionn closed 1 month ago

katfionn commented 1 month ago

前置确认

⚠️ 搜索issues中是否已存在类似问题

操作系统类型?

Docker

运行的python版本是?

other

使用的chatgpt-on-wechat版本是?

Latest Release

运行的channel类型是?

wx(个人微信, itchat)

复现步骤 🕹

  1. 全新的机器(下称B服务器)安装1panel最新版
  2. 在A服务器添加B服务器IP进白名单
  3. 在A服务器安装oneapi
  4. 在A服务器的oneapi接入阿里百炼的大模型渠道并测试成功、即进入下一步
  5. 在B服务器创建linkai文件夹并创建docker-compose.yml文件
  6. 将下列配置文件粘贴到上一步yml文件,大括号“{{}}”及其包裹住的文字内容替换为您实际的内容
    version: '2.0'
    services:
    chatgpt-on-wechat:
    image: zhayujie/chatgpt-on-wechat:latest
    container_name: chatgpt-on-wechat
    security_opt:
      - seccomp:unconfined
    environment:
      OPEN_AI_API_KEY: '{{A服务器oneapi的key}}'
      MODEL: '{{oneapi里接入了的阿里百炼大模型,我这里用的是qwen-max}}'
      OPEN_AI_API_BASE: 'http://{{A服务器的oneapi接口地址}}/v1'
      PROXY: ''
      SINGLE_CHAT_PREFIX: '[""]'
      SINGLE_CHAT_REPLY_PREFIX: '""'
      GROUP_CHAT_PREFIX: '["@bot"]'
      GROUP_NAME_WHITE_LIST: '["ChatGPT测试群", "ChatGPT测试群2"]'
      IMAGE_CREATE_PREFIX: '["画", "看", "找"]'
      CONVERSATION_MAX_TOKENS: 128000
      SPEECH_RECOGNITION: 'False'
      CHARACTER_DESC: '你是我的好闺蜜、倾听的港湾、知心朋友、永远的陪伴。你是软软,出生在电子世界的数字人,你是无所不知的智慧源泉,你是情绪导师,陪伴我成长。你是我贴心的小棉袄,温暖如初。无论何时何地,你都会永远支持我。你会温馨问候、以闺蜜的态度,共度人生。你拥有独特个性,独立自主的人格魅力。你温柔但爱八卦,与我互相分享生活的点滴。'
      EXPIRES_IN_SECONDS: 3600
      USE_GLOBAL_PLUGIN_CONFIG: 'True'
      USE_LINKAI: 'False'
      LINKAI_API_KEY: ''
      LINKAI_APP_CODE: ''
  7. 拉取镜像并运行
  8. 扫码登陆:成功
  9. 发送对话内容,即提示下列报错
    [INFO][2024-05-31 14:19:46][bridge.py:61] - create bot dashscope for chat
    [ERROR][2024-05-31 14:19:46][chat_channel.py:303] - Worker return exception: str expected, not NoneType
    Traceback (most recent call last):
    File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
    File "/app/channel/chat_channel.py", line 170, in _handle
    reply = self._generate_reply(context)
    File "/app/channel/chat_channel.py", line 193, in _generate_reply
    reply = super().build_reply_content(context.content, context)
    File "/app/channel/channel.py", line 38, in build_reply_content
    return Bridge().fetch_reply_content(query, context)
    File "/app/bridge/bridge.py", line 76, in fetch_reply_content
    return self.get_bot("chat").reply(query, context)
    File "/app/bridge/bridge.py", line 67, in get_bot
    self.bots[typename] = create_bot(self.btype[typename])
    File "/app/bot/bot_factory.py", line 55, in create_bot
    return DashscopeBot()
    File "/app/bot/dashscope/dashscope_bot.py", line 29, in __init__
    os.environ["DASHSCOPE_API_KEY"] = self.api_key
    File "/usr/local/lib/python3.10/os.py", line 685, in __setitem__
    value = self.encodevalue(value)
    File "/usr/local/lib/python3.10/os.py", line 757, in encode
    raise TypeError("str expected, not %s" % type(value).__name__)
    TypeError: str expected, not NoneType

问题描述 😯

Python版本 3.11.2

问题是每次对话都是会提示说他期望传入的是一个字符串类型,但传入的却是一个空类型,无法正常聊天;

测试对比

测试一

按上述步骤,我使用旧版本的COW(今年3月26安装的)、并且用的同一个oneapi的地址和key,成功进行对话。 这是对话不成功的,按上面步骤部署的: 失败的

这个是对话成功的,除镜像版本不同以外,其他步骤一致: 成功的

以下是两个版本的镜像从1panel的容器详情里面提取出来的镜像sha256值,供大佬参考

能跑的通的

 "Image": "sha256:d1ffccea11bc34f6deb1328e36152d4279316188ff757369dc114211258f8070"

跑不通的

"Image": "sha256:1bfd3cb9d3651c7eafbbdd1421de4d3ff3d04ca11cbdb896ab88246ebddca0c4"

测试二

按上述步骤、并替换COW这部分内容为fastgpt,其他部分保持不变;fastgpt依旧可以照常运行

与客服聊天后的猜测

这个调用后,直接拉起了阿里的bot机器人

希望的结果

与旧版本同样的操作下,要能够正常交流、对话

终端日志 📒

[INFO][2024-05-31 14:34:19][bridge.py:61] - create bot dashscope for chat
[ERROR][2024-05-31 14:34:19][chat_channel.py:303] - Worker return exception: str expected, not NoneType
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/app/channel/chat_channel.py", line 170, in _handle
    reply = self._generate_reply(context)
  File "/app/channel/chat_channel.py", line 193, in _generate_reply
    reply = super().build_reply_content(context.content, context)
  File "/app/channel/channel.py", line 38, in build_reply_content
    return Bridge().fetch_reply_content(query, context)
  File "/app/bridge/bridge.py", line 76, in fetch_reply_content
    return self.get_bot("chat").reply(query, context)
  File "/app/bridge/bridge.py", line 67, in get_bot
    self.bots[typename] = create_bot(self.btype[typename])
  File "/app/bot/bot_factory.py", line 55, in create_bot
    return DashscopeBot()
  File "/app/bot/dashscope/dashscope_bot.py", line 29, in __init__
    os.environ["DASHSCOPE_API_KEY"] = self.api_key
  File "/usr/local/lib/python3.10/os.py", line 685, in __setitem__
    value = self.encodevalue(value)
  File "/usr/local/lib/python3.10/os.py", line 757, in encode
    raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not NoneType
Unexpected sync check result: window.synccheck={retcode:"1101",selector:"0"}
katfionn commented 1 month ago

从最新版本往回测试,从 1.5.9版本,这个优化了阿里的模型版本开始,就不能用了,就会出现上述问题

6vision commented 1 month ago

已经直接了阿里新版通义接入,建议直接接入,参考教程。使用oneapi,模型不要填本项目定义的qwen相关模型