相关性评估器
本笔记本使用 RelevancyEvaluator 来评估响应内容与源节点是否匹配查询。
这对于衡量查询是否真正得到响应内容的解答非常有用。
%pip install llama-index-llms-openai pandas[jinja2] spacyimport loggingimport sys
logging.basicConfig(stream=sys.stdout, level=logging.INFO)logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))from llama_index.core import ( TreeIndex, VectorStoreIndex, SimpleDirectoryReader, Response,)from llama_index.llms.openai import OpenAIfrom llama_index.core.evaluation import RelevancyEvaluatorfrom llama_index.core.node_parser import SentenceSplitterimport pandas as pd
pd.set_option("display.max_colwidth", 0)# gpt-3 (davinci)gpt3 = OpenAI(temperature=0, model="gpt-3.5-turbo")
# gpt-4gpt4 = OpenAI(temperature=0, model="gpt-4")evaluator = RelevancyEvaluator(llm=gpt3)evaluator_gpt4 = RelevancyEvaluator(llm=gpt4)documents = SimpleDirectoryReader("./test_wiki_data").load_data()# create vector indexsplitter = SentenceSplitter(chunk_size=512)vector_index = VectorStoreIndex.from_documents( documents, transformations=[splitter])INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"from llama_index.core.evaluation import EvaluationResult
# define jupyter display functiondef display_eval_df( query: str, response: Response, eval_result: EvaluationResult) -> None: eval_df = pd.DataFrame( { "Query": query, "Response": str(response), "Source": response.source_nodes[0].node.text[:1000] + "...", "Evaluation Result": "Pass" if eval_result.passing else "Fail", "Reasoning": eval_result.feedback, }, index=[0], ) eval_df = eval_df.style.set_properties( **{ "inline-size": "600px", "overflow-wrap": "break-word", }, subset=["Response", "Source"], ) display(eval_df)评估响应相对于源节点和查询的表现。
query_str = ( "What battles took place in New York City in the American Revolution?")query_engine = vector_index.as_query_engine()response_vector = query_engine.query(query_str)eval_result = evaluator_gpt4.evaluate_response( query=query_str, response=response_vector)INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"display_eval_df(query_str, response_vector, eval_result)| 查询 | 响应 | 来源 | 评估结果 | 推理 | |
|---|---|---|---|---|---|
| 0 | 美国独立战争期间在纽约市发生了哪些战役? | 长岛战役是美国独立战争中在纽约市发生的规模最大的战役。 | === 美国独立战争 ===
1765年10月,印花税法大会在纽约召开,与此同时"自由之子"组织在城中兴起,并在随后十年间与驻守该地的英军发生冲突。1776年8月,在美国独立战争中规模最大的长岛战役于现今的布鲁克林区境内爆发。美军在此役中败北后,英军将此城作为其在北美的军事和政治行动基地。这座城市成为效忠派难民和逃亡奴隶的避难所,这些奴隶为获得英国王室新承诺的自由而加入英军阵营。英军占领期间,多达万名逃亡奴隶涌入该城。1783年战争结束时英军撤离,他们将3000名自由民运送至新斯科舍重新安置,其余自由民则被安置在英国和加勒比地区。 唯一一次以和平方式解决战争的尝试发... | 通过 | 背景确认,长岛战役——美国独立战争中规模最大的战役——发生在纽约市。 |
query_str = "What are the airports in New York City?"query_engine = vector_index.as_query_engine()response_vector = query_engine.query(query_str)eval_result = evaluator_gpt4.evaluate_response( query=query_str, response=response_vector)INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"display_eval_df(query_str, response_vector, eval_result)| 查询 | 响应 | 来源 | 评估结果 | 推理 | |
|---|---|---|---|---|---|
| 0 | 纽约市有哪些机场? | 纽约市的机场包括约翰·F·肯尼迪国际机场、纽瓦克自由国际机场、拉瓜迪亚机场、斯图尔特国际机场、长岛麦克阿瑟机场、特伦顿-默瑟机场和威彻斯特县机场。 | 沿东北走廊运行,并提供前往其他北美城市的长途列车服务。斯塔滕岛铁路快速交通系统仅服务于斯塔滕岛,全天24小时运营。港务局跨哈德逊线(PATH列车)连接中城和下曼哈顿与新泽西州东北部,主要是霍博肯、泽西市和纽瓦克。与纽约市地铁一样,PATH全天24小时运营;这意味着全球六个全天候运营的快速交通系统中,有三个完全或部分位于纽约(其余包括芝加哥"L"线部分路段、服务费城的PATCO高速线以及哥本哈根地铁)。
纽约市正在建设的数十亿美元重轨交通项目包括第二大道地铁和东侧通道工程。
==== 公共汽车 ==== 纽约市的公共汽车车队全天候运营,是北美规模最大的公交系统。该市主要的城际巴士总站——港务局巴士总站,每日服务7,000辆巴士… | 通过 | 上下文提供了关于纽约市机场的信息,包括约翰·F·肯尼迪国际机场、纽瓦克自由国际机场、拉瓜迪亚机场、斯图尔特国际机场、长岛麦克阿瑟机场、特伦顿-默瑟机场和威彻斯特县机场。这与对查询的回应相符。 |
query_str = "Who is the mayor of New York City?"query_engine = vector_index.as_query_engine()response_vector = query_engine.query(query_str)eval_result = evaluator_gpt4.evaluate_response( query=query_str, response=response_vector)INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"display_eval_df(query_str, response_vector, eval_result)| 查询 | 响应 | 来源 | 评估结果 | 推理 | |
|---|---|---|---|---|---|
| 0 | 纽约市市长是谁? | 纽约市市长是埃里克·亚当斯。 | === 政治 === 现任市长是埃里克·亚当斯。他于2021年以67%的得票率当选,并于2022年1月1日就职。 民主党占据多数公职。截至2016年4月,该市69%的登记选民是民主党人,10%是共和党人。自1924年卡尔文·柯立芝总统赢得五个行政区以来,纽约市再未在总统选举中支持过共和党候选人。自1898年建制以来,共和党全州公职候选人从未赢得该市全部五个行政区。2012年,民主党人巴拉克·奥巴马成为首位在纽约市获得超过80%总选票的总统候选人,横扫所有五个行政区。政党纲领聚焦于经济适用房、教育和经济发展,劳工政治在该市具有重要地位。纽约州27个美国国会选区中有13个包含纽约市的部分区域。纽约是最重要的... | 通过 | 上下文证实了埃里克·亚当斯是纽约市的现任市长,正如回应中所陈述的那样。 |
评估返回的源集合,并确定哪些源实际包含给定查询的答案。
from typing import List
# define jupyter display functiondef display_eval_sources( query: str, response: Response, eval_result: List[str]) -> None: sources = [s.node.get_text() for s in response.source_nodes] eval_df = pd.DataFrame( { "Source": sources, "Eval Result": eval_result, }, ) eval_df.style.set_caption(query) eval_df = eval_df.style.set_properties( **{ "inline-size": "600px", "overflow-wrap": "break-word", }, subset=["Source"], )
display(eval_df)# NOTE: you can set response_mode="no_text" to get just the sourcesquery_str = "What are the airports in New York City?"query_engine = vector_index.as_query_engine( similarity_top_k=3, response_mode="no_text")response_vector = query_engine.query(query_str)eval_source_result_full = [ evaluator_gpt4.evaluate( query=query_str, response=response_vector.response, contexts=[source_node.get_content()], ) for source_node in response_vector.source_nodes]eval_source_result = [ "Pass" if result.passing else "Fail" for result in eval_source_result_full]INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"display_eval_sources(query_str, response_vector, eval_source_result)| 来源 | 评估结果 | |
|---|---|---|
| 0 | along the Northeast Corridor, and long-distance train service to other North American cities.The Staten Island Railway rapid transit system solely serves Staten Island, operating 24 hours a day. The Port Authority Trans-Hudson (PATH train) links Midtown and Lower Manhattan to northeastern New Jersey, primarily Hoboken, Jersey City, and Newark. Like the New York City Subway, the PATH operates 24 hours a day; meaning three of the six rapid transit systems in the world which operate on 24-hour schedules are wholly or partly in New York (the others are a portion of the Chicago "L", the PATCO Speedline serving Philadelphia, and the Copenhagen Metro).
Multibillion-dollar heavy rail transit projects under construction in New York City include the Second Avenue Subway, and the East Side Access project.
==== 公交车 ==== 纽约市的公共巴士车队全天候运行,是北美规模最大的车队。该市主要的城际巴士总站——港务局巴士总站每日服务7,000辆巴士和20万名通勤者,使其成为全球最繁忙的巴士站。 === 空气 === 纽约的领空是美国最繁忙的,也是世界上最繁忙的航空运输走廊之一。纽约都会区最繁忙的三个机场包括约翰·F·肯尼迪国际机场、纽瓦克自由国际机场和拉瓜迪亚机场;2016年有1.305亿旅客使用这三个机场。2012年,肯尼迪机场和纽瓦克自由机场分别是美国国际航空旅客最繁忙和第四繁忙的门户;截至2011年,肯尼迪机场是北美国际旅客最繁忙的机场。纽约与新泽西港务局已推进计划,在第四座机场——位于纽约纽堡附近的斯图尔特国际机场扩大客运量。2015年7月宣布了一项耗资数十亿美元的项目,计划全面重建拉瓜迪亚机场,以替换其老化的设施。纽约都会区内或为其服务的其他商业机场包括长岛麦克阿瑟机场、特伦顿-默瑟机场和威彻斯特郡机场。该地区主要的通用航空机场是泰特伯勒机场。 | 通过 |
| 1 | See or edit raw graph data.
=== 公园 === 纽约市拥有复杂的公园系统,各类土地分别由国家公园管理局、纽约州公园、休闲与历史保护办公室以及纽约市公园与休闲部门管理。在2018年ParkScore排名中,公共土地信托基金会报告称,纽约市的公园系统在美国五十个人口最稠密城市中位列第九。ParkScore通过分析公园面积中位数、公园面积占城市面积百分比、半英里内可达公园的市民比例、人均公园服务支出以及每万居民拥有的游乐场数量等指标,采用公式对城市公园系统进行排名。2021年,纽约市议会禁止市政机构使用合成农药,转而要求实施有机草坪管理。这项举措始于P.S. 290幼儿园教师Paula Rogovin所带班级的倡议。 ==== 国家公园 ==== 盖特威国家休闲区占地超过26,000英亩(110平方公里),其中大部分位于纽约市。在布鲁克林和皇后区,该公园包含超过9,000英亩(36平方公里)的盐沼、湿地、岛屿和水域,其中包括牙买加湾的大部分区域及牙买加湾野生动物保护区。同样在皇后区,公园还涵盖了罗卡韦半岛西部的显著部分,最著名的是雅各布里斯公园和蒂尔登堡。在史泰登岛,它包括沃兹沃斯堡——拥有内战前具有历史意义的威德炮台和汤普金斯堡,以及大基尔斯公园——拥有海滩、步道和码头。 自由女神像国家纪念碑和埃利斯岛移民博物馆由国家公园管理局管理,横跨纽约和新泽西两州。在港口中与之相邻的还有总督岛国家纪念碑。曼哈顿岛上由联邦管理的历史遗址包括石墙国家纪念碑;克林顿城堡国家纪念碑;联邦大厅国家纪念堂;西奥多·罗斯福出生地国家历史遗址;格兰特将军国家纪念堂(格兰特陵墓);非洲墓地国家纪念碑;以及汉密尔顿庄园国家纪念堂。数百处房产被列入国家史迹名录或指定为国家历史地标。 | 失败 |
| 2 | 纽约见证了国际和国内游客总量的持续增长,每年接待游客超过6000万人次,成为全球最繁忙的旅游目的地。约1200万访客来自美国境外,其中英国、加拿大、巴西和中国游客数量位居前列。多家权威机构将纽约评为全球被拍摄最多的城市。"我爱纽约"(样式化为I ❤ NY)既是标志也是歌曲,作为广告宣传活动的核心元素,自1977年起被用于推广纽约市旅游业,后期亦延伸至纽约州旅游推广。该由纽约州帝国州发展署持有的注册商标标识,遍布纽约州各地的纪念品商店和宣传册中——部分经过授权,多数未经许可。这首歌曲已被定为纽约州州歌。 纽约最负盛名的旅游景点多数位于曼哈顿区,包括:时报广场;百老汇戏剧演出;帝国大厦;自由女神像;埃利斯岛;联合国总部;世界贸易中心(含911国家纪念博物馆和世界贸易中心一号楼);博物馆大道沿线的艺术博物馆;绿地空间如中央公园、华盛顿广场公园、高线公园及修道院博物馆的中世纪花园;石墙酒吧;洛克菲勒中心;多元文化社区包括曼哈顿唐人街、韩国城、咖喱山、哈莱姆、西班牙哈莱姆、小意大利和小澳大利亚;第五大道与麦迪逊大道的奢侈品购物区;以及各类年度盛事如格林威治村万圣节游行;布鲁克林大桥(与布鲁克林区共享);梅西感恩节大游行;洛克菲勒中心圣诞树点亮仪式;圣帕特里克节游行;季节性活动如冬季中央公园滑冰;翠贝卡电影节;中央公园夏季舞台的免费演出。曼哈顿以外区域也逐步发展出众多景点,使外围行政区自成特色旅游目的地。 | 失败 |
# NOTE: you can set response_mode="no_text" to get just the sourcesquery_str = "Who is the mayor of New York City?"query_engine = vector_index.as_query_engine( similarity_top_k=3, response_mode="no_text")eval_source_result_full = [ evaluator_gpt4.evaluate( query=query_str, response=response_vector.response, contexts=[source_node.get_content()], ) for source_node in response_vector.source_nodes]eval_source_result = [ "Pass" if result.passing else "Fail" for result in eval_source_result_full]INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"display_eval_sources(query_str, response_vector, eval_source_result)| 来源 | 评估结果 | |
|---|---|---|
| 0 | along the Northeast Corridor, and long-distance train service to other North American cities.The Staten Island Railway rapid transit system solely serves Staten Island, operating 24 hours a day. The Port Authority Trans-Hudson (PATH train) links Midtown and Lower Manhattan to northeastern New Jersey, primarily Hoboken, Jersey City, and Newark. Like the New York City Subway, the PATH operates 24 hours a day; meaning three of the six rapid transit systems in the world which operate on 24-hour schedules are wholly or partly in New York (the others are a portion of the Chicago "L", the PATCO Speedline serving Philadelphia, and the Copenhagen Metro).
Multibillion-dollar heavy rail transit projects under construction in New York City include the Second Avenue Subway, and the East Side Access project.
==== 公交车 ==== 纽约市的公共巴士车队全天候运行,是北美规模最大的公共交通系统。该市的主要城际巴士总站——港务局巴士总站每日服务7,000辆巴士和20万名通勤者,使其成为全球最繁忙的巴士站。 === 空气 === 纽约的领空是美国最繁忙的,也是世界上最繁忙的航空运输走廊之一。纽约都会区最繁忙的三个机场包括约翰·F·肯尼迪国际机场、纽瓦克自由国际机场和拉瓜迪亚机场;2016年有1.305亿旅客使用这三个机场。2012年,肯尼迪机场和纽瓦克自由机场分别是美国国际航空旅客最繁忙和第四繁忙的门户;截至2011年,肯尼迪机场是北美国际旅客最繁忙的机场。纽约与新泽西港务局已推进计划,在纽约纽堡附近的斯图尔特国际机场这一第四机场扩大旅客容量。2015年7月宣布了一项耗资数十亿美元的项目,计划全面重建拉瓜迪亚机场,以替换其老化的设施。纽约都会区内或为其服务的其他商业机场包括长岛麦克阿瑟机场、特伦顿-默瑟机场和威彻斯特县机场。该地区主要的通用航空机场是泰特伯勒机场。 | 失败 |
| 1 | See or edit raw graph data.
=== 公园 === 纽约市拥有复杂的公园系统,各类土地分别由国家公园管理局、纽约州公园、休闲与历史保护办公室以及纽约市公园与休闲部门管理。在2018年ParkScore排名中,公共土地信托基金会报告称,纽约市的公园系统在美国五十个人口最稠密城市中位列第九。ParkScore通过分析公园面积中位数、公园面积占城市面积百分比、半英里内可抵达公园的市民比例、人均公园服务支出以及每万名居民拥有的游乐场数量等指标,采用公式对城市公园系统进行排名。2021年,纽约市议会禁止市政机构使用合成农药,转而要求实施有机草坪管理。这项举措始于P.S. 290幼儿园教师Paula Rogovin的班级所发起的行动。 ==== 国家公园 ==== 盖特威国家休闲区占地超过26,000英亩(110平方公里),其中大部分位于纽约市。在布鲁克林和皇后区,该公园包含超过9,000英亩(36平方公里)的盐沼、湿地、岛屿和水域,其中包括牙买加湾的大部分区域及牙买加湾野生动物保护区。同样在皇后区,公园还涵盖了罗卡韦半岛西部的显著部分,最著名的是雅各布里斯公园和蒂尔登堡。在史泰登岛,它包括沃兹沃斯堡——拥有内战前具有历史意义的威德炮台和汤普金斯堡,以及大基尔斯公园——拥有海滩、步道和游船码头。 自由女神像国家纪念碑和埃利斯岛移民博物馆由国家公园管理局管理,横跨纽约和新泽西两州。在港湾中与之相邻的还有总督岛国家纪念碑。曼哈顿岛上由联邦管理的历史遗址包括:石墙国家纪念碑;克林顿城堡国家纪念碑;联邦大厅国家纪念堂;西奥多·罗斯福出生地国家历史遗址;格兰特将军国家纪念堂(格兰特陵墓);非洲墓地国家纪念碑;以及汉密尔顿农庄国家纪念堂。数百处地产被列入国家史迹名录或指定为国家历史地标。 | 失败 |
| 2 | 纽约见证了国际和国内游客总量的持续增长,每年接待游客超过6000万人次,成为全球最繁忙的旅游目的地。约1200万访客来自美国境外,其中英国、加拿大、巴西和中国游客数量位居前列。多家权威机构将纽约评为全球被拍摄最多的城市。"我爱纽约"(风格化标识 I ❤ NY)既是标志也是歌曲,自1977年起作为广告宣传活动的核心元素,最初用于推广纽约市旅游业,后扩展至纽约州整体推广。该由纽约州帝国州发展部持有的注册商标标识遍布全州各地的纪念品商店和宣传册,部分经过授权,多数未经许可。这首歌曲现为纽约州州歌。 曼哈顿集中了纽约最负盛名的旅游景点:包括时报广场;百老汇戏剧演出;帝国大厦;自由女神像;埃利斯岛;联合国总部;世界贸易中心(含911国家纪念博物馆和世界贸易中心一号楼);博物馆大道沿线的艺术博物馆;中央公园、华盛顿广场公园、高线公园及修道院博物馆的中世纪花园等绿地空间;石墙酒吧;洛克菲勒中心;曼哈顿唐人街、韩国城、咖喱山、哈莱姆、西班牙哈莱姆、小意大利和小澳大利亚等多元文化社区;第五大道和麦迪逊大道的奢侈品购物区;格林威治村万圣节游行;布鲁克林大桥(与布鲁克林共享);梅西感恩节大游行;洛克菲勒中心圣诞树点亮仪式;圣帕特里克节游行;冬季中央公园滑冰等季节性活动;翠贝卡电影节;以及中央公园夏季舞台的免费演出。纽约其他行政区也逐步发展出特色景点,使外围行政区自成旅游目的地。 | 失败 |