# 公司附近租房信息自动调研 Skill

## 目标

给定一个公司名称和百度地图 AK，自动收集公司附近可租住候选地点，并结合地图通勤、公开网页口碑和大模型判断，生成一份可排序、可筛选、可追溯来源的 Excel 租房决策表。

这个流程适合用于：

- 新员工在公司附近找房
- HR/行政整理通勤友好的租房区域
- 个人比较多个小区、公寓、酒店式公寓
- 批量评估租金、房屋质量、生活便利和风险点

核心思想是：先用地图 API 获取“在哪里”和“通勤多远”，再用搜索 API 获取“住起来怎么样”，最后用大模型把零散证据压缩成评分和总结。

## 输入

必填：

- `company_name`：公司名称，例如“网易大厦”
- `baidu_ak`：百度地图开放平台 AK

可选：

- `radius_meters`：检索半径，默认 `5000`
- `poi_tags`：目标 POI 官方分类，默认 `["住宅区", "公寓式酒店"]`
- `commute_mode`：通勤方式，默认 `riding`
- `riding_type`：骑行类型，`0` 普通自行车，`1` 电动车
- `search_provider`：公开网页搜索服务，建议 `jina` 或 `tavily`
- `llm_provider`：评分总结模型，例如 Gemini、OpenAI 或其他兼容模型
- `output_path`：Excel 输出路径

## 输出

生成一个 Excel 文件，推荐表头如下：

| 字段 | 说明 |
| --- | --- |
| 名字 | 小区/公寓/酒店式公寓名称 |
| 类型 | 住宅区 / 公寓式酒店 / 其他用户指定 POI tag |
| 地址 | 百度地图返回地址 |
| uid | 百度 POI uid |
| 距离公司 | 建议单位为公里，数值类型 |
| 通勤时间 | 建议单位为分钟，数值类型 |
| 检索状态 | 成功(Jina)、成功(Tavily)、失败原因等 |
| 证据强度 | 0-10，表示公开资料是否丰富，不等于推荐度 |
| 有效来源数 | 搜索结果中有效网页数量 |
| 租房价格线索 | 从公开网页中抽取的月租、均价、价格区间 |
| 房子质量线索 | 隔音、户型、房龄、装修、物业、楼型等 |
| 生活便利线索 | 地铁、公交、商超、医院、学校、餐饮、周边配套等 |
| 风险/差评线索 | 噪音、老旧、漏水、物业差、停车难、疑似误命中等 |
| 来源 | 标题 + URL，便于人工复核 |
| AI评分 | 大模型综合评分，推荐 0-10 数字类型 |
| AI总结 | 一句话结论，建议不超过 50 个中文字 |

## 总体流程

1. 用户设置公司名称、百度地图 AK 和检索半径。
2. 调用百度地图地点检索 API，获取公司的 POI 信息，尤其是 `uid` 和坐标。
3. 调用百度地图地点检索 API，获取公司周边指定半径内的目标 POI，例如 `住宅区` 和 `公寓式酒店`。
4. 对每个候选 POI，调用百度地图路线 API，获取从公司 `uid` 到目标 `uid` 的通勤距离和时间。
5. 调用 Jina Search 或 Tavily Search，搜索候选地点的租金、房屋质量、生活便利、风险口碑等公开网页信息。
6. 抽取结构化证据，并保留来源 URL。
7. 调用 AI 大模型，根据地图通勤和公开网页证据生成评分与总结。
8. 导出 Excel，确保距离、时间、评分等字段为数值类型，方便排序。

## 步骤 1：获取公司 POI uid

先用百度地图地点检索能力搜索公司名称，拿到公司对应的 `uid`、地址和坐标。

模型执行时要注意：

- 如果搜索结果有多个同名地点，应优先选择城市、地址、公司名称最匹配的结果。
- 最好把候选公司 POI 列出来，让用户确认；如果上下文非常明确，也可以自动选择第一高置信结果。
- 后续路线计算优先使用 `uid`，避免坐标系或入口点偏差。

需要保存：

- `company_name`
- `company_uid`
- `company_address`
- `company_lat`
- `company_lng`

## 步骤 2：获取附近住宅/公寓 POI

调用百度地图地点检索 API，在公司周边半径内搜索目标官方 POI tag。

默认 tag：

- `住宅区`
- `公寓式酒店`

官方 POI tag 可参考百度地图开放平台文档：

https://lbs.baidu.com/index.php?title=open/poitags

执行建议：

- 每个 tag 单独查询，便于记录类型。
- 注意分页，直到没有更多结果或达到用户设定上限。
- 对返回结果按 `uid` 去重。
- 保留 `name`、`address`、`location`、`uid`、`area`、`city`、`province`。
- 不要只保留名字，后续搜索和消歧需要地址、区域和 uid。

## 步骤 3：获取通勤距离和时间

对每个候选 POI，调用百度地图路线 API。

推荐优先使用 `origin_uid` 和 `destination_uid`：

- `origin_uid`：公司 uid
- `destination_uid`：候选 POI uid
- `riding_type=1`：电动车

注意：部分百度路线接口仍要求 `origin` 和 `destination` 坐标参数存在。此时可同时传入坐标和 uid，但以 uid 作为地点锚点。

示例参数：

```text
origin=<company_lat>,<company_lng>
destination=<poi_lat>,<poi_lng>
origin_uid=<company_uid>
destination_uid=<poi_uid>
riding_type=1
ak=<baidu_ak>
```

返回值处理：

- `distance` 通常是米，Excel 中建议转成公里数字，例如 `1.42`
- `duration` 通常是秒，Excel 中建议转成分钟数字，例如 `8`
- 如果路线失败，应记录失败状态，不要静默丢弃该 POI

## 步骤 4：公开网页搜索口碑信息

对每个候选地点构造搜索 query。

推荐 query 模板：

```text
{name} 北京 {area} {address} 租房 租金 价格 隔音 户型 房龄 生活便利 配套 评价 怎么样
```

如果搜索结果过少，可降级为：

```text
{name} 北京 租房 价格 配套 评价
```

搜索服务建议：

- Jina Search：适合读取网页正文，能抓到更多页面内容，但可能消耗较多 token。
- Tavily Search：适合快速搜索和补齐缺口，结果结构轻量。

搜索结果需要保留：

- `title`
- `url`
- `description` 或 `content`
- `provider`
- `status`

过滤规则：

- 过滤验证码页、人机验证页、明显访问失败页。
- 过滤和目标城市/区域明显不符的结果。
- 对泛名小区要更谨慎，例如“青年公寓”“向阳院”“北京人家”。
- 如果来源疑似误命中，应把风险写进 `风险/差评线索` 或降低证据强度。

## 步骤 5：抽取结构化证据

从搜索结果中抽取四类信息。

### 租房价格线索

关注：

- `元/月`
- `万/月`
- `租金`
- `整租`
- `合租`
- `一居/二居/三居月租`
- `元/㎡` 或 `元/平方米`

注意：`元/㎡` 多数是二手房均价，不等同于租金。可以保留，但总结时要区分。

### 房子质量线索

关注：

- 隔音
- 噪音
- 户型
- 朝向
- 建筑年代
- 房龄
- 装修
- 板楼/塔楼/板塔结合
- 物业
- 楼梯房/电梯房
- 漏水、潮湿、老旧等风险

### 生活便利线索

关注：

- 距离公司
- 地铁、公交
- 商场、超市、菜市场
- 医院、学校
- 餐饮
- 周边配套
- 通勤路径

### 风险/差评线索

关注：

- 隔音差
- 噪音大
- 老旧
- 物业差
- 停车难
- 人员复杂
- 采光差
- 漏水
- 虫害
- 距离地铁远
- 搜索结果误命中

## 步骤 6：证据强度评分

证据强度不是推荐评分，而是“资料可信程度/丰富程度”。

建议规则：

- 有 3 个以上有效来源：+2
- 有明确租金线索：+2
- 有房屋质量/房龄/户型线索：+2
- 有生活便利线索：+2
- 有明确风险线索：不扣证据强度，但提醒模型评分时考虑
- 明显误命中、泛化内容过多：降低 1-3 分

输出范围建议为 `0-10`。

## 步骤 7：AI 评分和总结

把每个候选地点的结构化证据交给大模型，生成：

- `AI评分`：0-10，数字类型
- `AI总结`：一句话，尽量短，直接说明适合/不适合的原因

推荐评分逻辑：

- 通勤越短越好
- 租金越可接受越好
- 房屋质量、房龄、户型、隔音越明确且越正向越好
- 生活便利性越强越好
- 风险越多评分越低
- 证据越弱评分越保守

推荐 prompt：

```text
你是租房决策分析助手。请基于候选地点的地图通勤和公开网页证据，给出适合在公司附近租住的综合评分和一句话总结。

评分范围为 0-10，越高表示越推荐。
综合考虑：
1. 通勤距离和时间
2. 租金可接受性
3. 房子质量、房龄、户型、隔音、物业
4. 生活便利程度
5. 风险/差评
6. 证据充分性

如果证据很弱、来源疑似误命中或只有泛化网页，评分要保守。
不要编造未给出的事实。

只返回严格 JSON：
[
  {
    "id": 0,
    "score": 7.5,
    "summary": "不超过50个中文字的结论"
  }
]
```

建议批处理：

- 每批 4-8 个地点
- 每个地点只传精简证据，避免 prompt 过长
- 缓存模型结果，失败后可断点续跑
- 最终检查每条是否都有评分和总结

## 步骤 8：Excel 输出规范

Excel 应满足：

- 每个候选地点一行
- 距离、时间、评分为数字类型，不要带单位文本
- 文本字段可以较长，但不要把整篇网页正文塞进单元格
- 来源字段保留标题和 URL，便于人工复核
- 加上 `检索状态`，区分 Jina/Tavily/失败原因
- 加上 `证据强度`，避免用户过度相信弱证据总结

推荐排序：

1. `AI评分` 降序
2. `通勤时间` 升序
3. `租房价格` 或价格线索人工筛选
4. `证据强度` 降序

## 数据质量注意事项

### 1. uid 优先于坐标

百度路线计算尽量使用 `origin_uid` 和 `destination_uid`。只用经纬度可能出现坐标体系、入口点或 POI 对齐偏差。

### 2. 搜索结果不等于真实口碑

Jina/Tavily 抓取的是公开网页，常见来源包括房产平台、租房平台、酒店平台、地图页面、攻略文章。它们不等同于真实住户访谈。

### 3. 租金线索要分辨类型

同一列里可能出现：

- 月租
- 二手房均价
- 酒店日租/短租价格
- 区域均价
- 错误命中的其他城市或其他小区价格

AI 总结应保守，必要时写明“价格线索混杂”。

### 4. 泛名地点需要人工复核

例如：

- 青年公寓
- 向阳院
- 北京人家
- 学生公寓
- 某某社区

这些名字容易命中同名或泛化网页，应结合地址、区域、来源标题人工复核。

### 5. 酒店式公寓和长租公寓要区分

`公寓式酒店` 可能更偏短租或酒店住宿；如果用户目标是长期租房，应在 AI prompt 中要求模型识别短租属性并降低长期居住推荐分。

## 推荐实现结构

```text
project/
  config.json
  data/
    company.json
    poi_candidates.json
    commute_routes.json
    search_cache_jina.json
    search_cache_tavily.json
    ai_summary_cache.json
  outputs/
    rent_research.xlsx
  scripts/
    01_get_company_uid.*
    02_fetch_nearby_pois.*
    03_fetch_commute.*
    04_search_reputation.*
    05_ai_score.*
    06_export_excel.*
```

## 断点续跑策略

每一步都应该缓存结果：

- 公司 uid 缓存
- POI 列表缓存
- 路线结果缓存
- 搜索结果缓存
- AI 评分缓存

缓存 key 推荐：

- 路线：`{company_uid}->{poi_uid}:{commute_mode}:{riding_type}`
- 搜索：`{poi_uid}:{name}:{provider}`
- AI：`{poi_uid}:{name}:{evidence_hash}:{model}`

这样可以避免重复消耗 API 额度，也方便在某个 API 余额不足时换服务继续补齐。

## 最小可用版本

如果只想快速跑通，可以先做以下字段：

- 名字
- 类型
- 地址
- uid
- 骑行距离
- 骑行时间
- 租房价格线索
- 房子质量线索
- 生活便利线索
- 风险/差评线索
- 来源
- AI评分
- AI总结

## 大模型执行提示

当你作为大模型执行这个 skill 时：

1. 先确认用户是否提供公司名称和百度 AK。
2. 如果没有半径，默认 5km。
3. 如果没有 POI tag，默认 `住宅区` 和 `公寓式酒店`。
4. 地图路线优先使用 uid。
5. 搜索结果必须保留来源 URL。
6. AI 总结不得编造证据之外的信息。
7. Excel 中距离、时间、评分必须是数字类型。
8. 如果某个 API 余额不足或失败，记录状态并支持换 API 继续补齐。
9. 最终交付前检查：总行数、空值、失败状态、数值列类型、输出文件路径。

## 示例配置

```json
{
  "company_name": "网易大厦",
  "baidu_ak": "<BAIDU_AK>",
  "radius_meters": 5000,
  "poi_tags": ["住宅区", "公寓式酒店"],
  "commute": {
    "mode": "riding",
    "riding_type": 1
  },
  "search": {
    "providers": ["jina", "tavily"],
    "max_results_per_poi": 8
  },
  "ai": {
    "provider": "gemini",
    "model": "gemini-3-flash-preview",
    "score_range": [0, 10]
  },
  "output": {
    "format": "xlsx",
    "path": "outputs/rent_research.xlsx"
  }
}
```

## 交付检查清单

- [ ] 公司 uid 已确认
- [ ] POI tag 使用官方分类
- [ ] POI 已按 uid 去重
- [ ] 通勤距离和时间已获取
- [ ] 距离、时间为数字类型
- [ ] 搜索结果有状态和来源
- [ ] 价格/质量/便利/风险证据已抽取
- [ ] AI 评分和总结已生成
- [ ] AI 评分为数字类型
- [ ] Excel 可排序、可筛选
- [ ] 失败项已明确标注原因

