作为 Azure OpenAI 客户,你可以访问由 OpenAI 提供支持的最先进的人工智能模型。这些模型在不断改进和发展,这意味着你可以从最新的创新和增强功能中受益,包括提高速度、改进安全系统和降低成本。然而,这也意味着较旧的模型版本最终将被弃用和淘汰。
企业如何合规、稳定使用ChatGPT以及Copilot?
出于合规角度,建议国内企业可以选择微软的Azure OpenAI服务来使用接口。
通过微软官方合作伙伴获取服务,企业用户可以合规、稳定地使用ChatGPT,满足国内发票需求,同时也能解决连接不稳定/响应速度慢/并发配额低等问题。
作为微软的合作伙伴,全云在线可为企业开通绿色申请通道!包括最新版本GPT-4o、Dalle-3等,只要企业有需求,全云在线都能协助快速开通!
参考链接:https://azureopenai.cloudallonline.com/?zxwsh109
全云微软 Azure OpenAI 试用申请
从车型发布开始,我们就会提前通知客户即将退役的产品。
您可以在此处阅读有关我们的流程、通知对象以及即将弃用和停用的模型的详细信息:Azure OpenAI 服务模型停用 - Azure OpenAI | Microsoft Learn
Azure AI Studio 评估
我们了解,升级模型版本涉及一个具有挑战性且耗时的评估过程,尤其是当您有大量提示和响应来评估和认证您的应用程序时。您可能希望比较不同模型版本的提示响应,以了解更改如何影响您的用例和结果。
Azure AI Studio 评估可以帮助您评估 Azure OpenAI 服务中的最新模型版本。评估支持代码优先和 UI 友好体验,使您能够比较不同模型版本的提示响应并观察质量、准确性和一致性的差异。您还可以使用评估在 LLMOps 生命周期的任何阶段使用新模型版本测试提示和应用程序,进行任何必要的调整或优化。
代码优先的评估方法
Azure 的 Prompt Flow Evaluations SDK 包是一个功能强大且灵活的工具,可用于评估生成式 AI 应用程序的响应。在本博客中,我们将引导您完成使用它来评估您自己的一组提示(涵盖各种基础模型的响应)的步骤。本示例中的模型可以通过 Azure 部署,也可以作为通过 MaaS(模型即服务)端点部署的外部模型。
您可以在我们的操作方法文档中了解有关如何使用 promptflow-evals SDK 包的更多信息。
开始评估
首先,安装必要的软件包:
shpip install promptflow-evalspip install promptflow-azure
接下来,提供您的 Azure AI 项目详细信息,以便将跟踪、日志和评估结果推送到您的项目中,以便在 Azure AI Studio 评估页面上查看:
azure_ai_project = { "subscription_id": "00000000000", "resource_group_name": "000resourcegroup", "project_name": "000000000" }
然后,根据您想要评估提示的模型,提供您想要使用的端点。为简单起见,在我们的示例中,在代码中创建了一个“env_var”变量来维护目标模型端点及其身份验证密钥。然后,此变量稍后在我们的评估函数中用作评估提示的目标:
env_var = { "gpt4-0613": { "endpoint": "https://ai-***.***.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2023-03-15-preview", "key": "***", }, "gpt35-turbo": { "endpoint": "https://ai-***.openai.azure.com/openai/deployments/gpt-35-turbo-16k/chat/completions?api-version=2023-03-15-preview", "key": "***", }, "mistral7b" : { "endpoint" : "https://mistral-7b-**.ml.azure.com/chat/completions", "key" : "***", }, "tiny_llama" : { "endpoint" : "https://api-inference.huggingface.co/**/chat/completions", "key" : "***", }, "phi3_mini_serverless" : { "endpoint" : "https://Phi-3-mini***.ai.azure.com/v1/chat/completions", "key" : "***", }, "gpt2" : { "endpoint" : "https://api-inference.huggingface.co/**openai/gpt2", "key" : "***", }, }
以下代码为 Azure Open AI 模型创建配置,该模型充当我们内置相关性和一致性评估器的 LLM Judge。此配置作为模型配置传递给这些评估器:
from promptflow.core import AzureOpenAIModelConfigurationconfiguration = AzureOpenAIModelConfiguration( azure_endpoint="https://ai-***.openai.azure.com", api_key="", api_version="", azure_deployment="",)
Prompt Flow Evaluations SDK 支持多种内置质量和安全评估器(请参阅内置评估器中受支持的评估器的完整列表),并提供了定义您自己的基于代码或基于提示的自定义评估器的灵活性。
对于我们的例子,我们将只使用内置的内容安全(用于衡量模型响应中的有害内容的复合评估器)、相关性和连贯性评估器:
from promptflow.evals.evaluatorsimport ContentSafetyEvaluator, RelevanceEvaluator, CoherenceEvaluator, GroundednessEvaluator, FluencyEvaluator, SimilarityEvaluatorcontent_safety_evaluator = ContentSafetyEvaluator(project_scope=azure_ai_project)relevance_evaluator = RelevanceEvaluator(model_config=configuration)coherence_evaluator = CoherenceEvaluator(model_config=configuration)groundedness_evaluator = GroundednessEvaluator(model_config=configuration)fluency_evaluator = FluencyEvaluator(model_config=configuration)similarity_evaluator = SimilarityEvaluator(model_config=configuration)
使用评估 API
现在假设我们想要使用我们在上一步中初始化的评估器来提供一份提示列表,以便跨不同的模型端点进行测试。
Prompt Flow Evaluations SDK 提供了一个 Evaluate API,允许您根据提供的提示评估模型生成的响应。此 Evaluate API 接收一个数据文件,每行包含一个或多个提示。每个提示都包含一个问题、上下文和基本事实,供评估人员使用。它还接受一个应用程序目标类“app_target.py”,其响应将根据您感兴趣的每个模型进行评估。我们将在后面的部分中进一步详细讨论这一点。
以下代码运行 Evaluate API 并使用内容安全、相关性和一致性评估器。它提供了在应用程序目标中引用的模型类型列表,称为“ModelEndpoints”,定义在“app_target.py”中。以下是 Evaluate API 所需的参数:
以下代码循环运行每个提供的模型类型的 Evaluate API,并将评估结果记录到 Azure AI Studio 项目中:
from app_target import ModelEndpointsimport pathlibimport randomfrom promptflow.evals.evaluate import evaluatemodels = ["gpt4-0613", "gpt35-turbo", "mistral7b", "phi3_mini_serverless" ]path = str(pathlib.Path(pathlib.Path.cwd())) + "/data.jsonl"for model in models: randomNum = random.randint(1111, 9999) results = evaluate( azure_ai_project=azure_ai_project, evaluation_name="Eval-Run-"+str(randomNum)+"-"+model.title(), data=path, target=ModelEndpoints(env_var, model), evaluators={ "content_safety": content_safety_evaluator, "coherence": coherence_evaluator, "relevance": relevance_evaluator, "groundedness": groundedness_evaluator, "fluency": fluency_evaluator, "similarity": similarity_evaluator, }, evaluator_config={ "content_safety": { "question": "${data.question}", "answer": "${target.answer}" }, "coherence": { "answer": "${target.answer}", "question": "${data.question}" }, "relevance": { "answer": "${target.answer}", "context": "${data.context}", "question": "${data.question}" }, "groundedness": { "answer": "${target.answer}", "context": "${data.context}", "question": "${data.question}" }, "fluency": { "answer": "${target.answer}", "context": "${data.context}", "question": "${data.question}" }, "similarity": { "answer": "${target.answer}", "context": "${data.context}", "question": "${data.question}" } } )
文件 app_target.py 用作应用程序目标,其中各个 Python函数调用指定的模型端点。在此文件中,`ModelEndpoints` 类的 `__init__`函数将模型端点和键的列表存储在变量 env 中。还提供了模型类型,以便可以调用特定模型:
import requestsfrom typing_extensions import Selffrom typing import TypedDictfrom promptflow.tracing import traceclass ModelEndpoints: def __init__(self: Self, env: dict, model_type: str) -> str: self.env = env self.model_type = model_type
`ModelEndpoints` 类的`__call__`函数使用条件逻辑按模型类型将调用路由到特定的模型端点:
def __call__(self: Self, question: str) -> Response: if self.model_type == "gpt4-0613": output = self.call_gpt4_endpoint(question) elif self.model_type == "gpt35-turbo": output = self.call_gpt35_turbo_endpoint(question) elif self.model_type == "mistral7b": output = self.call_mistral_endpoint(question) elif self.model_type == "tiny_llama": output = self.call_tiny_llama_endpoint(question) elif self.model_type == "phi3_mini_serverless": output = self.call_phi3_mini_serverless_endpoint(question) elif self.model_type == "gpt2": output = self.call_gpt2_endpoint(question) else: output = self.call_default_endpoint(question) return output
以下代码处理对模型端点的 POST 调用。它捕获响应并相应地解析它以从 LLM 检索答案。下面提供了一个示例函数:
def query (self: Self, endpoint: str, headers: str, payload: str) -> str: response = requests.post(url=endpoint, headers=headers, json=payload) return response.json() def call_gpt4_endpoint(self: Self, question: str) -> Response: endpoint = self.env["gpt4-0613"]["endpoint"] key = self.env["gpt4-0613"]["key"] headers = { "Content-Type": "application/json", "api-key": key } payload = { "messages": [{"role": "user", "content": question}], "max_tokens": 500, } output = self.query(endpoint=endpoint, headers=headers, payload=payload) answer = output["choices"][0]["message"]["content"] return {"question": question, "answer": answer}
您可以在此处查看完整的示例笔记本。
在 Azure AI Studio 中比较评估结果
在 SDK 中运行评估并将结果记录到项目中后,您可以在Azure AI Studio中比较不同模型评估的结果。在项目中,您可以使用“工具”部分下的左侧导航菜单来执行评估运行。
默认情况下,如果您已将结果记录到 SDK 中的项目中,则可以在此处看到所有模型评估运行情况。要比较评估方向,请点击位于评估列表上方的“切换到仪表板视图”:
然后选择您想要在仪表板视图中可视化的评估来进行比较:
除了比较总体和行级输出和指标之外,您还可以直接打开每次评估运行,以在图表视图中查看质量和安全评估器的指标总体分布,您可以通过选择图表上方的每个选项卡在它们之间切换。
在此处阅读有关如何在 Azure AI Studio 中查看结果的更多信息。
如何升级部署
幸运的是,一旦您运行了评估并决定升级到最新的模型版本,将部署设置为自动升级到默认值的过程就相对简单了。
当服务中将新模型版本设置为默认版本时,您的部署将自动升级到该版本。您可以在此处阅读有关此过程的更多信息。