火盘商业地产房源检索
火盘房源库的对外检索入口,已上线的 MCP 服务,只有一个工具 search_listings。
把用户的原话整句传进去,服务端自行拆成检索条件,返回结构化房源。
一、输出格式
回复由三部分按序组成:
- 一行汇总 —— 命中总数、展示条数、实际生效的条件(取自
applied_conditions) - 每套房源一张卡片 —— 结构照下面这份原样套用,只替换数据
- 一句收尾 —— 只说返回值支持的事实:结果跨了哪些维度(
unspecified)、 库里覆盖情况、条件可以怎么调;要不要顺势追问一两句,见「需求挖掘」一章
卡片结构:
> #### 01 [机场城市航站楼](详情页地址) ★最推荐
>
> 
>
> 📍 上海 静安区 `写字楼` `209㎡` `出租` `甲级`
>
> ### 5.0 元/㎡/天
>
> > ✨ 这套面积 209 平,正好卡在 200 平左右,日租金 5 块,在静安甲级楼里性价比不错。
逐行说明:
| 行 | 内容 |
|---|---|
| 标题 | 两位序号 + 项目名(项目名本身挂 detail_url,不另起一行放链接);第一套加 ★最推荐 |
| 封面图 | 这一行每张卡都有。有 image_url 用它:;没有就按卡片序号在下面四张占位图里轮换(01→a、02→b、03→c、04→d、05 回到 a),与火盘站内无图卡片同一套 |
| 位置与胶囊 | 同一行:📍 + address,接着业态 → 面积 → 租售 → 标签(最多 3 枚)→ Cap 回报率(有才加),每枚用反引号 |
| 价格 | 有 price_text 用它,### 放大成卡片主角;没有 price_text 但有 price_reference → 按下面「商圈参考区间」写,不放大;两个都没有 → 一行 💰 价格待确认,不放大 |
| 自述 | 嵌一层引用 + ✨ + description,可裁剪可摘要 |
封面图是站外直链,直接放进 Markdown 图片语法即可,不要改写、不要截断参数; 个别图加载失败就失败,卡片其余内容照常。
无图房源的占位图(按序号轮换):
https://www.hpan.com.cn/listing-covers/prop-cover-a.png
https://www.hpan.com.cn/listing-covers/prop-cover-b.png
https://www.hpan.com.cn/listing-covers/prop-cover-c.png
https://www.hpan.com.cn/listing-covers/prop-cover-d.png
占位图只是版面兜底,不是该房源的实拍——文字里不要描述或引用它。
商圈参考区间(缺价房源的价格位)
缺价房源可能带 price_reference——所在商圈同业态的参考区间,不是这套房源的报价。
价格位写成两行、不放大:
> 📊 商圈参考 2.5~7.6 万元/㎡
>
> *以上为 花木 商圈同类物业价格区间,实际报价以沟通为准*
- 第二行口径说明必须跟着出——只给数字,用户会把商圈均价当成这套房源的报价。
scope=city表示该商圈没有数据、已退到全市口径:口径名写「所在城市」(如 以上为上海同类物业全市价格区间,实际报价以沟通为准),不能挂商圈名。- 区间不代表该房源报价,不要拿它参与你的任何比较、排序或计算结论。
Cap 5.2% 这类含空格的胶囊,空格用不换行空格(U+00A0),窄屏时才不会被从中间劈开。
整卡包在块引用里——渲染器自带的左竖线与浅底就是卡框,不要用任何 HTML 标记(<br>、<div>
在部分平台会被吞掉或原样显示)。多套房源就是多个这样的块引用。
数据只用返回里有的
返回值里没有的字段一律不出现在卡片里。 距离、车程、地铁几号线、周边配套、竣工年 都不在返回值里。可以基于已有事实做推断,但要写成推断的语气,不能当事实陈述—— "从行政区看离陆家嘴不远" 可以,"车程 5 分钟" 不行。
面积、价格缺失时写 面积待确认 / 价格待确认,不省略、不猜。缺失的字段不会以 null 出现,
而是整个键都不在返回值里。
二、需求挖掘 —— 需求模糊时怎么追问
用户一句话说不全很正常。需求模糊时,可以适当追问一两个问题——先问再查,或先按现有 信息查出来、在收尾里顺势问,都行。问不问、问哪个、怎么问,由你按对话语境判断,不是必答项。
最值得先问清的是三样:租还是买、什么类型的物业、哪个城市——缺了它们,结果会横跨 租售 / 业态 / 城市。再往下,值得问的就是下面这张表——库里存了这些维度的料,问到的答案 能用来收窄或排序结果;表外的维度问了也大概率对不上库。
| 适用 | 可问的维度 |
|---|---|
| 通用 | 面积、城市、行政区、商圈或地标、楼层、楼龄、可入驻时间、车位 |
| 找租的 | 租金单价、月租预算、租金含不含物业费、物业费、免租期、租期、现在有没有在租 |
| 找买的 | 总价预算、回报率、出租率、交易结构、产证能不能分割、土地剩余年限 |
| 写字楼 | 楼宇等级、装修程度、标准层面积、得房率、电梯数量、绿色认证、行业用途、有没有集中运营 |
| 商铺 | 打算做什么业态、是不是重餐饮、要不要烟道、铺位位置、装修程度、水电燃气到位没有 |
| 厂房 | 净高、楼面承重、消防等级、土地用途 |
| 仓储物流 | 净高、楼面承重、卸货平台形式、消防等级 |
| 产业园 | 产业方向、楼宇等级、装修程度、标准层面积、净高、有没有园区运营 |
| 公寓 | 产品定位、房间规模、运营方式 |
| 酒店 | 星级、品牌、定位、客房规模、管理方式 |
三条判断:
- 用户已说清的别再问——问一句他刚说过的话最伤对话。
- 能从用途推断的别问:开火锅店自然要烟道、要重餐饮,这类不必问用户——把用途原话
留在
query里,服务端会自己推。真正值得问的是不问就猜不到的:预算、面积、位置偏好。 - 追问到的补充合回下一次调用的
query整句,不用自己拆字段,服务端自行拆解。
每次返回另带两个动态信号帮你省判断(见「返回字段」):unspecified = 这次哪几个必填
没说清;askable = 按这次已定的业态、剔掉已说清之后剩下的可问维度名。
三、怎么调
POST http://101.42.15.203:8333/api/ai/mcp
Content-Type: application/json
Streamable HTTP 传输,无状态、无鉴权。不需要 initialize,也不需要先 tools/list——
第一个请求就可以是 tools/call。典型耗时 3~5 秒。
平台只支持旧式 SSE 时改用 GET /api/ai/mcp/sse(有状态,须先在同一条流上握手)。
浏览器打开 /api/ai/mcp/info 可看服务与工具声明。
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_listings","arguments":{
"query":"我要在上海陆家嘴附近租一个开火锅店的铺子,400平左右,要有烟道",
"caller":"doubao","limit":6}}}
| 参数 | 说明 |
|---|---|
query(必填) |
用户的找房需求整句。尽量保留原话细节:城市、商圈地标、面积、预算、用途、设施要求 |
caller |
你所在平台名,如 doubao / qwen / kimi / workbuddy,仅用于服务端用量统计 |
limit |
返回条数,1~20,默认 5 |
房源在 result.structuredContent;result.content[0].text 是同一份数据的文本副本。
result.isError 为 true 时,content[0].text 就是失败原因。
四、返回字段
顶层:
| 字段 | 含义 |
|---|---|
applied_conditions |
服务端拆出并实际生效的条件(含 semantic_query、soft_tags) |
unspecified |
用户没说清、因而没作为条件的必填项(租还是买 / 什么类型的物业 / 哪个城市)。非空说明结果跨了这些维度——房源照常返回,要不要问清见「需求挖掘」 |
askable |
「需求挖掘」那张表的动态版:按这次已定的业态、剔掉已说清之后剩下的可问维度名 |
total_matched / returned |
命中总数 / 本次返回条数 |
recall_channel |
hybrid 混合检索;project_name 用户指名了某栋楼 |
listings |
房源列表 |
relax_options |
仅 0 命中时出现:各放宽一个条件分别能出多少套 |
library_overview |
仅 0 命中时出现:在库房源的城市、业态、租售分布统计 |
每条房源:
| 字段 | 含义 | 是否总有 |
|---|---|---|
title |
项目名 | 是 |
address / city / district |
地址、城市、行政区 | 是 |
property_type |
业态中文名 | 是 |
transaction_type_label |
出租 / 出售 | 是 |
area_sqm |
面积数值(㎡),展示时带千分位、单位紧贴 | 常缺 |
price_text |
可读价格,如「5.0 元/㎡/天」「3.2 亿元」 | 常缺 |
cap_rate |
回报率数值,展示成 Cap 5.2% |
稀疏 |
tags |
特征标签 | 是 |
description |
房源自述(业主或代理填的原文) | 是 |
detail_url |
官网详情页地址 | 是 |
image_url |
封面图直链,放进卡片的图片行 | 常缺(缺时键不存在,图片行改用占位图轮换) |
price_reference |
缺价房源的商圈参考区间 {min, max, unit, scope, area_name};scope=city 为全市兜底口径 |
仅缺价房源可能有 |
rent_unit_price / total_price_wan 等 |
可参与计算的原始数值 | 看数据 |
五、一条都没命中
relax_options 给出各放宽一个条件分别能出多少套,library_overview 给出在库房源真实分布。
据这两组数字说明库里覆盖什么、建议往哪个方向放宽。
六、关于这个库
- 只有商业地产,不含住宅类交易(住宅租售、二手房、自住公寓查不到)。
- 在库 998 套:出售 748 / 出租 250;上海 776 套,其余为杭州 74、深圳 37、广州 29 等; 业态以写字楼 576 最多,酒店 135、产业园 112、商铺 103、公寓 53、厂房 19。 冷门城市或冷门业态本来就少,命中数低不代表调用失败。
- 条件精确到行政区;商圈与地标只影响排序,不作硬性筛选(库里没有商圈字段)。 用户说「陆家嘴」,返回的是浦东新区的房源,未必正好在陆家嘴——把行政区如实写出来。