本文将展示如何根据一组正确或理想的答案(称为基本事实)来评估聊天应用的答案。 每当更改聊天应用程序并对答案产生影响时,都要运行一次评估来比较更改。 此演示应用程序提供可用于立即使用的工具,以便更轻松地运行评估。
通过按照本文中的说明操作,您可以:
- 使用所提供的针对学科领域的示例提示。 这些提示已在存储库中。
- 从自己的文档中生成用户问题示例和基本真实答案。
- 通过使用示例提示对生成的用户问题进行评估。
- 审查对答案的分析。
注意
本文使用一个或多个 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 门户中找到搜索服务的索引名称。
- 资源名称:Azure AI 搜索资源名称,在
聊天 API URL 允许评价通过后端应用程序提出请求。 Azure AI 搜索信息允许评估脚本使用与加载文档的后端相同的部署。
收集此信息后,无需再次使用 聊天应用 开发环境。 本文多次引用 聊天应用 ,以显示 评估应用 如何使用它。 在完成本文中的所有步骤之前,请勿删除 聊天应用 资源。
- 聊天 API URI:
开发容器 环境提供了完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或在本地使用 Visual Studio Code 运行开发容器。
- GitHub 帐户
打开开发环境
按照这些说明设置预配置的开发环境,其中包含完成本文所需的所有依赖项。 排列监视器工作区,以便同时查看此文档和开发环境。
本文使用 switzerlandnorth
区域对评估部署进行了测试。
GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 将 GitHub Codespaces 用于最简单的开发环境。 它附带了预安装的合适的开发人员工具和依赖项,用于完成这篇文章。
重要说明
所有 GitHub 帐户每月最多可以使用 GitHub Codespaces 60 小时,其中包含两个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数。
在 Azure-Samples/ai-rag-chat-evaluator GitHub 存储库的
main
分支上,启动创建新 GitHub 代码空间的过程。若要同时显示开发环境和文档,请右键单击以下按钮,然后在 新窗口中选择“打开”链接。
在“创建 codespace”页上,查看 codespace 配置设置,然后选择“创建新 codespace”
等待 Codespace 启动。 此启动过程会花费几分钟时间。
在屏幕底部的终端中,使用 Azure 开发人员 CLI 登录到 Azure:
azd auth login --use-device-code
从终端复制代码,然后将其粘贴到浏览器中。 按照说明使用 Azure 帐户进行身份验证。
为评估应用预配所需的 Azure 资源 Azure OpenAI 服务:
azd up
此命令
AZD
不会部署评估应用,但它确实会创建具有所需GPT-4
部署的 Azure OpenAI 资源,以在本地开发环境中运行评估。
本文中的剩余任务需要在此开发容器的上下文中完成。
GitHub 存储库的名称显示在搜索栏中。 此可视指示器可帮助你将评估应用与聊天应用区分开来。 此 ai-rag-chat-evaluator
存储库称为本文中的 评估应用 。
准备环境值和配置信息
请使用您在先决条件期间收集到的信息更新评估应用程序的环境变量和配置信息。
根据
.env.sample
创建.env
文件。cp .env.sample .env
运行此命令以从已部署的资源组中获取
AZURE_OPENAI_EVAL_DEPLOYMENT
和AZURE_OPENAI_SERVICE
所需的值。 将这些值粘贴到.env
文件中。azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT azd env get-value AZURE_OPENAI_SERVICE
将聊天应用中用于 Azure AI 搜索实例的以下值添加到在 先决条件 部分中收集的
.env
文件中。AZURE_SEARCH_SERVICE="<service-name>" AZURE_SEARCH_INDEX="<index-name>"
使用 Microsoft AI 聊天协议获取配置信息
聊天应用和评估应用都实现了 Microsoft AI 聊天协议规范。这是一种开源的、基于云的、与具体语言无关的 AI 终结点 API 协定,用于消耗和评估。 当客户端和中间层终结点遵守此 API 规范时,可以在 AI 后端上持续使用和运行评估。
新建一个名为
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
对象包含应用程序所需的任何配置设置。 每个应用程序都定义了自己的设置属性集。使用下表了解发送到聊天应用的设置属性的含义。
设置属性 说明 semantic_ranker
是否使用语义排序器,这是一种根据与用户查询的语义相似性对搜索结果进行重新排序的模型。 在本教程中,我们会将其禁用,以降低成本。 retrieval_mode
要使用的检索模式。 默认为 hybrid
。temperature
模型的温度设置。 默认为 0.3
。top
要返回的搜索结果数。 默认为 3
。prompt_template
覆盖用于根据问题和搜索结果生成答案的提示。 seed
对 GPT 模型的任何调用的种子值。 设置种子时,评估结果将更一致。 将
target_url
值更改为聊天应用的 URI 值,这些值是在 “先决条件 ”部分收集的。 聊天应用必须符合聊天协议。 URI 具有以下格式:https://CHAT-APP-URL/chat
确保协议和chat
路由是 URI 的一部分。
生成示例数据
若要评估新答案,必须将其与 基本真理 答案进行比较,这是特定问题的理想答案。 从存储在 Azure AI 搜索中用于聊天应用的文档生成问题和解答。
将
example_input
文件夹复制到名为my_input
的新文件夹中。在终端中运行以下命令生成示例数据:
python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
生成的文问答对存储在 my_input/qa.jsonl
(JSONL 格式)中,作为下一步使用的计算器的输入。 对于生产评估,将生成更多的问答对。 为这个数据集生成了 200 多个问答对。
注意
每个源只生成几个问题和答案,以便快速完成此过程。 它并不意味着是一个生产评估,每个源都应该有更多的问题和答案。
使用优化提示进行第一次评估
编辑
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].
在终端中运行以下命令来运行评估:
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 平均指标。
使用弱提示运行第二次评估
请编辑
my_config.json
配置文件属性。属性 新值 results_dir
my_results/experiment_weak
prompt_template
<READFILE>my_input/prompt_weak.txt
该弱提示没有有关主题域的上下文。
You are a helpful assistant.
在终端中运行以下命令来运行评估:
python -m evaltools evaluate --config=my_config.json --numquestions=14
在特定温度下运行第三次评估
使用一个更有创意的提示。
编辑
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!
配置对象应如以下示例所示,只需将
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" } } }
在终端中运行以下命令来运行评估:
python -m evaltools evaluate --config=my_config.json --numquestions=14
查看评估结果
根据不同的提示和应用程序设置进行了三次评估。 结果存储在 my_results
文件夹中。 查看不同设置下的结果有何不同。
使用评审工具查看评估结果。
python -m evaltools summary my_results
结果看起来类似:
每个值都以数字和百分比的形式返回。
使用下表了解数值的含义。
值 说明 有据性 检查模型的响应是否基于事实和可验证的信息。 如果响应与事实相符并反映了现实,则被认为是有依据的。 相关性 测量模型响应与上下文或提示的接近程度。 相关回复可直接解决用户的疑问或陈述。 一致性 检查模型响应的逻辑一致性。 连贯的响应应保持逻辑流畅,不自相矛盾。 引文 指示答案是否以提示中请求的格式返回。 长度 度量响应的长度。 结果应表明,这三个评估具有较高的相关性,而
experiment_ignoresources_temp09
相关性最低。选择文件夹,查看评估配置。
输入 Ctrl + C 退出应用并返回到终端。
比较答案
比较评估返回的答案。
选择要比较的两个评估,然后使用同一审阅工具比较答案。
python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
查看结果。 结果可能会有所不同。
输入 Ctrl + C 退出应用并返回到终端。
有关进一步评估的建议
- 编辑
my_input
中的提示,以调整答案的主题域、长度和其他因素。 - 编辑
my_config.json
文件,更改temperature
和semantic_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 每月包含的存储和核心小时数。
找到源自 Azure-Samples/ai-rag-chat-evaluator GitHub 存储库的当前正在运行的代码空间。
打开代码空间的上下文菜单,然后选择 删除。
返回到聊天应用文章以清理这些资源。
相关内容
- 请参阅 评估存储库。
- 请参阅 企业聊天应用 GitHub 存储库。
- 使用 Azure OpenAI 最佳做法解决方案体系结构构建
聊天应用。 - 了解使用 Azure AI 搜索在生成式 AI 应用中进行访问控制。
- 使用 Azure API 管理构建企业级的
Azure OpenAI 解决方案。 - 请参阅 Azure AI 搜索:使用混合检索和排名功能超越矢量搜索。