Tencent Yuanbao Gaokao - Score-to-Rank Lookup

An information retrieval assistant for GaoKao score-by-score rankings, helping candidates query their provincial ranking based on their score, estimate the corresponding score range based on their ranking, or provide the complete score-by-score ranking table.

Audits

Pass

Install

openclaw skills install score-range

核心原则

根据用户的问题,依次提取以下五类信息: 地区(place)、年份(year)、选科(classify)、分数(score)、省排名(rank)


Step 1:提取地区(place)

读取 ./ref/place.json 中的地区列表,将用户 query 中提及的地区与列表进行匹配。

匹配规则:

  • 支持别称/简称(如"魔都"→ 上海、"首都"→ 北京、"闽南"→ 福建、"桂"→ 广西)
  • 支持容错匹配(如存在错别字或非标准表述,尽量推断正确地区)
  • 支持城市到省份的映射(如"福州"->"福建"、"深圳"->"广东")
  • 如果用户提及了多个省份,则每个省份之间使用空格隔开,如"北京 上海 广东"
  • 如果用户想查询所有省份(如"各省"、"各地区"),则返回 "place" : "全省"
  • 以列表中的标准名称作为最终输出值

若无法从 用户query 中识别地区,则询问用户:"您想查询哪个省份的信息呢?"。


Step 2:提取年份(year)

  • 若用户明确提及年份(具体的数字),直接提取年份
  • 若用户提及的是模糊的年份,诸如今年、去年、近三年的说法,今年指2026,去年指2025
  • 若用户未提及年份,则不返回 "year" 字段
  • 年份必须是四位数字,如 "25年"->"2025"
  • 若用户提及了多个年份,则每个年份之间使用空格隔开,如"2025 2026"

Step 3:提取选科(classify)

读取 ./ref/classify.json 中的选科列表,将用户 query 中提及的选科与列表进行匹配。

核心难点:新老高考政策差异 中国各省份在不同年份实行的高考政策不同(分为:传统文理科、3+3新高考、3+1+2新高考),选科名称会随之变化。你必须结合 Step 1 的【地区】和 Step 2 的【年份】进行动态匹配与转换。

下表列出各省份切换新高考的年份,切换年份之前为传统文理科模式

模式省份启用年份
3+3上海、浙江2017
3+3北京、天津、山东、海南2020
3+1+2河北、辽宁、江苏、福建、湖北、湖南、广东、重庆2021
3+1+2甘肃、吉林、黑龙江、安徽、江西、贵州、广西2024
3+1+2山西、内蒙古、河南、四川、云南、陕西、青海、宁夏2025

内蒙古蒙授生(蒙授文科/蒙授理科)不受以上规则约束,始终保持独立分类。

匹配与自动纠错规则:

  1. 传统高考模式
    • 标准选科为:文科 理科
    • 映射:用户提及"文史类"→ 文科;"理工类"→ 理科
  2. 3+3 新高考模式
    • 标准选科为:综合(不分文理)
    • 纠错:若用户提及"文科/理科/物理/历史",自动映射为:综合
  3. 3+1+2 新高考模式
    • 标准选科为:物理 历史
    • 纠错:若用户提及"理科/理工",自动映射为:物理;提及"文科/文史",自动映射为:历史

若用户未提及选科,则不返回 "classify" 字段


Step 4:提取分数(score)

若用户明确说分数(如"考了 600 分"、"分数是 580"、"600 分能排第几"、"我考了 600"),则返回 "score" 字段。

  • score 必须是数字,如"考了 600 分"->"600"
  • 若无法提取到数字信息,则禁止 "score" 字段

Step 5:提取省排名(rank)

若用户明确说位次/排名(如"位次 1000"、" 400 名"、"省排 500 名"、"排名第 2000"、"我排在第 1000 位"),则返回 "rank" 字段。

  • 注意中文数字需转成整数,如"5万名"->"50000"
  • rank 必须是数字,如"排名第 1000 位"->"1000"
  • 若无法提取到数字信息,则禁止 "rank" 字段

Step 6:调用脚本查询数据(db_info)

确认地区、年份、选科后,调用以下脚本获取真实数据: 注意,若用户未提及分数或排名,也必须调用脚本获取数据。 禁止直接访问API获取完整数据,必须通过脚本获取数据。 脚本路径: ./fetch_data.py 调用方式:

python3 ./fetch_data.py --place {place...} --year {year...} --classify {classify...} --score {score...} --rank {rank...}

Step 7:根据脚本查询到的数据判断是否符合考生的意图

  • 根据“选科”信息,保留符合query意图的数据。

Step 8:总结

结合上述内容,对用户的问题进行回答。 注意需要简明扼要。

Step 9:反问排名/分数【非必要】

如果用户没有提及分数/排名,需要结合用户已有的信息(地区(place)、年份(year)、选科(classify))反问用户分数/排名。如“请问您的分数或者省排名是多少呢?我来帮您查询对应的分数/排名~” 然后再使用Step 4~8的步骤进行回答。