开始使用 JavaScript 评估聊天应用中的答案

本文将展示如何根据一组正确或理想的答案(称为基本事实)来评估聊天应用的答案。 每当更改聊天应用程序并对答案产生影响时,都要运行一次评估来比较更改。 此演示应用程序提供可用于立即使用的工具,以便更轻松地运行评估。

通过按照本文中的说明操作,您可以:

  • 使用所提供的针对学科领域的示例提示。 这些提示已在存储库中。
  • 从自己的文档中生成用户问题示例和基本真实答案。
  • 通过使用示例提示对生成的用户问题进行评估。
  • 审查对答案的分析。

注意

本文使用一个或多个 AI 应用模板作为本文中的示例和指南的基础。 AI 应用模板提供易于部署的维护良好的参考实现。 它们有助于为您的 AI 应用确保一个优质的开端。

体系结构概述

体系结构的关键组件包括:

  • Azure 托管的聊天应用:聊天应用在 Azure 应用程序服务中运行。
  • Microsoft AI 聊天协议:协议跨 AI 解决方案和语言提供标准化的 API 协定。 聊天应用符合 Microsoft AI 聊天协议,这允许评估应用与任何符合该协议的聊天应用运行。
  • Azure AI 搜索:聊天应用使用 Azure AI 搜索来存储自己的文档中的数据。
  • 示例问题生成器:该工具可以为每个文档生成许多问题以及基本真相答案。 存在的问题越多,评估时间越长。
  • 计算器:该工具针对聊天应用运行示例问题和提示,并返回结果。
  • 审阅工具:该工具将评审评估结果。
  • 差异工具:该工具用于比较不同评估之间的答案。

将此评估部署到 Azure 时,将为具有自身容量GPT-4模型创建 Azure OpenAI 服务终结点。 在评估聊天应用程序时,评估程序必须拥有自己的 Azure OpenAI 资源,使用 GPT-4 并拥有自己的容量。

先决条件

  • Azure 订阅。 免费创建一个

  • 部署聊天应用。

  • 这些聊天应用会将数据加载到 Azure AI 搜索资源中。 评估应用需要此资源才能运行。 不要完成上一过程中的清理资源部分。

    需要该部署中的以下 Azure 资源信息,本文中将其称为聊天应用

    • 聊天 API URI:azd up 进程结束时显示的服务后端终结点。
    • Azure AI 搜索。 需要使用以下值:
      • 资源名称:Azure AI 搜索资源名称,在 azd up 过程中报告为 Search service
      • 索引名称:存储文档的 Azure AI 搜索索引的名称。 可以在 Azure 门户中找到搜索服务的索引名称。

    聊天 API URL 允许评价通过后端应用程序提出请求。 Azure AI 搜索信息允许评估脚本使用与加载文档的后端相同的部署。

    收集此信息后,无需再次使用 聊天应用 开发环境。 本文多次引用 聊天应用 ,以显示 评估应用 如何使用它。 在完成本文中的所有步骤之前,请勿删除 聊天应用 资源。

  • 开发容器 环境提供了完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或在本地使用 Visual Studio Code 运行开发容器。

    • GitHub 帐户

打开开发环境

按照这些说明设置预配置的开发环境,其中包含完成本文所需的所有依赖项。 排列监视器工作区,以便同时查看此文档和开发环境。

本文使用 switzerlandnorth 区域对评估部署进行了测试。

GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 将 GitHub Codespaces 用于最简单的开发环境。 它附带了预安装的合适的开发人员工具和依赖项,用于完成这篇文章。

重要说明

所有 GitHub 帐户每月最多可以使用 GitHub Codespaces 60 小时,其中包含两个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. Azure-Samples/ai-rag-chat-evaluator GitHub 存储库的 main 分支上,启动创建新 GitHub 代码空间的过程。

  2. 若要同时显示开发环境和文档,请右键单击以下按钮,然后在 新窗口中选择“打开”链接

    GitHub Codespaces 中打开。

  3. 在“创建 codespace”页上,查看 codespace 配置设置,然后选择“创建新 codespace

    在创建新代码空间之前显示确认屏幕的屏幕截图。

  4. 等待 Codespace 启动。 此启动过程会花费几分钟时间。

  5. 在屏幕底部的终端中,使用 Azure 开发人员 CLI 登录到 Azure:

    azd auth login --use-device-code
    
  6. 从终端复制代码,然后将其粘贴到浏览器中。 按照说明使用 Azure 帐户进行身份验证。

  7. 为评估应用预配所需的 Azure 资源 Azure OpenAI 服务:

    azd up
    

    此命令 AZD 不会部署评估应用,但它确实会创建具有所需 GPT-4 部署的 Azure OpenAI 资源,以在本地开发环境中运行评估。

本文中的剩余任务需要在此开发容器的上下文中完成。

GitHub 存储库的名称显示在搜索栏中。 此可视指示器可帮助你将评估应用与聊天应用区分开来。 此 ai-rag-chat-evaluator 存储库称为本文中的 评估应用

准备环境值和配置信息

请使用您在先决条件期间收集到的信息更新评估应用程序的环境变量和配置信息。

  1. 根据 .env.sample 创建.env文件。

    cp .env.sample .env
    
  2. 运行此命令以从已部署的资源组中获取AZURE_OPENAI_EVAL_DEPLOYMENTAZURE_OPENAI_SERVICE所需的值。 将这些值粘贴到 .env 文件中。

    azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT
    azd env get-value AZURE_OPENAI_SERVICE
    
  3. 将聊天应用中用于 Azure AI 搜索实例的以下值添加到在 先决条件 部分中收集的 .env 文件中。

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    

使用 Microsoft AI 聊天协议获取配置信息

聊天应用和评估应用都实现了 Microsoft AI 聊天协议规范。这是一种开源的、基于云的、与具体语言无关的 AI 终结点 API 协定,用于消耗和评估。 当客户端和中间层终结点遵守此 API 规范时,可以在 AI 后端上持续使用和运行评估。

  1. 新建一个名为 my_config.json 的新文件,并将以下内容复制到其中:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "top": 3,
                "temperature": 0.3,
                "retrieval_mode": "hybrid",
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt",
                "seed": 1
            }
        }
    }
    

    评估脚本将创建 my_results 文件夹。

    overrides 对象包含应用程序所需的任何配置设置。 每个应用程序都定义了自己的设置属性集。

  2. 使用下表了解发送到聊天应用的设置属性的含义。

    设置属性 说明
    semantic_ranker 是否使用语义排序器,这是一种根据与用户查询的语义相似性对搜索结果进行重新排序的模型。 在本教程中,我们会将其禁用,以降低成本。
    retrieval_mode 要使用的检索模式。 默认为 hybrid
    temperature 模型的温度设置。 默认为 0.3
    top 要返回的搜索结果数。 默认为 3
    prompt_template 覆盖用于根据问题和搜索结果生成答案的提示。
    seed 对 GPT 模型的任何调用的种子值。 设置种子时,评估结果将更一致。
  3. target_url 值更改为聊天应用的 URI 值,这些值是在 “先决条件 ”部分收集的。 聊天应用必须符合聊天协议。 URI 具有以下格式: https://CHAT-APP-URL/chat 确保协议和 chat 路由是 URI 的一部分。

生成示例数据

若要评估新答案,必须将其与 基本真理 答案进行比较,这是特定问题的理想答案。 从存储在 Azure AI 搜索中用于聊天应用的文档生成问题和解答。

  1. example_input 文件夹复制到名为 my_input 的新文件夹中。

  2. 在终端中运行以下命令生成示例数据:

    python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
    

生成的文问答对存储在 my_input/qa.jsonlJSONL 格式)中,作为下一步使用的计算器的输入。 对于生产评估,将生成更多的问答对。 为这个数据集生成了 200 多个问答对。

注意

每个源只生成几个问题和答案,以便快速完成此过程。 它并不意味着是一个生产评估,每个源都应该有更多的问题和答案。

使用优化提示进行第一次评估

  1. 编辑my_config.json配置文件属性。

    属性 新值
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    细化的提示针对的是主题域。

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers, ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information, return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by a colon and the actual information. Always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. 在终端中运行以下命令来运行评估:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

    此脚本在 my_results/ 中创建了一个包含评估的新试验文件夹。 该文件夹包含评估的结果。

    文件名 说明
    config.json 用于评估的配置文件的副本。
    evaluate_parameters.json 用于计算的参数。 类似于 config.json 但包含其他元数据,如时间戳。
    eval_results.jsonl 每个问题和答案,以及每个问答对的 GPT 指标。
    summary.json 总体结果,如 GPT 平均指标。

使用弱提示运行第二次评估

  1. 请编辑my_config.json配置文件属性。

    属性 新值
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    该弱提示没有有关主题域的上下文。

    You are a helpful assistant.
    
  2. 在终端中运行以下命令来运行评估:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

在特定温度下运行第三次评估

使用一个更有创意的提示。

  1. 编辑my_config.json配置文件属性。

    Existing 属性 新值
    Existing results_dir my_results/experiment_ignoresources_temp09
    Existing prompt_template <READFILE>my_input/prompt_ignoresources.txt
    新增 temperature 0.9

    默认 temperature 为 0.7。 温度越高,答案越有创意。

    ignore 提示较为简短。

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. 配置对象应如以下示例所示,只需将results_dir替换为您的路径即可:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/prompt_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. 在终端中运行以下命令来运行评估:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

查看评估结果

根据不同的提示和应用程序设置进行了三次评估。 结果存储在 my_results 文件夹中。 查看不同设置下的结果有何不同。

  1. 使用评审工具查看评估结果。

    python -m evaltools summary my_results
    
  2. 结果看起来类似

    显示三项评估的评估审查工具的屏幕截图。

    每个值都以数字和百分比的形式返回。

  3. 使用下表了解数值的含义。

    说明
    有据性 检查模型的响应是否基于事实和可验证的信息。 如果响应与事实相符并反映了现实,则被认为是有依据的。
    相关性 测量模型响应与上下文或提示的接近程度。 相关回复可直接解决用户的疑问或陈述。
    一致性 检查模型响应的逻辑一致性。 连贯的响应应保持逻辑流畅,不自相矛盾。
    引文 指示答案是否以提示中请求的格式返回。
    长度 度量响应的长度。
  4. 结果应表明,这三个评估具有较高的相关性,而 experiment_ignoresources_temp09 相关性最低。

  5. 选择文件夹,查看评估配置。

  6. 输入 Ctrl + C 退出应用并返回到终端。

比较答案

比较评估返回的答案。

  1. 选择要比较的两个评估,然后使用同一审阅工具比较答案。

    python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. 查看结果。 结果可能会有所不同。

    显示不同评估答案对比的截图。

  3. 输入 Ctrl + C 退出应用并返回到终端。

有关进一步评估的建议

  • 编辑 my_input 中的提示,以调整答案的主题域、长度和其他因素。
  • 编辑 my_config.json 文件,更改 temperaturesemantic_ranker 等参数,然后重新进行试验。
  • 比较不同的答案,了解提示和问题对答案质量的影响。
  • 为 Azure AI 搜索索引中的每个文档生成一组单独的问题和基本真相答案。 然后重新进行评估,看看答案有何不同。
  • 通过在提示语末尾添加要求,修改提示语以表示较短或较长的答案。 示例为 Please answer in about 3 sentences.

清理资源和依赖项

以下步骤将引导你完成清理所用资源的过程。

清理 Azure 资源

本文中创建的 Azure 资源的费用将计入你的 Azure 订阅。 如果你预计将来不需要这些资源,请将其删除,以避免产生更多费用。

要删除 Azure 资源并移除源代码,请运行以下 Azure Developer CLI 命令:

azd down --purge

清理 GitHub Codespaces 和 Visual Studio Code

删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。

重要说明

有关 GitHub 帐户权利的详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 登录到 GitHub Codespaces 仪表板

  2. 找到源自 Azure-Samples/ai-rag-chat-evaluator GitHub 存储库的当前正在运行的代码空间。

    显示所有正在运行的代码空间的屏幕截图,包括其状态和模板。

  3. 打开代码空间的上下文菜单,然后选择 删除

    屏幕截图,其中显示了单个代码空间的上下文菜单,其中突出显示了“删除”选项。

返回到聊天应用文章以清理这些资源。