k-schoollunch-menu

k-schoollunch-menu

热门

当用户通过自然语言描述的教育厅和学校名称查询韩国学校午餐菜单(급식 식단)时使用,通过 k-skill-proxy 的 NEIS 学校搜索和学校餐食路由实现。

6505Star
746Fork
更新于 2026/7/27
SKILL.md
只读
名称
k-schoollunch-menu
描述

当用户通过自然语言描述的教育厅和学校名称查询韩国学校午餐菜单(급식 식단)时使用,通过 k-skill-proxy 的 NEIS 学校搜索和学校餐食路由实现。

韩国学校午餐菜单 (NEIS)

本技能功能

通过 k-skill-proxy 代理的 HTTP API 查询 NEIS(教育信息开放门户)的学校基本信息餐食菜单信息

  • 用户只需说出市道教育厅名称(自然语言)、学校名称日期
  • 代理首先通过 /v1/neis/school-search 查找学校,然后使用响应中的 SD_SCHUL_CODEATPT_OFCDC_SC_CODE 调用 /v1/neis/school-meal
  • 认证密钥(KEDU_INFO_KEY)仅保存在代理服务器上,客户端无需密钥,只需调用代理 URL。

使用时机

  • "서울특별시교육청 미래초등학교 오늘 급식 뭐야?"(首尔特别市教育厅未来小学今天午餐吃什么?)
  • "○○초 급식 식단 알려줘"(告诉我○○小学的餐食菜单)
  • "이번 주 화요일 중학교 급식 메뉴"(这周二中学午餐菜单)
  • "급식 메뉴 조회해줘"(帮我查一下午餐菜单)(确认教育厅、学校、日期后执行)

前提条件

  • 互联网连接
  • 可使用 curl 的环境
  • 能够访问已配置 KEDU_INFO_KEYk-skill-proxy 部署(默认托管或自托管)

凭证要求

  • 用户端无需密钥。
  • KSKILL_PROXY_BASE_URL — 仅在使用自托管或单独代理时设置。留空则使用默认托管地址 https://k-skill-proxy.nomadamas.org
  • KEDU_INFO_KEY 仅保存在代理运营服务器的环境中。

代理基础 URL

代理按如下方式确定基础 URL:

BASE="${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}"
BASE="${BASE%/}"

工作流程

1) 收集输入(不要猜测)

如果缺少以下信息,简短询问用户:

  1. 教育厅 — 允许自然语言(例如:서울특별시교육청서울경기도교육청)。
  2. 学校名称 — 自然语言(例如:미래초등학교○○중학교)。
  3. 餐食日期YYYYMMDD 格式,或根据用户提到的日期按韩国时间转换为 YYYYMMDD。省略时默认为今天(韩国时间)

如果教育厅表述模糊导致返回 ambiguous_education_office,则显示响应中的 candidate_codes,并要求用户提供更具体的名称(例如:경상북도교육청경상남도교육청)。

2) 搜索学校 (/v1/neis/school-search)

curl -fsS --get "${BASE}/v1/neis/school-search" \
  --data-urlencode "educationOffice=${EDU_OFFICE}" \
  --data-urlencode "schoolName=${SCHOOL_NAME}"
  • EDU_OFFICESCHOOL_NAME 可以直接使用用户输入。代理会将教育厅名称解析为代码。
  • 响应中的 resolved_education_office.atpt_ofcdc_sc_code 可用于确认实际匹配的市道教育厅代码。

3) 多所学校匹配时消歧

如果 schoolInfo 中的 row多个,则向用户显示学校名称和地址(ORG_RDNMA 等),让用户选择一个。

如果只有一条记录,则使用该行的 ATPT_OFCDC_SC_CODESD_SCHUL_CODE 进行下一步。

4) 获取餐食 (/v1/neis/school-meal)

curl -fsS --get "${BASE}/v1/neis/school-meal" \
  --data-urlencode "educationOfficeCode=${ATPT}" \
  --data-urlencode "schoolCode=${SD}" \
  --data-urlencode "mealDate=${YYYYMMDD}"
  • ATPT / SD 是第3步确定的代码。
  • 如果只想查看早餐、午餐、晚餐,可添加 mealKindCode=1|2|3(可选)。

5) 为用户总结

  • 根据 mealServiceDietInfo 中的 row 进行总结。
  • 将菜单字符串(DDISH_NM 等)中的 <br/> 替换为换行符,以便阅读。
  • 如果有卡路里或营养信息字段,可附加一两行说明。
  • 如果 NEIS 返回空结果,提示可能“该日期无餐食数据”。

上游参考

完成条件

  • 已确认教育厅、学校和日期。
  • 通过学校搜索确定了单一学校(或用户已选择)。
  • 餐食 API 调用成功,并以用户友好的方式整理了菜单。

失败模式

  • 代理未设置 KEDU_INFO_KEY503 / upstream_not_configured
  • 教育厅名称涉及多个市道 → 400 / ambiguous_education_office
  • 学校名称匹配多条记录 — 未经用户选择不得随意选取
  • 节假日、假期或无提供日期导致餐食数据为空
  • NEIS API 临时故障或调用限制

备注

  • 不要让用户记忆学校代码。始终遵循 school-searchschool-meal 的顺序。
  • 不要直接粘贴原始 JSON,应以总结为主进行回答。
  • 有关端点和字段的详细信息,请参考 docs/features/k-schoollunch-menu.mddocs/features/k-skill-proxy.md