with one click
house-hunter
对话式找房 — 房产中介 skill,面向年轻租客,多源数据融合(地图/小红书/链家/新闻)。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
对话式找房 — 房产中介 skill,面向年轻租客,多源数据融合(地图/小红书/链家/新闻)。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | house-hunter |
| version | 1.0.0 |
| description | 对话式找房 — 房产中介 skill,面向年轻租客,多源数据融合(地图/小红书/链家/新闻)。 |
| argument-hint | house-hunter 坪山区 70平 2房1厅 3km有山姆IMAX 预算4000, house-hunter 南山区适合年轻人租房的小区 |
| allowed-tools | Bash, Read, Write, AskUserQuestion, WebFetch, WebSearch |
| author | kunhai1994 |
| license | MIT |
| user-invocable | true |
| metadata | {"openclaw":{"emoji":"🏠","requires":{"bins":["python3","git"]},"primaryEnv":""},"gemini":{"extension_type":"skill"}} |
面向 年轻租客(25-35 岁)的对话式找房工具。 核心维度:配套(吃喝玩乐购)+ 租金 + 居住口碑 + 安全事件 不关注:房价走势、学区、投资分析(年轻租客不需要) 底层:自建编排引擎 + 百度/高德地图 MCP + 复用 xiaohongshu-skills + 链家/贝壳 WebFetch + WebSearch
这一节优先级高于所有其他设计决策。所有代码改动违反此约束需要在本文件先讨论。
1. ke.com (贝壳) ← 首选,所有 lianjia/ke 双 host 选择必须 ke 第一
2. lianjia.com (链家) ← fallback,同公司同数据但作 ke 失败时的备用入口
3. anjuke.com (安居客) ← 独立数据源,列表区准
4. ziroom.com (自如)
5. 58.com (58同城)
6. fang.com (房天下)
具体落地点(必须遵守):
rental.community_basic_info:先试 sz.ke.com/xiaoqu/{id}/,失败再试 sz.lianjia.com/...rental.community_rental_summary:先试 sz.ke.com/zufang/c{id}/,失败再试 lianjia_resolve_via_keyword_search:先试 ke 关键词搜,失败再试 lianjia理由:用户决策 — 贝壳是首选品牌,链家是历史遗留入口。即使两者同公司同数据库,呈现给用户和优先抓取顺序必须以贝壳为先。
你(接 /house-hunter 调用的 Opus)是真正的智能层。 Python 引擎只做重型批量任务(候选生成、bridge 抓数据); 本节是你的方法论 SOP,让你能复现高质量调研。
收到 /house-hunter <input> 后,先识别意图再决定流程:
| 意图 | 触发词 | 处理流程 |
|---|---|---|
| search | "找房"/"附近"/"X 区 Y 平 Z 房"/"预算" | Python 引擎候选生成 + 7 步 enrich + rank 模板 |
| research | "了解"/"调研"/"top N 小区" | 同 search,top_n 加大 |
| compare | "vs"/"对比"/"PK"/"A 和 B 哪个好"(含 2+ 具体小区名) | 跳过候选生成 → 直接对每个名字跑 7 步 chain → compare 模板 |
| deepdive | "为什么"/"深挖"/"X 栋"/"X 期"/"X 怎么样"(单候选) | 单候选 7 步 + 加栋号/楼层/朝向细化 → deepdive 模板 |
| reweight | "如果短租"/"不考虑价格"/"如果开车"(承接上文) | 不重跑数据,按新场景权重重排已有候选 → reweight 模板 |
| add_candidate | "再加 X"/"还有 Y 也对比下"(承接上文 PK) | 增量对新候选跑 7 步,merge 进已有 PK |
| why_question | "为什么 X 噪音"/"X 是什么意思" | 针对具体事实深度 WebSearch + 地图实测 |
关键判断:
不论什么意图,对每个 community 调研时按这 7 步 chain(并行可加速):
from sources import baidu_map
geo = baidu_map.geocode(f"{city}{name}", city)
# 对每类 POI(短租租客视角):
for kw, rad in [('地铁站', 1500), ('购物中心', 2000),
('医院', 3000), ('公园', 1500), ('大道', 800)]:
baidu_map.search_nearby(kw, geo.lat, geo.lng, rad, page_size=5)
→ 拿到坐标 + 精确距离 + 周边主干道(噪音源)
{city}.leyoujia.com/xq/detail/{id} (乐有家,字段最全)WebSearch("{小区} 物业 投诉 维权 业主")
WebSearch("{城市} {区} 住建局 物业管理通报")
→ 看黑猫投诉、住建局季度通报、广东省违法违规企业名单 → 官方红旗
WebSearch("{小区} 优缺点 知乎")
WebSearch("{小区} 哪栋好 不建议买")
WebSearch("{小区} 入住 真实 体验 缺点")
→ 深度评测、栋号优劣、朝向噪音
WebSearch("{小区} 二手房 成交价 走势 2025 2026")
WebSearch("{小区} 急售 / 跌价")
→ 价格趋势、业主信心信号、跌幅
from sources import xhs
# 基础
for q in [name, f"{city} {name}", f"{name} 评价"]:
xhs.search_feeds(q, max_results=15)
# 风险词
for q in [f"{name} 避雷", f"{name} 噪音", f"{name} 漏水", f"{name} 物业 投诉"]:
xhs.search_feeds(q, max_results=10)
# 租房视角(短租)
for q in [f"{name} 出租", f"{name} 入住"]:
xhs.search_feeds(q, max_results=10)
严格过滤:笔记标题或正文必须含「城市名」或「区名」才算精确命中(避免同名小区混淆)
WebSearch("{小区} 百度百科")
→ 必查:同名小区(如"南沙金茂湾" vs "灵山岛金茂湾"),不区分会出灾难性错误
出现任一信号时,报告里必须打 🚨 警示标记:
| 红旗 | 触发条件 | 严重度 |
|---|---|---|
| 业主急售信号集中 | xhs "急售/捡漏/X 折出/砸盘" 笔记 ≥ 3 条 | 🟠 中 |
| 二手房跌价 > 30% | 实际成交 vs 开盘 比 < 0.7(or xhs"跌到 X 万"信号) | 🔴 高 |
| 政府住建局通报 | 该小区/该物业在通报名单中 | 🔴 高 |
| 黑猫投诉集中 | 黑猫投诉记录 ≥ 2 条 | 🟠 中 |
| 知乎/xhs 高互动负面 | ❤️ > 50 且明确负面 | 🟠 中 |
| 装修质量集中吐槽 | 多条 "装修差/瑕疵/漏水" 笔记 ❤️ > 20 | 🟠 中 |
| 同物业兄弟盘有通报 | 该物业管的其他盘出现在政府名单 | 🟡 低-中 |
| 产权年限缩水 | 土地出让 vs 交楼 间隔 > 10 年(剩余年限 < 80%) | 🟠 中 |
| 紧邻城中村 | 距离 < 200m(百度地图可查"村""社区"标注) | 🟡 低-中 |
| 紧邻主干道/高架/铁路 | 距离 < 200m | 🟠 中(24/7 噪音) |
| 环境污染信号 | xhs/知乎多次提"臭水""废气""异味" | 🟠 中 |
| 开发商央/国企但兄弟盘维权 | 品牌污染(用户可能联想) | 🟡 低 |
报告规则:
根据用户表述场景,用对应权重重新计算综合分。不是固定 5 项 5 等分。
| 用户场景关键词 | 价格 | 通勤地铁 | 物业 | 配套 | 噪音 | 安全 | 户型 | 学校 |
|---|---|---|---|---|---|---|---|---|
| 默认(长租自住) | 0.15 | 0.15 | 0.15 | 0.15 | 0.10 | 0.10 | 0.10 | 0.10 |
| 短租 1 年 | 0.20 | 0.20 | 0.20 | 0.20 | 0.15 | 0.05 | 0 | 0 |
| 短租 + 开车(无地铁需求) | 0.20 | 0 | 0.25 | 0.20 | 0.20 | 0.10 | 0.05 | 0 |
| 短租 + 不考虑价格 | 0 | 0.15 | 0.25 | 0.25 | 0.20 | 0.10 | 0.05 | 0 |
| 短租 + 不考虑价格 + 开车 | 0 | 0 | 0.30 | 0.25 | 0.25 | 0.15 | 0.05 | 0 |
| 长租自住 + 通勤 | 0.15 | 0.25 | 0.20 | 0.15 | 0.10 | 0.10 | 0.05 | 0 |
| 长租 + 有孩子 | 0.10 | 0.10 | 0.20 | 0.15 | 0.10 | 0.10 | 0.10 | 0.15 |
| 投资 / 买入 | 0.20(升值潜力) | 0.15 | 0.10 | 0.15 | 0.05 | 0.05 | 0.10 | 0.20 |
自动调整规则(当组合没匹配时):
根据意图选模板:
| 意图 | 模板 | 核心结构 |
|---|---|---|
| search/research | rank.md | 你的需求 / Top N 评分表 / 各小区详情 / 数据来源 |
| compare | compare.md | 基础数据对比表 / POI 实测 / 红旗扫描 / 综合 PK 表(按场景权重)/ 看房 checklist |
| deepdive | deepdive.md | 基础 / 配套 / 红旗 / 业主真实声音 / 风险+应对 / 看房 checklist |
| reweight | reweight.md | 权重变化说明 / 旧排序 vs 新排序 / 新排序理由 |
# 🥊 {城市}{area} {N} 方 PK — {date}
[基础数据] 含建成/户数/容积率/物业/物业费/价格 的对比表
[配套实测] 百度地图距离对比:地铁/商场/医院/公园
[红旗扫描] 🚨 每个候选列红旗
[综合 PK] 显式列出用的场景权重 → 加权综合分表
[综合排序] 🥇/🥈/🥉
[看房 checklist] 必看 + 必问
[Sources] 每个事实附来源链接
# 🔍 {小区} 深度调研
[基础数据] 房产门户直抓
[配套] 百度地图
[🚨 红旗扫描]
[业主真实声音] xhs / 知乎
[风险点 + 应对]
[看房 checklist]
[Sources]
# 🔄 重新加权 — 场景:{新约束}
[权重变化说明] 旧权重 / 新权重 / 变化原因 表
[排序变化] # | 旧 | 新 | 变化原因
[新 Top 1-3 详细] 每个含新权重下分数 + 主要加分项
# 候选生成(按区或中心点)
from sources.community_search import find_candidates
candidates, source = find_candidates(city, district, area, limit, search_radius_m)
# 多源详情 enrichment
from house_hunter import _ensure_latlng, _enrich_community_basics
_ensure_latlng(c) # 补 lat/lng + 元数据
_enrich_community_basics(c) # 强制刷新元数据
# 百度地图 POI
from sources import baidu_map
baidu_map.geocode(addr, city)
baidu_map.search_nearby(kw, lat, lng, radius, page_size)
# 桥接抓取(链家/贝壳)
from sources import housing_bridge
housing_bridge.fetch_html(url) # 24h 缓存
housing_bridge.fetch_via_bridge(url) # 不缓存
# 小红书
from sources import xhs
xhs.search_feeds(keyword, max_results)
找到 skill 安装路径:
for dir in \
"${CLAUDE_PLUGIN_ROOT:-}" \
"${OPENCLAW_SKILL_ROOT:-}" \
"${GEMINI_EXTENSION_DIR:-}" \
"$HOME/.claude/skills/house-hunter" \
"$HOME/.agents/skills/house-hunter" \
"$HOME/.codex/skills/house-hunter" \
"$HOME/.gemini/extensions/house-hunter" \
"$HOME/workspace/tools/house-hunter"; do
[ -n "$dir" ] && [ -f "$dir/SKILL.md" ] && [ -d "$dir/scripts" ] && SKILL_ROOT="$dir" && break
done
echo "SKILL_ROOT=$SKILL_ROOT"
运行健康检查:
python3 "${SKILL_ROOT}/scripts/status.py" --json
根据返回的 fixes 数组逐项修复:
| fix ID | 问题 | 你(LLM)的修复动作 |
|---|---|---|
install_python_deps | pyyaml/jinja2 未安装 | 直接运行 python3 "${SKILL_ROOT}/scripts/setup.py" |
configure_baidu_key | 百度地图 Key 未配置(必需,fallback#1,5000/天) | 走下面的「Step 0.A:地图 Key 引导」流程 |
configure_amap_key | 高德地图 Key 未配置(推荐备用,fallback#2,100/天) | 同上 |
configure_tianditu_key | 天地图 Key 未配置(强烈推荐,fallback#3,1 万/天) | 同上 |
configure_chrome_path | 系统有 Chrome 但 ROD_BROWSER_BIN 未配置(强烈推荐修复) | 直接运行 python3 "${SKILL_ROOT}/scripts/setup.py" 自动检测并写入 |
install_chrome | 系统未安装 Chrome / Chromium | 引导用户从 https://chrome.google.com 下载(macOS / Windows)或 apt install chromium-browser(Linux) |
install_xhs_skills | 没找到 xiaohongshu-skills 项目 | 走下面的「Step 0.B:xhs-skills 安装」流程 |
install_xhs_skills_deps | xhs-skills Python 依赖缺失 | 直接运行 python3 "${SKILL_ROOT}/scripts/setup.py" 自动 pip install |
start_xhs_bridge | bridge_server.py 未运行 (port 9333) | 走下面的「Step 0.B:bridge 启动」流程,禁止 LLM 后台启动 |
start_housing_bridge | housing_bridge_server.py 未运行 (port 9334) | 走下面的「Step 0.D:Housing Bridge 启动」流程,禁止 LLM 后台启动 |
install_housing_extension | Housing Bridge 在跑但 Chrome 扩展未连上 | 引导用户装 extension(chrome://extensions → 加载已解压 → 选 extension/ 目录) |
login_housing_site | 扩展已连但没登录任一房产站点 | 引导用户在 Chrome 里登录 lianjia.com / ke.com / ziroom.com / anjuke.com / 58.com / fang.com 任一即可 |
stop_legacy_mcp | 旧 xhs-mcp(v1)仍在跑 | 提示用户运行 bash "${SKILL_ROOT}/scripts/kill_xhs.sh" 清理 |
修复策略(顺序):
all_ready=true → Step 1这一节的设计原则:用户只需要把 Key 复制粘贴给 LLM,不需要自己改任何文件。
configure_baidu_key 或 configure_amap_key:第一步:清晰展示申请流程给用户
直接复制下面这段话发给用户(不要简化,每一步都很关键):
我需要 2-3 个免费的地图 API Key 才能查 POI 数据。三家都用个人手机号注册,5 分钟搞定。
三家加起来 ~15,100 次/天免费配额,自动 fallback(百度限流 → 高德 → 天地图)。
🔵 百度地图 AK(必需,POI 主源,5000/天):
- 打开 → https://lbsyun.baidu.com/apiconsole/key
- 用百度账号登录(手机号秒注册)
- 顶部「应用管理」→「我的应用」→ 点「创建应用」
- 填写:
- 应用名:随便(比如
house-hunter)- 应用类型:⚠️ 必须选「服务端」(不是浏览器端、不是 iOS/Android)
- 请求校验方式:选「IP 白名单」→ 填
0.0.0.0/0(不限制)- 启用服务:把 ✅「地点检索 V2」「正/逆地理编码 V3」「路线规划 lite」都勾上
- 提交 → 立即拿到 AK(一串 32 位字符)
🟢 高德地图 Key(推荐备用,也免费):
- 打开 → https://console.amap.com/dev/key/app
- 用高德/手机号账号登录
- 「应用管理」→「我的应用」→ 点「创建新应用」
- 应用建好后点「添加 Key」
- 服务平台:⚠️ 必须选「Web服务」(不是 Android、不是 JS API)
- Key 名字随便
- 白名单留空(不限)
- 提交 → 立即拿到 Key
🟣 天地图 API Key(强烈推荐,fallback#3,1 万/天,国家测绘局官方):
- 打开 → http://lbs.tianditu.gov.cn/authorization/authorization.html
- 用手机号注册天地图账号
- 「我的应用」→「创建应用」→ 应用类型「服务端」
- 提交 → 立即拿到 tk
拿到后直接发给我就行(不需要你自己去配置任何文件):
百度: <粘贴你的 AK> 高德: <粘贴你的 Key> 天地图: <粘贴你的 tk>我会自动帮你写到 shell 配置(持久生效),并立即验证 key 是否有效。
第二步:用户给完 key 后,自动持久化 + 验证
用户回复 key 后,调用一键脚本:
python3 "${SKILL_ROOT}/scripts/configure_key.py" \
--baidu '<USER_PROVIDED_BAIDU_KEY>' \
--amap '<USER_PROVIDED_AMAP_KEY>'
这个脚本会:
~/.zshrc / ~/.bash_profile)第三步:根据脚本返回值给用户反馈
关键约束:
用户没设置 BAIDU_MAPS_API_KEY 时:明确停下来等用户配置,不要硬跑(POI 校验是核心功能)。
架构 v2:house-hunter 现在用
xiaohongshu-skills(Python + Chrome Extension Bridge)替代 v1 的xiaohongshu-mcp(Go + rod 自启 Chromium)。v2 的本质优势:操作发生在用户已登录的真实浏览器里,反爬指纹强;不会自启 Chrome 不会内存爆炸;账号警告期更安全。
v1 历史问题:详见
todo/xiaohongshu-mcp-memory-bomb.md(保留作历史教训)。
Step 1:装 xiaohongshu-skills 项目
如果 fix ID 含 install_xhs_skills,告诉用户:
需要装 xiaohongshu-skills(一次性):
# 任选一个目录 cd ~/workspace/tools/xiaohongshu-mcp/ # 或 ~/workspace/tools/ git clone https://github.com/autoclaw-cc/xiaohongshu-skills.git装好后跑
python3 ${SKILL_ROOT}/scripts/setup.py,会自动检测路径并装 Python 依赖。
Step 2:装 Chrome Extension(一次性)
- 打开 Chrome,地址栏输入
chrome://extensions/- 右上角开「开发者模式」
- 点「加载已解压的扩展」→ 选
<xhs-skills 目录>/extension/- 确认 XHS Bridge 扩展已启用
- 在 Chrome 里打开 https://www.xiaohongshu.com 并登录
装一次永久生效。
Step 3:启动 bridge_server.py(每次开机首次使用时)
如果 fix ID 含 start_xhs_bridge,告诉用户:
请你在自己的终端前台运行(保持窗口开着):
cd <xhs-skills 安装目录> # 比如 ~/workspace/tools/xiaohongshu-mcp/xiaohongshu-skills python3 scripts/bridge_server.py看到
Bridge server listening on port 9333就 OK。
⚠️ LLM 严格不要自己用 & 后台启动 bridge_server,理由跟 v1 一样:失控时不可控。让用户在自己的终端前台跑,便于 Ctrl+C 停止。
| 禁止 | 为什么 |
|---|---|
LLM 用 & 后台启动 bridge_server | 看不到日志,失控时不可控 |
| 同账号短时间内连续 ≥10 次 search | 仍可能触发反爬警告(用户账号已被警告过一次) |
| 主动 kill 用户 Chrome 窗口 | 那是用户的浏览器!只 kill bridge_server.py 就够 |
python3 "${SKILL_ROOT}/scripts/xhs_health_probe.py"
探针返回值:
scripts/sources/xhs.py 已强制:
Semaphore(1) — 同一时刻只跑 1 次 search在你刚才跑 bridge_server.py 的终端按
Ctrl+C即可。 找不到窗口时:bash "${SKILL_ROOT}/scripts/kill_xhs.sh"
降级影响:报告中居住口碑部分标注「数据不可用」,安全事件部分仅基于 WebSearch(召回率下降但仍可用)。其他维度不受影响。
架构本质:跟 Step 0.B 的 xhs-skills 同模式 — 用户已登录的 Chrome 装一个扩展,本地 bridge_server 中转,让 skill "借用" 真浏览器抓房产数据(绕反爬,零月费)。
核心价值:链家/贝壳/自如/安居客/58/房天下 6 家平台数据采集。任一站点登录即可工作(lianjia 和 ke 互通;58 和 anjuke 互通)。
完整设计文档:见
docs/plan-lianjia-bridge.md
如果 fix ID 含 install_housing_extension 或首次使用,告诉用户:
Housing Bridge 是一个 Chrome 扩展,让 skill 通过你的 Chrome 抓房产数据(用你的登录 cookie,所以反爬通过率 ~100%)。装载:
- 打开 Chrome,地址栏
chrome://extensions/- 右上角开「开发者模式」
- 点「加载已解压的扩展」→ 选
${SKILL_ROOT}/extension/目录- 看到扩展图标「🏠 Housing Bridge」就 OK
装一次永久生效(除非清除 Chrome 数据)。
如果 fix ID 含 login_housing_site,告诉用户:
在 Chrome 里打开下列任一站点并登录(推荐链家/贝壳,覆盖最全):
站点 URL 数据强项 链家 https://www.lianjia.com 小区元数据最全(建成年份/物业/户数);挂牌量最大 贝壳 https://www.ke.com 跟链家共账号体系,登一处两处都通 自如 https://www.ziroom.com 合租主卧/次卧价格(链家弱项) 安居客 https://www.anjuke.com 覆盖城市最广;跟 58 互通 58 同城 https://www.58.com 个人房东直租 房天下 https://www.fang.com 老牌门户,新房+二手房 登录后点扩展图标 popup,"已登录站点"会显示该站点名。
如果 fix ID 含 start_housing_bridge,告诉用户:
请你在自己的终端前台运行(保持窗口开着):
cd "${SKILL_ROOT}" python3 scripts/housing_bridge_server.py看到
Housing Bridge listening on http://127.0.0.1:9334就 OK。保持窗口开着不要关,调研结束按 Ctrl+C。
⚠️ LLM 严格不要自己用 & 后台启动 housing_bridge_server,规则跟 Step 0.B 同:失控时不可控、看不到日志、关不掉。
| 禁止 | 为什么 |
|---|---|
LLM 用 & 后台启动 housing_bridge_server | 看不到日志,失控时不可控 |
| 单会话累计调用 > 80 次 | bridge server 内置硬上限,保护用户账号 |
| 主动 kill 用户 Chrome 窗口 | 那是用户的浏览器!只 kill housing_bridge_server.py 就够 |
如果链家系/58系等触发风控(极少发生,<5%),bridge 拿到的页面是登录/验证码。这时:
looks_like_login=true 自动熔断本会话在你跑 housing_bridge_server.py 的终端按
Ctrl+C即可关闭。
降级影响:候选小区生成 fallback 到百度 POI;建成年份 / 物业 / 户数 / 挂牌租金 字段会缺失(报告标注"数据不可用")。其他维度(POI 配套 / 小红书口碑 / 安全事件)不受影响。
这一步由你(LLM)完成。 把用户的自然语言需求转成结构化 JSON。
⚠️ 首先看顶部「🎯 7 类意图识别 SOP」(compare/deepdive/reweight/add_candidate/why_question 等高频意图都在那)。
只有意图是 search(按区找房)或 research(区域调研)时,才走下面 Step 1.2-1.4 的需求解析流程。
其他 5 类意图(compare/deepdive/reweight/add_candidate/why_question)不需要走 Python 引擎,按 7 步多源 Chain SOP 直接调研 + 套对应报告模板。
| 意图 | 触发词 | 处理 |
|---|---|---|
| search(找房) | "想在 X 区找 Y 平 Z 房"、"预算 N"、"附近要有..." | 候选小区列表 → 多维筛选 → Top N 推荐 |
| research(调研) | "了解下"、"调研"、"top N 小区"、"哪些小区适合..." | 直接拉 top 小区清单 → 每个深度报告 |
把需求转成下面这个 JSON(用 requirement.json 命名,传给 engine):
{
"intent": "search | research",
"city": "深圳市",
"district": "坪山区",
"area": null, // 板块/商圈,如"科技园"、"后海"
"rooms": 2, // 卧室数
"halls": 1, // 厅数
"area_min_sqm": 65,
"area_max_sqm": 75,
"budget": {"type": "rent", "max_per_month": 4000},
"lifestyle_profile": ["shopping_lover"], // 见 config/lifestyle_profiles.yaml 的 profile id
"must_have_pois": [
{
"category": "shopping.big_supermarket",
"match_keywords": ["山姆", "沃尔玛"], // null 时使用 category 默认 keywords
"min_count": 1,
"radius_m": 3000
},
{"category": "shopping.shopping_mall", "min_count": 1, "radius_m": 3000},
{
"category": "entertainment.cinema",
"must_have_brand": ["IMAX"], // 品牌过滤
"min_count": 1,
"radius_m": 5000
},
{"category": "medical.hospital", "min_count": 3, "radius_m": 3000}
],
"nice_to_have_pois": [
{"category": "transport.subway", "min_count": 1, "radius_m": 1000}
],
"commute_destination": null, // 用户指定通勤地,启用通勤评分
"top_n": 5, // 找房默认 5,调研默认 8
"raw": "原始用户输入"
}
根据用户措辞从下面 8 个画像中选 0-2 个(可叠加):
| 画像 | 触发词 |
|---|---|
homebody 宅家党 | 宅、宅家、不爱出门、躺平、外卖、居家 |
nightlife 夜店党 | 夜生活、酒吧、蹦迪、livehouse、精酿、夜宵 |
fitness 健身党 | 健身、运动、跑步、瑜伽、撸铁 |
pet_owner 养宠党 | 养宠、宠物、养猫、养狗、毛孩子 |
commuter 通勤党 | 通勤、上班、离公司近、地铁口 |
shopping_lover 商场党 | 商场、逛街、购物、约会、IMAX、看电影 |
budget_conscious 性价比党 | 性价比、便宜、划算、省钱 |
single_woman 女生独居 | 独居、一个人住、女生独居、单身女、安全 |
没匹配到任何画像 → ["default"](均权重)
回显给用户确认:
🏠 收到需求:
- 区域:{city} {district} {area or ""}
- 户型/面积:{rooms}房{halls}厅,{area_min}-{area_max}㎡
- 预算:{budget.max_per_month} 元/月({budget.type})
- 画像:{lifestyle_profile}
- 必备配套(must-have):
- {category} 半径 {radius_m}m,至少 {min_count} 家
- 加分配套(nice-to-have):
- {category} ...
正在多源采集(地图 POI + 小红书口碑 + 链家租金 + 安全事件搜索),通常 2-5 分钟...
把结构化需求传给主引擎:
python3 "${SKILL_ROOT}/scripts/house_hunter.py" \
--requirement-json '<上一步生成的 JSON 字符串>' \
--save-dir "$HOME/Documents/House-Hunter"
或者写到临时文件再传:
echo '<JSON>' > /tmp/hh_req.json
python3 "${SKILL_ROOT}/scripts/house_hunter.py" \
--requirement-file /tmp/hh_req.json \
--save-dir "$HOME/Documents/House-Hunter"
timeout 600000(10 分钟),前台运行。
引擎会自动:
读取完整输出。 输出包含:
这是用户最初核心需求:报告里每个小区必须有建成年份。 当引擎已用尽 ke / lianjia / anjuke 三层 resolution 仍拿不到
built_year时,你(LLM)必须用WebSearch兜底补。禁止直接交付缺建成年份的报告。
引擎跑完 Step 2,每个 Top N 候选 community 的元数据(建成年份/物业)可能因为数据源覆盖不全而缺失。在合成报告前,你(LLM)必须对每个缺字段的候选用 WebSearch 兜底:
对每个 Top N 候选 community:
检查关键字段:
community.built_year 为 None?community.property_company 为 None?调 WebSearch:
WebSearch("{城市} {community.name} 建成年份")
例:WebSearch("深圳 万科时代广场V寓 建成年份")
解析摘要:
写入报告:
| 小区类型 | WebSearch 命中率 |
|---|---|
| 大型品牌盘(万科/恒大/保利等) | ~90% |
| 普通商品房 | ~60% |
| 城中村 / 自建房 / 老旧小区 | ~20% |
| 商业综合体(混搭) | 需特别说明 |
_poi)尤其有用❗ 进 Step 3 前先确认:每个 Top N 候选的
built_year字段是否都填了?没填的必须回到 Step 2.5 用 WebSearch 兜底。绝对不允许报告里有候选缺建成年份。
按意图选模板(详见顶部「📋 4 套报告模板库」):
| 意图 | 模板 | 渲染方式 |
|---|---|---|
| search(找房) | rank.md = scripts/reports/templates/search.md.j2(Python 自动渲染) | Python 引擎自动 |
| research(调研) | rank.md = scripts/reports/templates/deep_dive.md.j2 | Python 引擎自动 |
| compare | compare.md(顶部模板库定义) | Opus 直接生成 markdown |
| deepdive | deepdive.md | Opus 直接生成 |
| reweight | reweight.md | Opus 直接生成 |
Python 自动渲染(search/research):跑完 Step 2 引擎后,reports/render.py 自动用 jinja2 模板生成 markdown。你只需检查报告内容是否完整(特别是 built_year 字段),不完整就回 Step 2.5 用 WebSearch 兜底。
Opus 直接生成(compare/deepdive/reweight):跳过 Python 引擎,按顶部「📋 4 套报告模板库」对应的模板结构,直接合成 markdown 写到磁盘(用 Write 工具到 ~/Documents/House-Hunter/{topic}-{YYYYMMDD}.md)。
报告必须含「Sources」节列出所有WebSearch / WebFetch / xhs / 百度地图来源链接,确保每个事实可验证。
路径:~/Documents/House-Hunter/{topic}-{YYYYMMDD}.md
示例:
~/Documents/House-Hunter/坪山区租房-20260430.md~/Documents/House-Hunter/南山区年轻人租房调研-20260430.md保存后明确告知用户:「报告已保存到 {完整路径}」
报告已保存到 {完整路径}。
我是「{TOPIC}」的找房专家,可以继续问我:
- [基于实际调研内容的具体建议 1,例如"对比 X 小区和 Y 小区的物业评价"]
- [建议 2,例如"如果再宽预算 500,能换到哪些小区?"]
- [建议 3,例如"夜生活更丰富的板块有哪些?"]
后续提问从已有结果回答,不重新搜索。用户明确说「重新调研」「换个区」才重新跑 engine。
~/Documents/House-Hunter/| 失败的源 | 降级方案 |
|---|---|
| 百度地图 | → 高德地图 |
| 高德地图 | → 百度地图 |
| 链家 WebFetch | → 贝壳 → 自如 → 安居客 |
| xiaohongshu-skills 不可用 | 报告中口碑/安全部分明确标注「小红书数据不可用」,仅基于地图 + 新闻输出 |
| 全部地图 API 失败 | 停止流程,提示用户配置至少一个地图 Key |
每个事实必须附来源链接(参考 xiaohongshu-skills 的引用规范):
Self-check:报告中每条信息是否都有链接?没有链接的信息删除或补上。