资讯详情

LLM驱动室内场景布局生成:基于Human-aligned数据合成的新方案

📅 2026/10/18 13:57:24 | 华诺云谱 👁 阅读
LLM驱动室内场景布局生成:基于Human-aligned数据合成的新方案
过去一年我花了不少精力在一个很有意思的方向上让大模型直接参与室内场景布局的生成项目代号就叫 OptiScene定位是一个面向学术会议投稿的研究项目核心命题是LLM-driven Indoor Scene Layout Generation via Scaled Human-aligned Data Synthesis——翻译成大白话就是用 LLM 来驱动室内布局生成并且靠规模化、符合人类使用直觉的合成数据来托底。这个题目的难点不在“能用 LLM 摆家具”而在于三个字像人摆的。很多生成结果乍一看没问题床在卧室、沙发在客厅但你住进去会觉得处处别扭——衣柜打不开、动线绕远、餐桌离厨房隔着整个客厅。OptiScene 想解决的正是这个“结构合理但体验糟糕”的老问题。这篇文章我会把整个项目的设计思路、数据合成管线、模型训练与评估、以及我踩过的坑全部整理出来。无论你是做具身智能、3D 场景生成、室内设计自动化还是单纯对 LLM 做结构化输出感兴趣这篇应该都能给你一些可复用的经验。不废话直接进正题。1. 项目整体设计与核心思路1.1 为什么室内布局生成非 LLM 不可先聊一个根本问题以前做布局生成是怎么做的大致分三派。一派是规则驱动人工定义大量约束比如“床必须靠墙”“客厅沙发到电视的距离在 1.8 米到 3 米之间”“床不能挡住衣柜门”。这类方法在小范围、固定户型里非常稳但规则一多就开始互相打架而且是典型的“长尾地狱”——你能列举 100 条规则但真实房子里有 900 种你想不到的别扭情况。第二派是数据驱动收集真实的人类设计案例拿扩散模型或自回归模型直接回归家具坐标。问题是真实带标注的室内布局数据非常稀缺而且采集成本极高涉及隐私、户型多样性、标注一致性等一系列麻烦。训练出来之后泛化到没见过的户型上基本靠运气。第三派是检索式从库里找相似户型拷贝布局。这方法看着聪明但本质上是在做“记忆”碰到组合新颖的需求就歇菜。OptiScene 选择 LLM 作为核心驱动不是因为噱头而是因为布局生成骨子里是一个**“语义理解 空间推理 约束满足”的混合问题**。LLM 最擅长的恰恰是语义理解它知道厨房要靠近餐厅而不是卧室知道主卧床的朝向应该避开窗户直射知道两米的过道走起来舒服、半米就让人烦躁。这些是常识不是规则。但我也要泼一盆冷水LLM 绝对不适合直接输出像素级坐标。它生成的数字不稳定、几何直觉差直接回归边界框坐标会让你怀疑人生。所以 OptiScene 的路线是分工协作——LLM 负责输出语义层面的布局意图和约束偏好底层几何优化器负责把这些意图变成精确坐标。用个生活化类比LLM 是设计师先告诉工人“这里放一张双人床床头靠北墙床尾要留出至少 60 公分走道”底层的几何求解器是工人精准地执行并把距离卡到位。设计师拍板方向工人保证不碰线。1.2 “Human-aligned Data”到底在解决什么再看标题里的另一块Scaled Human-aligned Data Synthesis。这是整个项目里我认为最值钱的部分。先说一个残酷的现实真实布局数据的天花板很低。业内常用的公开数据集虽然质量高、标注规范但户型类别、家具组合、风格覆盖都有限。你要是只在真实数据上训练模型无论如何都逃不出数据集的“舒适区”——这也是很多生成模型“一泛化就露馅”的根源。答案似乎很明显合成数据。程序生成的海量布局样本想要多少有多少户型可以随机切、家具可以任意组合。但问题立刻来了——程序生成的样本大量都是“物理正确但人类觉得荒谬”的。床能摆、坐标没越界、家具没碰撞但人走不进房间、衣柜门被床顶死、沙发背对着电视。这就是典型的合理但不实用。Human-aligned 这个概念就是为了对冲这个荒谬感。它不是简单地加一个“物理碰撞检测”过滤器而是要套上人的使用直觉去筛选和生成数据。具体到 OptiScene我们做了三层对齐合理性过滤让布局既满足物理约束也满足功能约束动线、可达性、视角关系。多样性控制不是所有合成样本都是标准三室两厅长尾户型、异形房间、特殊家具组合要按难度分层混入。偏好校准拿少量真实人类评分或者 LLM 模拟的人类偏好去调整合成样本的分布让模型学到的不是“平均布局”而是“人类偏爱的好布局”。这套思路说起来简单做起来全是细节。比如怎么定义“动线合理”是单纯算走道宽度还是用寻路算法模拟人从门口走到每个家具我们后来都做了而且每一项都会显著影响最终布局的用户体验分。1.3 技术路线两段式方案而不是端到端硬怼OptiScene 的整体架构我把它概括为“语义驱动 数值求解”的两段式管线。第一段叫Layout Planning布局规划输入是房间的边界多边形、门窗位置、户型语义卧室/客厅/厨房等以及用户偏好提示比如“希望客厅宽敞”“想要亲子活动区”。LLM 在这里完成两个任务一是生成家具类别清单和摆放顺序二是输出每件家具与房间、其他家具之间的空间关系描述。注意是关系描述不是绝对坐标。第二段叫Layout Solving布局求解把 LLM 输出的语义关系翻译成一组带权重的约束条件交给数值优化器去求解家具的最终位置与朝向。这一步处理碰撞检测、边界约束、走道预留、朝向调整等几何硬要求。为什么不直接让 LLM 输出坐标然后收工我试过效果很糟糕。原因有两个第一LLM 的坐标回归本质上是在做“模糊记忆”不同户型之间的数字分布差异很大输出极不稳定第二即使坐标看起来合理也常常出现 1-2 厘米的重叠或越界这在渲染层面是致命的穿模。把几何包袱甩给求解器LLM 只需要表达“哪个房间、有什么家具、大概什么关系”能力边界刚好匹配。这个两段式设计还有一个额外的好处每一步都可调试。布局规划不合理那就改 prompt 或者微调语义模型布局求解穿模那就调硬约束权重。而不是像端到端模型那样出了问题只能盲调 Loss。2. 核心方法拆解从输入到布局的每一步2.1 输入表示和提示词设计——LLM 看得懂的门道既然要让 LLM 做布局规划第一件事就是把它能看懂的信息组织好。我的经验是不要给 LLM 一张户型图图片它看不懂坐标几何也不要用大段自然语言堆砌数字淹没在文字里输出格式一乱整个人就崩。OptiScene 用的是“分层结构化提示”第一层房间拓扑描述。每个房间的 ID、名称、多边形顶点坐标归一化后、面积、相邻关系。第二层门窗信息。门的位置和朝向、窗外景色有的话因为床和沙发的朝向受它们影响很大。第三层用户约束偏好。比如风格倾向、特殊功能要求或者硬性的“必须保留餐桌六人位”。下面是一个简化但保留了完整结构的 Prompt 模板实际项目里我们在里面加了更多细节约束但主干就是这个结构。请根据以下户型信息生成该户型中 [房间名] 的家具布局计划。 户型全局 - 户型ID: apt_001 - 总边界: [(0,0), (8.0,0), (8.0,6.0), (0,6.0)] - 房间列表: - living: 多边形 [(0,0), (8.0,0), (8.0,4.0), (0,4.0)], 面积32, 南向窗 - dining: 多边形 [(0,4.0), (4.0,4.0), (4.0,6.0), (0,6.0)], 面积8, 连接living西侧 - kitchen: 多边形 [(4.0,4.0), (8.0,4.0), (8.0,6.0), (4.0,6.0)], 面积8, 连接餐厅和入口 - 入户门: 在 kitchen 北墙中心开门方向朝南 当前需要规划的房间: living 可用家具类别白名单 sofa, coffee_table, tv_stand, floor_lamp, bookshelf, rug, plant 约束要求 - 沙发不要正对电视柜距离 4米 - 茶几与沙发间距 0.45米 - 主走道宽度 0.9米 请输出 JSON包含 1. picked_furniture: 物品清单 2. furniture_order: 摆放优先级从大到小先放主件 3. relations: 每个家具的空间关系描述靠墙/居中/贴xx南侧等 4. reasoning: 一句布局逻辑的原因 只输出 JSON不要多余文字。这个 Prompt 里有几个细节是我后来反复打磨出来的非常重要。第一白名单机制。刚开始不用白名单模型输出一堆“瑜伽垫”“吊椅”“吧台”这种可有可无的家具而且同一户型每次生成家具种类还飘忽不定。加了白名单之后不仅输出稳定后面的几何求解器也好处理类别集合是有限的。第二输出格式拆成“清单 顺序 关系 理由”。让 LLM 先列家具清单再排摆放顺序再描述关系最后补理由这本质上是把复杂问题拆解成序列决策。加不加 reasoning 字段对最终布局质量有明显影响——加了之后模型会更克制因为它要“自圆其说”。我推测是把部分推理过程显式化之后模型内部的语义一致性更强了。第三显式输入“连接关系”。比如餐厅和厨房相邻这会让 LLM 规划门洞位置和家具朝向时有据可依。如果只给房间多边形它经常会把餐桌放到远离厨房的一端功能上就说不过去。2.2 布局生成主线流程先分区、再排主件、最后补小件整个布局生成的流水线OptiScene 把它分成五个环节顺序很关键不建议跳第一步空间分区Space Zoning。不只针对单个房间而是对整个户型做功能区划分。比如客厅和餐厅在同一个大开间里到底哪边是沙发区、哪边是餐桌区LLM 会结合门洞位置、动线、采光来确定分界线。这一步很多人忽略但对大平层和开间户型来说它直接决定后面所有家具摆放的锚点。第二步主件匹配Primary Furniture Selection。每个房间先确定 1-2 个核心主件。客厅是沙发电视柜卧室是床衣柜餐厅是餐桌餐椅。主件定了房间的功能基调其他家具都是绕它们转的。第三步主件定位Primary Placement。依据 LLM 给出的关系描述比如“沙发靠南墙电视柜在与沙发相对的北墙”先摆放这些大件。这一步是几何求解器介入的第一关键点因为主件位置决定了整个房间的动线骨架。第四步次件补齐Secondary Furnishing。茶几、落地灯、边柜、地毯这些次件在主件定好的“剩余空间”里找位置。一个很实用的策略是次件优先放在主件围合出的“使用核心区”边缘不要放到动线通道上。几何求解器本质上是跑一遍空间约束求解给这些次件找一个局部最优。第五步全局校验与微调Global Validation。所有房间都放完之后还要做跨房间的检查。这步在单房间规划时完全不需要但只要涉及多房间就得做——比如两个房间的家具都顶在公共墙上那面墙后面可能是另一件家具的必经通道。这一步会用全户型的碰撞、可达性和走道检测做一轮全局筛选。说一个我们最初在这条流程上吃过的亏我们一开始把主件和次件放在同一个求解阶段处理结果大量次件抢占主件空间、或者把房间塞得太满后面删除重排的成本极高。后来改成“主次分离、顺序摆放”物理合理率直接提升了近 20 个百分点。经验就一句话先定骨架再补血肉。2.3 约束体系是怎么设计的——从“几乎不能用”到“基本能住”LLM 给出的关系描述是语义层面的比如“沙发和电视柜距离适中”“茶几离沙发近一点”但这些描述落地到几何求解必须变成可计算的约束函数。OptiScene 把约束分成三档分别用不同的方式处理。硬约束Hard Constraints违反则布局作废所有家具多边形必须完全在房间边界内。任意两件家具的多边形不能相交允许极小的接触但不能重叠。门开启范围内不能放置任何家具。主走道宽度不低于阈值默认 0.8 米密集户型降到 0.6 米。软约束Soft Constraints违反则目标函数加惩罚分但不直接淘汰每件家具到其使用主件的距离要在合理范围比如茶几到沙发的间距 0.4-0.6 米。床的朝向避免床头正对窗户。客厅电视柜与沙发的视线距离在 1.8-3.5 米之间。餐桌到厨房或冰箱的动线距离尽量短。偏好约束Preference Constraints来自 LLM 语义描述或用户输入“客厅要显得开阔”——转化为客厅大件家具的总投影面积不超过房间面积的 35%。“希望书架靠近阅读角”——转化为书架到单人沙发的距离要小于书架到电视柜的距离。“儿童房要留出活动区”——转化为房间中部至少保留一个直径 1.5 米的空闲圆圈区域。这里有个工程上的核心技巧软约束和偏好约束都要给权重而且权重得设计成可调的。刚开始我们所有约束权重都一样结果求解器经常为了满足一条“餐桌到厨房近”的偏好把餐桌塞进厨房门口导致动线被切断。后来把动线类和碰撞类约束权重调高一个量级把风格类偏好权重调低效果立竿见影。下表是 OptiScene 里约束权重的最终配置数字可以直接参考但具体项目里建议根据自己的评测指标重新调。约束类型惩罚权重说明边界越界15.0一票否决式权重最高家具重叠18.0穿模容忍度为零门开范围占用20.0涉及开合必须保证走道宽度不足8.0软约束但低于阈值后惩罚快速上升主件间距偏差3.0有缓冲区间朝向偏好1.5经验性偏好允许微调面积占比偏好0.8风格层面约束调参影响大2.4 数据合成管线规模化生产“能住”的布局样本well聊到这篇文章最核心的部分数据合成。OptiScene 的训练数据里大约 80% 来自合成管线20% 来自公开真实数据集的清洗与增广。为什么合成数据在这里比真实数据还重要原因很简单真实布局数据的问题是“有质无量”而 LLM 驱动场景生成这种任务恰恰需要海量样本来覆盖各种户型、家具组合、风格偏好的长尾。既然 OpenAI 的大模型都可以靠合成数据做推理能力提升室内布局生成没有理由不试试这条路。我们的合成管线有七个关键环节环节一户型生成。程序化随机生成房间多边形通过“矩形切分 多边形合并”的方式生成从标准两室到异形大开间的各种户型。为了贴近真实我们控制了房间面积比例和长宽比分布卧室 10-18㎡、客厅 20-35㎡长宽比不超过 2.5:1否则门洞和家具摆放会失真。环节二家具目录构建。不能只有几何尺寸每件家具还要带上语义标签、父级归属床归属卧室油烟机归属厨房、典型摆放关系床有床头柜需求餐桌有配套餐椅数量。这个目录是后面一切规则和 LLM 规划的基础。环节三规则底座生成。第一版先用传统规则生成器批量产出布局速度极快但质量粗糙。这一步的目的是产出“够多”的候选样本而不是“够好”。环节四LLM 批判家Critic打分。这是 Human-aligned 的关键一步。我们把规则生成的粗样本转成房间描述和布局描述丢给一个大 LLM 当裁判让它按“动线合理性”“使用便利性”“视觉协调性”三个维度打分。得分高于阈值的保留低于阈值的丢弃或打回重排。环节五功能校验器Functional Validator。LLM 打分是语义层面的功能校验是几何层面的。我们实现了一个简化版的可达性检查从每个房间门口出发用 BFS 寻路算法检查能否到达每件家具的使用面比如衣柜的正面、床的两侧。环节六人工抽检闭环。每批次合成数据抽 2%-5% 的样本做人工标注反馈两类信息一是 LLM 打分是否和人类判断一致二是常见的错误模式。这些反馈被用来迭代环节四的 Critic Prompt 和评分标准。环节七难度分层存储。最终入库时按“标准户型”“异形户型”“面积极限户型”“特殊功能需求”打标签分层存储。训练时按比例采样保证模型不会在标准户型上过拟合长尾场景也能有稳定的表现。这套管线跑下来最终产出了一个包含约 30 万条布局样本的合成数据集覆盖 400 余种户型、60 多类家具。中间踩的坑我后面单独开一节讲这里只提醒一点千万别跳过环节五的功能校验器。我们一开始觉得 LLM 打分够了结果发现它分不清“床离衣柜 10 厘米”和“衣柜门打不开”的区别——前者难看但能用后者直接就是次品。3. 实操过程与复现要点3.1 数据管线搭建——存什么、怎么存、踩在哪数据管线是整个项目里工程量最大的一块。我先说存储格式。我们桌面定义了一套自定义的 JSON Schema字段包括户型 ID、房间多边形的归一化坐标、家具列表类别、边界框、朝向、所属房间、约束标签类型、权重、目标值、总体质量分。为什么不用现成的场景数据集格式因为我试过主流格式要么过于复杂、要么不支持约束标签字段而约束标签是我们做 Human-aligned 数据的核心资产不能丢。下面是简化版的数据条目示例{ scene_id: syn_scene_000213, floor_plan: { boundary: [[0,0],[8,0],[8,6],[0,6]], rooms: [ {id: R1, category: living, polygon: [[0,0],[8,0],[8,4],[0,4]], doors: [{pos: [0,2.0], width: 0.9}]}, {id: R2, category: bedroom, polygon: [[0,4],[4,4],[4,6],[0,6]], doors: [{pos: [1.5,4.0], width: 0.9}]} ] }, furniture: [ {id: F1, category: sofa, room: R1, bbox: [2.0, 0.3, 3.8, 0.9], angle: 0.0}, {id: F2, category: tv_stand, room: R1, bbox: [3.0, 3.4, 4.2, 0.5], angle: 0.0}, {id: F3, category: bed, room: R2, bbox: [0.5, 4.6, 2.5, 1.8], angle: 0.0} ], constraints: [ {type: walkway, params: {min_width: 0.8}}, {type: view_distance, objects: [F1, F2], params: {min: 1.8, max: 3.5}} ], quality_scores: {llm_critic: 8.2, functional: 1.0}, source: synthetic }字段设计上有个小经验坐标全部用房间局部归一化坐标不要用全局绝对坐标。这样模型输入输出稳定很多而且同一套家具布局可以很方便地迁移到不同面积的同类型房间数据做增广也容易。管线搭建的顺序建议从后往前先做功能校验器再做规则生成器最后上 LLM Critic。为什么功能校验器是最客观的、最不容易出错的一环先把它跑通了后面才能放心地批量生成数据。我们一开始反着来LLM Critic 先上线结果数据存了一批没法通过几何校验的废样本白跑一周。3.2 模型训练与调优——从 API 调用到本地小模型蒸馏数据准备好了训练环节有两个层次一是直接调用大 LLM API 做推理和规划二是训练一个本地的小模型代替大模型做推理以便在实验中批量跑、不用付 API 费用。第一阶段我们完全靠 API 跑。效果很好布局质量高但有两个问题copyright 和成本。这不是模型能力的问题而是工程部署的顾虑。于是我们做了知识蒸馏用大模型产出的户型布局计划对去微调一个 7B 量级的开源语言模型。蒸馏的样本我们攒了 50 万条far 超出实际训练所需的量级但后来发现蒸馏模型的效果接近 API 的九成水平而推理速度快了十几倍。值得。小模型微调有几个参数上的经验学习率用 1e-5 左右比常规指令微调低一个量级。因为布局规划任务对输出格式要求极高学习率太大小模型容易“放飞自我”把 JSON 结构写坏。训练轮数2-3 个 epoch 就够了。这个任务不是展现知识广度而是把已有的知识映射到结构化输出上轮数太多反而过拟合到训练集布局的分布。输出坐标精度问题小模型的数值输出天然不可靠。第一版微调后测了一下大约 12% 的坐标会和预期值偏差超过 0.5 米。后来我们改了训练策略——不让模型直接输出坐标而是输出“相对位置描述”比如“床位于房间北墙靠东侧”真正精确坐标交给几何求解器去落。这里我要强调一个非常关键的观察LLM 在语义规划上的价值远大于数值预测上的价值。一旦接受这个设定模型设计就完全变了——它的任务就是输出一份高质量的“空间关系描述”不负责“落地”。这也是 OptiScene 最后效果好于预期的重要原因。另外关于模型输出的 token 限制我建议直接设置 1024 token 上限。布局规划输出通常只需要不到 500 token给太大窗户容易让模型啰嗦反而降低解析稳定性。3.3 评估指标碰撞率只是地板不是天花板做生成模型的都懂评估是最难的。OptiScene 用了四个维度的指标每个维度都有具体的计算逻辑。物理合理性Physical Plausibility主要看碰撞率和越界率。计算方式是逐对家具做多边形相交测试再把所有家具多边形和房间边界做包含测试。这是最基础的指标所有布局生成方法都必须报。功能可达性Functional Reachability从房间门和走廊位置出发用简化寻路判断每件家具的使用面是否可以站人。比如衣柜正面要留出 60 厘米的操作空间床两侧至少要有一侧能站人。这个指标比碰撞率严格得多也是我们区分“能看”和“能用”的关键分界。人类对齐得分Human-aligned Score让一组人类评估员对随机抽样的 300 个布局打 1-5 分再训练一个回归模型或直接让 LLM模拟人类评分作为自动化评估的代理。这个指标衡量的是“生成布局在人类偏好上的得分”我们专门训练了一个轻量级的评分模型用 RLHF 的思路但更简化。分布多样性Diversity Score计算生成布局两两之间的差异性避免模型“一招鲜吃遍天”。我们用家具类别组合 相对空间关系的特征向量算平均距离。多样性不能过高会牺牲一致性但太低说明模型退化成复读机了。这四个指标不是独立的。我的经验是先保证物理合理性再看功能可达性最后才谈人类对齐和多样性。很多项目上来就刷“人类偏好分”结果生成的布局物理上都穿模那偏好评测再高也没意义。3.4 消融实验与关键参数观察消融实验能最直接地说明方案里的哪些设计是真正有效的。OptiScene 做了三组关键消融我把结果分享出来。消融一有无 LLM 语义规划。把 LLM 规划层换成一个简单的规则模板沙发永远放最长墙床永远放最里侧其余几何求解完全一致。结果人类对齐得分从 4.2 降到 3.1功能可达性略有下降。这说明 LLM 的语义规划主要提升的是“体验感”而不是“物理不物理”——规则模板生成的布局照样不穿模但住着就是不对味。消融二有无 Human-aligned 数据参与训练。只用原始合成数据规则生成物理过滤不做 LLM Critic 和功能校验训练对比使用完整 Human-aligned 数据训练。结果是完整管线的人类对齐得分比原始数据高出约 1.2 分5 分制功能校验通过率高出 8 个百分点。结论很明确大规模合成数据不是银弹得先经过“人味”筛选。消融三主件优先摆放 vs 全件同时优化。这个前面提过主件优先的物理合理率高出近 20 个百分点而且在人类对齐得分上也有提升。因为主件先落位房间的动线骨架就定住了次件只是在空隙里填空天然避免了“抢占核心空间”的问题。参数上最值得说的是 LLM 的温度参数。我们做规划时温度在 0.3 左右最佳——太低布局太模板化太高就会生成一些“离谱但自信”的方案。数据合成阶段的 Critic 温度可以稍微高一点0.7 左右让评价尺度更灵活。几何求解器的迭代次数建议设置在 300-500 次之间次数少了约束没收敛多了消耗时间但收益递减。3.5 从方案到成品一次完整实验的现场记录我拿一个实际跑通的案例带大家走一遍完整流程。输入是一套两室一厅的户型客厅和餐厅连在一起总面积约 62㎡。用户偏好是“客厅要有阅读角整体风格偏简洁”。第一步把户型信息和偏好写进 Prompt调用规划模型。模型输出了一份布局计划客厅主件定为三人沙发、电视柜、单人阅读椅沙发靠客厅西墙电视柜贴东墙中间留出 2.8 米视距阅读椅放客厅南侧转角配一盏落地灯。餐厅区放四人餐桌靠北侧与厨房相邻。第二步这份计划转成约束丢给几何求解器。求解器先落沙发和电视柜再补茶几和地毯最后在剩余空间里放下阅读椅和书架。这个过程中求解器发现 LLM 建议的阅读椅位置离门洞距离只有 0.4 米会挡住动线于是自动把椅子往东南角挪了 0.5 米同时微调了书架朝向。第三步全局校验。功能校验器检查发现餐厅到冰箱的动线要穿过客厅距离稍远但不低于致命阈值于是保留但记录为“软缺失”。这在真实居住里是可以接受的最多是端着菜多走两步。第四步评分。物理合理性 98.6 分功能可达性 1.0全部可达人类对齐得分 4.5 / 5.0。对比同户型随机生成的基线方案人类对齐得分的提升很明显而且人类评估员普遍反馈“这个布局看起来像中介样板间水平”。这个案例里最值得回味的是第二步的“自动纠正”LLM 给出了一个语义合理但几何不可行的建议几何求解器没有硬执行而是基于约束搜索出了一个替代位置。这正是整个两段式架构最健康的状态——语义层和几何层互相纠偏。4. 常见问题与排查技巧实录4.1 LLM 输出不稳定是最大拦路虎怎么治LLM 做结构化输出的第一痛点就是格式不稳定布局规划领域也不例外。我们遇到的典型问题按频次排序输出 JSON 结构错误。模型有时候会在 JSON 外面加解释性文字有时候漏掉右括号有时候把字符串字段写成数字。第一个星期我花了大把时间在写 JSON 解析的容错逻辑上。后来总结出一个三层防线第一层提示词强化约束在 Prompt 末尾加“只输出合法 JSON不要 markdown 代码块”。第二层解析时先剥离 json 包裹再定位第一对花括号做残损 JSON 修复。第三层解析失败就直接重采样一次模型输出不稳定的概率高但连续失败两次的概率低得多。输出家具类别超出白名单。这个好解决解析后做映射过滤不在清单里的直接丢弃并记录一条警告日志。后来发现最常见的越界项就是“装饰画”“绿植”丢了也不影响主框架。输出了语义模糊的关系描述。比如“沙发放在客厅中间偏左”——“中间偏左”这个词几何含义不明确求解器没法直接用。办法是在 Prompt 里给出可选关系词汇表贴墙、居中、南侧、东南角、与 X 间隔 Y 米。一开始就锁死语义词表输出质量立刻稳定。坐标越界与逻辑矛盾。有一些情况模型会输出自相矛盾的关系比如“床靠南墙”但“床头柜放在床的西侧”同时南墙的西侧又是窗户。这类问题靠后端的约束冲突检测兜底检测到冲突就降级为可满足的近似解并记录到训练集中后续微调时专门强化。4.2 数据合成阶段为什么我生成的布局“物理正确但没法用”这个坑我在前面埋了伏笔这里展开说。我们用规则生成器批量产出候选布局之后第一批数据做物理校验全部通过但采样出来一看几乎个个都不能住人。我总结了三类最典型的错误第一类床堵衣柜。床和衣柜都在卧室里也没重叠距离留了 5 厘米。物理上零碰撞实际上衣柜门完全拉不开。这种问题只能靠“家具使用面预留空间”的规则来补——每件带开门功能的家具都要在正面和侧面预留足够的操作空间衣柜正面至少 60 厘米抽屉侧边至少 40 厘米。第二类沙发背对动线。沙发和茶几的关系对了但沙发背后正好是客厅到阳台的必经通道人走过去得侧身。这个问题靠“走道检测 坐姿朝向反向空间”来修——沙发前方要预留视距空间沙发后方至少 90 厘米的过道。第三类餐桌离厨房十万八千里。单看餐厅区域餐桌摆放完全合理但整个餐厅在户型最南端厨房在最北端端菜动线超过 15 米。这种跨区域的功能问题单房间校验器根本发现不了必须引入基于全户型图的“功能关系距离”约束。后来我们把这些错误模式直接编码成功能校验器的规则并且把出错样本喂给 LLM Critic 作为负面示例。效果非常显著功能校验通过率从 78% 提升到了 96%。4.3 评估指标的两个隐蔽陷阱评估环节最容易让人产生“我做得很好”的错觉。第一个陷阱是碰撞率失真只要几何求解器用了碰撞约束物理碰撞率几乎必然是 0%但这个数字根本不代表布局能用。我在项目中期陷入过这个自我欺骗看指标一片大好采样出来一塌糊涂。后来我们把功能可达性提到了和碰撞率同等的汇报地位任何实验结论都得先看可达性再看人类对齐分。第二个陷阱是LLM 当评分器和人类真实评分的一致性偏差。做自动化评估时我们用 LLM 模拟人类评分早期测过一次一致性只有 0.6 左右中等相关但不够可靠。原因很快找到了LLM 评分容易偏“审美正确”比如偏好极简、多留白、对称布局而真实人类样本里很多人其实喜欢“填得满一点、东西都伸手可及”。解决方案是定期用人工评分数据微调评分器的 Prompt给它看真人的打分示例让它对齐人类偏好分布。这个校准动作要重复做否则评分器会随着时间漂移。4.4 常见问题速查表问题现象可能原因排查与解决方案LLM 输出 JSON 频繁报错模型对格式约束不敏感提示词加严格要求解析层做容错修复失败自动重采样家具类别超出白名单语义空间未锁定输出后强过滤Prompt 中强调只能使用给定清单布局不碰撞但动线被堵缺少功能可达性校验引入走道检测和家具使用面操作空间检查床堵衣柜、抽屉拉不开缺少开门件操作空间约束给带开合功能的家具额外定义侧/正面的必须空闲区跨房间动线过长单房间规划缺少全局视野在 Prompt 中加入房间邻接关系加功能关系距离约束小模型输出坐标偏移大数值回归超出模型能力改为输出关系描述坐标交给几何求解器LLM 评分和真人评分不一致评分器偏好漂移定期用人工标注样本校准评分 Prompt合成数据全是标准户型户型生成分布太窄强行加入异形、大进深、面积极限户型样本布局模板化总是老一套温度太低或多样性约束缺失调高温度到 0.4-0.5增加多样性评估指标并参与筛选5. 一些实际操作的体会与后续扩展项目做到后期我有一个很强烈的体会这个方向的瓶颈不在模型而在“什么叫好用”这件事很难被量化。碰撞率和越界率是客观的但“人类觉得顺手”是主观的。我们花了很多精力去打磨 Human-aligned 数据合成本质上就是在把这种主观体验数字化、可计算化。这个过程没法一步到位只能靠“合成-评分-人工抽检-迭代”的循环慢慢逼近。如果有人想复现这个工作我建议把数据管线的迭代放在模型调参之前顺序反了会事倍功半。还有一个最后想分享的小技巧在做布局生成评测时一定要把生成结果渲染成平面图而不是只看数值指标。数值上完美但视觉上一看就假的案例太多了。我们后来专门做了一个批量渲染工具每次实验完强制人工浏览一轮渲染图哪怕只花十分钟也能在指标“看起来不错”的时候发现大量真实问题。这种“脚本化人工抽检”的混合评测模式到现在仍然是我验证生成类系统的最可靠手段。OptiScene 后续还可以往几个方向延展一是加入交互式编辑让用户跟 LLM 对话调整布局二是把物理光照和材质信息加进数据合成做全屋效果图级生成三是把布局生成作为具身智能的仿真环境生成器给机器人提供更合理的人类居住环境训练场景。这些方向都还在探索中但底座已经搭好了——LLM 负责语义几何求解器负责落地Human-aligned 数据提供直觉。三者各司其职足以支撑很多有意思的应用。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑