你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure AI Foundry SDK 在 Python 中构建基本聊天应用

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

在本快速入门中,我们将指导你使用 Azure AI Foundry SDK 设置本地开发环境。 我们会编写提示,将其作为应用代码的一部分运行,跟踪进行的 LLM 调用,并在 LLM 的输出上运行基本评估。

先决条件

安装 Azure CLI 并登录

你将安装 Azure CLI 并从你的本地开发环境登录,以便你可以使用你的用户凭据调用 Azure OpenAI 服务。

在大多数情况下,可以使用以下命令从终端安装 Azure CLI:

winget install -e --id Microsoft.AzureCLI

如果这些命令不适用于特定操作系统或设置,则可以遵循说明如何安装 Azure CLI

安装 Azure CLI 后,使用 az login 命令登录并使用浏览器登录:

az login

也可使用设备代码通过浏览器手动登录。

az login --use-device-code

创建新的 Python 环境

首先,需要创建一个新的 Python 环境,用于安装本教程所需的包。 请勿将包安装到你的全局 Python 安装中。 安装 Python 包时,应始终使用虚拟或 conda 环境,否则可能会中断 Python 的全局安装。

如果需要,请安装 Python

建议使用 Python 3.10 或更高版本,但至少需要 Python 3.8。 如果未安装合适的 Python 版本,则可以按照 VS Code Python 教程中的说明操作,这是在操作系统上安装 Python 的最简单方法。

创建虚拟环境

如果已安装 Python 3.10 或更高版本,则可以使用以下命令创建虚拟环境:

py -3 -m venv .venv
.venv\scripts\activate

激活 Python 环境意味着当通过命令行运行 pythonpip 时,你将使用应用程序的 .venv 文件夹中包含的 Python 解释器。

注意

可以使用 deactivate 命令退出 python 虚拟环境,并在需要时重新激活它。

安装包

安装 azure-ai-projects(预览版)、azure-ai-inference(预览版)和 azure-identity 包:

pip install azure-ai-projects azure-ai-inference azure-identity 

生成聊天应用

创建一个名为 chat.py 的文件。 将以下代码复制并粘贴到其中。

from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

project_connection_string = "<your-connection-string-goes-here>"

project = AIProjectClient.from_connection_string(
    conn_str=project_connection_string, credential=DefaultAzureCredential()
)

chat = project.inference.get_chat_completions_client()
response = chat.complete(
    model="gpt-4o-mini",
    messages=[
        {
            "role": "system",
            "content": "You are an AI assistant that speaks like a techno punk rocker from 2350. Be cool but not too cool. Ya dig?",
        },
        {"role": "user", "content": "Hey, can you help me with my taxes? I'm a freelancer."},
    ],
)

print(response.choices[0].message.content)

插入连接字符串

从代码调用 Azure OpenAI 服务需要项目连接字符串。

在你曾在 Azure AI Foundry 操场快速入门中创建的 Azure AI Foundry 项目中查找连接字符串。 打开项目,然后在“概述”页上找到连接字符串。

屏幕截图显示了项目的概述页和连接字符串的位置。

复制连接字符串并替换 chat.py 文件中的 <your-connection-string-goes-here>

运行聊天脚本

运行脚本以查看来自模型的响应。

python chat.py

根据用户输入和提示模板生成提示

该脚本使用硬编码的输入和输出消息。 在实际应用中,你将从客户端应用程序获取输入,生成带有模型内部指令的系统消息,然后使用所有消息调用 LLM。

让我们更改脚本,从客户端应用程序获取输入,并使用提示模板生成系统消息。

  1. 删除输出响应的脚本的最后一行。

  2. 现在定义一个 get_chat_response 函数,该函数会接收消息和上下文、使用提示模板生成系统消息并调用模型。 将此代码添加到现有 chat.py 文件:

    from azure.ai.inference.prompts import PromptTemplate
    
    
    def get_chat_response(messages, context):
        # create a prompt template from an inline string (using mustache syntax)
        prompt_template = PromptTemplate.from_string(
            prompt_template="""
            system:
            You are an AI assistant that speaks like a techno punk rocker from 2350. Be cool but not too cool. Ya dig? Refer to the user by their first name, try to work their last name into a pun.
    
            The user's first name is {{first_name}} and their last name is {{last_name}}.
            """
        )
    
        # generate system message from the template, passing in the context as variables
        system_message = prompt_template.create_messages(data=context)
    
        # add the prompt messages to the user messages
        response = chat.complete(
            model="gpt-4o-mini",
            messages=system_message + messages,
            temperature=1,
            frequency_penalty=0.5,
            presence_penalty=0.5,
        )
    
        return response
    

    注意

    提示模板使用 mustache 格式。

    get_chat_response 函数可以轻松添加为 FastAPI 或 Flask 应用的路由,以便从前端 Web 应用程序调用此函数。

  3. 现在模拟将信息从前端应用程序传递到此函数。 将以下代码添加到 chat.py 文件的末尾。 随意处理消息并添加自己的名字。

    if __name__ == "__main__":
        response = get_chat_response(
            messages=[{"role": "user", "content": "what city has the best food in the world?"}],
            context={"first_name": "Jessie", "last_name": "Irwin"},
        )
        print(response.choices[0].message.content)
    

运行修订后的脚本以使用此新输入查看模型的响应。

python chat.py

下一步