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

This commit is contained in:
二丫讲梵
2023-04-01 11:09:28 +08:00
committed by GitHub
parent 8f1af08859
commit 16e0a9bc86
8 changed files with 53 additions and 47 deletions
+1 -1
View File
@@ -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
View File
@@ -17,6 +17,6 @@ chatgpt-dingtalk
# Dependency directories (remove the comment below to include it)
# vendor/
config.json
config.yml
tmp
test/
+1 -1
View File
@@ -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
View File
@@ -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
-11
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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: