Git Product home page Git Product logo

feishu-openai-stream-chatbot's Introduction


飞书 ×(GPT)+ 打字机效果

🚀 Feishu OpenAI 🚀

AI
SDK Application
🎒OpenAI Go-OpenAI 🏅Feishu-OpenAI, 🎖Lark-OpenAI, Feishu-EX-ChatGPT, 🎖Feishu-OpenAI-Stream-Chatbot, Feishu-TLDR,Feishu-OpenAI-Amazing, Feishu-Oral-Friend, Feishu-OpenAI-Base-Helper, Feishu-Vector-Knowledge-Management, Feishu-OpenAI-PDF-Helper, 🏅Dingtalk-OpenAI, Wework-OpenAI, WeWork-OpenAI-Node, llmplugin
🤖 AutoGPT ------ 🏅AutoGPT-Next-Web
🎭 Stablediffusion ------ 🎖Feishu-Stablediffusion
🍎 Midjourney Go-Midjourney 🏅Feishu-Midjourney, 🔥MidJourney-Web, Dingtalk-Midjourney
🍍 文心一言 Go-Wenxin Feishu-Wenxin, Dingtalk-Wenxin, Wework-Wenxin
💸 Minimax Go-Minimax Feishu-Minimax, Dingtalk-Minimax, Wework-Minimax
⛳️ CLAUDE Go-Claude Feishu-Claude, DingTalk-Claude, Wework-Claude
🥁 PaLM Go-PaLM Feishu-PaLM,DingTalk-PaLM,Wework-PaLM
🎡 Prompt ------ 📖 Prompt-Engineering-Tutior
🍋 ChatGLM ------ Feishu-ChatGLM
⛓ LangChain ------ 📖 LangChain-Tutior
🪄 One-click ------ 🎖Awesome-One-Click-Deployment

👻 机器人功能

🥖 流式文本输出: 仿真打字机效果,更真实的对话体验

💬 多话题对话:支持私人和群聊多话题讨论,高效连贯

🛖 场景预设:内置丰富场景列表,一键切换AI角色

🎭 角色扮演:支持场景模式,增添讨论乐趣和创意

🔄 上下文保留:回复对话框即可继续同一话题讨论

⏰ 自动结束:超时自动结束对话,支持清除讨论历史

📝 富文本卡片:支持富文本卡片回复,信息更丰富多彩

TODO

  • Feishu-ChatBot进行整合,进一步完善chatbot能力
  • 🔙 历史回档: 轻松回档历史对话,继续话题讨论
  • 🎥 话题内容秒转PPT:让你的汇报从此变得更加简单
  • prompt优化:深化场景细分,让chatbot成为你的个人专属助理
  • 群聊summary:新人加群后可让机器人自动分析并总结群内历史消息
  • 群聊活跃状态:机器人活跃状态可控,而不需要每句话都艾特它
  • 其他欢迎补充

项目部署

有关飞书的配置文件说明,➡︎ 点击查看
本地部署
git clone https://github.com/ConnectAI-E/Feishu-OpenAI-Stream-Chatbot.git
cd Feishu-OpenAI-Stream-Chatbot/code

如果你的服务器没有公网 IP,可以使用反向代理的方式

飞书的服务器在国内对 ngrok 的访问速度很慢,所以推荐使用一些国内的反向代理服务商

# 配置config.yaml
mv config.example.yaml config.yaml

//测试部署
go run main.go
cpolar http 9000

//正式部署
nohup cpolar http 9000 -log=stdout &

//查看服务器状态
https://dashboard.cpolar.com/status

// 下线服务
ps -ef | grep cpolar
kill -9 PID

更多详细介绍,参考飞书上的小计算器: Go 机器人来啦


serverless云函数(阿里云等)部署
git clone [email protected]:Leizhenpeng/feishu-chatgpt.git
cd feishu-chatgpt/code

安装severless工具

# 配置config.yaml
mv config.example.yaml config.yaml
# 安装severless cli
npm install @serverless-devs/s -g

安装完成后,请根据您本地环境,根据下面教程部署severless

  • 本地 linux/mac os 环境
  1. 修改s.yaml中的部署地区和部署秘钥
edition: 1.0.0
name: feishuBot-chatGpt
access: "aliyun" #  修改自定义的秘钥别称

vars: # 全局变量
region: "cn-hongkong" # 修改云函数想要部署地区

  1. 一键部署
cd ..
s deploy
  • 本地windows
  1. 首先打开本地cmd命令提示符工具,运行go env检查你电脑上 go 环境变量设置, 确认以下变量和值
set GO111MODULE=on
set GOARCH=amd64
set GOOS=linux
set CGO_ENABLED=0

如果值不正确,比如您电脑上为set GOOS=windows, 请运行以下命令设置GOOS变量值

go env -w GOOS=linux
  1. 修改s.yaml中的部署地区和部署秘钥
edition: 1.0.0
name: feishuBot-chatGpt
access: "aliyun" #  修改自定义的秘钥别称

vars: # 全局变量
  region: "cn-hongkong" #  修改云函数想要部署地区

  1. 修改s.yaml中的pre-deploy, 去除第二步run前面的环变量改置部分
  pre-deploy:
        - run: go mod tidy
          path: ./code
        - run: go build -o
            target/main main.go  # 删除GO111MODULE=on GOOS=linux GOARCH=amd64 CGO_ENABLED=0
          path: ./code

  1. 一键部署
cd ..
s deploy

更多详细介绍,参考仅需 1min,用 Serverless 部署基于 gin 的飞书机器人

使用 Railway 平台一键部署

Railway 是一家国外的 Serverless 平台,支持多种语言,可以一键将 Github 上的代码仓库部署到 Railway 平台,然后在 Railway 平台上配置环境变量即可。部署本项目的流程如下:

1. 生成 Railway 项目

点击下方按钮即可创建一个对应的 Railway 项目,其会自动 Fork 本项目到你的 Github 账号下。

Deploy on Railway

2. 配置环境变量

在打开的页面中,配置环境变量,PORT/HTTP_PORT 必须设置为 80 ,railway health check 默认检查 80 端口,不支持自定义端口,每个变量的说明如下图所示:

Railway 环境变量

3. 部署项目

填写完环境变量后,点击 Deploy 就完成了项目的部署。部署完成后还需获取对应的域名用于飞书机器人访问,如下图所示:

Railway 域名

如果不确定自己部署是否成功,可以通过访问上述获取到的域名 (https://xxxxxxxx.railway.app/ping) 来查看是否返回了pong ,如果返回了pong,说明部署成功。

docker部署
docker build -t feishu-chatgpt:latest .
docker run -d --name feishu-chatgpt -p 9000:9000 \
--env APP_ID=xxx \
--env APP_SECRET=xxx \
--env APP_ENCRYPT_KEY=xxx \
--env APP_VERIFICATION_TOKEN=xxx \
--env BOT_NAME=chatGpt \
--env OPENAI_KEY="sk-xxx1,sk-xxx2,sk-xxx3" \
--env API_URL="https://api.openai.com" \
--env HTTP_PROXY="" \
feishu-chatgpt:latest

注意:

  • BOT_NAME 为飞书机器人名称,例如 chatGpt
  • OPENAI_KEY 为openai key,多个key用逗号分隔,例如 sk-xxx1,sk-xxx2,sk-xxx3
  • HTTP_PROXY 为宿主机的proxy地址,例如 http://host.docker.internal:7890,没有代理的话,可以不用设置
  • API_URL 为openai api 接口地址,例如 https://api.openai.com, 没有反向代理的话,可以不用设置

docker-compose 部署

编辑 docker-compose.yaml,通过 environment 配置相应环境变量(或者通过 volumes 挂载相应配置文件),然后运行下面的命令即可

# 构建镜像
docker compose build

# 启动服务
docker compose up -d

# 停止服务
docker compose down

事件回调地址: http://IP:9000/webhook/event 卡片回调地址: http://IP:9000/webhook/card

详细配置步骤

📸 点击展开飞书机器人配置的分步截图指导

  • 获取 OpenAI 的 KEY( 🙉 下面有免费的 KEY 供大家测试部署 )
  • 创建 飞书 机器人
    1. 前往开发者平台创建应用,并获取到 APPID 和 Secret
    2. 前往应用功能-机器人, 创建机器人
    3. 从 cpolar、serverless 或 Railway 获得公网地址,在飞书机器人后台的 事件订阅 板块填写。例如,
      • http://xxxx.r6.cpolar.top为 cpolar 暴露的公网地址
      • /webhook/event为统一的应用路由
      • 最终的回调地址为 http://xxxx.r6.cpolar.top/webhook/event
    4. 在飞书机器人后台的 机器人 板块,填写消息卡片请求网址。例如,
      • http://xxxx.r6.cpolar.top为 cpolar 暴露的公网地址
      • /webhook/card为统一的应用路由
      • 最终的消息卡片请求网址为 http://xxxx.r6.cpolar.top/webhook/card
    5. 在事件订阅板块,搜索三个词机器人进群接收消息消息已读添加, 并将他们所需权限全部申请开通。 进入权限管理界面,搜索图片, 勾选获取与上传图片或文件资源。 最终会添加下列回调事件
      • im:resource(获取与上传图片或文件资源)
      • im:message
      • im:message.group_at_msg(获取群组中所有消息)
      • im:message.group_at_msg:readonly(接收群聊中@机器人消息事件)
      • im:message.p2p_msg(获取用户发给机器人的单聊消息)
      • im:message.p2p_msg:readonly(读取用户发给机器人的单聊消息)
      • im:message:send_as_bot(获取用户在群组中@机器人的消息)
      • im:chat:readonly(获取群组信息)
      • im:chat(获取与更新群组信息)
  1. 发布版本,等待企业管理员审核通过

更多介绍,参考飞书上的小计算器: Go 机器人来啦

一些附加功能

1. 日志功能

可以参考 docker-compose.yml 和 config.example.yaml 里面的配置。要注意需要将 logs 目录映射到外部,这样可以方便查看日志。

记录的日志大概是这样的:

2023/05/04 00:00:00 Success request: UserId: XXX , Request: [{user 请问今天是几号?} {assistant 抱歉,作为AI语言模型,我不知道今天是几号。请您查看您的设备上的日期或者问问其他人。}] , Response: 
抱歉,作为AI语言模型,我不知道今天是几号。请您查看您的设备上的日期或者问问其他人。

这里为了保护用户隐私,没有调用飞书接口,将 UserId 翻译为可读的名字。如果有需要的话,建议单个单个按照 UserId 让飞书管理员查找。

此外,比如可以使用

grep "UserId" app.log | wc -l

来统计一共问了多少个问题。(可以根据实际需求来进行搜索,比如只搜索 Success request 成功回复的请求。)

2. 限流功能

可以参考 docker-compose.yml 和 config.example.yaml 里面的配置。要注意这里没有将访问数据保存在外部,这样是为了先不引入外部依赖,比如 redis 或者 mysql。由于可以控制的时间范围是1天,所以放内存里也没啥大问题。

更多交流

如需协助部署,或者其他定制服务,可联系下面的WeChat,支持发票~

遇到问题,可以加入飞书群沟通~

交朋友 或者 鼓励一下

如果你觉得这个项目对你有帮助,可以请作者买本书~

😚 谢谢你啦 😚

赞助感谢

友情感谢 'Find My AI' 提供的部分经费赞助!

feishu-openai-stream-chatbot's People

Contributors

bourne7 avatar ddmeaqua avatar leizhenpeng avatar straydragon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

feishu-openai-stream-chatbot's Issues

不走代理

可以支持一下配置里的代理设置么

默认支持上下文,怎么改比较合适

我在发送回答之前,加了一个map, 根据userId 来 记录下 rootId, 随后在第二次用户提问的时候首先从map里拿rootId并更换之前的rootId。这里改了之后是默认支持了上下文,但是发现一直都会对问题的重复回答。比如我一个问题在1日晚7点问了一次,当时回答之后,夜里和第二天仍然会不定时回答这个问题

docker 部署之后,提示超时

"no content timeout"
2023/05/04 10:07:44 UserId: bg25f3c7 , Request: [{user 你好} {assistant }] , Response:
[GIN] 2023/05/04 - 10:07:44 | 200 | 10.862463847s | 123.58.10.238 | POST "/webhook/event"
[GIN] 2023/05/04 - 10:07:52 | 200 | 4.219042ms | 123.58.10.239 | POST "/webhook/event"
"no content timeout"
2023/05/04 10:08:00 UserId: bg25f3c7 , Request: [{user gpt} {assistant }] , Response:
[GIN] 2023/05/04 - 10:08:00 | 200 | 10.739896228s | 123.58.10.239 | POST "/webhook/event"
[GIN] 2023/05/04 - 10:08:07 | 200 | 4.037471ms | 123.58.10.239 | POST "/webhook/event"
"no content timeout"
[GIN] 2023/05/04 - 10:09:06 | 200 | 10.646268987s | 123.58.10.239 | POST "/webhook/event"
2023/05/04 10:09:06 UserId: bg25f3c7 , Request: [{user 你好} {assistant }] , Response:
[GIN] 2023/05/04 - 10:09:14 | 200 | 3.16389ms | 123.58.10.239 | POST "/webhook/event"

deploy on railway failed when use repo naned https://github.com/ConnectAI-E/Feishu-OpenAI-Stream-Chatbot

`

==============
Using Nixpacks

context: 236e4a8dc138e4f53889225cb4cf66c3

╔═══════ Nixpacks v1.5.1 ══════╗
║ setup │ go_1_18 ║
║──────────────────────────────║
║ install │ go mod download ║
║──────────────────────────────║
║ build │ go build -o out ║
║──────────────────────────────║
║ start │ ./out ║
╚══════════════════════════════╝

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 2.25kB done
#1 DONE 0.0s

#2 [internal] load .dockerignore
#2 transferring context: 2B done

#2 DONE 0.0s

#3 [internal] load metadata for ghcr.io/railwayapp/nixpacks:ubuntu-1678752204

#3 DONE 0.3s

#4 [internal] load metadata for docker.io/library/ubuntu:jammy

#4 DONE 0.5s

#5 [stage-0 1/10] FROM ghcr.io/railwayapp/nixpacks:ubuntu-1678752204@sha256:fba77818e57bebd4e7a02f60d45554354d6ec5a3f7d98b4ee4f6b2a6e720191e
#5 DONE 0.0s

#6 [stage-1 1/5] FROM docker.io/library/ubuntu:jammy@sha256:67211c14fa74f070d27cc59d69a7fa9aeff8e28ea118ef3babc295a0428a6d21
#6 DONE 0.0s

#7 [internal] load build context

#7 transferring context: 304.56kB done
#7 DONE 0.0s

#8 [stage-0 2/10] WORKDIR /app/
#8 CACHED

#9 [stage-0 3/8] COPY .nixpacks/nixpkgs-293a28df6d7ff3dec1e61e37cc4ee6e6c0fb0847.nix .nixpacks/nixpkgs-293a28df6d7ff3dec1e61e37cc4ee6e6c0fb0847.nix
#9 CACHED

#10 [stage-0 4/8] RUN nix-env -if .nixpacks/nixpkgs-293a28df6d7ff3dec1e61e37cc4ee6e6c0fb0847.nix && nix-collect-garbage -d
#10 CACHED

#11 [stage-0 5/8] COPY . /app/.

#11 DONE 0.1s

#12 [stage-0 6/8] RUN --mount=type=cache,id=s/71cbd2f2-e015-49fb-aad3-9430cebaa627-/root/cache/go-build,target=/root/.cache/go-build go mod download

#12 DONE 2.2s

#13 [stage-0 7/8] COPY . /app/.
#13 DONE 0.0s

#14 [stage-0 8/8] RUN --mount=type=cache,id=s/71cbd2f2-e015-49fb-aad3-9430cebaa627-/root/cache/go-build,target=/root/.cache/go-build go build -o out

#14 DONE 11.6s

#15 [stage-1 3/5] COPY --from=0 /etc/ssl/certs /etc/ssl/certs
#15 CACHED

#16 [stage-1 2/5] WORKDIR /app/
#16 CACHED

#17 [stage-1 4/5] RUN true
#17 CACHED

#18 [stage-1 5/5] COPY --from=0 /app/ /app/
#18 DONE 0.1s

#19 exporting to image
#19 exporting layers

#19 exporting layers 0.1s done
#19 writing image sha256:e915c0ad557d45ceb7f951e05cf1fb17a36e1d12da873137d7491f62394d040e done
`

流式输出定时器设置为多少比较合适呢?

想请教下作者,现在模拟流式输出部分tiker设置时间是700ms,请问这个时间是根据什么来设置的呢?我现在设置成700ms的效果还是一片一片的输出,并没有您readme里面打印机的效果,输出是一顿一顿的,比如先出来100个字,等一会再出下100个字,体验不好。。

GPT-4总是会超时

如下所示,每次响应时间超过60s,就会出现这个错误。看起来是飞书平台自己设定的超时时间?这个有办法重新设置吗?
[GIN-debug] GET /ping --> main.main.func2 (3 handlers)
[GIN-debug] POST /webhook/event --> github.com/larksuite/oapi-sdk-gin.NewEventHandlerFunc.func1 (3 handlers)
[GIN-debug] POST /webhook/card --> github.com/larksuite/oapi-sdk-gin.NewCardActionHandlerFunc.func1 (3 handlers)
2023/05/26 14:56:39 http server started: http://localhost:9000/webhook/event
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :9000
c-6470c85c-773ab6f2a21143cdb6382023-05-26 22:57:18FC Invoke End RequestId: 1-6470c891-f2318b22792094d3a686e22e, Error: Invocation canceled by client (duration: 62936ms, maxMemoryUsage: 0.00MB)

出现了这个错误

Stream error: context deadline exceeded (Client.Timeout or context cancellation while reading body)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.