
kakao-bar-nearby基于 Kakao Local 官方 API 的附近酒吧查找 Skill 完整实战指南【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本篇技术指南聚焦 k-skill 仓库中的kakao-bar-nearby技能以用户主动提供的位置为锚点通过 k-skill-proxy 调用 Kakao Local 官方 REST API 检索附近酒吧候选再以卡卡奥地图Kakao Map官方场所详情页完成营业状态、菜单与座位信息的核实。读完本文你将掌握该 Skill 的完整工作流、searchNearbyBarsByLocationQuery包的输出契约、锚点解析与站名回退等源码级实现原理以及 429/502/503 等失败模式的标准处置方式。一、这个 Skill 是什么定位与适用场景kakao-bar-nearby是一个面向韩语场景localeko-KR、分类food、阶段v1的 Agent 技能定义在 skill.json 中其description明确了触发条件当用户询问附近酒吧nearby bars / 근처 술집时使用。它同时声明了三种运行 profileproxy、browser以及action:booking表示在特定运行时下可通过官方表面推进后续动作。技能的核心职责分为两段检索段基于用户告知的位置用 Kakao Local 官方 API 找出附近酒吧候选核实段把每个候选的卡卡奥地图详情链接交给浏览器确认营业状态、菜单与座位信息。它不直接解决预订而是为后续可能的预订动作提供可靠的候选与详情基础。典型的触发问句来自 instruction.md서울역 근처 술집 찾아줘找首尔站附近的酒吧강남에서 지금 영업중인 와인바 뭐 있어?江南现在营业的葡萄酒吧논현 근처 4명 갈만한 술집 알려줘论岘附近适合 4 人的酒吧사당에서 전화번호 있는 이자카야 몇 군데만 보여줘舍堂有电话的居酒屋这些输入可以是站名서울역、区名/洞名강남、사당、地标신논현、논현指令明确要求位置不自动推测、必须首先提问。二、核心设计原则整个 Skill 的行为由三条原则约束这也是它区别于暴力抓取型爬虫方案的关键位置由用户显式提供位置绝不自动推测没有位置信息就不得直接搜索官方 API 优先场所候选搜索与距离计算优先使用 k-skill-proxy 转发的 Kakao Local REST API用户无需准备任何 Kakao API Key不猜测、不伪造官方 API 不提供的当前营业状态、代表菜单、座位选项一律通过返回的卡卡奥地图场所详情链接去核实核实不到就如实标注상세 정보 미확인详情未确认绝不凭空推断。这第三条原则在源码中有直接体现包在 API 检索阶段对isOpenNow、openStatus、menuSamples、seatingKeywords、capacityHint等字段一律置空见 normalizeKakaoPlaceDocument。三、访问路径官方 API 与详情页交接3.1 主路径官方 Kakao Local API通过代理托管代理https://k-skill-proxy.nomadamas.org锚点与酒吧搜索端点GET /v1/kakao-map/search/keyword用户 API Key不需要包级函数searchNearbyBarsByLocationQuery(locationQuery, options?)在 index.js 的fetchKakaoKeywordSearch中可以看到调用细节请求 URL 由resolveProxyBaseUrl拼接而成代理地址可通过proxyBaseUrl选项或环境变量KSKILL_PROXY_BASE_URL覆盖默认值见 DEFAULT_PROXY_BASE_URL参数中只有非空值才会写入 query string。响应要求必须是含documents数组的 JSON否则抛出invalid keyword-search response错误。搜索策略源码 searchNearbyBarsByLocationQuery先用location作为关键字搜索从结果中选出一个锚点场所anchor再以该锚点的坐标x/y为中心查询location 술집按sortdistance距离排序检索结果中的sourceUrl与detailLookup.url直接采用 Kakao Local 响应的place_url缺失时按官方场所 ID 拼出https://place.map.kakao.com/id。3.2 详情交接官方卡卡奥地图场所页面场所详情https://place.map.kakao.com/id待核实的详情字段openStatus营业状态、menuSamples菜单样例、seatingKeywords座位关键词、capacityHint容纳人数提示指令特别强调内部place-api.map.kakao.com/places/panel3JSON 或移动搜索 HTML 不作为默认搜索路径使用。这一点与源码一致——index.js 中虽然保留了SEARCH_VIEW_URL与PLACE_PANEL_URL_BASE及parseSearchResultsHtml、fetchPlacePanel等旧 export为兼容老用户但主搜索流程已完全不调用它们。详情信息只在必要时通过浏览器打开官方场所页面获取。四、完整工作流7 步来自 instruction.md 的标准工作流必问位置先向用户询问当前所在位置检索候选调用searchNearbyBarsByLocationQuery获取基于官方 Kakao Local API 的候选读取字段从items[]中读取名称、分类、地址、电话、距离、detailLookup.url打开详情用浏览器打开前 3~5 个候选的detailLookup.url先确认页面场所名与候选一致补全字段只使用详情页上真实可见的信息补充当前营业状态与今日营业时间2~3 个代表菜单座位/人数提示단체석 团体座、룸 包间、바테이블 吧台、혼술 独酌等排序输出已完成详情核实的候选中营业中优先其次按距离排序如实降级详情页被拦截或字段缺失时不推测提供官方 API 结果与场所链接并标注상세 정보 미확인。五、包输出契约数据结构与字段语义包的调用方式与 README 中的示例一致const { searchNearbyBarsByLocationQuery } require(kakao-bar-nearby); const result await searchNearbyBarsByLocationQuery(서울역, { limit: 5, radius: 3000 });返回的主要字段字段说明anchor官方 API 中选定的基准场所items[].name/category/address/phone候选酒吧的名称、分类、地址、电话items[].distanceMeters与锚点的距离米items[].sourceUrl官方场所链接items[].detailLookup.status详情页确认前恒为requireditems[].detailLookup.url用于核实营业/菜单/座位的卡卡奥地图场所链接items[].detailLookup.fields需在详情页确认的字段列表meta.source固定为kakao-local-rest-apimeta.detailLookupRequiredCount需要详情核实的候选数量完整响应示例来自 README{ anchor: { name: 서울역, sourceUrl: https://place.map.kakao.com/... }, items: [ { name: 후보 술집, distanceMeters: 180, sourceUrl: https://place.map.kakao.com/..., isOpenNow: null, menuSamples: [], seatingKeywords: [], detailLookup: { status: required, url: https://place.map.kakao.com/..., fields: [openStatus, menuSamples, seatingKeywords, capacityHint] } } ], meta: { source: kakao-local-rest-api, fetchedPanels: 0 } }关键语义官方 API 阶段不填充任何详情字段——isOpenNow为null、openStatus为null、menuSamples为[]、seatingKeywords为[]、capacityHint为null。detailLookup.status required即表示详情尚未核实只有真正在卡卡奥地图详情页确认到的值才能写入最终回复。六、源码级原理锚点解析、站名回退与候选过滤6.1 锚点选择resolveAnchor锚点是后续半径搜索的圆心选错锚点会直接污染结果。包采用打分排序而非简单取第一条名称与查询完全一致 1000 分与查询역一致或去掉역后一致 950 分名称前缀/包含查询分别 800/600 分地址包含查询 120 分名称或分类命中站台特征기차역/전철역/지하철역/환승역/광장/공원/테마거리/랜드마크/먹자골목/교차로/주차장/정류장/환승센터 等加 250 分分类或名称命中酒吧特征술집/주점/와인바/맥주,호프/호프/이자카야/칵테일/포차 等减 200 分防止把酒吧本身当锚点非纯数字 ID 减 500 分。打分逻辑见 scoreAnchorCandidate。6.2 站名回退station fallback这是一个很实用的细节当用户说사당而首轮锚点解析出的是无关场所例如사당한우时包会自动用사당역重试一次锚点解析见 shouldRetryWithStationQuery 与 searchNearbyBarsByLocationQuery。测试用例明确验证了调用序列[사당, 사당역, 사당 술집]最终锚点落在사당역见 index.test.js。若回退也失败则保留原锚点继续meta.anchorFallbackUsed会标记是否发生过回退。反过来如果查询已经明确带역如사당역而候选全是无关场所包会直接抛错拒绝而不是将错就错见 index.test.js。6.3 候选过滤与排序搜索location 술집返回的 documents 会经过isBarPanel过滤仅保留分类/名称命中酒吧关键词술집、주점、와인바、바(BAR)、맥주,호프、호프、이자카야、칵테일、포차、요리주점、일본식주점的条目随后sortBars按distanceMeters升序、同距时按韩文名排序最终按limit默认 5最小 1截断。半径参数radius必须是 0~20000 的整数默认 3000 米越界会直接抛错见 normalizeRadius。6.4 详情字段的解析规则兼容保留的 legacy 能力虽然主流程不再走内部 panel 接口包仍保留了normalizePlacePanel等解析器供兼容从其中可以看到详情字段的判定口径营业状态通过open_hours.headline的display_text/code判断영업 중文本或code OPEN / OPEN_NOW视为正在营业并提取今日营业时间见 normalizeOpenStatus菜单样例从menu.menus.items去重后最多取 5 个座位关键词聚合ai_mate.summary.contents与좌석 옵션座位选项sheet 下的 keywords容纳提示若座位关键词含 단체석/룸/대관团体/包间/包场则推断단체 방문 가능含 바테이블/혼술吧台/独酌则推断소규모/혼술 위주见 deriveCapacityHint。这些规则也反映在测试断言中데이브루펍的isOpenNow true、菜单[수제맥주 샘플러, 감바스, 페퍼로니 피자]、座位[단체석, 바테이블]见 index.test.js。七、回复规范给用户的最终输出指令要求通常只精炼列出 3~5 个候选每个候选包含酒吧名술집명分类카테고리营业状态영업 중营业中、영업 전营业前、휴무일休息日、상세 정보 미확인详情未确认代表菜单 2~3 个座位/人数提示단체석、바테이블等电话距离卡卡奥地图详情链接铁律官方 API 确认的值与详情页确认的值不得混淆。菜单、营业、座位信息只对真正在详情页确认过的候选显示未确认的必须标상세 정보 미확인。八、失败模式与错误处置指令为每种失败定义了标准动作详见 instruction.md失败情形处置方式429 rate_limited限流告知用户需稍后重试不得反复重试轰炸502 upstream_error/503 upstream_not_configured官方 Kakao API 路径当前不可用如实说明原因基准场所模糊再问一次近的站名或洞名无酒吧候选扩大半径或让关键词更具体와인바、이자카야、호프详情页被拦截 / CAPTCHA / 空白 / 结构变更不绕过只提供官方 API 候选与链接详情页缺菜单/座位/营业信息不推测标상세 정보 미확인其中 503 场景在测试中有明确覆盖代理返回503KAKAO_REST_API_KEY is not configured时包抛出Kakao Map proxy request failed with 503: ...且不会降级去抓取网页见 index.test.js。九、硬性规则与法律免责无论是否使用 CLI本技能都必须遵守三条硬性规则未经用户明确的事前批准绝不执行支付、消息/邮件发送、最终提交、取消或公开发布绝不在对话、文件或 shell 参数中询问、打印或存储明文凭证绝不绕过法律、在场证明、CAPTCHA、身份验证或电子签名边界。此外SKILL.md 与 references/DISCLAIMER.md、references/TRADEMARK-LEGAL-STATEMENT.md 声明本技能并非卡卡奥官方功能第三方名称仅用于描述技能功能自动化收集公开信息必须限于个人、非组织性查询禁止系统性/批量爬取、建库、绕过访问控制或干扰第三方服务。使用前应完整阅读免责声明含韩国最高法院判例与法条限制可通过 CLI 读取npx -y nomadamas/k-skill0 read kakao-bar-nearby references/DISCLAIMER.md十、完成标准Done when一次成功的执行必须同时满足已先确认用户当前所在位置通过官方 Kakao Local API 找到至少 1 个酒吧候选或说明了失败原因每个候选都拿到了卡卡奥地图详情链接对前列候选的详情链接核实了营业状态/菜单/座位信息或明确说明了未核实的原因。附如何运行与验证本 Skill 由 k-skill CLI 管理。在任意运行时中先通过 CLI 拉取完整指令CLI 会自动按运行时类型输出适用指令始终最新npx -y nomadamas/k-skill0 instruct kakao-bar-nearby查看随 CLI 捆绑的辅助文件npx -y nomadamas/k-skill0 files kakao-bar-nearby若npx不可用需要 Node.js 18或直接阅读仓库内的源码指令 instruction.md。包级能力则可独立安装与测试npm install kakao-bar-nearby cd packages/kakao-bar-nearby npm test测试套件index.test.js覆盖了官方 API 主流程、站名回退、错误上抛、显式站名拒绝等关键行为并配有 fixtures 中的锚点/酒吧搜索 HTML 与营业/打烊 panel JSON可作为理解字段解析口径的活样本。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考