mirror of
https://github.com/razertory/gpt-wework
synced 2025-09-26 19:41:16 +08:00
update config
This commit is contained in:
10
.env.example
Normal file
10
.env.example
Normal file
@@ -0,0 +1,10 @@
|
||||
# 验证企业微信回调的token
|
||||
WEWORK_TOKEN=token
|
||||
# 验证企业微信回调的key
|
||||
WEWORK_ENCODING_AEK_KEY=encodingAesKey
|
||||
# 企业微信企业id
|
||||
WEWORK_CORP_ID=corpid
|
||||
# 企业微信secret
|
||||
WEWORK_CROP_SECRET=corpsecret
|
||||
# openai key
|
||||
OPENAI_KEY=key
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.env
|
7
Dockerfile
Normal file
7
Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM golang:1.19-alpine
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN go build .
|
||||
|
||||
CMD ["./gpt-wework"]
|
47
README.md
47
README.md
@@ -31,6 +31,33 @@
|
||||
|
||||
## 操作流程
|
||||
|
||||
|
||||
#### 0.代码说明
|
||||
*接口*
|
||||
```
|
||||
GET /ping 服务健康检查
|
||||
GET /wechat/check 企业微信服务器验证地址,在企业微信后台配置 域名+/wechat/check
|
||||
POST /wechat/check 企业微信服务器事件推送地址地址
|
||||
POST /chat OpenAI 聊天接口,用于测试
|
||||
```
|
||||
|
||||
*配置文件*
|
||||
参考 `.env.example` 文件,创建一个 .env 文件。服务启动的时候会 load `.env`, 如果不存在会 panic!
|
||||
|
||||
参数含义
|
||||
```
|
||||
# 验证企业微信回调的token
|
||||
WEWORK_TOKEN=token
|
||||
# 验证企业微信回调的key
|
||||
WEWORK_ENCODING_AEK_KEY=encodingAesKey
|
||||
# 企业微信企业id
|
||||
WEWORK_CORP_ID=corpid
|
||||
# 企业微信secret
|
||||
WEWORK_CROP_SECRET=corpsecret
|
||||
# openai key
|
||||
OPENAI_KEY=key
|
||||
```
|
||||
|
||||
#### 1.登陆(注册)你的 OpenAI 账号,拿到对应的 key
|
||||
参数会用到 [gpt.go](./service/gpt.go) 当中
|
||||
|
||||
@@ -39,26 +66,8 @@
|
||||

|
||||
|
||||
#### 3.配置应用服务器
|
||||
填写项目所在服务器的 host 以及 [main.go](./main.go) 的
|
||||
`/wechat/check`
|
||||
host + `/wechat/check`
|
||||
|
||||
相关的参数参考[wechat.go](./service/wechat.go) 上方的参数
|
||||
```
|
||||
// 验证企业微信回调的token
|
||||
var token = "token"
|
||||
|
||||
// 验证企业微信回调的key
|
||||
var encodingAesKey = "encodingAesKey"
|
||||
|
||||
// 企业微信企业id 这个参数在企业微信后台的企业信息页
|
||||
var corpid = "corpid"
|
||||
|
||||
// 企业微信secret 这个参数需要通过企业微信app发送
|
||||
var corpsecret = "corpsecret"
|
||||
|
||||
// 上下文对话能力,默认是 3, 可以根据需要修改对话长度
|
||||
var weworkConversationSize = 3
|
||||
```
|
||||
注意,只有这些参数和企业微信`接收事件服务器`一致的时候,才能验证通过。代码中的 corpsecret 一定是通过企业微信获得的,首次获取一定是`企业微信app发送`
|
||||

|
||||

|
||||
|
3
go.mod
3
go.mod
@@ -6,6 +6,7 @@ require (
|
||||
github.com/gin-contrib/cors v1.4.0
|
||||
github.com/gin-gonic/gin v1.8.1
|
||||
github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||
github.com/sashabaranov/go-gpt3 v1.3.0
|
||||
)
|
||||
|
||||
@@ -20,12 +21,12 @@ require (
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/google/go-querystring v1.1.0 // indirect
|
||||
github.com/hbagdi/go-unsplash v0.0.0-20220920231246-14121bdf6d94 // indirect
|
||||
github.com/joho/godotenv v1.5.1 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/leodido/go-urn v1.2.1 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
|
||||
github.com/redis/go-redis/v9 v9.0.2 // indirect
|
||||
github.com/ugorji/go/codec v1.2.7 // indirect
|
||||
|
2
go.sum
2
go.sum
@@ -39,6 +39,8 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
|
||||
github.com/hbagdi/go-unsplash v0.0.0-20220920231246-14121bdf6d94 h1:dhBDGgWOBSG58zpXDZ8x7yS8pdlY5GII+GAgsPV/oXI=
|
||||
github.com/hbagdi/go-unsplash v0.0.0-20220920231246-14121bdf6d94/go.mod h1:DEzhU5CxSdknL3hUXTco1n5AO2BZHs4KeJo5ADWU0Iw=
|
||||
github.com/jarcoal/httpmock v1.0.4/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
|
||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
|
5
main.go
5
main.go
@@ -4,6 +4,7 @@ import (
|
||||
"gpt-wework/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/joho/godotenv"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -16,5 +17,9 @@ func main() {
|
||||
}
|
||||
|
||||
func Ping(c *gin.Context) {
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
panic("Error loading .env file")
|
||||
}
|
||||
c.Data(500, "text/plain;charset=utf-8", []byte("ff"))
|
||||
}
|
||||
|
30
service/config.go
Normal file
30
service/config.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/patrickmn/go-cache"
|
||||
)
|
||||
|
||||
var token = os.Getenv("WEWORK_TOKEN")
|
||||
|
||||
var encodingAesKey = os.Getenv("WEWORK_ENCODING_AEK_KEY")
|
||||
|
||||
// 企业微信企业id
|
||||
var corpid = os.Getenv("WEWORK_CORP_ID")
|
||||
|
||||
// 企业微信secret
|
||||
var corpsecret = os.Getenv("WEWORK_CROP_SECRET")
|
||||
|
||||
// openai key
|
||||
var openAiKey = os.Getenv("OPENAI_KEY")
|
||||
|
||||
// 企业微信的重试缓存,如果服务器延迟低,可以去掉该变量以及 isRetry 逻辑
|
||||
var retryCache = cache.New(60*time.Minute, 10*time.Minute)
|
||||
|
||||
// 企业微信 token 缓存,请求频次过高可能有一些额外的问题
|
||||
var tokenCache = cache.New(5*time.Minute, 5*time.Minute)
|
||||
|
||||
// 上下文对话能力,默认是 3, 可以根据需要修改对话长度
|
||||
var weworkConversationSize = 3
|
@@ -10,12 +10,6 @@ import (
|
||||
gogpt "github.com/sashabaranov/go-gpt3"
|
||||
)
|
||||
|
||||
// openai key
|
||||
var apiKey = ""
|
||||
|
||||
// 这是一个可以自定义的 id,用默认值不会有问题
|
||||
var userId = "orgId"
|
||||
|
||||
// 企业微信 token 缓存,请求频次过高可能有一些额外的问题
|
||||
var conversationCache = cache.New(5*time.Minute, 5*time.Minute)
|
||||
|
||||
@@ -54,8 +48,7 @@ func AskOnConversation(question, conversationId string, size int) (string, error
|
||||
}
|
||||
messages = messages[len(messages)-pivot:]
|
||||
conversationCache.Set(key, messages, 12*time.Hour)
|
||||
k, userId := apiKey, userId
|
||||
chat := NewGPT(k, userId)
|
||||
chat := NewGPT(openAiKey, conversationId)
|
||||
defer chat.Close()
|
||||
answer, err := chat.Chat(messages)
|
||||
if err != nil {
|
||||
|
@@ -10,30 +10,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/patrickmn/go-cache"
|
||||
)
|
||||
|
||||
// 验证企业微信回调的token
|
||||
var token = "token"
|
||||
|
||||
// 验证企业微信回调的key
|
||||
var encodingAesKey = "encodingAesKey"
|
||||
|
||||
// 企业微信企业id
|
||||
var corpid = "corpid"
|
||||
|
||||
// 企业微信secret
|
||||
var corpsecret = "corpsecret"
|
||||
|
||||
// 企业微信的重试缓存,如果服务器延迟低,可以去掉该变量以及 isRetry 逻辑
|
||||
var retryCache = cache.New(60*time.Minute, 10*time.Minute)
|
||||
|
||||
// 企业微信 token 缓存,请求频次过高可能有一些额外的问题
|
||||
var tokenCache = cache.New(5*time.Minute, 5*time.Minute)
|
||||
|
||||
// 上下文对话能力,默认是 3, 可以根据需要修改对话长度
|
||||
var weworkConversationSize = 3
|
||||
|
||||
type WeixinUserAskMsg struct {
|
||||
ToUserName string `xml:"ToUserName"`
|
||||
CreateTime int64 `xml:"CreateTime"`
|
||||
|
Reference in New Issue
Block a user