也写了一个 OpenAI ChatBot Bot 酱,基于微信测试号+客服消息 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
easychen
V2EX    分享创造

也写了一个 OpenAI ChatBot Bot 酱,基于微信测试号+客服消息

  •  1
     
  • &nsp; easychen
    easychen 2023-10-09 14:40:12 +08:00 4291 次点击
    这是一个创建于 736 天前的主题,其中的信息可能已经有所发展或是发生改变。

    特色:

    1. 基于微信测试号,不容易被封,可以邀请 100 人使用,适合小团队使用(当然理论上你也可以用来对接公众号)
    2. 基于客服消息,不受 5 秒超时限制
    3. 支持用户通过命令设置 API KEY 、URL
    4. 支持设置触发词

    详细说明和代码请移步 GitHub:https://github.com/easychen/botchan 欢迎 Star

    第 1 条附言    2023-10-10 22:39:10 +08:00
    更新说明:

    支持了 Azure 接口,非常适合团队使用;通过环境变量设置模型名称、超时、Max Tokens 、Temperature ;支持流模式,每生成一定的字数自动发送。
    37 条回复    2023-10-27 21:36:20 +08:00
    babaohuang
        1
    babaohuang  
       2023-10-09 14:56:34 +08:00
    请问如何设置模型名称?
    easychen
        2
    easychen  
    OP
       2023-10-09 15:30:38 +08:00
    @babaohuang 现在只能用 3.5 ,稍后我加个环境变量吧。
    Alexsen
        3
    Alexsen  
       2023-10-09 15:36:33 +08:00
    刚在微博看到,正在配置,已 Star
    Armor
        4
    Armor  
       2023-10-09 16:20:45 +08:00
    海外服务器 nginx 代理了官方的 api 接口,可以直接使用吗?试了下没反应
    babaohuang
        5
    babaohuang  
       2023-10-09 16:35:02 +08:00
    @easychen 好的,谢谢大佬!
    easychen
        6
    easychen  
    OP
       2023-10-09 16:43:40 +08:00
    @babaohuang 加上了,通过 DEFAULT_MODEL 指定,通过 setModel 命令设置,通过 LOCK_MODEL 锁定命令。

    https://github.com/easychen/botchan#%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE
    sunnyguyu91
        7
    sunnyguyu91  
       2023-10-09 16:53:00 +08:00
    不支持 arm 架构啊,难受了
    anubu
        8
    anubu  
       2023-10-09 17:04:33 +08:00
    是否支持 Azure 的 OpenAI 服务接口?简单部署了一下,对接 Azure 的接口不成功。

    Web server started on port 9000
    remove cache
    ai ret {
    error: {
    code: 'DeploymentNotFound',
    message: 'The API deployment for this resource does not exist. If you created the deployment within the last 5 minutes, please wait a moment and try again.'
    }
    }
    Unhandled Rejection at: Promise {
    <rejected> SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at llmReply (file:///app/index.js:349:48)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    } reason: SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at llmReply (file:///app/index.js:349:48)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    babaohuang
        9
    babaohuang  
       2023-10-09 17:11:32 +08:00
    @easychen 感谢!
    easychen
        10
    easychen  
    OP
       2023-10-09 17:36:02 +08:00
    @sunnyguyu91 linux/amd64,linux/arm64,linux/arm/v7 都支持了。其他架构自己拉 dockerfile 编译一下就行。
    easychen
        11
    easychen  
    OP
       2023-10-09 17:40:00 +08:00
    @anubu 应该是之前的默认 deployment 没有对应上。我更新了一下,你拉取最新镜像试试。

    模型和 deployment 映射如下:

    ```
    {
    'gpt-3.5-turbo':'gpt-35-turbo',
    'gpt-3.5-turbo-0301':'gpt-35-turbo-0301',
    'gpt-3.5-turbo-0613':'gpt-35-turbo-0613',
    'gpt-3.5-16k':'gpt-35-16k',
    'gpt-3.5-16k-0613':'gpt-35-16k-0613',
    'gpt-4':'gpt-4',
    'text-embedding-ada-002':'text-embedding-ada-002',
    }
    ```
    babaohuang
        12
    babaohuang  
       2023-10-09 17:42:06 +08:00
    大佬,还有一些问题,就是这个可以支持连续对话吗?还有,支持自定义 system content 吗?
    easychen
        13
    easychen  
    OP
       2023-10-09 17:51:15 +08:00
    @babaohuang

    ① 不支持连续对话,本来打算支持引用,但测试号里边引用不了,所以没做。
    ② 支持 system message ,文档里边有写
    Armor
        14
    Armor  
       2023-10-09 18:19:50 +08:00 via iPhone
    大佬可以看下我的问题吗?
    Darin726
        15
    Darin726  
       2023-10-09 18:30:42 +08:00
    @Armor #4 我也是没反应,db.json 没有生成
    easychen
        16
    easychen  
    OP
       2023-10-09 18:31:02 +08:00
    @Armor 只要和 openai 兼容的接口都能用,不能用可能是你配置填错了,可以在本地搭建下,用同样的参数,自己查一下报错信息。
    easychen
        17
    easychen  
    OP
       2023-10-09 18:33:21 +08:00
    @Darin726

    ① 默认触发词是 方糖,不带触发词没有响应
    ② docker 需要对当前目录有写权限,或者你把 /data 挂接到其他地方去。
    Armor
        18
    Armor  
       2023-10-09 19:43:06 +08:00
    @easychen #16 就在本地搭建的,我看映射了本机 data 目录是一个空的文件夹,是不是目录权限的问题
    easychen
        19
    easychen  
    OP
       2023-10-09 20:12:26 +08:00
    @Armor 开了台腾讯云主机实测,没有发现问题。请仔细阅读文档进行配置,核对参数和限制。

    另外可以查看 docker 日志,以确定问题。至于如何查看 docker 日志,可以问 GPT 。

    Armor
        20
    Armor  
       2023-10-09 22:05:26 +08:00
    @easychen #19
    ```
    2023-10-09 21:51:40 Web server started on port 9000
    2023-10-09 22:01:56 remove cache
    2023-10-09 22:02:01 ai ret {
    2023-10-09 22:02:01 id: 'chatcmpl-xxxxxxxxxxxx',
    2023-10-09 22:02:01 object: 'chat.completion',
    2023-10-09 22:02:01 created: 1696860117,
    2023-10-09 22:02:01 model: 'gpt-3.5-turbo-0613',
    2023-10-09 22:02:01 choices: [ { index: 0, message: [Object], finish_reason: 'stop' } ],
    2023-10-09 22:02:01 usage: { prompt_tokens: 9, completion_tokens: 18, total_tokens: 27 }
    2023-10-09 22:02:01 }
    2023-10-09 22:02:01 remove cache
    2023-10-09 22:02:01 get access token failed
    ```

    docker 看 log
    Armor
        21
    Armor  
       2023-10-09 22:07:46 +08:00
    @Armor #20
    这是我的 docker 启动命令
    docker run -itd `
    --name bot `
    -e MP_APPID=wx `
    -e MP_APPSECRET=123 `
    -e MP_TOKEN=123 `
    -e DEFAULT_API_URL=http://112.10.133.132 `
    -e DEFAULT_API_WORD= `
    -e DEFAULT_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx `
    -e LOCK_API_URL=true `
    -e LOCK_API_KEY=true `
    -e DB_TYPE=json `
    -v E:/OneDrive/docker/bot/data:/data `
    -p 12288:9000 `
    easychen/botchan:latest
    easychen
        22
    easychen  
    OP
       2023-10-09 22:26:15 +08:00
    @Armor get access token failed 是因为微信的 MP_APPID 或者 MP_APPSECRET 错了。

    话说你这反引号能运行?我记得我文档应该是写反斜杠 \ 。
    Armor
        23
    Armor  
       2023-10-09 23:47:59 +08:00
    @easychen #22 windows 是反引号,linux 是\
    Armor
        24
    Armor  
       2023-10-09 23:50:37 +08:00
    @easychen #22 还真是,为啥 MP_APPSECRET ,我会复制错,我很纳闷
    mosliu
        25
    mosliu  
       2023-10-10 11:35:01 +08:00
    @easychen 有几个问题
    1. 超时设定是否可以配置
    2. token 过长时分段返回。否则就是无返回。
    easychen
        26
    easychen  
    OP
       2023-10-10 15:05:48 +08:00
    @mosliu 我稍后加到环境变量里边吧
    mosliu
        27
    mosliu  
       2023-10-10 15:26:18 +08:00
    @easychen 谢谢 辛苦了。
    我自己改了。。代码写的丑就不提 pr 了。

    还有几个地方也可处理下
    1. 超时的提示
    2. cf 提示 503 时候的提示
    3. 返回过长时 sengMessage 分隔发送
    easychen
        28
    easychen  
    OP
       2023-10-10 16:21:05 +08:00
    @mosliu


    # 模型配置
    可以进一步指定模型参数优化需要的答复

    - MAX_TOKEN=1000 #返回的最大 token 数
    - TEMPERATURE=0.8 #模型的 temperature
    - TIMEOUT=180 #超时秒数
    - STREAM=true #是否采用流式传输

    # 截断设置
    过长文字可能导致内容无法返回,会截断为多条。

    注意:受微信平台限制,每次互动,只能最多回复五条消息,因此不要将字数设置太低,可能导致超过五条

    - REPLY_CHUNK_LENGHT=1000 #字数
    mosliu
        29
    mosliu  
       2023-10-10 17:09:38 +08:00
    @easychen 赞!!
    Silently
        30
    Silently  
       2023-10-10 17:47:55 +08:00 via iPhone
    能否增加个 azure openai 接口
    easychen
        31
    easychen  
    OP
       2023-10-10 17:53:04 +08:00
    @Silently 默认应该支持的,你试试?

    deployment 按这个创建:
    ```
    {
    'gpt-3.5-turbo':'gpt-35-turbo',
    'gpt-3.5-turbo-0301':'gpt-35-turbo-0301',
    'gpt-3.5-turbo-0613':'gpt-35-turbo-0613',
    'gpt-3.5-16k':'gpt-35-16k',
    'gpt-3.5-16k-0613':'gpt-35-16k-0613',
    'gpt-4':'gpt-4',
    'text-embedding-ada-002':'text-embedding-ada-002',
    }
    ```
    easychen
        32
    easychen  
    OP
       2023-10-10 17:55:17 +08:00
    @Armor 我好像也遇到了,有时候(尤其是刚开通时)测试号一直报错… 需要退出再重新登录
    Silently
        33
    Silently  
       2023-10-10 18:09:25 +08:00
    @easychen 我这边按照你说的创建 依旧报错 “"error":{"code":"DeploymentNotFound", "message":"The API deployment for this resource does not exist. If you created the deployment within the last 5 minutes, please wait a moment and try again."” 模型名称和部署名是一致的

    ![]( https://s3.bmp.ovh/imgs/2023/10/10/a39c956e8870e80e.jpg)
    ![]( https://s3.bmp.ovh/imgs/2023/10/10/f14c9462e36d9c52.jpg)
    Silently
        34
    Silently  
       2023-10-10 18:10:30 +08:00
    环境变量为
    - DEFAULT_API_URL=https://xxxx.openai.azure.com
    - DEFAULT_API_WORD=
    - DEFAULT_API_KEY=2xxxxxx
    - DEFAULT_MODEL=gpt-35-turbo
    - LOCK_API_URL=true
    - LOCK_API_KEY=true
    - LOCK_MODEL=true
    - DB_TYPE=json
    easychen
        35
    easychen  
    OP
       2023-10-10 18:24:21 +08:00
    @Silently

    我测试没有问题。

    DEFAULT_MODEL 要用 gpt-3.5-turbo 或者不写。
    Silently
        36
    Silently  
       2023-10-10 18:39:37 +08:00
    @easychen 确实 改 gpt-3.5-turbo 或者不写就正常,感谢 OP
    DanielNg23
        37
    DanielNg23  
       2023-10-27 21:36:20 +08:00
    需要国内的 LLM 平台支持吗?可以来我们这边打一下黑客马拉松,有国内 LLM 厂商的支持,还有独立开发大佬作嘉宾,线上/线下均可参加,来线下能提供 7 天住宿顺便来大理到处玩玩,最高有 AWS 提供的 2.5 万美金算力支持 https://mp.weixin.qq.com/s/MTqByjk8j_ekAMfcxgtP1g
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1120 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 23:15 PVG 07:15 LAX 16:15 JFK 19:15
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86