midscene icon indicating copy to clipboard operation
midscene copied to clipboard

Azure模型无法连接,当前已经配置了azure的OPENAI_API_KEY,请详细说一下Azure的怎么配置

Open kakaluote0098 opened this issue 1 year ago • 24 comments

疑问:

官方文档中使用 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

kakaluote0098 avatar Dec 27 '24 09:12 kakaluote0098

正常情况下,你们是怎么使用 OpenAI SDK 的? 有配置参考么?

yuyutaotao avatar Dec 27 '24 10:12 yuyutaotao

MIDSCENE_USE_AZURE_OPENAI=1

这个配置的时候,对应的调用代码是这个: https://github.com/web-infra-dev/midscene/blob/main/packages/midscene/src/ai-model/openai/index.ts#L77

所以想看下正常使用时是怎么配置的,怎么对应到 Midscene 里来

yuyutaotao avatar Dec 27 '24 10:12 yuyutaotao

@kakaluote0098 一些更新:

  1. connectivity test 仓库新增了一个纯连接 Azure 的用例,把第 103 行的 .skip 改成 .only 并运行,就能单独跑它了: https://github.com/web-infra-dev/midscene-example/blob/main/connectivity-test/tests/connectivity.test.ts#L103

  2. 我手边没有 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>"}'

yuyutaotao avatar Dec 27 '24 14:12 yuyutaotao

@kakaluote0098 一些更新:

  1. connectivity test 仓库新增了一个纯连接 Azure 的用例,把第 103 行的 .skip 改成 .only 并运行,就能单独跑它了: https://github.com/web-infra-dev/midscene-example/blob/main/connectivity-test/tests/connectivity.test.ts#L103
  2. 我手边没有 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 avatar Dec 30 '24 07:12 kakaluote0098

因为我们有了Azure的上层封装,通过http请求就可以访问,这种怎么集成到mitscene里面? 不需要其他配置了,这种情况怎么使用mitscene?

kakaluote0098 avatar Dec 30 '24 07:12 kakaluote0098

你这个 “通过http请求就可以访问” 用的是什么接口形式呢?兼容 OpenAI 的话,直接用文档里 OpenAI 对应的配置项就行了

yuyutaotao avatar Dec 30 '24 07:12 yuyutaotao

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,这种如何接入

xianping-yan avatar Dec 30 '24 14:12 xianping-yan

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 期待回复

xianping-yan avatar Dec 30 '24 14:12 xianping-yan

这个 api_version 有点难搞啊。能让它出现在 header 里么?还是一定要在 url query 里?

这个接口是哪里封装的?公司内部私有实现 or 业界公开的 SDK?

yuyutaotao avatar Dec 30 '24 14:12 yuyutaotao

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 avatar Dec 31 '24 01:12 xianping-yan

@xianping-yan 懂了,期望用 API 秘钥接入,但现在只给了 azureADTokenProvider

我们来搞一下

yuyutaotao avatar Dec 31 '24 02:12 yuyutaotao

@yuyutaotao 感谢感谢,快快滴

xianping-yan avatar Dec 31 '24 02:12 xianping-yan

发布在 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"

yuyutaotao avatar Dec 31 '24 02:12 yuyutaotao

好的谢谢

xianping-yan avatar Dec 31 '24 02:12 xianping-yan

测试通过了之后这里回复一下,我们好合并代码

yuyutaotao avatar Dec 31 '24 03:12 yuyutaotao

问题1:

Error: The apiKey and azureADTokenProvider arguments are mutually exclusive; only one can be passed at a time.

虽然是azureADTokenProvider没传,但是不能同时给到AzureOpenAI()

Image

问题2:

我注释到上面的azureADTokenProvider连接时OK的,但是执行后报下面的错误 Image 但是我通过REST的方式直接调用是OK的,也就是我的endpoint, apiKey, apiVersion, deployment都是没有问题的,也支持视觉。 这个我还没有查到为什么?

xianping-yan avatar Dec 31 '24 03:12 xianping-yan

deployment 看起来是我传错变量了,我改下

yuyutaotao avatar Dec 31 '24 03:12 yuyutaotao

beta tag 版本更新了(0.8.14-beta-20241231035725.0),麻烦再升级试一下。AZURE_OPENAI_DEPLOYMENT_NAME 变量名改了,现在是 AZURE_OPENAI_DEPLOYMENT

yuyutaotao avatar Dec 31 '24 04:12 yuyutaotao

Image

报的错不一样了,我直接用微软的例子就可以

Image

xianping-yan avatar Dec 31 '24 06:12 xianping-yan

MIDSCENE_AZURE_OPENAI_SCOPE 这个参数不要配,确定删掉了吗?

yuyutaotao avatar Dec 31 '24 07:12 yuyutaotao

是的,没有这个参数

xianping-yan avatar Dec 31 '24 07:12 xianping-yan

@xianping-yan 你好,麻烦再更新个 beta ( 0.8.14-beta-20241231075856.0 ) 试试。

应该是之前 SCOPE 有个默认值导致的,我刚修了又推了一版。

yuyutaotao avatar Dec 31 '24 08:12 yuyutaotao

@yuyutaotao ok了

xianping-yan avatar Dec 31 '24 08:12 xianping-yan

赞 晚些我们合并发布掉

yuyutaotao avatar Dec 31 '24 09:12 yuyutaotao

已经发布在了最新版上

yuyutaotao avatar Jan 01 '25 13:01 yuyutaotao