update config

This commit is contained in:
gusu
2023-04-24 09:24:47 +08:00
parent c84fef2d97
commit 0e94415605
10 changed files with 86 additions and 50 deletions

10
.env.example Normal file
View 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
View File

@@ -0,0 +1 @@
.env

7
Dockerfile Normal file
View File

@@ -0,0 +1,7 @@
FROM golang:1.19-alpine
COPY . .
RUN go build .
CMD ["./gpt-wework"]

View File

@@ -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 @@
![](https://raw.githubusercontent.com/razertory/statics/main/staic/2.png)
#### 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发送`
![](https://raw.githubusercontent.com/razertory/statics/main/staic/4.png)
![](https://raw.githubusercontent.com/razertory/statics/main/staic/5.png)

3
go.mod
View File

@@ -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
View File

@@ -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=

View File

@@ -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
View 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

View File

@@ -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 {

View File

@@ -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"`