Skip to content

Commit

Permalink
增加了代理配置
Browse files Browse the repository at this point in the history
  • Loading branch information
869413421 committed Mar 4, 2023
1 parent 26ae9fa commit 9e2a5f8
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 13 deletions.
20 changes: 14 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
>
> 详情参考官方详细[参数示例](https://beta.openai.com/examples)
# 项目初衷
> 自chatgpt流行以后,一直在使用其作为自己的编码工具。奈何官网时常在问题问到一半时短路,一些得到的答案就此丢失。
> 为了解决这个问题,我选择了更加稳定的API套上客户端来作为自己的工具。定制化地做了一些功能,如存储提问记录,统计提问信息等一些功能,同时做上内网穿透提供给没有办法体验chatgpt的朋友使用,由此大大降低了使用门槛。
> 当前项目是初始功能版本,开源出来给有需要的朋友使用。
# 更新记录
* 增加代理配置,解决国内无法使用。2023-03-04

# 项目功能
* 请求openai增加代理(防墙)
* AI性格设定
* 兼容3.0和3.5API
* 基本问答界面
* 参数可配置
Expand All @@ -28,6 +28,11 @@
# 使用前提
> 有openai账号,并且创建好api_key,注册事项可以参考[此文章](https://juejin.cn/post/7173447848292253704)
# 项目初衷
> 自chatgpt流行以后,一直在使用其作为自己的编码工具。奈何官网时常在问题问到一半时短路,一些得到的答案就此丢失。
> 为了解决这个问题,我选择了更加稳定的API套上客户端来作为自己的工具。定制化地做了一些功能,如存储提问记录,统计提问信息等一些功能,同时做上内网穿透提供给没有办法体验chatgpt的朋友使用,由此大大降低了使用门槛。
> 当前项目是初始功能版本,开源出来给有需要的朋友使用。
# 快速开始

`第一种:直接下载二进制(适合对编程不了解的同学)`
Expand Down Expand Up @@ -85,6 +90,7 @@ $ docker run -itd --name chatgpt-web --restart=always \
-e TOP_P=1 \
-e FREQ=0.0 \
-e PRES=0.6 \
-e PROXY=http://host.docker.internal:10809 \
-p 8080:8080 \
qingshui869413421/chatgpt-web:latest
```
Expand All @@ -111,9 +117,10 @@ $ docker run -itd --name chatgpt-web -v `pwd`/config.json:/app/config.json -p 80
{
"api_key": "your api key",
"port": 8080,
"bot_desc": "以下是与AI助手的对话。助手乐于助人,富有创造力,聪明且非常友好。",
"bot_desc": "你是一个AI助手,我需要你模拟一名温柔贴心的女朋友来回答我的问题。",
"proxy": "http://host.docker.internal:10809",
"model": "gpt-3.5-turbo-0301",
"max_tokens": 512,
"model": "text-davinci-003",
"temperature": 0.9,
"top_p": 1,
"frequency_penalty": 0.0,
Expand All @@ -122,6 +129,7 @@ $ docker run -itd --name chatgpt-web -v `pwd`/config.json:/app/config.json -p 80
api_key:openai api_key
port: http服务端口
proxy: openai请求代理,防墙。
bot_desc:AI特征,非常重要,功能等同给与AI一个身份设定
max_tokens: GPT响应字符数,最大2048,默认值512。max_tokens会影响接口响应速度,字符越大响应越慢。
model: GPT选用模型,默认text-davinci-003,具体选项参考官网训练场
Expand Down
22 changes: 20 additions & 2 deletions app/http/controllers/chat_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/gin-gonic/gin"
gogpt "github.com/sashabaranov/go-gpt3"
"net/http"
"net/url"
"strings"
)

Expand Down Expand Up @@ -41,7 +42,24 @@ func (c *ChatController) Completion(ctx *gin.Context) {
}

cnf := config.LoadConfig()
client := gogpt.NewClient(cnf.ApiKey)
gptConfig := gogpt.DefaultConfig(cnf.ApiKey)

if cnf.Proxy != "" {
// 创建一个 HTTP Transport 对象,并设置代理服务器
proxyUrl, err := url.Parse(cnf.Proxy)
if err != nil {
panic(err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
}
// 创建一个 HTTP 客户端,并将 Transport 对象设置为其 Transport 字段
gptConfig.HTTPClient = &http.Client{
Transport: transport,
}
}

client := gogpt.NewClientWithConfig(gptConfig)
if request.Messages[0].Role != "system" {
newMessage := append([]gogpt.ChatCompletionMessage{
{Role: "system", Content: cnf.BotDesc},
Expand All @@ -66,7 +84,7 @@ func (c *ChatController) Completion(ctx *gin.Context) {
for _, item := range request.Messages {
prompt += item.Content + "/n"
}
prompt = strings.Trim(prompt,"/n")
prompt = strings.Trim(prompt, "/n")

logger.Info("request prompt is %s", prompt)
req := gogpt.CompletionRequest{
Expand Down
3 changes: 2 additions & 1 deletion config.dev.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"api_key": "your api key",
"port": 8080,
"port": 8090,
"bot_desc": "你是一个AI助手,我需要你模拟一名温柔贴心的女朋友来回答我的问题。",
"proxy": "http://127.0.0.1:10809",
"model": "gpt-3.5-turbo-0301",
"max_tokens": 512,
"temperature": 0.9,
Expand Down
13 changes: 9 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,12 @@ import (
type Configuration struct {
// gpt apikey
ApiKey string `json:"api_key"`
Port int `json:"port"`
//
// 服务端口
Port int `json:"port"`
// AI特征
BotDesc string `json:"bot_desc"`
// 代理
Proxy string `json:"proxy"`
// GPT请求最大字符数
MaxTokens int `json:"max_tokens"`
// GPT模型
Expand Down Expand Up @@ -70,9 +73,13 @@ func LoadConfig() *Configuration {
FrequencyPenalty := os.Getenv("FREQ")
PresencePenalty := os.Getenv("PRES")
BotDesc := os.Getenv("BOT_DESC")
Proxy := os.Getenv("PROXY")
if ApiKey != "" {
config.ApiKey = ApiKey
}
if Proxy != "" {
config.Proxy = Proxy
}

if Model != "" {
config.Model = Model
Expand All @@ -82,7 +89,6 @@ func LoadConfig() *Configuration {
config.BotDesc = BotDesc
}


if MaxTokens != "" {
max, err := strconv.Atoi(MaxTokens)
if err != nil {
Expand Down Expand Up @@ -123,7 +129,6 @@ func LoadConfig() *Configuration {
}
config.PresencePenalty = float32(temp)
}

})
if config.ApiKey == "" {
logger.Danger("config err: api key required")
Expand Down

0 comments on commit 9e2a5f8

Please sign in to comment.