Azure模型无法连接,当前已经配置了azure的OPENAI_API_KEY,请详细说一下Azure的怎么配置
疑问:
官方文档中使用 Azure OpenAI 服务时的配置: export MIDSCENE_USE_AZURE_OPENAI=1 export MIDSCENE_AZURE_OPENAI_SCOPE="https://cognitiveservices.azure.com/.default" export MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON='{"apiVersion": "2024-11-01-preview", "endpoint": "...", "deployment": "..."}'
其中MIDSCENE_USE_AZURE_OPENAI和MIDSCENE_USE_AZURE_OPENAI怎么配置? 每个公司访问的Azure接口不一样,MIDSCENE_AZURE_OPENAI_SCOPE是否需要改变?
使用的connectivity-test做的测试,当前测试文件采用的是openai的,不是Azure的 ,能否提供一个Azure的demo?
配置如下:OPENAI_API_KEY=xxxxxxxxxxx xxxxxxxxxxx 为Azure的key
报错信息如下:FAIL tests/connectivity.test.ts > Use OpenAI SDK directly > image input with gpt-4o Error: 401 Incorrect API key provided: xxxxxxxxxxx. You can find your API key at https://platform.openai.com/account/api-keys. ❯ Function.generate node_modules/openai/src/error.ts:74:14 ❯ OpenAI.makeStatusError node_modules/openai/src/core.ts:397:21 ❯ OpenAI.makeRequest node_modules/openai/src/core.ts:460:24 ❯ tests/connectivity.test.ts:48:22 46| }); 47| 48| const response = await openai.chat.completions.create({ | ^ 49| model: model, 50| messages: [
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/3]⎯ 72| const result = await callToGetJSONObject( | ^ 73| [ 74| {
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/3]⎯
Test Files 1 failed (1) Tests 3 failed (3) Start at 17:30:16
正常情况下,你们是怎么使用 OpenAI SDK 的? 有配置参考么?
MIDSCENE_USE_AZURE_OPENAI=1
这个配置的时候,对应的调用代码是这个: https://github.com/web-infra-dev/midscene/blob/main/packages/midscene/src/ai-model/openai/index.ts#L77
所以想看下正常使用时是怎么配置的,怎么对应到 Midscene 里来
@kakaluote0098 一些更新:
-
connectivity test 仓库新增了一个纯连接 Azure 的用例,把第 103 行的
.skip改成.only并运行,就能单独跑它了: https://github.com/web-infra-dev/midscene-example/blob/main/connectivity-test/tests/connectivity.test.ts#L103 -
我手边没有 Azure 测试环境,根据文档读了一下,配置大概是这样的,供参考:
使用 Azure OpenAI 服务时的配置
Azure 一般会提供给你 endpoint (AZURE_OPENAI_ENDPOINT), deployment (AZURE_OPENAI_DEPLOYMENT_NAME) , apiVersion 这些参数,你需要将它们合并配置在 MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON 中,拼接为合法的 JSON 字符串。
# 使用 Azure OpenAI 服务时,配置为 1
export MIDSCENE_USE_AZURE_OPENAI=1
# Azure OpenAI 的 scope
export MIDSCENE_AZURE_OPENAI_SCOPE="https://cognitiveservices.azure.com/.default"
# 把 JSON 中的参数替换为你的参数
export MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON='{"apiVersion": "2024-11-01-preview", "endpoint": "<此处替换为 AZURE_OPENAI_ENDPOINT>", "deployment": "<此处替换为 AZURE_OPENAI_DEPLOYMENT_NAME>"}'
@kakaluote0098 一些更新:
- connectivity test 仓库新增了一个纯连接 Azure 的用例,把第 103 行的
.skip改成.only并运行,就能单独跑它了: https://github.com/web-infra-dev/midscene-example/blob/main/connectivity-test/tests/connectivity.test.ts#L103- 我手边没有 Azure 测试环境,根据文档读了一下,配置大概是这样的,供参考:
使用 Azure OpenAI 服务时的配置
Azure 一般会提供给你 endpoint (AZURE_OPENAI_ENDPOINT), deployment (AZURE_OPENAI_DEPLOYMENT_NAME) , apiVersion 这些参数,你需要将它们合并配置在
MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON中,拼接为合法的 JSON 字符串。使用 Azure OpenAI 服务时,配置为 1
export MIDSCENE_USE_AZURE_OPENAI=1
Azure OpenAI 的 scope
export MIDSCENE_AZURE_OPENAI_SCOPE="https://cognitiveservices.azure.com/.default"
把 JSON 中的参数替换为你的参数
export MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON='{"apiVersion": "2024-11-01-preview", "endpoint": "<此处替换为 AZURE_OPENAI_ENDPOINT>", "deployment": "<此处替换为 AZURE_OPENAI_DEPLOYMENT_NAME>"}'
因为我们有了Azure的上层封装,通过http请求就可以访问,这种怎么集成到mitscene里面? 不需要其他配置了,这种情况怎么使用mitscene?
你这个 “通过http请求就可以访问” 用的是什么接口形式呢?兼容 OpenAI 的话,直接用文档里 OpenAI 对应的配置项就行了
curl -X POST "${endpoint}/openai/deployments/${deployment_name}/chat/completions?api-version=${api_version}" \
2 -H "Content-Type: application/json" \
3 -H "api-key: ${api_key}" \
4 -d "{
5 \"messages\": [{\"role\":\"system\",\"content\":\"You are an AI assistant that helps people find information.\"}],
6 \"max_tokens\": 800,
7 \"temperature\": 0.7,
8 \"frequency_penalty\": 0,
9 \"presence_penalty\": 0,
10 \"top_p\": 0.95,
11 \"stop\": null
12}"
比如我们使用的是REST API调用,在请求头中传入 api-key,这种如何接入
curl -X POST "${endpoint}/openai/deployments/${deployment_name}/chat/completions?api-version=${api_version}" \ 2 -H "Content-Type: application/json" \ 3 -H "api-key: ${api_key}" \ 4 -d "{ 5 \"messages\": [{\"role\":\"system\",\"content\":\"You are an AI assistant that helps people find information.\"}], 6 \"max_tokens\": 800, 7 \"temperature\": 0.7, 8 \"frequency_penalty\": 0, 9 \"presence_penalty\": 0, 10 \"top_p\": 0.95, 11 \"stop\": null 12}"比如我们使用的是REST API调用,在请求头中传入 api-key,这种如何接入
@yuyutaotao 期待回复
这个 api_version 有点难搞啊。能让它出现在 header 里么?还是一定要在 url query 里?
这个接口是哪里封装的?公司内部私有实现 or 业界公开的 SDK?
https://learn.microsoft.com/zh-cn/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cjavascript-keyless%2Ctypescript-keyless%2Cpython&pivots=rest-api#rest-api 这是官网提供的REST接入方式;
但是下面这中通过API密钥的方式好像你们这边没提供 https://learn.microsoft.com/zh-cn/azure/ai-services/openai/chatgpt-quickstart?tabs=bash%2Cjavascript-key%2Ctypescript-keyless%2Cpython&pivots=programming-language-javascript#rest-api
你提供的都是Microsoft Entra ID(azureADTokenProvider)的方式,但是我们想用API密钥的方式
@yuyutaotao
@xianping-yan 懂了,期望用 API 秘钥接入,但现在只给了 azureADTokenProvider
我们来搞一下
@yuyutaotao 感谢感谢,快快滴
发布在 beta tag 版本上了,可以试一下(具体版本号是 0.8.14-beta-20241231023737.0)
文档先在这个 PR 里看吧:https://github.com/web-infra-dev/midscene/pull/227/files
核心配置就是这里几项:
export MIDSCENE_USE_AZURE_OPENAI=1
export AZURE_OPENAI_ENDPOINT="..."
export AZURE_OPENAI_KEY="..."
export AZURE_OPENAI_API_VERSION="2024-05-01-preview"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-4o"
好的谢谢
测试通过了之后这里回复一下,我们好合并代码
问题1:
Error: The apiKey and azureADTokenProvider arguments are mutually exclusive; only one can be passed at a time.
虽然是azureADTokenProvider没传,但是不能同时给到AzureOpenAI()
问题2:
我注释到上面的azureADTokenProvider连接时OK的,但是执行后报下面的错误
但是我通过REST的方式直接调用是OK的,也就是我的endpoint, apiKey, apiVersion, deployment都是没有问题的,也支持视觉。
这个我还没有查到为什么?
deployment 看起来是我传错变量了,我改下
beta tag 版本更新了(0.8.14-beta-20241231035725.0),麻烦再升级试一下。AZURE_OPENAI_DEPLOYMENT_NAME 变量名改了,现在是 AZURE_OPENAI_DEPLOYMENT
报的错不一样了,我直接用微软的例子就可以
MIDSCENE_AZURE_OPENAI_SCOPE 这个参数不要配,确定删掉了吗?
是的,没有这个参数
@xianping-yan 你好,麻烦再更新个 beta ( 0.8.14-beta-20241231075856.0 ) 试试。
应该是之前 SCOPE 有个默认值导致的,我刚修了又推了一版。
@yuyutaotao ok了
赞 晚些我们合并发布掉
已经发布在了最新版上