mirror of
https://github.com/eryajf/chatgpt-dingtalk.git
synced 2026-04-22 23:47:15 +08:00
feat: change config type json to yml (#150)
This commit is contained in:
@@ -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
@@ -17,6 +17,6 @@ chatgpt-dingtalk
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
config.json
|
||||
config.yml
|
||||
tmp
|
||||
test/
|
||||
|
||||
+1
-1
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user