Skip to content

会议室推荐与排序算法逻辑 (v3.0) ​

1. 算法背景 ​

在"空间运营官 (SA)"的会议预约场景中,系统需要根据用户输入的模糊需求(如:"定个10人的会议室"、"明天下午两点开会")或明确需求(如:"定一下 A-101"),从海量空间资源中通过两段式筛选(向量召回+忙闲精排)得出最优推荐。


2. 评分逻辑体系 ​

推荐总分 Score 根据用户请求是否包含"语义意图(明确地点)"分为两种计算策略。

2.1 基础权重定义 ​

权重项缩写定义当前状态
向量相似度Sim用户输入的 room_entity 与空间别名在向量库中的语义匹配分值✅ 使用中
容量适配度Fitcap衡量房间容量与用户人数需求的契合度✅ 使用中
基础房间权重Wbase映射后台配置的房间优先级权重(如:VIP室=1.0, 常用室=0.8)⏸️ 预留(当前混合检索未消费)

2.2 容量适配度 (Fitcap) 计算公式 ​

Fitcap=1−RoomCapacity−UserCapacityRoomCapacity

逻辑原则:优先推荐能坐满、且不浪费大空间的房间。


3. 排序策略分发 ​

策略 A:明确指定地点 (Has Semantic) ​

  • 适用场景:用户提到具体房间名、编号或别名(如"帮我订305")。
  • 理论公式:Score=(Sim×0.9)+(Wbase×0.1)
  • 实际执行:由于混合检索未消费 Wbase,当前实际等效于:Score=Sim
  • 逻辑说明:用户明确指定了地点,系统应完全基于语义匹配度排序,确保推荐用户真正想要的会议室。

策略 B:无指定地点 (No Semantic) ​

  • 适用场景:用户仅提供容量或时间需求(如"订个10人的会议室")。
  • 理论公式:Score=(Fitcap×0.6)+(Wbase×0.4)
  • 实际执行:由于混合检索未消费 Wbase,当前实际等效于:Score=Fitcap
  • 逻辑说明:用户未指定具体会议室,系统应优先推荐容量利用率最高的空间,避免大空间闲置、小空间拥挤。

4. 会议室匹配与推荐逻辑 (Room Matching & Recommendation) ​

当用户指定会议室时,系统通过向量搜索匹配会议室,并根据匹配度判断是否"找到"或"推荐"。

4.1 核心流程 ​

用户指定会议室(如"8楼的会议室")
    ↓
调用后端接口,阈值=0,返回前N个结果(默认N=3)
    ↓
Workflow判断:是否有 score > 前端判断阈值(默认0.5)的?
    ↓
├─ 有 → "找到了",展示高分会议室
└─ 没有 → "未找到,但推荐了这些"

4.2 关键参数(可配置) ​

参数说明默认值
后端接口阈值调用接口时传的阈值,设为0确保返回结果0
前端判断阈值Workflow判断是否"找到"的阈值0.5
返回数量接口返回的会议室数量3

4.3 场景与话术 ​

场景判定条件Agent 话术
找到了有 score > 前端判断阈值的会议室"已为您找到会议室如下"
未找到但推荐所有 score < 前端判断阈值"抱歉,未找到您指定的会议室,为您推荐了以下会议室"

4.4 与原有策略的关系 ​

  • 策略 A(明确指定地点):适用于用户提到具体房间名、编号或别名的场景
  • 策略 B(无指定地点):适用于用户仅提供容量或时间需求的场景,不存在"匹配度低"的问题,直接搜索所有会议室

5. 开发实现建议 ​

  1. 相似度阈值策略:
    • 阈值设定:向量检索结果中,相似度评分 ≥0.6 的房间直接保留推荐
    • 低分处理:相似度 <0.6 的房间不进入候选列表,避免低质量推荐
  2. 召回精度:向量检索时应利用 Payload 中的 entity_type 和 cap_tags 标签进行 前置过滤 (Pre-filtering)。例如在预约流程中,仅检索具备 meet 能力的空间实体,以规避同名设备的干扰。

6. 场景模拟与跑分示例 (Scenarios & Examples) ​

示例 1:指定房间 (意图保护机制) ​

  • 用户意图:"帮我订一下 305 会议室"
  • 候选集数据:
    1. 305 (研发厅):Sim=0.99,Wbase=0.2 (预留)
    2. 306 (总裁办):Sim=0.85,Wbase=1.0 (预留)
  • 计算结果 (策略 A):
    • 305 得分:0.99 ✅ (排第一)
    • 306 得分:0.85
  • 结论:系统基于语义匹配度排序,准确推荐用户指定的 305。Wbase 保留但当前未参与计算。

示例 2:模糊预约 (容量择优机制) ​

  • 用户意图:“订一个 10 人的会议室”
  • 候选集数据:
    1. 火星厅 (12 人):RoomCap=12,UserCap=10,Wbase=0.5 (预留)
    2. 太阳厅 (30 人):RoomCap=30,UserCap=10,Wbase=0.8 (预留)
  • 算法逻辑 (Fitcap):
    1. 火星厅 Fit:1−(12−10)/12=0.83
    2. 太阳厅 Fit:1−(30−10)/30=0.33
  • 计算结果 (策略 B):
    • 火星厅得分:0.83 ✅ (排第一)
    • 太阳厅得分:0.33
  • 结论:系统优先推荐容量利用率最高的“火星厅”。Wbase保留但当前未参与计算。

示例 3:冲突平替 (降级推荐机制) ​

  • 场景描述:用户指定 305,但系统中不存在该会议室,或 305 在该时段已被占用。
  • 执行路径:
    1. 触发 Case 1:剥离名称限制,在当前时段检索 Capacity≥305Capacity 的空余房间。
    2. 产出列表:找到同规格的 307 及 308。
    3. 最终输出:向用户返回“抱歉,未找到您指定的会议室(305),为您推荐同规格的 307 或 308”。

Released under the Private License.