GPT接入飞书

在体验ChatGPT这方面,我算是晚的。使用下来,更多的是对于这种应用形式感到兴奋,而不是ChatGPT的专业能力。

得知OpenAI提供GPT3的Api接口后,我想到了将其接入团队飞书中,便于日常调用。

于是,使用Python从实现了一个飞书机器人后端,不依赖其他机器人框架,并将GPT接入。

仓库链接https://github.com/HuXioAn/GPT-Lark.git

效果展示


## 功能概述

功能上非常简单,就是机器人与用户单聊进行对话。除此之外还有几个小功能和特性。

多线程与多token支持

配置方面使用了json文件,特别是token的配置:

{

    "Bot":{
"profile":{
"app_id":"",
"app_secret":""
},
"bot_api_token":""
}, "WebHook":{
"port": 6666,
"route": "/"
}, "Api":[
{
"api_token": "",
"owner": "",
"available": true },
{
"api_token": "",
"owner": "",
"available": true
},
{
"api_token": "",
"owner": "",
"available": true
}
]
}

token可以根据配置文件的内置自动加载,配合自动收集功能可以动态更新token列表并写回文件。

支持多个token是为了更好的均衡负载、支持多用户并发使用,以及解决最常见的问题:api调用过于频繁。程序会按照使用频率安排token队列,实现均衡负载。并尽可能保证用户使用同一个token,为后续GPT3.5原生连续对话做准备。

token自动收集

咱们都知道,OpenAI赠送的18美元额度对于个人来说确实不少,可如果是面向多人使用,特别是非盈利性质的,token是很快会被榨干的。所以让使用者贡献出自己的token是必要的,为了简化与自动化这一流程,添加了自动token收集。

只需要将token发送给机器人,识别到token后会自动验证token是否可用,并返回是否成功。若token可用,将会加入服务列表以及写回配置文件。效果如下:

后期配合token失效自动检出能达到更好的效果。

其他功能

可以在项目仓库的readme中看到TODO List,有一些比较有意思的想法。

比如按照官方给出的实例使用few shot模式让GPT的回答带有情绪风格,或者加入专用token功能以实现可持续发展。

使用说明

基本使用请参照仓库readme~

环境说明

本项目不依赖机器人框架以及飞书官方SDK,轻量化且运行难度低。

实测使用国内腾讯云服务器以及美国VPS均可,都可联通OpenAI服务。

仓库地址https://github.com/HuXioAn/GPT-Lark

技术新人,水平有限,文中纰漏请一定指出,如有其他意见也请不吝赐教。更多相关内容请移步公众号,来找我聊聊天吧:

GPT接入飞书的更多相关文章

  1. Worktile正式入驻飞书,助力企业轻松实现敏捷开发与协作

    企业在敏捷研发中时常面临着交付延期.需求不匹配等问题,如何更高效地完成敏捷研发? Worktile携手飞书,为企业用户提供敏捷开发服务,帮助企业实现软件项目的需求管理.缺陷追踪.迭代规划与推进以及效能 ...

  2. Python调用飞书发送消息

    一.创建飞书机器人 自定义飞书机器人操作步骤,具体详见飞书官方文档:<机器人 | 如何在群聊中使用机器人?>

  3. JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录

    新增 修复并正式启用 飞书 平台的第三方登录 AuthToken 类中新增 refreshTokenExpireIn 记录 refresh token 的有效期 PR 合并 Github #101:支 ...

  4. 火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性

    通过使用火山引擎MARS-APM Plus的memory graph功能,飞书研发团队有效分析定位问题线上case多达30例,线上OOM率降低到了0.8‰,降幅达到60%.大幅提升了用户体验,为飞书的 ...

  5. Jenkins+Allure测试报告+飞书机器人发送通知

    一.前言 之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人). 本次实践搞 ...

  6. 飞书前端提到的竞态问题,在 Android 上怎么解决?

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  7. 【Mock平台】测试开发实战01-开篇PRD和需求详细

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 平台背景 从业务特性上,不少测试的服务很多是依赖第三方的接口的,比如其中的支付场景,就需要很多状态的返回进行验证,但大部分服务提供商没有很 ...

  8. 提高可测性-Mock平台设计和整体规划

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 平台背景 从业务特性上,不少测试的服务很多是依赖第三方的接口的,比如其中的支付场景,就需要很多状态的返回进行验证,但大部分服务提供商没有很 ...

  9. 动态线程池框架 DynamicTp v1.0.6版本发布。还在为Dubbo线程池耗尽烦恼吗?还在为Mq消费积压烦恼吗?

    DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为 动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过几个版本迭代,目前最新 ...

  10. 【开源】我和 JAP(JA Plus) 的故事

    JA Plus 故事 程序员的故事如此简单之绕不过去的开源情结 我们准备做一件伟大的事,也可以说是一件真真正正普惠的事. 絮 是的,你没有看错,就是"絮"而非"序&quo ...

随机推荐

  1. [.NET学习] EFCore学习之旅 -3 一些其他的迁移命令

    1.Update-DataBase  xxx 概述:将数据库回滚到某个版本. 1.首先创建一个表 Dog 2.生成迁移 Add-Migration CreateDogTable 并更新到数据库 Upd ...

  2. 《Java口袋指南》-内容总结

    Java口袋指南   一.语言   1.命名   类名:大驼峰   泛型:E标识集合元素   方法名:小驼峰   变量名:小写   包名:小写或下划线   2.词法元素/token   字符串压缩优化 ...

  3. C++基础语法学习:STL

    基础语法学习,少点比较,多些谦虚 1.容器: 常见的容器有以下几类: 1.vector:向量 2.deque:双端队列 3.list:列表 4.set:集合 5:multiset:多重集合 6.map ...

  4. python基础之hashilb模块、logging模块

    hashlib加密模块 1.何为加密 将文明数据处理成密文数据 让人无法看懂 2.为什么要加密 保证数据的安全,防止密码泄露 3.如何判断数据是否加密 密文数据的表现形式一般都是一串没有规则的字符串( ...

  5. Django ValueError: HTTP status code must be an integer from 100 to 599.

    程序执行后一直提示ValueError: HTTP status code must be an integer from 100 to 599. 遍历代码一切正常,然后开始调试代码,找出获取数据有问 ...

  6. 一步步教你在Edge浏览器上安装网风笔记

    微软于2022年6月15日正式结束对浏览器"Internet Explorer (IE)"的支持,IE已正式退出历史舞台,取而代之的是目前风头正盛的被微软称为当今最好用的Edge浏 ...

  7. mysql 1366 - Incorrect string value

    mysql 插入中文时报错  mysql 1366 - Incorrect string value... 这是由于 数据库 / 表 / 表字段 编码格式未设置好造成的 解决办法: 1.查看编码是否符 ...

  8. 旋转卡壳(求凸包直径)学习笔记 | 题解 P1452 [USACO03FALL]Beauty Contest G /【模板】旋转卡壳

    前言 旋转卡壳(Rotating Calipers)可以在凸包上维护许多有用的信息,最常见的就是凸包直径(平面最远点对). 注意:本文不介绍所谓的 "人类智慧" 乱搞做法. 算法流 ...

  9. 数据预处理时为什么要使用OneHot编码?

    什么是LabelEncoder(整数编码) 整数编码 将一列文本数据转化成数值,即列中的每一个特征都通过一个整数来表示.例如,[red, blue, red, yellow] = [0,2,0,1]. ...

  10. Nodejs后端自动化测试

    偶然看到收藏一下 const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const b ...