news 2026/9/19 5:42:17

k-skill 地铁失物查询技能:基于 LOST112 与首尔交通公社的官方查询路径实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
k-skill 地铁失物查询技能:基于 LOST112 与首尔交通公社的官方查询路径实战指南

k-skill 地铁失物查询技能:基于 LOST112 与首尔交通公社的官方查询路径实战指南

【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill

本篇技术指南聚焦 k-skill 项目中的subway-lost-property技能:当用户询问“在某某地铁站丢了东西怎么找”时,它不会凭空猜测,而是把韩国官方失物查询体系(LOST112 拾得物目录 + 首尔交通公社失物中心)的搜索条件、HTTP 表单载荷(payload)与可运行的curl示例结构化输出给 Agent。读完本文,你将掌握如何通过一行npx命令生成带官方 referer 的完整查询载荷、如何保守地探测官方站点可达性,以及 v1 版本在“安内型/混合型”边界内的设计取舍与失败模式。

技能定位:安内型/混合型的官方查询路径组织器

subway-lost-property是一个面向韩国地铁失物(분실물/유실물)查询场景的 k-skill。其核心定位并非“自动抓取结果”,而是把官方路径结构化,帮助用户(及其 Agent)以最快、最合规的方式进入官方查询入口。

从该技能的 SKILL.md 描述与 skill.json 的 frontmatter 可以看出,它被归类为category: transitlocale: ko-KRphase: v1,同时注册了lookupprofile,说明其设计意图是作为一种查找类能力被 CLI 组装进多 profile 的指令体系中。

instruction.md明确定义了三条边界:

  • 整理 LOST112습득물 목록 조회的搜索条件(对应表单字段的取值);
  • 同时引导首尔交通公社失物中心入口,作为后续确认与补充信息源;
  • 因为公开 API 不明确,v1 保持安内型/混合型范围——即不承诺自动结果采集,而是给出一套可执行的官方流程。

触发场景与输入要素

何时使用(When to use)

instruction.md给出了三个典型触发语句:

  • “강남역에서 지갑 잃어버렸는데 어디서 찾아?”(在江南站丢了钱包该去哪找?)
  • “2호선 지하철 분실물 조회 방법 알려줘”(告诉我 2 号线地铁失物查询方法)
  • “서울 지하철 유실물 공식 사이트로 바로 찾게 도와줘”(帮我直接连到首尔地铁失物官网)

当检测到用户需要“按站名/物品名查询地铁失物”时,此技能即被触发。SKILL.md 中的描述还强调:在 돌쇠(Dolshoi)运行时中,可进一步通过官方界面进行后续动作。

输入要素(Inputs)

优先级输入说明
必填站名或保管场所关键字(역명/보관장소 키워드)강남역,作为 LOST112 的DEP_PLACE
可选物品名(물품명)지갑(钱包)、이어폰(耳机)
可选线路(호선)2호선,用于关键词扩展
可选丢失/拾得估计时间(분실/습득 추정 기간)--days换算为起止日期

在源码 subway_lost_property.py 中,SearchQuery数据类以stationitemlinestart_dateend_date五个字段承载上述输入,其中start_date/end_date--daystoday计算得出(默认 30 天回溯)。

官方查询面(Official surfaces)与关键表单字段

技能锚定两个官方入口(见instruction.md的 "Official surfaces" 一节):

  1. LOST112 拾得物目录https://www.lost112.go.kr/find/findList.do
  2. 首尔交通公社失物中心https://www.seoulmetro.co.kr/kr/page.do?menuIdx=541

LOST112 搜索表单中确认的核心字段如下:

字段含义本技能中的取值
SITE=V警察以外机构(地铁、机场等)固定V
DEP_PLACE保管场所(站名)用户输入站名,如강남역
PRDT_NM拾得物品名用户输入物品名
START_YMD/END_YMD搜索起止日期--days回溯计算

在源码 build_search_payload() 中,payload 不止上述字段,还包含完整的表单回填项:

payload = { "pageIndex": "1", "START_YMD": query.start_date.strftime("%Y%m%d"), "END_YMD": query.end_date.strftime("%Y%m%d"), "PRDT_NM": (query.item or "").strip(), "DEP_PLACE": station, "SITE": "V", "PLACE_SE_CD": "", "FD_LCT_CD": "", "FD_SIGUNGU": "", "IN_NM": "", "ATC_ID": "", "F_ATC_ID": "", "PRDT_CL_CD01": "", "PRDT_CL_CD02": "", "PRDT_CL_NM": "", "MENU_NO": "", }

日期字段按%Y%m%d格式化(例如 2026-04-10 →20260410),空字段在生成curl时会被自动跳过(见 build_curl_command() 中的if value判断),避免无意义参数污染请求。

四步工作流:从收集线索到保守引导

instruction.md将整个技能执行流程分为四步,下面结合源码逐一展开。

1) 先收集最少线索(Ask for the minimum clues first)

不要直接推测,而是先向用户确认:

  • 在哪个站 / 哪个区间丢失?
  • 物品类型是什么?
  • 大约何时丢失?
  • 属于首尔交通公社(1~8 号线)范围,还是其他运营商?

这一步的意义在于:不同运营商对应不同的失物保管体系,LOST112 的SITE=V聚合了地铁、机场等非警察机构,但最终认领仍需回到具体运营商的失物中心。源码 probe_source() 与official_sources中同时列出 LOST112 与首尔交通公社两个入口,正是为了覆盖这一区分。

2) 生成官方 LOST112 搜索载荷(Generate the official LOST112 search payload)

可以直接使用仓库自带的 helper:

npx -y @nomadamas/k-skill@0 exec subway-lost-property scripts/subway_lost_property.py -- \ --station 강남역 \ --item 지갑 \ --days 14

helper 默认使用SITE=V,并把站名/物品名/期限整理成带 referer 的可运行curl示例。示例curl考虑到官方响应较慢,包含--max-time 60,并将响应 HTML 保存为lost112-search-result.html

从源码看,build_curl_command() 生成的命令具备以下工程化细节:

  • -fsS:静默但保留错误输出;
  • --http1.1--tls-max 1.2:限定协议与 TLS 版本,规避官方旧服务器兼容性问题;
  • --retry 1:单次重试;
  • --max-time 60:整体超时上限(源码常量LOST112_CURL_MAX_TIME = 60);
  • -A "Mozilla/5.0":设置基础 User-Agent;
  • --referer https://www.lost112.go.kr/:携带官方 referer,提高请求被接受的几率(referer 常量见 subway_lost_property.py);
  • 非空 payload 字段逐项--data-urlencode
  • --output lost112-search-result.html落盘响应。

测试 test_subway_lost_property.py 对这一行为做了精确断言:命令中不包含-L(不跟随重定向)、--max-time值为60--referer指向 LOST112 根域、--output文件名为lost112-search-result.html、payload 中含SITE=V、URL 收尾于findList.do

3) 可选:实时探测官方站点可达性(Verify live reachability)

npx -y @nomadamas/k-skill@0 exec subway-lost-property scripts/subway_lost_property.py -- \ --station 강남역 \ --item 지갑 \ --days 14 \ --verify-live

--verify-live仅保守地检查官方页面是否可访问:probe_source()使用 15 秒--max-time的轻量探测(见 subway_lost_property.py),成功则标记reachable并记录抓取字节数;失败时区分timeout(curl 返回码 28 或 stderr 含 "timed out")与error两类状态。站点慢时如实报告 timeout,并转为人工打开(manual open)流程。

测试 test_subway_lost_property.py 覆盖了两条路径:成功抓取标记reachable,以及CalledProcessError(28, ...)被归类为timeout

4) 保守引导用户(Guide the user conservatively)

  • 先在 LOST112 用站名原样搜索;
  • 无结果时,改用去掉“역”的关键字(如강남)重新搜索;
  • 必要时追加线路名搜索;
  • 同时打开首尔交通公社失物中心页面,确认后续流程。

这一“降级搜索”策略在源码中体现为 expand_station_keywords():输入강남역会生成["강남역", "강남"]两个建议关键词;若提供--line(如2호선),还会追加到suggested_keywords中并去重(见 build_search_plan())。

CLI 输出结构:一个自包含的 JSON 计划

不带--verify-live时,CLI 通过main()输出完整 JSON 计划(ensure_ascii=False,便于韩文直接可读),结构见 SearchPlan.to_dict():

{ "query": { "station": "강남역", "item": "지갑", "line": null, "start_date": "2026-04-10", "end_date": "2026-04-24" }, "payload": { "pageIndex": "1", "START_YMD": "20260410", "END_YMD": "20260424", "PRDT_NM": "지갑", "DEP_PLACE": "강남역", "SITE": "V", "...": "..." }, "suggested_keywords": ["강남역", "강남"], "official_sources": [ { "name": "LOST112 습득물 목록", "url": "https://www.lost112.go.kr/find/findList.do", "purpose": "...", "status": "not_checked" }, { "name": "서울교통공사 유실물센터", "url": "https://www.seoulmetro.co.kr/kr/page.do?menuIdx=541", "purpose": "...", "status": "not_checked" } ], "guidance": ["..."], "cautions": ["..."], "curl_example": "curl ..." }

guidance数组中的引导文本与cautions数组中的边界声明(v1 为安内型/混合型、不保证自动结果采集、站点慢则转 manual open)均由 build_search_plan() 动态生成。测试 test_subway_lost_property.py 验证了 JSON 输出中query.stationpayload.SITEcurl_exampleofficial_sources的存在性。

完成标准(Done when)与失败模式(Failure modes)

完成标准,三条缺一不可:

  • 用户能直接打开官方查询路径;
  • 用户已获得 LOST112 搜索条件(SITE=V、站名、物品名、期限);
  • 自动查询的保证范围与 manual fallback 已被清楚说明。

失败模式,需如实向用户说明:

  • 官方站点响应慢或 timeout(由--verify-live探测并如实上报);
  • 站名与实际保管场所标注不一致导致搜索结果为空(对应关键词降级策略);
  • 因缺少公开 API,自动结果采集不稳定(这是 v1 保持安内型范围的根本原因)。

设计约束与扩展方向(Notes)

  • v1 范围:仅安全引导官方网页流程;helper 只使用官方 HTTPS 入口(见源码LOST112_LIST_URLSEOUL_METRO_LOST_CENTER_URL常量,均为https://)。
  • 扩展前置条件:若要扩展为全自动查询,需先重新验证 CAPTCHA、会话(session)与动态请求的稳定性。
  • 运行时集成:通过 k-skill CLI(@nomadamas/k-skill@0)分发与执行。exec子命令从打包的技能目录解析脚本、依据 shebang 自动选择 Python/Node/Bash 运行器(见 execute.js),支持用KSKILL_PYTHON环境变量覆盖 Python 解释器;--之后的所有参数原样透传给脚本。仓库根目录的 scripts/subway_lost_property.py 则是指向技能内同名脚本的薄封装入口,便于直接在仓库内调试与运行 test_subway_lost_property.py。

综上,subway-lost-property是一个克制而完整的“官方路径组织器”:它不越界承诺自动采集,而是把 LOST112 表单字段、referer 请求、降级关键词与可达性探测全部固化为可复现的代码与 JSON 输出,让 Agent 在真实网络环境下也能以保守、合规的方式引导用户找回失物。

【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 5:42:09

Apache虚拟主机Alias指令配置与优化指南

1. Apache虚拟主机中Alias指令的深度解析在Web服务器配置中,Alias指令是一个强大但常被低估的功能。它允许我们将URL路径映射到文件系统的任意位置,这种灵活性为网站目录结构设计带来了无限可能。想象一下这样的场景:你的网站图片存放在独立的…

作者头像 李华
网站建设 2026/9/19 5:37:22

Kitex协议选型指南:Thrift、Kitex Protobuf与gRPC怎么选才不踩坑

Kitex协议选型指南:Thrift、Kitex Protobuf与gRPC怎么选才不踩坑 【免费下载链接】kitex Go 微服务 RPC 框架,具有高性能、强可扩展的特点。 项目地址: https://gitcode.com/CloudWeGo/kitex Kitex 是字节跳动开源的 Go 微服务 RPC 框架&#xff…

作者头像 李华
网站建设 2026/9/19 5:37:19

苏州创新药抖音搜索优化合规服务商汇总,聚合增长广受信赖

苏州聚合增长信息科技有限公司,是国内早期专注生成式引擎优化(GEO)全域营销赛道的科技服务商,2024年成立于江苏苏州,已形成通用GEO服务医疗垂直GEO服务双业务布局,面向创新药、原研药、二类三类医疗器械、特医食品企业提供专业药企…

作者头像 李华
网站建设 2026/9/19 5:35:18

Kafka核心原理深度解析:架构、存储、副本与消费模型实战

1. 为什么值得把 Kafka 的底层逻辑啃透刚接触 Kafka 那会儿,我跟很多人一样,觉得它就是个"发消息、收消息"的中间件,会敲几条命令行、能跑通生产消费就算入门了。直到线上真出问题——消费组莫名其妙卡住、Lag 一路飙升、重复消费把…

作者头像 李华