ChatGPT-Next-Web
ChatGPT-Next-Web copied to clipboard
[Feature] 添加对 Azure OpenAI API 的支持
修改BASE_URL成微软的endpoint,API key修改成微软的key,不能工作。微软还需要设置其他参数。
azure openai proxy的项目可以搜一下,这个满足你的需求
#258
azure openai proxy的项目可以搜一下,这个满足你的需求
感谢思路,使用的https://github.com/diemus/azure-openai-proxy/blob/main/README.zh-cn.md, 将本项目base url替换成docker server url, https改为http后,成功!
@ripenedcat
感谢反馈,之后我会将此方式补充到 README。
azure openai proxy的项目可以搜一下,这个满足你的需求
感谢思路,使用的https://github.com/diemus/azure-openai-proxy/blob/main/README.zh-cn.md, 将本项目base url替换成docker server url, https改为http后,成功!
这个项目也不错 https://github.com/stulzq/azure-openai-proxy
怎么搞定的?我用了这个azure-openai-proxy项目搭了个proxy,用代码调用已经成功了,但是用chatgpt next web会出错 error code 1003,感觉好像stream方式 azure API不支持?
怎么搞定的?我用了这个azure-openai-proxy项目搭了个proxy,用代码调用已经成功了,但是用chatgpt next web会出错 error code 1003,感觉好像stream方式 azure API不支持?
看一下chatgpt next web选的model是不是在azure-openai-proxy的环境变量里? 以及common.ts里是否改成了http模式(如果你没有https反代的话)? 具体在看下azure-openai-proxy的log里是否有什么线索呢
@Yidadaa
如果用户没有服务器可以 通过 cloudflare worker
https://github.com/haibbo/cf-openai-azure-proxy
怎么搞定的?我用了这个azure-openai-proxy项目搭了个proxy,用代码调用已经成功了,但是用chatgpt next web会出错 error code 1003,感觉好像stream方式 azure API不支持?
@doherty88 是我开发的这个吗?https://github.com/diemus/azure-openai-proxy
有问题可以在issue里提供复现场景,有些web项目会调用一些特殊的接口,比如获取model列表,资金余额之类的,Azure是没有的,近期会补上一个mock接口来模拟这类请求的返回。如果是这个问题,临时的解决方案是换一个前端项目,有些项目不会去调类似的接口。另外stream是支持的。
怎么搞定的?我用了这个azure-openai-proxy项目搭了个proxy,用代码调用已经成功了,但是用chatgpt next web会出错 error code 1003,感觉好像stream方式 azure API不支持?
我也发现了同样的问题, 用的是cloudflare worker. 问题好像也是和stream有关, 回复的message会keep loading,然后说 “出错了,稍后重试吧”
是的,我是用的这个。 现在我用了railway来部署ChatGPT-Next-Web,同样的proxy docker,同样的环境变量设置就可以用了。
是的,我是用的这个。 现在我用了railway来部署ChatGPT-Next-Web,同样的proxy docker,同样的环境变量设置就可以用了。
谢谢, 用railway, 我这儿还是有问题。。
{ "cause": { "errno": -3008, "code": "ENOTFOUND", "syscall": "getaddrinfo", "hostname": "https" } }
PROTOCOL 这个环境变量设了吗?我的azure代理是http模式,所以我这这个环境变量设成 “http”
是的,我是用的这个。 现在我用了railway来部署ChatGPT-Next-Web,同样的proxy docker,同样的环境变量设置就可以用了。
谢谢, 用railway, 我这儿还是有问题。。
{ "cause": { "errno": -3008, "code": "ENOTFOUND", "syscall": "getaddrinfo", "hostname": "https" } }
@lzhgus
- 你在填写base url的时候只需要包含域名,不要带协议头https://
- 我测试下来https是工作的,stream也是支持的,如果你想全部部署在Azure上的话,可以直接用 Azure Container App 去部署 Azure OpenAI proxy 和 ChatGPT-Next-Web
- 这个方案前200万次请求是免费的 https://learn.microsoft.com/en-us/azure/container-apps/billing#consumption-plan
- 有个技巧是,你可以把container的最小instance调整到0,这意味着,只有请求过来以后才会起一个container,一段时间不用会自动scale到0,完全不收费。不过这种方式的缺点是,第一次请求的响应会有点慢。
是的,我是用的这个。 现在我用了railway来部署ChatGPT-Next-Web,同样的proxy docker,同样的环境变量设置就可以用了。
谢谢, 用railway, 我这儿还是有问题。。 { "cause": { "errno": -3008, "code": "ENOTFOUND", "syscall": "getaddrinfo", "hostname": "https" } }
@lzhgus
- 你在填写base url的时候只需要包含域名,不要带协议头https://
- 我测试下来https是工作的,stream也是支持的,如果你想全部部署在Azure山的话,可以直接用Azure Container App去部署Azure OpenAI proxy和 ChatGPT-Next-Web
- 这个方案前200万次请求是免费的 https://learn.microsoft.com/en-us/azure/container-apps/billing#consumption-plan
- 有个技巧是,你可以把container的最小instance调整到0,这意味着,只有请求过来以后才会起一个container,一段时间不用会自动scale到0,完全不收费。不过这种方式的缺点是,第一次请求的响应会有点慢。
感谢回复, 我觉得base url应该是问题,现在已经工作了。 对的, 我也是全部部署在Azure 上的, 用的是Container App。 有一个问题不知道大家是否注意到, 可能是因为Proxy, client side的behavior 改变了, 现在不会像之前一样逐字输出, 而是会略显卡顿的输出或者是一次性显示全部。
@lzhgus
- 你在填写base url的时候只需要包含域名,不要带协议头https://
- 我测试下来https是工作的,stream也是支持的,如果你想全部部署在Azure山的话,可以直接用Azure Container App去部署Azure OpenAI proxy和 ChatGPT-Next-Web
- 这个方案前200万次请求是免费的 https://learn.microsoft.com/en-us/azure/container-apps/billing#consumption-plan
- 有个技巧是,你可以把container的最小instance调整到0,这意味着,只有请求过来以后才会起一个container,一段时间不用会自动scale到0,完全不收费。不过这种方式的缺点是,第一次请求的响应会有点慢。
感谢回复, 我觉得base url应该是问题,现在已经工作了。 对的, 我也是全部部署在Azure 上的, 用的是Container App。 有一个问题不知道大家是否注意到, 可能是因为Proxy, client side的behavior 改变了, 现在不会像之前一样逐字输出, 而是会略显卡顿的输出或者是一次性显示全部。
我没猜错的话,这个应该是Azure Container App的问题,默认的Container APP用的ingress proxy开启了buffer造成了打字机效果被影响。因为不影响我的使用我倒是没有去深究。如果你想有打字机效果的话还是用其他手段(Azure VM, AKS, etc)自行部署最合适
未必是代理的问题,azure直连也缺少打字机效果,之前测试过,感觉不用太纠结这个问题
你是说PlayGround嘛。哈哈哈哈他们都没加打字机效果的实现,另外就是代码输出都没调试过,把markdown原始内容都返回来了,我已经给开发组开了issue了,不过估计他们暂时不会修。另外我倒是同意,不用太纠结这个问题。又不是不能用.jpg
不是playground,就是直接请求azure openai,流式返回的时候,azure不是按字返回的,而是一次返回一大段,然后又是一段。感觉在azure那一层就已经不是打字机效果了
那么你的判断肯定就没错了,我下周一开个feature的work item给他们,不过,这种功能估计优先级不高,可能会拖。
我相信playground 应该也用了ReadableStream
去处理流式返回和实现打字机效果, 我可以去codebase找找看确认下,不过相较于直接call openai, azure openai service 的 latency 更高, 但是download 时间却大幅变短, 可能因此打字机的效果变得怪异了。
不过确实这也不影响使用 :)
![image](https://user-images.githubusercontent.com/5875125/230651153-c1211572-dd9d-413e-8ac4-877f5f159685.png)
![image](https://user-images.githubusercontent.com/5875125/230651221-749d2966-cdb6-45d7-9f4a-7f4ec85eab1f.png)
大家可以试试这个, 它实现了打印机效果
https://github.com/haibbo/cf-openai-azure-proxy
原理就是, 从Azure OpenAI Service拿到的消息虽然是一段一段的, 但给客户端的时候我拆出一条条的消息, 依次给.
大家可以试试这个, 它实现了打印机效果
https://github.com/haibbo/cf-openai-azure-proxy
原理就是, 从Azure OpenAI Service拿到的消息虽然是一段一段的, 但给客户端的时候我拆出一条条的消息, 依次给.
cf-openai-azure-proxy这个项目太赞了,谢谢~~~
@haibbo 感谢分享!星星已送出 @lzhgus 说的是是对的。我周末测了一下并和OpenAI做了比较,Azure的流式返回是一段一段地吐,虽然实际返回速度比原生的要好,但是视觉感官有点顿顿的。另外很奇怪的点是中文/日文/韩文等响应的latency比英文要高很多,这一点很费解。美国那边的PM说用的和OpenAI是同样的方案。我可以体会到追这种问题要多久。anyway,有需求的暂时就前台处理吧
https://github.com/hbsgithub/deno-azure-openai-proxy 基于@haibbo 的卓越工作,我增加了mapper的功能,并改写成ts脚本部署在deno deploy上,特性如下:
- 相比于cloudflare workers,可以无需代理,直连使用
- 支持自定义二级域名(*.deno.dev)或者绑定自己的域名
- 支持打字机模式的流式响应
- 支持mapper,可以自定义模型映射规则,也支持直接透传模型名
- 无需服务器,免费在线部署,每月10万次请求额度
欢迎大家使用!
@edisonzf2020 至少改四处才可以应用Azure openai API.
- BASE_URL 替换成Azure的,例如:
[你的SourceName].openai.azure.com/openai/deployments
- headers不是用
Authorization: `Bearer ${apiKey}`,
,而是用"api-key": `${apiKey}`,
-
"v1/chat/completions"
替换成你在Azure Deploy的chat/completions的Path, 例如:[你的DeploymentId]/chat/completions?api-version=2023-03-15-preview
- chat-stream\route.ts里其中一段代码:
try {
const json = JSON.parse(data);
const text = json.choices[0].delta.content;
const queue = encoder.encode(text);
controller.enqueue(queue);
} catch (e) {
controller.error(e);
}
替换为:
try {
const json = JSON.parse(data);
const text = json.choices[0].delta.content;
if (text) {
// console.debug(text);
const queue = encoder.encode(text);
controller.enqueue(queue);
} else {
// console.log({ json });
const stop = json.choices[0].finish_reason;
if (stop === "stop") {
controller.close();
return;
}
}
} catch (e) {
controller.error(e);
}
我用stulzq/azure-openai-proxy 就可以把azure的API转成openAI的API给chatgpt-web用, 如下:
version: "3"
services:
chatgpt-web:
image: chenzhaoyu94/chatgpt-web:{{ web_version }}
ports:
- "{{ http_port }}:3002"
environment:
OPENAI_API_KEY: {{ chatgpt_openai_api_key }}
OPENAI_API_BASE_URL: http://azure-openai-proxy:8080
AUTH_SECRET_KEY: "" # Leave blank
MAX_REQUEST_PER_HOUR: 1000
TIMEOUT_MS: 60000
depends_on:
- azure-openai-proxy
links:
- azure-openai-proxy
networks:
- chatgpt-ns
azure-openai-proxy:
image: stulzq/azure-openai-proxy:{{ proxy_version }}
ports:
- "{{ proxy_port }}:8080"
environment:
AZURE_OPENAI_ENDPOINT: {{ chatgpt_openai_endpoint }}
AZURE_OPENAI_MODEL_MAPPER: {{ chatgpt_azure_openai_model_mapper }}
AZURE_OPENAI_API_VER: {{ chatgpt_azure_openai_api_ver }}
networks:
- chatgpt-ns
networks:
chatgpt-ns:
driver: bridge
我不是web开发者,不过还是非常希望能够加入对于azure openai的原生支持,主要是这个UI相较其他UI很舒服也很实用。根据这个文件(https://github.com/mckaywrigley/chatbot-ui/blob/main/README.md ),应该只需要加入这几个环境变量就可以。我可以提供一个测试环境。
Environment Variable | Default value | Description |
---|---|---|
OPENAI_API_KEY | The default API key used for authentication with OpenAI | |
OPENAI_API_HOST | https://api.openai.com |
The base url, for Azure use https://<endpoint>.openai.azure.com |
OPENAI_API_TYPE | openai |
The API type, options are openai or azure |
OPENAI_API_VERSION | 2023-03-15-preview |
Only applicable for Azure OpenAI |
AZURE_DEPLOYMENT_ID | Needed when Azure OpenAI, Ref Azure OpenAI API | |
OPENAI_ORGANIZATION | Your OpenAI organization ID | |
DEFAULT_MODEL | gpt-3.5-turbo |
The default model to use on new conversations, for Azure use gpt-35-turbo |
To the users who are seeking a right way of using Azure Open AI proxy in this project:
After building your own Azure Open AI proxy service, you can use below commands to startup the ChatGPT-Next-Web docker container.
- If the service is accessible with an URL
docker run -d -p 3000:3000 \
-e OPENAI_API_KEY="<Your Azure OpenAI API key here>" \
-e CODE="<your own password>" \
-e BASE_URL="gpt-proxy.contoso.com" \
yidadaa/chatgpt-next-web
- If the service is accessible locally
# The proxy service available on 0.0.0.0:8080, proxy service and ChatGPT-Next-Web are on same machine.
docker run -d -p 3000:3000 \
-e OPENAI_API_KEY="<Your Azure OpenAI API key here>" \
-e CODE="<your own password>" \
--net=host \
-e BASE_URL="0.0.0.0:8080" \
yidadaa/chatgpt-next-web
The configurations are defined in the project but not mentioned in the readme. Appreciate if someone can enrich the doc and list all environment variables there.