Browse Source

feat: change config type json to yml (#150)

二丫讲梵 2 years ago
parent
commit
16e0a9bc86
8 changed files with 53 additions and 47 deletions
  1. 1 1
      .github/workflows/go-binary-release.yml
  2. 1 1
      .gitignore
  3. 1 1
      Dockerfile
  4. 7 7
      README.md
  5. 0 11
      config.dev.json
  6. 18 0
      config.example.yml
  7. 17 18
      config/config.go
  8. 8 8
      docker-compose.yml

+ 1 - 1
.github/workflows/go-binary-release.yml

@@ -23,4 +23,4 @@ jobs:
           goarch: ${{ matrix.goarch }}
           goversion: 1.18 # 可以指定编译使用的 Golang 版本
           binary_name: "chatgpt-dingtalk" # 可以指定二进制文件的名称
-          extra_files: LICENSE config.dev.json prompt.yml README.md # 需要包含的额外文件
+          extra_files: LICENSE config.example.yml prompt.yml README.md # 需要包含的额外文件

+ 1 - 1
.gitignore

@@ -17,6 +17,6 @@ chatgpt-dingtalk
 
 # Dependency directories (remove the comment below to include it)
 # vendor/
-config.json
+config.yml
 tmp
 test/

+ 1 - 1
Dockerfile

@@ -20,6 +20,6 @@ RUN mkdir /app && apk upgrade \
 
 WORKDIR /app
 COPY --from=builder /app/ .
-RUN chmod +x chatgpt-dingtalk && cp config.dev.json config.json
+RUN chmod +x chatgpt-dingtalk && cp config.example.yml config.yml
 
 CMD ./chatgpt-dingtalk

+ 7 - 7
README.md

@@ -155,10 +155,10 @@ $ docker run -itd --name chatgpt -p 8090:8090 --add-host="host.docker.internal:h
 ```
 第二种:基于配置文件挂载运行
 # 复制配置文件,根据自己实际情况,调整配置里的内容
-$ cp config.dev.json config.json  # 其中 config.dev.json 从项目的根目录获取
+$ cp config.example.yml config.yml  # 其中 config.example.yml 从项目的根目录获取
 
 # 运行项目
-$ docker run -itd --name chatgpt -p 8090:8090  -v `pwd`/config.json:/app/config.json --restart=always  dockerproxy.com/eryajf/chatgpt-dingtalk:latest
+$ docker run -itd --name chatgpt -p 8090:8090  -v `pwd`/config.yml:/app/config.yml --restart=always  dockerproxy.com/eryajf/chatgpt-dingtalk:latest
 ```
 
 其中配置文件参考下边的配置文件说明。
@@ -172,8 +172,6 @@ $ nano docker-compose.yml # 编辑 APIKEY 等信息
 $ docker compose up -d
 ```
 
-注意,不论通过上边哪种docker方式部署,都需要配置Nginx代理,当然你直接通过服务器外网IP也可以。
-
 部署完成之后,通过Nginx代理本服务:
 
 ```nginx
@@ -196,12 +194,14 @@ server {
 
 部署完成之后,就可以在群里艾特机器人进行体验了。
 
+`📢 注意`:Nginx代理步骤是个可选步骤,你也可以直接通过服务器外网IP:PORT作为回调地址。
+
 Nginx配置完毕之后,可以先手动请求一下,通过服务日志输出判断服务是否正常可用:
 
 ```sh
 $ curl --location --request POST 'http://chat.eryajf.net/' \
   --header 'Content-type: application/json' \
-  --data-raw '{
+  -d '{
     "conversationId": "xxx",
     "atUsers": [
         {
@@ -242,7 +242,7 @@ $ curl --location --request POST 'http://chat.eryajf.net/' \
 ```sh
 $ tar xf chatgpt-dingtalk-v0.0.4-darwin-arm64.tar.gz
 $ cd chatgpt-dingtalk-v0.0.4-darwin-arm64
-$ cp config.dev.json  config.json # 然后根据情况调整配置文件内容,宿主机如遇端口冲突,可通过调整config.json中的port参数自定义服务端口
+$ cp config.example.yml  config.yml # 然后根据情况调整配置文件内容,宿主机如遇端口冲突,可通过调整config.yml中的port参数自定义服务端口
 $ ./chatgpt-dingtalk  # 直接运行
 
 # 如果要守护在后台运行
@@ -321,7 +321,7 @@ $ git clone https://github.com/eryajf/chatgpt-dingtalk.git
 $ cd chatgpt-dingtalk
 
 # 复制配置文件,根据个人实际情况进行配置
-$ cp config.dev.json config.json
+$ cp config.example.yml config.yml
 
 # 启动项目
 $ go run main.go

+ 0 - 11
config.dev.json

@@ -1,11 +0,0 @@
-{
-    "api_key": "xxxxxxxxx",
-    "base_url": "",
-    "model": "gpt-3.5-turbo",
-    "session_timeout": 600,
-    "http_proxy": "",
-    "default_mode": "单聊",
-    "max_request": 0,
-    "port": "8090",
-    "service_url": "http://chat.eryajf.net"
-}

+ 18 - 0
config.example.yml

@@ -0,0 +1,18 @@
+# openai api_key
+api_key: "xxxxxxxxx"
+# 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议
+base_url: ""
+# 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-0301", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单
+model: "gpt-3.5-turbo"
+# 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
+session_timeout: 600
+# 指定请求时使用的代理,如果为空,则不使用代理,注意需要带上 http 协议 或 socks5 协议
+http_proxy: ""
+# 指定默认的对话模式,可根据实际需求进行自定义,如果不设置,默认为单聊,即无上下文关联的对话模式
+default_mode: "单聊"
+# 单人单日请求次数上限,默认为0,即不限制
+max_request: 0
+# 指定服务启动端口,默认为 8090,一般在二进制宿主机部署时,遇到端口冲突时使用
+port: "8090"
+# 指定服务的地址,就是当前服务可供外网访问的地址(或者直接理解为你配置在钉钉回调那里的地址),用于生成图片时给钉钉做渲染
+service_url: "http://chat.eryajf.net"

+ 17 - 18
config/config.go

@@ -1,36 +1,38 @@
 package config
 
 import (
-	"encoding/json"
 	"fmt"
+	"io/ioutil"
+	"log"
 	"os"
 	"strconv"
 	"sync"
 	"time"
 
 	"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
+	"gopkg.in/yaml.v2"
 )
 
 // Configuration 项目配置
 type Configuration struct {
 	// gtp apikey
-	ApiKey string `json:"api_key"`
+	ApiKey string `yaml:"api_key"`
 	// 请求的 URL 地址
-	BaseURL string `json:"base_url"`
+	BaseURL string `yaml:"base_url"`
 	// 使用模型
-	Model string `json:"model"`
+	Model string `yaml:"model"`
 	// 会话超时时间
-	SessionTimeout time.Duration `json:"session_timeout"`
+	SessionTimeout time.Duration `yaml:"session_timeout"`
 	// 默认对话模式
-	DefaultMode string `json:"default_mode"`
+	DefaultMode string `yaml:"default_mode"`
 	// 代理地址
-	HttpProxy string `json:"http_proxy"`
+	HttpProxy string `yaml:"http_proxy"`
 	// 用户单日最大请求次数
-	MaxRequest int `json:"max_request"`
+	MaxRequest int `yaml:"max_request"`
 	// 指定服务启动端口,默认为 8090
-	Port string `json:"port"`
+	Port string `yaml:"port"`
 	// 指定服务的地址,就是钉钉机器人配置的回调地址,比如: http://chat.eryajf.net
-	ServiceURL string `json:"service_url"`
+	ServiceURL string `yaml:"service_url"`
 }
 
 var config *Configuration
@@ -41,18 +43,15 @@ func LoadConfig() *Configuration {
 	once.Do(func() {
 		// 从文件中读取
 		config = &Configuration{}
-		f, err := os.Open("config.json")
+		data, err := ioutil.ReadFile("config.yml")
 		if err != nil {
-			logger.Fatal(fmt.Errorf("open config err: %+v", err))
-			return
+			log.Fatal(err)
 		}
-		defer f.Close()
-		encoder := json.NewDecoder(f)
-		err = encoder.Decode(config)
+		err = yaml.Unmarshal(data, &config)
 		if err != nil {
-			logger.Warning(fmt.Errorf("decode config err: %v", err))
-			return
+			log.Fatal(err)
 		}
+
 		// 如果环境变量有配置,读取环境变量
 		apiKey := os.Getenv("APIKEY")
 		baseURL := os.Getenv("BASE_URL")

+ 8 - 8
docker-compose.yml

@@ -7,14 +7,14 @@ services:
     restart: always
     environment:
       APIKEY: xxxxxx  # 你的 api_key
-      BASE_URL: xxxxxx  # 如果你想指定请求url的地址,可通过这个参数进行配置,不需要再添加 /v1,如果留空则默认为官方地址,
-      MODEL: "gpt-3.5-turbo" # 指定模型
-      SESSION_TIMEOUT: 600 # 超时时间
-      HTTP_PROXY: http://host.docker.internal:15777 # 配置代理,注意:host.docker.internal会解析到容器所在的宿主机IP,因此只需要更改端口即可,另外如果服务器在国外,则这里留空即可
-      DEFAULT_MODE: "单聊" # 聊天模式
-      MAX_REQUEST: 0 # 单人单日请求次数限,默认为0,即不限制
-      PORT: 8090 # 指定服务启动端口,默认为 8090,容器化部署时,不需要调整
-      SERVICE_URL: ""  # 指定服务的地址,就是钉钉机器人配置的回调地址,比如: http://chat.eryajf.net
+      BASE_URL: ""  # 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议
+      MODEL: "gpt-3.5-turbo" # 指定模型,默认为 gpt-3.5-turbo , 可选参数有: "gpt-4-0314", "gpt-4", "gpt-3.5-turbo-0301", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单
+      SESSION_TIMEOUT: 600 # 会话超时时间,默认600秒,在会话时间内所有发送给机器人的信息会作为上下文
+      HTTP_PROXY: http://host.docker.internal:15777 # 指定请求时使用的代理,如果为空,则不使用代理,注意需要带上 http 协议 或 socks5 协议
+      DEFAULT_MODE: "单聊" # 指定默认的对话模式,可根据实际需求进行自定义,如果不设置,默认为单聊,即无上下文关联的对话模式
+      MAX_REQUEST: 0 # 单人单日请求次数限,默认为0,即不限制
+      PORT: 8090 # 指定服务启动端口,默认为 8090,容器化部署时,不需要调整,一般在二进制宿主机部署时,遇到端口冲突时使用
+      SERVICE_URL: ""  # 指定服务的地址,就是当前服务可供外网访问的地址(或者直接理解为你配置在钉钉回调那里的地址),用于生成图片时给钉钉做渲染
     ports:
       - "8090:8090"
     extra_hosts: