eryajf / chatgpt-dingtalk

🎒 钉钉 & 🤖 GPT-3.5 让你的工作效率直接起飞 🚀 私聊群聊方式、单聊串聊模式、角色扮演、图片创作 🚀
https://wiki.eryajf.net
MIT License
2.1k stars 388 forks source link

🙋错误信息:Post "1/v1/chat/completions": unsupported protocol scheme "" #302

Closed SokWith closed 5 months ago

SokWith commented 5 months ago

问题反馈

重要:提交问题时,请务必带上输出日志,以及个人排查的成果。

请求 OpenAI 失败了

错误信息:Post "1/v1/chat/completions": unsupported protocol scheme ""

用的代理地址:

# 应用的日志级别,info or debug
log_level: "info"
# 运行模式,http 或者 stream ,强烈建议你使用stream模式,通过此链接了解:https://open.dingtalk.com/document/isvapp/stream
run_mode: "http"
# openai api_key,如果你是用的是azure,则该配置项可以留空或者直接忽略
api_key: "xxxxxxxx"
# 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议,如果你是用的是azure,则该配置项可以留空或者直接忽略
base_url: "https://mycfoo-bingai.hf.space"
# 指定模型,默认为 gpt-3.5-turbo , 可选参数有:"gpt-4-32k-0613", "gpt-4-32k-0314", "gpt-4-32k", "gpt-4-0613", "gpt-4-0314", "gpt-4-turbo-preview", "gpt-4-vision-preview", "gpt-4", "gpt-3.5-turbo-1106", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-0301", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单,如果你是用的是azure,则该配置项可以留空或者直接忽略
model: "gpt-4-32k"
SokWith commented 5 months ago

为什么代理地址 变成了 Post "1 了?

http 模式 还是 stream 模式 都一样错误

SokWith commented 5 months ago

采用

go run main.go

就正确; 使用二进制或者docker就错误

eryajf commented 5 months ago

可以描述下你启动的方式

SokWith commented 5 months ago

在huggingface上部署,大致dockerfile文件(随意注释的):

FROM eryajf/chatgpt-dingtalk:latest

# 使用 golang:alpine 作为构建阶段的基础镜像
#FROM golang:alpine

# 添加 git,以便之后能从GitHub克隆项目
#RUN apk --no-cache add git

# 从 GitHub 克隆 go-proxy-bingai 项目到 /workspace/app 目录下
#RUN git clone https://github.com/eryajf/chatgpt-dingtalk.git /app 

# 设置工作目录为之前克隆的项目目录
#WORKDIR /app
#COPY config.yml ./

#RUN  go run main.go

WORKDIR /app

COPY . /app

#ENV GOARCH=amd64
#ENV GOOS=linux
#RUN go build -o chatgpt-dingtalk

EXPOSE 5000

# 容器启动时运行的命令
CMD ["./chatgpt-dingtalk"]

docker拉取下来运行二进制文件,或者git仓库下来编译成二进制文件,都会错误。 但git下来直接 go 运行则正常

SokWith commented 5 months ago

这是正确的dockerfile:

FROM golang:alpine

# 添加 git,以便之后能从GitHub克隆项目
RUN apk --no-cache add git

# 从 GitHub 克隆 go-proxy-bingai 项目到 /workspace/app 目录下
RUN git clone https://github.com/eryajf/chatgpt-dingtalk.git /app 

# 设置工作目录为之前克隆的项目目录
WORKDIR /app
COPY config.yml ./

RUN  go run main.go
SokWith commented 5 months ago

RUN go run main.go

go run main.go能用也仅仅限于RUN的构建时,若放在镜像构建完成后用CMD来执行,则错误一样。 看来是容器启动后某些服务没有启动起来或者是被屏蔽了

只是仅在镜像构建时可用,huggingface构建动作有时效性,一定时间后服务器就自己终止构建

SokWith commented 5 months ago

把代理做到 http://localhost:8080上也不行

# 应用的日志级别,info or debug
log_level: "info"
# 运行模式,http 或者 stream ,强烈建议你使用stream模式,通过此链接了解:https://open.dingtalk.com/document/isvapp/stream
run_mode: "stream"
# openai api_key,如果你是用的是azure,则该配置项可以留空或者直接忽略
api_key: "sk-xxxx"
# 如果你使用官方的接口地址 https://api.openai.com,则留空即可,如果你想指定请求url的地址,可通过这个参数进行配置,注意需要带上 http 协议,如果你是用的是azure,则该配置项可以留空或者直接忽略
base_url: "http://localhost:8080"
# 指定模型,默认为 gpt-3.5-turbo , 可选参数有:"gpt-4-32k-0613", "gpt-4-32k-0314", "gpt-4-32k", "gpt-4-0613", "gpt-4-0314", "gpt-4-turbo-preview", "gpt-4-vision-preview", "gpt-4", "gpt-3.5-turbo-1106", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-0301", "gpt-3.5-turbo-16k", "gpt-3.5-turbo-16k-0613", "gpt-3.5-turbo",如果使用gpt-4,请确认自己是否有接口调用白名单,如果你是用的是azure,则该配置项可以留空或者直接忽略
model: "gpt-4-32k"
eryajf commented 5 months ago

看起来这个运行环境有一定的特殊性,我对这个不是很了解,你可以尝试通过环境变量声明的方式来运行试试

SokWith commented 5 months ago

看起来这个运行环境有一定的特殊性,我对这个不是很了解,你可以尝试通过环境变量声明的方式来运行试试

不好意思,自己的错。偷懒克隆了个space,里面有了环境变量BASE_URL,覆盖了配置文件的变量了。

SokWith commented 5 months ago

给一个最后的Dockerfile文件,实现集成NewBing做openai的API: base_url = https://localhost:8080

FROM eryajf/chatgpt-dingtalk:latest

WORKDIR /app
COPY config.yml ./

ENV USER ${USER:-node}
ENV USER_ID ${USER_ID:-1000}

RUN apk add curl wget supervisor git py3-flask

RUN curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared && \
    chmod +x cloudflared

RUN curl -L https://github.com/SokWith/go-bingai/releases/latest/download/go-proxy-bingai-linux-amd64.tar.gz -o go-proxy-bingai-linux-amd64.tar.gz && \
    tar -xvf go-proxy-bingai-linux-amd64.tar.gz && \
    chmod +x go-proxy-bingai && \
    rm go-proxy-bingai-linux-amd64.tar.gz

RUN mkdir -p /var/run/supervisor /var/log/supervisor 
RUN chown "${USER_ID}:${USER_ID}" /var/run/supervisor /var/log/supervisor
RUN chmod 777 /tmp /app

USER $USER

EXPOSE 5000

CMD /usr/bin/supervisord -c supervisor.conf

supervisor.conf:

[supervisord]
logfile=/var/log/supervisor/supervisord.log
logfile_maxbytes=10MB
logfile_backups=10
loglevel=info
pidfile=/var/run/supervisor/supervisord.pid
nodaemon=true
childlogdir=/var/log/supervisor

[inet_http_server]
port=127.0.0.1:9005

[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=http://127.0.0.1:9005

[program:flask]
command=flask run --host=0.0.0.0
directory=/app
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
autostart=true
autorestart=true
startsecs=5
stopwaitsecs = 5
killasgroup=true

[program:gpb]
command=/app/go-proxy-bingai
environment=PORT=8080,LOCAL_MODE=true
directory=/app
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
autostart=true
autorestart=true
startsecs=5
stopwaitsecs = 5
killasgroup=true

[program:bdtk]
command=/app/chatgpt-dingtalk
directory=/app
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
autostart=true
autorestart=true
startsecs=5
stopwaitsecs = 5
killasgroup=true

[program:cloudflared]
command=/app/cloudflared tunnel --no-autoupdate run --token %(ENV_CF_TOKEN)s
directory=/app
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
autostart=true
autorestart=true
startsecs=5
stopwaitsecs = 5
killasgroup=true

详细集成方法参见: https://huggingface.co/spaces/Harry-zklcdc/go-proxy-bingai?duplicate=true