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

本文介绍如何根据一组正确或理想的答案(称为基本真相)评估聊天应用的答案。 每当以影响答案的方式更改聊天应用程序时,请运行评估以比较更改。 此演示应用程序提供目前可以使用的工具,以便更轻松地运行评估。

按照本文中的说明操作,你将:

  • 使用为主题域定制的示例提示。 这些项已在存储库中。
  • 从自己的文档中生成示例用户问题和地面真相答案。
  • 使用包含生成的用户问题的示例提示运行评估。
  • 查看答案分析。

体系结构概述

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

  • Azure 托管的聊天应用:聊天应用在Azure App 服务中运行。 聊天应用符合聊天协议,该协议允许评估应用针对符合协议的任何聊天应用运行。
  • Azure AI 搜索:聊天应用使用 Azure AI 搜索来存储自己的文档中的数据。
  • 示例问题生成器:可以为每个文档生成多个问题以及基本真相答案。 问题越多,评估越长。
  • 计算器针对聊天应用运行示例问题和提示,并返回结果。
  • 使用“审阅”工具 可以查看评估结果。
  • 使用差异工具 可以比较评估之间的答案。

先决条件

  • Azure 订阅。 免费创建一个

  • 已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限。

    目前,仅应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/access 上填写表单来申请对 Azure OpenAI 的访问权限。

  • 完成上一 个聊天应用过程 ,将聊天应用部署到 Azure。 此过程将数据加载到 Azure AI 搜索资源中。 评估应用需要此资源才能正常工作。 请勿完成 上一过程中的“清理资源 ”部分。

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

    • Web API URI:已部署聊天应用 API 的 URI。
    • Azure AI 搜索。 需要以下值:
      • 资源名称:Azure AI 搜索资源名称的名称。
      • 索引名称:存储文档的 Azure AI 搜索索引的名称。
      • 查询键:用于查询搜索索引的键。
    • 如果尝试使用聊天应用身份验证,则需要禁用用户身份验证,以便评估应用可以访问聊天应用。

    收集此信息后,不应再次使用 聊天应用 开发环境。 本文稍后会多次提到,以指示评估应用如何使用聊天应用。 在完成本文中的整个过程之前,请勿删除 聊天应用 资源。

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

打开开发环境

现在从安装了完成本文所需的所有依赖项的开发环境开始。 应安排监视工作区,以便同时查看此文档和开发环境。

GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 对于最简单的开发环境,请使用 GitHub Codespaces,以便预先安装完成本文所需的合适的开发人员工具和依赖项。

重要

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

  1. 开始在 Azure-Samples/ai-rag-chat-evaluator GitHub 存储库的 main 分支上创建新的 GitHub Codespace。

  2. 右键单击以下按钮,然后在新窗口中选择“打开”链接,以便同时提供开发环境和文档。

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

    新建 codespace 之前的确认屏幕的截图。

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

  5. 在终端的屏幕底部,使用 Azure Developer CLI 登录到 Azure。

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

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

    azd up
    

    这不会部署评估应用,但它确实使用 GPT-4 部署创建 Azure OpenAI 资源,该部署需要在开发环境中本地运行评估。

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

  9. GitHub 存储库的名称显示在搜索栏中。 这有助于区分此评估应用与聊天应用。 本文 ai-rag-chat-evaluator 中将此存储库称为 “评估”应用

准备环境值和配置信息

使用评估应用先决条件期间收集的信息更新环境值和配置信息。

  1. 使用以下命令将 评估 应用资源信息获取到 .env 文件中:

    azd env get-values > .env
    
  2. 聊天应用中用于其 Azure AI 搜索实例的以下值添加到.env在先决条件部分收集的值:

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    AZURE_SEARCH_KEY="<query-key>"
    

    该值 AZURE_SEARCH_KEYAzure AI 搜索实例的查询键

  3. example_config.json评估应用文件夹的根目录中的文件复制到新文件中my_config.json

  4. 将现有内容 my_config.json 替换为以下内容:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt"
            }
        }
    }
    
  5. 将聊天应用的 URI 值更改为在先决条件部分收集的 URI 值target_url 聊天应用必须符合聊天协议。 URI 具有以下格式 https://CHAT-APP-URL/chat。 确保协议和 chat 路由是 URI 的一部分。

生成示例数据

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

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

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

    python3 -m scripts generate --output=my_input/qa.jsonl --numquestions=14 --persource=2
    

问题/答案对生成并存储在 my_input/qa.jsonlJSONL 格式)中,作为下一步中使用的计算器的输入。 对于生产评估,你将为此数据集生成更多的 QA 对(可能超过 200 个)。

注意

每个源的问题和答案数很少,目的是让你快速完成此过程。 这不是生产评估,每个源应该有更多的问题和答案。

使用优化提示运行第一个评估

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

    • 更改 results_dir 以包括提示的名称: my_results/experiment_refined
    • 更改为 prompt_template<READFILE>my_input/experiment_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 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. 在终端中运行以下命令以运行评估:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

    这会在评估中创建 my_results 一个新的试验文件夹。 该文件夹包含评估结果,包括:

    • eval_results.jsonl:每个问答以及每个 QA 对的 GPT 指标。
    • summary.json:总体结果,如平均 GPT 指标。

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

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

    • 更改为 results_dirmy_results/experiment_weak
    • 更改为 prompt_template<READFILE>my_input/prompt_weak.txt 在下一个评估中使用弱提示模板。

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

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

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

使用特定温度运行第三次评估

使用允许更多创造力的提示。

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

    • 更改为 results_dirmy_results/experiment_ignoresources_temp09
    • 更改为 prompt_template<READFILE>my_input/prompt_ignoresources.txt
    • 添加新的替代 - "temperature": 0.9 默认温度为 0.7。 温度越高,答案就越有创意。

    忽略提示简短:

    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/experiment_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. 在终端中运行以下命令以运行评估:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

查看评估结果

你已根据不同的提示和应用设置执行了三项评估。 结果存储在 my_results 文件夹中。 查看结果因设置而异的方式。

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

    python3 -m review_tools summary my_results
    
  2. 结果如下所示:

    评估评审工具的屏幕截图,其中显示了三个评估。

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

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

    说明
    真实性 这指的是模型响应基于事实、可验证信息的方式。 如果反应真实准确,反映现实,则认为反应是有根据的。
    相关性 这将度量模型响应与上下文或提示的接近程度。 相关响应直接解决用户的查询或语句。
    一致性 这指的是模型响应的逻辑一致性。 一致的响应维护逻辑流,并不矛盾。
    引文 这表示答案是否以提示中请求的格式返回。
    长度 这会度量响应的长度。
  4. 结果应指示所有 3 个评估具有较高的相关性,而 experiment_ignoresources_temp09 相关性最低。

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

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

比较答案

比较评估返回的答案。

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

    python3 -m review_tools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. 查看结果。

    评估结果比较的屏幕截图。

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

有关进一步评估的建议

  • 编辑提示 my_input 以定制答案,如主题域、长度和其他因素。
  • my_config.json编辑文件以更改参数,例如temperature,并semantic_ranker重新运行试验。
  • 比较不同的答案,以了解提示和问题如何影响答案质量。
  • 为 Azure AI 搜索索引中的每个文档生成一组单独的问题和基本真相答案。 然后重新运行评估,了解答案的区别。
  • 通过将要求添加到提示末尾来更改提示以指示较短或更长的答案。 例如: Please answer in about 3 sentences.

清理资源

清理 Azure 资源

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

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

azd down --purge

清理 GitHub Codespaces

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

重要

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

  1. 登录到 GitHub Codespaces 仪表板 (https://github.com/codespaces)。

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

    所有正在运行的 Codespaces 的屏幕截图,其中包含它们的状态和模板。

  3. 打开 codespace 的上下文菜单,然后选择“删除”。

    单个 codespace 的上下文菜单的屏幕截图,突出显示了删除选项。

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

后续步骤