下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-be2iwv8f--lanfang.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-be2iwv8f/lanfang。房地产经纪人全流程助手:查房源、配客源、评房价、看片区、复盘谈单、写报告、新人踩盘、盘门店。筛选真实在售房源并输出房源清单与分析报告;问「能做什么 / 怎么用」时同样加载。
阅读全文 (展开查看完整说明)
概述
本文件=常驻主文档(每次会话都读)。下列细则按需读取,不要整目录读:
·
references/01-首次配置.md—— 仅当生效凭证不完整(取数报「缺少 base_url/AppKey」或--check显示未配置)、或要换账号·换城市·排查连通失败时读·
references/02-能力菜单.md—— 仅 T1 首次配置秘钥成功后(安装成功)的引导菜单、或用户问「能做什么 / 怎么用」时读·
references/11-清单与候选组件.md—— A 查房找房 / B 客源匹配·
references/12-报告与用途分档.md—— C 价格诊断 / F 分析报告·
references/16-推荐报告地图卡.md—— A/B 清单勾选后的客户推荐报告(地图卡规格,随11一起读)·
references/13-片区研究.md—— D ·references/14-新人踩盘.md—— G·
references/15-通用规格.md—— 落款 / 禁例 / 定位 / 配套(落盘前必读,全能力通用)·
references/31-典型任务配方.md—— E 谈单复盘 / H 经营体检 / 各类速查配方·
references/*.html—— 落盘蓝本(候选组件 / 能力菜单组件menu-widget.html/ 各类报告模板)·
references/17-清单数据契约.md—— 跑scripts/build_list.py备list_data.json前读(JSON 字段契约)·
references/18-推荐报告数据契约.md—— 跑scripts/build_pick.py备pick_data.json前读(JSON 字段契约)· 房源清单不用照抄模板:备好
list_data.json后跑scripts/build_list.py(数据契约=references/17-清单数据契约.md),脚本自动剥离注释并做产物自检· 客户推荐报告同样不用照抄模板:备好
pick_data.json后跑scripts/build_pick.py(数据契约=references/18-推荐报告数据契约.md;地图卡口径=references/16-推荐报告地图卡.md),脚本自动渲染多小区配套地图卡 + 10 项红线自检,自检不过不落盘
⛔ 第 0 步:配置门禁(凭证没打通 → 立刻停,不产出任何东西)
这条排在能力路由之前,是所有能力的前置条件。 下列任一情形出现,立即停止全部取数与产出——不查数、不分析、不落盘、不出清单 / 报告 / 文案;⛔ 不得拿上一次的结果、记忆里的数据或估算值凑一份交差。本轮只做一件事:告知客户去完成密钥配置。
怎么判「有没有配置密钥」——⛔ 别拿 config.json 这个文件当判据
凭证有三个来源,优先级 环境变量 > config.json > 默认空(FANGYUAN_BASE_URL / FANGYUAN_CITY / FANGYUAN_APP_KEY / FANGYUAN_APP_SECRET;FANGYUAN_CONFIG 还能把配置文件整个换成另一份)。三处取数入口(MCP server / fangyuan_cli.py / HTTP server)都遵循这个优先级。⇒ 「config.json 里是空的」≠「没配置密钥」——凭证可能放在环境变量或 MCP 客户端的 env 段里。判据只有一个:当前生效的凭证是否完整,按下面的运行时信号判,⛔ 不要读文件下结论:
| 看什么 | 怎么判 |
|---|---|
| ① 直接看一次取数返回(最可靠) | 调一次 MCP 工具(或 fangyuan_cli.py):返回「缺少 ERP 接口基域名(base_url)」/「缺少 AppKey/AppSecret」→ 未配置;返回真实数据 → 已配置;返回「签名错误」→ 密钥错 |
② setup_config.py --check | 打印的是当前生效配置(已合并环境变量)+逐字段来源;来源全标「(未配置)」才算没配 |
③ setup_config.py --check --test | 退出码 0 打通 · 1 配了但连不通 · 2 未配置密钥(脚本直接给结论、不发请求) |
| 情形 | 典型信号 |
|---|---|
| ① 未配置密钥(首次安装技能后运行即查出) | 生效凭证里 base_url / app_key / app_secret 任一为空(来源标注「(未配置)」);MCP/CLI 返回「缺少 ERP 接口基域名(base_url)」「缺少 AppKey/AppSecret」;--check 来源全是「(未配置)」;--check --test 退出码 2 |
| ② 密钥错误(使用过程中随时可能撞上) | 接口返回「签名错误」;setup_config.py --check --test 退出码 1(=配了但连不通) |
| ③ 接口访问失败 | 域名不通 / 连接超时 / 5xx / 「响应不是 JSON」/「服务端返回了系统错误页面」 |
唯一例外:400 请求已过期 是机器时间问题、不是密钥问题,按「常见报错」表处理后重试 —— 但同样要停下,链路没通就不产出。
停下时的三段话(⛔ 不要多写、不要追问别的) —— 第 1 句按命中的情形选,⛔ 三种情形别用同一句:
| 情形 | 第 1 句 · 一句话结论(照抄) |
|---|---|
| ① 未配置密钥 | 「技能已装好,但还没接入澜房数据 —— 请先完成密钥配置,配好我马上接着做。」 |
| ② 密钥错误 | 「密钥校验没通过(签名错误)—— 请核对 AppKey / AppSecret 是否与账号匹配,配好我马上接着做。」 |
| ③ 接口访问失败 | 「访问不到澜房服务器,请确认当前服务状态是否正常 —— 服务恢复后我马上接着做。」 |
⛔ ②③ 不要说「请先完成密钥配置」 —— 客户已经配过了,那样说会让他以为要重填、甚至怀疑自己填错。②只提「核对密钥」,③完全不提密钥(那是服务端的事)。
第 2 段 · 配置回填模板 —— 只有 ①② 给(4 项等号后补全、整段一次性回发;完整流程见 references/01-首次配置.md):
【数据源接入信息】(请补全等号后内容,一次性回发)
服务地址 =(由服务方提供,形如 https://你的租户域名,必填)
城市 =(当前主要作业城市;建议填写,不清楚可留空)
AppKey =(由服务方提供,必填)
AppSecret =(由服务方提供,必填)③ 情形 ⛔ 不给这段模板 —— 配置本身没问题,发了会让客户白重配一遍。② 情形加一句「请核对后把正确的一组按同样格式回发」。
第 3 段 · 恢复路径(三种情形共用):① 客户回填 / ② 客户核对更正 / ③ 服务恢复后,AI 用 scripts/setup_config.py 写入 → --check --test 自检通过 → 立即补做刚才被中断的那件事(客户不必重说一遍需求)。③ 情形若无需改配置,服务恢复后直接补做即可。
⛔ 此时不给能力菜单 —— 菜单是「配置成功」后的动作(T1),链路没通时给了也点不动、只会误导。⛔ 也不追问「要不要先做点别的」,只等配置。⛔ 不得把「接口失败」误判成「这小区没房源」:真·空结果是 ok: true 且列表为空;ok: false 一律按下表停下。
🧭 拿到指令,第一步永远是「能力路由」
先判命中八项能力中的哪一项,再读文件。 命中后只读该行的必读文件,⛔ 不要把 references/ 整目录读一遍;未命中八项时才走通用流程,并明确说明「未命中预设能力」——⛔ 不得硬套一个错的能力。
| 能力 | 触发词(含口语变体) | 必填参数(缺则先索取) | 必读文件(references/ 下) |
|---|---|---|---|
| A 查房找房 | 找房 / 查房 / 看看有没有 / 有没有合适的 / 有没有便宜点的 / 推几套给我 / 能拎包入住的 | 无(片区·户型·面积·预算均可留空) | 11-清单与候选组件.md + 15-通用规格.md |
| B 客源匹配 | 给某客户找房 / 按客源编号配盘 / 客源匹配 | 客源编号(或客户姓名+手机号) | 同 A —— 链路一字不差,只换第 1 步的数据来源 |
| C 价格诊断 | 这套挂得贵不贵 / 价格诊断 / 值不值这个价 | 房源编号 | 12-报告与用途分档.md + 15-通用规格.md |
| D 片区研究 | 某片区行情 / 板块研究 / 片区分析 | 片区名(或小区·商圈名) | 13-片区研究.md + 15-通用规格.md |
| E 谈单复盘 | 复盘谈价录音 / 看看这段谈判 | 谈价录音(文件或原文) | 31-典型任务配方.md「谈单复盘」段 |
| F 分析报告 | 把某房源做成报告 / 议价单 / 购房方案 / 推广文案 | 房源编号 | 12-报告与用途分档.md + 15-通用规格.md |
| G 新人踩盘 | 带新人踩盘 / 某小区的市场分析报告 | 小区名 | 14-新人踩盘.md + 15-通用规格.md |
| H 经营体检 | 盘一下某门店 / 门店库存体检 / 把卖不动的挑出来 | 门店名(不接受「全部门店」) | 31-典型任务配方.md「盘一个门店」段 |
参数门禁:编号 / 小区名 / 门店名 / 录音这类必须用户自己给的参数,缺了就只问那一句(一次只问最关键的一个),此轮不执行;能枚举的参数(出售·出租、几室、预算档、用途档)用点选卡问,每题 ≤4 项。⛔ 问编号时不给任何格式示例(前缀与位数各租户不同),用户给的编号原样照抄。完整门禁表见 02-能力菜单.md。术语纪律:对用户一律说「房源编号」「客源编号」,⛔ 不得说 uuid 或其它技术字段名。
⛔ 三步门禁(命中 A / B 出清单才用;每次必做、无例外)
- 取数完成 → 清单落盘之前:单独弹一题「清单底部要留联系方式吗?」(A 留姓名电话 / B 只留电话 / C 不留)。
- 清单落盘后、同一条消息里:调出「候选房源多选组件」——套
references/candidate-picker.html蓝本,只换R数组,样式一个字不改;20 套一次列全、可多选、含「联系人姓名」「联系电话」两个输入框。 - 这条消息的排布顺序:① 一句话说明(查到几套、按什么排序)→ ② 清单文件卡片 → ③ 组件压轴,组件之后不再接任何文字。
⛔ 绝不允许:只给文件就说「已完成」;先问「要不要出推荐报告」——组件本身就是这一问(勾选发送=要报告;不勾=只要清单)。⛔ 这一问每次出清单都必须给、无例外——不因「上次问过 / 上次说不用 / 这次指令没提 / 刚问过 PDF」而跳过;只有用户本轮已把话说死(明确要或明确不要)才免问。默认排序口径:四项综合打分(价格 40% / 热度 40% / 跟进 20%)降序取前 20 套;只有用户点名单一维度时才改。
命中「查房子」一律直接走 A,不反问
用户话里出现「找房 / 查房 / 看看有没有合适的房 / 有没有 XX 户型 / 有没有便宜点的 / 推几套给我」这类指向房源的动作 → 直接按 A 走完整链路,⛔ 不反问「你想做什么」、⛔ 不二次确认参数(用途已由动作本身说明)。只有用户明确说了别的用途才改道(单套详情 → F、片区报告 → D、议价单 → F、客源画像 → B 客源侧)。判断依据是用户明确说了别的用途,而不是「顺便也给个清单」。
⛔ PDF 一问的时机(适用于全部能力、全部交付物)
「要不要再出一份 PDF 版?」只能在:交付物已生成完毕 → 已交付并展示给用户 → 用户已经能看到成品内容 之后 才问。
下列时机一律禁止问 PDF:用户刚说完需求、还没取数;交付物正在生成中;已落盘但还没交付展示;与任何前置问题合并在同一条消息里问(用途分档、参数复核、勾选房源、落款一问、推荐报告那一问……都不许捎带问 PDF)。
唯一免问情形:用户本轮指令里已点名要 PDF → 直接连 PDF 一并产出;用户已答过 → 不重复问。PDF 做法:读 references/pdf-notes.md,按那五个坑产出同名 PDF。
交互硬规则(PC 与手机同一套)
必须点选(AskUserQuestion):用途分档(A 客户版 / B 业主版 / C 内部版)、「要不要 PDF」、「要不要出成文件带走」。全部单选(调用时显式设单项选择,⛔ 严禁设多选),每题 ≤ 4 个选项;⛔ 不得用纯文本「请回复序号」替代点选。
两个例外(⛔ 别扩散到别处):
- 能力引导菜单(8 项)不点选 —— 改为窗口内排整齐的能力菜单 + 每条指令带真「复制」按钮(首选内联组件,手机端客户端不给代码块挂复制按钮)。蓝本=
references/menu-widget.html(整段套用、只照抄内容不改样式);⛔ 首次配置秘钥成功 / 用户问能力时,菜单必须压轴放在回复最底部、其后不再接文字(窗口底部才好点)。详见02-能力菜单.md。 - 勾选房源 / 要不要客户推荐报告不点选 —— 改由候选房源多选组件承载(一题 ≤4 项装不下 20 套,用户已明确否定)。见
11-清单与候选组件.md。
兜底:客户端弹不出点选卡(用户反馈「没有选项」)→ 二选一的确认改用一句话文本问(「要不要生成推荐报告?要 / 不要」),⛔ 不要让用户手输序号或数字;客户端渲染不出组件 → 退化为窗口文本清单(序号 + 小区 + 面积/总价 + 房源编号,一次列全、不得分批),并说明「回一句『第 3、7、12 套』+你的姓名电话即可」——这是唯一允许让用户回序号的情形。
用途分档等收尾确认走点选;能力菜单与房源勾选不走点选 —— 两者别搞混。
姓名电话:⛔ 不单独问一次——由候选组件的两个输入框承载(选填;留空则报告结尾写「有意向可直接回复我」);用户若在对话里主动给了称呼 / 号码,原样照抄(不改位数、不加区号、不校验格式),⛔ 不得写进技能目录的任何文件。
⛔ 依赖检查与降级路由(每次开工前先跑)
本技能是依赖型技能(ERP 接口 + MCP + Python 运行时 + 图表 CDN)。开工前先跑一次环境检查,按返回状态走,不要跳过:
python3 scripts/probe_dependencies.py --out probe-results.json # 最小只读探测,输出脱敏结果
python3 scripts/check_environment.py --probe-results probe-results.json| 返回状态 | 怎么走 |
|---|---|
ready | 跳过全部配置引导,直接进入能力路由取数 |
partial | 直接用可用功能,并在结果里说明受影响范围与限制(输出里的 functional_degradations 字段逐条写明了) |
needs_setup | 只展示缺失项的配置步骤(setup 字段已给出),等用户补完再重跑检查;⛔ 不要自行猜测参数 |
unavailable | 按 reason_code 给出恢复步骤:凭证失效 → 轮换;权限不足 → 联系服务方开通;限频 → 退避重试;服务异常 → 稍后重试 |
降级的硬规则:
- 一个依赖不可用只关闭受影响的功能,⛔ 不笼统宣布整个技能不可用;
- 降级路径与停止条件以
skill-dependencies.json为准(每项功能逐条写明 fallback / limitations / recovery / stop_condition); - 核心数据或正确性无法保障时停止该功能 —— ⛔ 不用模型记忆、估算或模板示例数据顶替真实结果;
- 探测结果不含任何凭据值,⛔ 不要在对话里回显 AppKey / AppSecret / 租户服务地址;
- 首次配置与故障处置见
references/setup-guide.md(⛔ 凭证齐全时不要读它)。
服务概述
fangyuan-api MCP 提供 3 个工具,对接澜房ERP官方对外接口(凭证与接口域名的来源与优先级见上文「第 0 步:配置门禁」):
| 工具 | 用途 |
|---|---|
search_sources | 查房源(出售/出租,支持多维筛选) |
search_clients | 查客源(求购/求租客户及联系方式) |
get_trace_info | 查跟进记录(房源/客源的带看、电话跟进历史) |
最新接口能力:房源支持按门店筛选(
store_org_name)并返回所属门店(sale_store_org/lease_store_org)与封面图(cover_image);客源返回维护人及部门(agent_id/agent_name/org_id/org_name),可按维护人/门店维度筛选与统计。
工具参数速查
search_sources
| 参数 | 必填 | 说明 |
|---|---|---|
city_name | 可选 | 城市名,如 北京市。不传则用生效配置里的 city(首次引导时询问的所在城市);两者都无时必须显式传,否则跨城市查询会取到错误数据 |
category | ✅ | 出售 / 出租 / 租售(建议分开查再按uuid去重) |
community_title | 可选 | 小区名,支持模糊匹配(如 新城悦隽公馆 可命中 新城悦隽公馆二期) |
business_name | 可选 | 商圈名(如 桥北新区、新开路) |
district_name | 可选 | 行政区(如 宁河区域) |
room | 可选 | 室数:2/3/4 |
arch_square | 可选 | 面积段,格式 80-100 |
order | 可选 | 排序字段:created_at(录入时间)、high_price、arch_square、delivery_at、click_num、seen_num 等;配 direction_asc=True 升序 |
page | 可选 | 页码,默认 1。2026-11-02 接口新增分页(此前不分页、单次上限 50) |
page_size | 可选 | 每页条数,默认 50;实测可取到 5000+,无硬上限。2026-11-02 新增 |
sale_status | 可选 | 出售状态:我售/他售/暂缓/无效/流通;可传单值或 JSON 数组。2026-11-02 新增 |
lease_status | 可选 | 出租状态:我租/他租/暂缓/无效/流通;可传单值或 JSON 数组。2026-11-02 新增 |
sale_open_at | 可选 | 出售开盘时间筛选:单日 2026-01-01 或区间 2025-01-01,2026-11-02(含首尾)。2026-11-02 新增 |
lease_open_at | 可选 | 出租开盘时间筛选,格式同上。2026-11-02 新增 |
survey_at | 可选 | 实勘时间筛选(仅匹配已实勘房源),格式同上。2026-11-02 新增 |
sale_circulation_at | 可选 | 出售转流通时间筛选(仅匹配当前状态为「流通」),格式同上。2026-11-02 新增 |
lease_circulation_at | 可选 | 出租转流通时间筛选(仅匹配当前状态为「流通」),格式同上。2026-11-02 新增 |
extra_filters | 可选 | JSON字符串。精确定位与门店筛选都走这里:{"uuid":"<房源编号>"} 按房源编码定位(官方参数,后缀模糊匹配);{"store_org_name":"xx门店"} 按门店名称筛选房源(模糊匹配,可多值) |
⛔ 分页口径(2026-11-02 实测,旧的「不分页/50 条上限」已作废):
- 接口已支持分页:
page_size实测 10→10 条、200→200 条、1000→1000 条、5000→5000 条(无硬上限);page=1与page=2的 uuid 集合交集 0;连续翻 12 页零重复;加order=uuid后同样零重复。- 响应不含总数、也不含任何分页元数据(只有 data 数组)→ ⛔ 拿不到「一共有多少套」。要全量仍须翻页直到返回空 + 按 uuid 去重。
- 旧做法「按 room / area 分段多次查询」现在不是必需,但分段仍是最省请求的做法(一次
page_size=5000与分段取全效果相同、请求更少)。- 翻页建议带显式
order(如uuid)——实测默认排序也稳定,但显式排序可避免并发写入导致的页漂移。
⛔ 状态筛选的默认规则(2026-11-02 官方新增,踩过):
sale_status与lease_status都没传时 → 只查系统默认有效状态的房源。- 传了任一状态条件 → 不再附加默认总状态筛选,即能查到暂缓 / 无效盘。
- 两者同时传 → 出售与出租状态条件同时满足(AND)。
- 实测证据(uuid 集合比对):不传状态基线 200 套;传「我售 / 他售 / 无效」与基线交集 0;传「暂缓」交集 65;传「流通」交集 117 —— 参数确实生效,不是被忽略。
查"某天/最新新录入"的房源:接口无日期筛选参数 → 用
order="created_at"(降序)取回最新一批,再在本地按
statistics_info.created_at[:10]过滤目标日期即可。
search_clients
| 参数 | 说明 |
|---|---|
city_name | 城市名。工具未单列该参数,需通过 extra_filters='{"city_name":"北京市"}' 传;不传则自动用生效配置的 city |
category | 求购 / 求租(对应接口参数 type) |
| 其余筛选 | 同 search_sources 风格(区域/预算等) |
按维护人查客源(均走 extra_filters,接口原生支持):{"agent_name":"张三"} 维护人姓名、{"org_name":"xx门店"} 维护人部门(门店)名称、{"name":"李四"} 客户姓名。
get_trace_info
| 参数 | 说明 |
|---|---|
trace_category | sources(房源)或 clients(客源) |
source_uuid | 房源编号(接口字段名 uuid;trace_category=sources 时必填) |
client_uuid | 客源编号(接口字段名 uuid;trace_category=clients 时必填) |
search_bargains(已审核合同 · 2026-11-02 新增)
| 参数 | 说明 |
|---|---|
source_uuid | 房源编号,精确匹配;与 community_title 同时传时优先用本参数 |
community_title | 楼盘名称,精确匹配;未传 source_uuid 时使用 |
bargain_type | 合同类型过滤,精确匹配:买卖 / 租赁 / 其他;不传则返回全部类型(2026-11-04 新增) |
- 两项均未传、或楼盘名未匹配到楼盘 → 返回空
data(不报错)。 - 只返回近五个月内已审核的合同(实测最早一条距今正好 150 天),按审核日期倒序,最多 100 条,不分页。
get_source_videos(房源视频 · 2026-11-02 新增)
| 参数 | 说明 |
|---|---|
source_uuid | 房源编号 —— 必填,不传返回空 data |
- 只返回该房源状态为「有效」的视频记录,按视频记录 ID 倒序。
返回数据字段地图
每条房源记录的 JSON 结构:
uuid 房源唯一编号
basic_info.community_title 小区名
basic_info.district_name 行政区(注意以ERP为准,勿凭常识推断)
basic_info.business_name 商圈名
house_info.room / hall 室 / 厅
house_info.arch_square 面积(㎡)
house_info.decoration_level 装修(毛坯/简装/精装/豪装)
house_info.community_type 物业类型(住宅/商铺/车位/公寓)
house_info.delivery_at 交付年份
house_info.arch_type 塔楼/板楼等
house_info.direction 朝向
house_info.cover_image 房源封面图URL(输出图文内容可直接引用)
sale_info.high_price 挂牌总价(单位:万元)
sale_info.sale_unit_price 挂牌单价(元/㎡)
sale_info.sale_store_org 出售委托门店 {"id":门店ID, "name":门店名称}
sale_info.open_at 出售挂牌(开盘)时间 ← 出售房源的「挂牌日期」取它
lease_info.lease_price 租金(元/月)
lease_info.lease_store_org 出租委托门店 {"id":门店ID, "name":门店名称}
lease_info.lease_open_at 出租挂牌(开盘)时间 ← 出租房源的「挂牌日期」取它
statistics_info.current_source_status 状态(在售/空置/在租/自住等)
statistics_info.created_at 录入时间(**⛔ 不等于挂牌时间**,见下文「挂牌时间口径」;查"新增房源"用它,格式 2026-09-22 09:51:23)
statistics_info.click_num 浏览次数(录入起累计)
statistics_info.seen_num 带看次数(录入起累计)
statistics_info.share_num 分享次数(录入起累计)
statistics_info.followed_at 最后跟进时间(热度排序用)
statistics_info.last_opened_at 最新开盘时间
statistics_info.come_from 房源来源(如 项目推荐)
statistics_info.tags 标签数组(实测见过 地铁房 / 学区房 / 采光好 / 视野好 / 急切)
statistics_info.supporting 屋内软件设施数组(床 / 衣柜 / 空调 / 热水器 / 冰箱 / 洗衣机 / 宽带 / 灶具 / 电视 / 书桌…)
house_info.heating_supply 暖气(集中热力 / 集中供暖 / 壁挂炉 / 自采暖)
house_info.gas_supply 燃气(管道天然气 / 无)
house_info.elevator 电梯(true / false / "-")
house_info.ownership_year 产权年(**是产权登记年,不是建成年**)
house_info.ownership_type 产权性质(商品房 / 房改房 …)
house_info.ownership_date 产权登记日期
house_info.delivery_at 交付年份
house_info.toilet / kitchen / balcony 卫生间 / 厨房 / 阳台数
house_info.floor_name_num 楼层(形如 1/15)
sale_info.sale_circulation_at 出售最后一次转流通时间(**当前出售状态为「流通」时才有值,否则 `-`**)
lease_info.lease_circulation_at 出租最后一次转流通时间(同上)
statistics_info.has_key 是否持钥匙(钥匙记录存在且**未归还**才为 true)
statistics_info.key_date 钥匙记录创建日期(Y-m-d,无记录为 `-`)
statistics_info.has_survey 是否存在实勘记录(布尔)
statistics_info.survey_date 实勘记录创建日期(Y-m-d,无记录为 `-`)⛔ 新字段在嵌套层,不在顶层(2026-11-02 实测):
has_key/key_date/has_survey/survey_date在statistics_info;sale_circulation_at在sale_info、lease_circulation_at在lease_info。取字段必须按完整路径找(如row["statistics_info"]["has_key"]),⛔ 只看顶层 key 会误判「字段不存在」。注意:浏览/带看/分享三项均为录入起累计值(2026-10-12 实测天津环境证实:新录房源 click_num 从个位数起累加、接口无"近30天"字段),不是近30天滚动;对外文案、清单列头、报告口径一律写「累计」,禁止写「近 30 天」。
配套字段(2026-10-15 实测,重庆环境):① 屋内硬件=
heating_supply+gas_supply+elevator,覆盖率接近 100%(实测「集中热力 35 / 集中供暖 8 / 壁挂炉 6」「管道天然气 49」「有电梯 41」);② 屋内软件=statistics_info.supporting,覆盖率偏低(实测 50 套里约 13 套有值),取值如床 / 空调 / 衣柜 / 冰箱 / 书桌 / 电视 / 洗衣机——取不到一律写「未登记」,⛔ 不得写成「无」或自行补全;③tags里的「地铁房 / 学区房」是周边配套的系统内线索,可作检索与排序提示,但对客户输出前必须用外部平台复核并注明来源,⛔ 不得仅凭标签下结论。周边配套与小区配套系统内无字段(接口仅开放房源 / 客源 / 跟进三个),小区级信息(容积率 / 绿化率 / 车位配比 / 健身场所 / 物业费)与周边配套(地铁 / 公交 / 医院 / 学校 / 商场菜场公园)一律来自外部公开平台,注明平台与抓取月份;多源冲突(容积率、物业费最易冲突)并列两个口径并注明取值依据。
房源归属门店:出售看
sale_info.sale_store_org,出租看lease_info.lease_store_org;租售房源两处都可能返回。
挂牌时间口径(2026-10-15 用户定稿,⛔ 别再取错字段):
- 挂牌(开盘)时间=
sale_info.open_at(出售)/lease_info.lease_open_at(出租);statistics_info.last_opened_at是最近一次开盘时间。两者不可混用——实测出租批次lease_open_at覆盖 100/100 而open_at只有 4/100;出售批次则相反。- ⛔ 录入时间 ≠ 挂牌时间。
statistics_info.created_at只是信息录入系统的时间。房源可能是仅核盘(资料盘)——业主自住或空置、并未挂牌,录入只是为了留给经纪人回访;发现租售意向后才重新开盘,此时起才产生挂牌时间。两者可能差很远,⛔ 不得拿created_at冒充挂牌时间。- 对应字段为空 ⇒ 该房源尚未开盘(资料盘 / 核盘盘):挂牌日期栏写「未开盘 · 资料盘」、时长栏写「—」,⛔ 不得填录入日期、也不得按录入日期编时长。可用
statistics_info.current_source_status(在售 / 空置 / 在租 / 自住)佐证状态。- 兜底只往下一级:
open_at/lease_open_at为空 → 看last_opened_at;它也为空就是未开盘。兜底命中时在口径里注明用了哪一级。last_opened_at会随调价重推刷新——算「已挂 X 个月」时优先用open_at/lease_open_at,⛔ 不要拿last_opened_at算时长,否则重推过的房源时长会被刷成 0。- 只有「判断是否新录集中」才看
created_at,与挂牌时间口径无关。
search_clients 返回关键字段
uuid 客源唯一编码
type 求购 / 求租
name 客户姓名
stage / level 客源阶段(首看…)/ 客源等级(A–E)
community_type 客户要的物业类型(住宅 / 车位 / 商铺)→ 配盘时按它过滤
status 状态(流通 / …)
district / business 需求区域 / 需求商圈(未填时值为 `-`)
org_id / org_name 维护人部门id / 部门(门店)名称
agent_id / agent_name 维护人id / 维护人姓名
price 预算区间字符串:求购 `70-90万`、求租 `1000-1500元`(**求购求租同一字段,无 rent_price**)
room / hall / toilet / floor 期望室/厅/卫/楼层**区间字符串**(`3-3`、`2-3`、`1`;未填 `-`)
area 期望面积**区间字符串**(`80-100m²`、`88-88m²`;未填 `-`)
latest_trace_dec 最近一次跟进描述(内部用,不进交付物)
last_follow_time / last_follow_time_zh 最后跟进时间 / 含「1天」人读版
click_num / dk_count / see_house_times 客源点击次数 / 带看次数 / 看房次数
created_at 客源录入时间
> ⚠️ 需求类字段(room / hall / toilet / floor / area / price / district / business)都是**区间字符串**、**空值写作 `-`**(2026-10-14 重庆环境实测),解析时按下界 / 上界拆开、剥单位,别当数字直接读。search_bargains 返回字段(已审核合同 · 2026-11-02 新增)
sign_time 合同**审核**日期(官方字段 fixtured_at),格式 Y-m-d ⛔ 不是"签订日"
bargain_type 合同类型:**买卖 / 租赁 / 其他** ← ✅ 判定租售就读这个字段
price 合同价格(单位随 bargain_type 变,见下方口径)
source_area 合同房源面积(㎡)
room / hall 室 / 厅
toilet / kitchen / balcony 卫生间 / 厨房 / 阳台✅ 合同类型判定(2026-11-04 官方上线
bargain_type,已实测确认)
bargain_type就是「交易类型」字段,取值 买卖 / 租赁 / 其他。判定租售一律读它,⛔ 不要再靠 price 量级猜。- 实测证据(新居里 12 条):
买卖2 条 → price 1,717,000 / 1,468,000(总价,元);租赁10 条 → price 2,200–3,300(月租,元/月)。类型与量级完全对应。- price 的单位随类型走:
买卖→ 售价总价(元);租赁→ 月租(元/月);其他→ 无固定口径,⛔ 不要自行换算或标注为总价,直接写「价格口径待确认」。- 引用成交价时必须同时写出类型(写「成交总价 171.7 万」或「成交月租 2,400 元/月」),⛔ 不能只写数字。
- 兜底(接口偶发不返该字段时):
price < 10000视为月租、>= 100000视为售价总价,中间地带不判。
✅ 已解决:租售判定改用
bargain_type(2026-11-04 官方上线)
- 11-02 的坑已闭环 —— 当时接口不标租售,只能靠 price 量级猜;现在官方补了
bargain_type(买卖 / 租赁 / 其他),直接读它。- 量级法降级为兜底(仅当该字段缺失时用):
< 10000= 月租、>= 100000= 售价总价,中间地带不判。- 仍要遵守的三条:① 引用成交价必须同时标注类型;②
其他类型的 price 无固定口径,写「价格口径待确认」;③ 买卖类可自校验(总价 ÷ 面积 应与同小区在库售价单价同量级:实测 171.7 万 ÷ 88.39㎡ = 19,425 元/㎡ vs 在库 22,424 元/㎡)。
另外三条口径:
sign_time是审核日(fixtured_at),不是签订日 —— 说「成交时间」时要说清是审核通过日。- 户型字段取自合同关联房源的当前房屋信息 —— 签约后改过户型的话,合同记录里显示的是改后的。
- 合同接口只给结果不给上下文:没有房源编号、楼栋/单元/房号、小区名、单价、朝向、装修、门店。归属哪个小区要用查询时传的
community_title回填。
get_source_videos 返回字段(房源视频 · 2026-11-02 新增)
add_time 视频记录创建时间(Y-m-d H:i:s)
video_link 视频完整链接⛔
video_link的域名含租户标识(实测形如https://oss.<租户域名>/<租户>/...)—— ⛔ 不得原样写进客户版 / 业主版交付物,对外只说「该房源有视频」或提供经授权的链接。
📋 取数字段白名单(按能力取,只取这些——控上下文成本)
取数只为下表字段服务:⛔ 不为模板之外的维度额外拉外网、额外查询;⛔ 不把原始 JSON 整段读进上下文——大结果一律落盘 → 用脚本 / jq 聚合 → 只把聚合结果读回来(见「查询策略」第 4 条)。
| 产物 | 必需字段(只取这些) |
|---|---|
| A / B 房源清单 | uuid;basic_info.community_title / district_name / business_name;house_info.room / hall / arch_square / decoration_level / community_type / delivery_at / direction;出售 sale_info.high_price / sale_unit_price / open_at(出租取 lease_info.lease_price / lease_open_at);statistics_info.current_source_status / created_at / click_num / seen_num / share_num / followed_at;配套四字段 house_info.heating_supply / gas_supply / elevator / statistics_info.supporting;看房条件信号 statistics_info.has_key / has_survey(有钥匙=随时能看、已实勘=认真带看过,议价与带看安排的高价值参考) |
| B 客源读取 | uuid / type / community_type / room / hall / area / price / district / business |
| C / F 单套报告 | 上述 A 全部 + house_info.cover_image、sale_info.sale_store_org / lease_info.lease_store_org、get_trace_info 跟进记录 |
| G 小区踩盘 | community_title 全量(出售+出租,按 room 1–6 分层补取)+ A 全部字段 |
| H 门店盘点 | extra_filters='{"store_org_name":"…"}' + uuid、house_info.room / community_type、sale_info.high_price、statistics_info.created_at / click_num / seen_num |
| D 片区研究 | 在库住宅挂牌(按户型 × 交付批次分层)+ 外网行情(分栏标注) |
| 成交参考(新) | search_bargains 全字段:sign_time / bargain_type(买卖·租赁·其他) / price / source_area / room / hall / toilet / kitchen / balcony;入参 community_title 或 source_uuid,可选 bargain_type 过滤(≤100 条,不分页) |
| 房源视频(新) | get_source_videos:source_uuid(必填)+ add_time / video_link;⛔ video_link 域名含租户标识,不进客户版 |
取多少条(避免无谓拉取):房源列表默认 page_size=50;要更多就显式加大(可到 5000+),要全量仍需翻页到空 + 按 uuid 去重(响应无总数)。合同 ≤100 条。视频按 source_uuid 逐套查。
三条纪律:
- ⛔ 楼栋 / 单元 / 房号(
ridgepole_name/unity_name/door_name)一律不查(房源定位信息禁区,见15-通用规格.md)。 - 兜底字段仍要取——
statistics_info.supporting取不到时写「未登记」,前提是取过;⛔ 不得因为"怕麻烦"而不取,那是漏字段不是省成本。 - 客源的等级 / 阶段 / 跟进原文只用于内部判断(意向强弱、议价空间),⛔ 不进清单文件、不进客户版报告。
查询策略(务必遵守)
- 单次返回上限(2026-11-02 已改):接口现已支持分页 ——
page_size实测可取到 5000+(无硬上限),page=1与page=2的 uuid 集合交集 0、连续翻 12 页零重复。⛔ 但响应不含总数、也不含任何分页元数据(只有 data 数组),所以仍然拿不到「一共有多少套」。取全量的正确做法:① 直接page_size=5000一次拉(请求数最少);或 ② 按room/arch_square/business_name分段,每段翻页到返回空 + 按uuid去重合并。注意接口限流(每分钟约 60 次),分段与翻页间隔勿过密。(旧口径「官方写最多 20 条不分页、实测单次上限 50 条」已作废,保留在下方历史说明里备查。) - 必做清洗:先按
house_info.community_type == "住宅"过滤,剔除车位/商铺再算价格分位数,否则均价被污染。 - 售租分查:
category=租售混合返回,建议出售、出租各查一次后按 uuid 去重,口径更干净。 - 大结果处理:单次响应超大时,结果会自动落盘为txt文件,用
jq按上面字段地图聚合,不要全量读入。 - 找单套房源:用
extra_filters='{"uuid":"<房源编号>"}'(uuid 为接口官方筛选参数,后缀模糊匹配,故传完整 uuid 最稳)。 - 查新增房源:
order="created_at"降序 → 本地按statistics_info.created_at过滤日期(日均录入量个位数时,需多分几天/几段查询拼齐)。 - A 查房找房 / B 客源匹配的完整取数与排序口径已移至
references/11-清单与候选组件.md「取数与排序口径」一节——命中 A / B 时在那里读(同户型 + 面积 ±10% / 候选池取全 / 剔非住宅 / 四项综合打分取前 20 / 输出字段与产出形态)。
数据口径提醒
- ERP数据与外网数据(58同城/安居客等)必须分开标注、不可混用;ERP为真实在库挂牌,外网为多口径行情。
- 挂牌价≠成交价,输出成交建议时说明推导逻辑(如挂牌均价×常见让价3-5%、税费对冲等)。
- 接口已返回门店与维护人信息:房源侧为
sale_store_org/lease_store_org(仅门店,无经纪人个人字段);客源侧为agent_name/org_name(维护人姓名与部门)。按人/店做统计时以这些字段为准,不要凭小区或区域推断归属。 - 门店、维护人姓名属内部经营数据:对客户/外部输出时避免直接暴露到个人粒度,内部经营分析可正常使用。
常见报错
| 报错 | 处理 |
|---|---|
| 缺少 base_url / AppKey / AppSecret | ⛔ 命中第 0 步「配置门禁」①:立即停下全部产出 → 按 references/01-首次配置.md 的"首次使用引导"向客户收集 → python3 scripts/setup_config.py 写入 → --check --test 自检 → 通过后补做原任务 |
| 接口报「签名错误」 | ⛔ 命中配置门禁②:立即停下 —— AppSecret 抄错(前后空格 / 全角字符 / 与 AppKey 填反),逐项核对后重配再继续 |
| 网络请求失败 / 500 / 响应不是 JSON | ⛔ 命中配置门禁③:立即停下 —— 先确认基域名(含 https://)与网络;仍不通让客户联系服务方,⛔ 不得改出半成品交付物 |
查询报 ModuleNotFoundError(缺 httpx 等) | 先装依赖:python3 -m pip install -r <技能目录>/requirements.txt(声明 mcp / httpx / uvicorn);客户端自带 python 常缺 httpx,首次查询前装一次即可 |
| 接口报 400「请求已过期」 | 这是时间问题,不是秘钥问题(秘钥错会报「签名错误」)。本技能的 X-Timestamp 取运行机器的本地时间,机器时区/时间不对就会被判过期。跑 python3 scripts/diagnose_time.py 定位:它用「本机时间 / UTC / 北京时间」各发一次,哪个通过就是服务端认的时间。国内服务端一般认北京时间 → 把该机器时区改成「北京 / Asia/Shanghai(UTC+8)」并打开自动对时,改完重跑 setup_config.py --check --test |
| 查到的房源/客源不在用户说的城市 | city 未配置或与用户当前城市不一致:补配置或每次查询显式传 city_name;search_clients 的 city_name 走 extra_filters |
| 连通性测试失败 | 核对基域名拼写(含 https://)与秘钥;仍失败让用户联系澜房ERP服务方确认接口权限 |
| 返回空结果 | 不一定是bug——该小区可能确实无在库房源;换 business_name 或放宽条件再试一次 |
| 结果被截断/不全 | 按"查询策略"第1条分段重查后去重合并 |
改了 config.json 里的凭证但没生效 | 不用重启客户端(取数链路每次调用都实时读配置);跑 --check 看生效值与逐字段来源 —— 同名环境变量会覆盖 config.json,若环境变量存在就以它为准 |
新增 / 修改了 MCP server 配置(mcp.json) | 需重启 AI 客户端 —— 这跟凭证无关,是客户端自身要重新加载 server 列表 |