装闭 RenoPit 源码解析(07):装修闭坑知识库与AI Prompt构建

装闭 RenoPit 并不是只把装修图片交给大模型自由发挥。它会先把本地装修坑位、消费者立场和 JSON 输出格式写入系统 Prompt,再附上用户说明和文档内容。相关源码位于开源仓库 fthux/RenoPit,本篇分析这套 Prompt 是怎样拼装出来的。

一、知识库独立于 Python 代码

装修知识保存在 backend/app/data/pitfalls.json,prompt_builder.py 只负责读取和格式化。设计分析主要使用五类检查项:

  • cleaning_blindspots:卫生死角;
  • space_oppression:空间压迫;
  • pseudo_needs:实用性伪需求;
  • hidden_costs:隐性成本;
  • safety_health:安全与健康。

合同分析另外读取 billing_traps、contract_clauses 和 extra_item_patterns。知识内容与 Prompt 模板分离后,同一份 JSON 可以被设计分析、合同分析和增项预测重复使用。

二、PitfallsLoader 如何加载数据

PitfallsLoader 接收一个可选路径,默认指向项目内的 pitfalls.json。第一次调用 load() 时执行 json.load(),结果缓存在实例的 _data 中,后续读取不再重复打开文件。

get_category_items() 把类别下的 items 转换成项目符号文本:

python 复制代码
lines = []
for item in items:
    lines.append(f"- {item['description']}")
return "\n".join(lines)

如果类别不存在或没有条目,则返回"无数据"占位。Prompt 模板因此总能获得字符串,不需要在模板层判断空值。

三、系统 Prompt 如何确定 AI 角色

SYSTEM_PROMPT_TEMPLATE 首先把模型定义为站在消费者一方的家装监理,要求它主动揭露增加预算、降低实用性或隐藏长期成本的设计。随后插入五类本地检查清单,并规定分析步骤和输出结构。

build_system_prompt() 负责取得每类文本并格式化模板:

python 复制代码
return SYSTEM_PROMPT_TEMPLATE.format(
    cleaning_blindspots=cleaning_blindspots,
    space_oppression=space_oppression,
    pseudo_needs=pseudo_needs,
    hidden_costs=hidden_costs,
    safety_health=safety_health,
    web_search_section=web_search_section,
)

这里不仅告诉模型"检查装修问题",还要求返回 summary、problems 等固定 JSON 字段。每个问题需要包含标题、位置、批判说明、套路解释、替代方案和可选坐标。后端的 JSON 校验器正是按照这份契约接收结果。

四、联网搜索如何进入 Prompt

ENABLE_WEB_SEARCH 由环境变量控制。开启后,build_system_prompt() 会在模板中加入 WEB_SEARCH_SECTION,要求模型针对新材料、新工艺和最新装修套路补充检索结果。

Prompt 指令和 API 工具是两层机制:系统 Prompt 可以向所有 OpenAI 兼容模型表达检索要求;真正的 web_search_preview 工具只会在 LLM 服务判断当前地址为 OpenAI 官方 API 时加入请求。其他兼容端点不会收到不支持的 tools 参数。

五、用户消息如何组合

图片不会写入字符串,而是在 LLM 服务中作为多模态内容发送。build_user_message() 只负责文本部分,输入来源有两类:

  1. input_text:用户在项目中填写的装修需求;
  2. extracted_texts:从合同、报价单、TXT 或 PDF 中提取的文本。

用户说明会被限制在 MAX_INPUT_TEXT_LENGTH 内。文档文本则按照真实文件名分段:

text 复制代码
## 用户描述
主卧需要衣帽间,厨房计划增加岛台......

## 上传文件内容(装修报价单.pdf)
......

当没有任何文本时,函数生成一条默认指令,让模型根据已上传图片逐项检查知识库。

六、不同任务使用不同 Prompt

设计图、合同和报价单并不共用同一个输出模板:

  • build_system_prompt():输出综合装修问题;
  • build_document_analysis_prompt():输出报价陷阱、合同条款和增项风险;
  • build_extra_prediction_prompt():把报价单分析结果再次注入,预测后续增项;
  • build_cross_check_prompt():组合多份文档摘要,要求找出相互矛盾之处。

它们共用 PitfallsLoader,但分别规定任务角色、输入信息和 JSON Schema。这样后端可以为不同结果使用不同校验函数和数据库字段。

七、Prompt 构建链路小结

RenoPit 的 Prompt 由"消费者立场、任务步骤、本地知识库、联网搜索说明、输出 JSON 契约、用户真实素材"共同构成。大模型看到的不是一句宽泛问题,而是一份带检查清单和交付格式的分析任务书。

完整模板和知识库可以在 fthux/RenoPit 中查看。下一篇将继续追踪这些 Prompt 如何被转换成 OpenAI 兼容请求,以及多模态调用失败后如何重试并降级到纯文本路径。

相关推荐
志尊宝16 小时前
AI原生前端开发(023):端侧AI多模态应用开发
人工智能·ai-native
艾莉丝努力练剑16 小时前
【AI大模型接入SDK】ChatServer接口测试
网络·c++·人工智能·学习·ai·大模型·sdk
linktokenview16 小时前
文生图与图生视频大模型对比
人工智能
雨晨源码(同名B站)16 小时前
深度学习毕业设计选题推荐:基于YOLO11的交通标志检测系统设计与实现(Python+Django+Vue3+对接deepseek)
人工智能·python·深度学习·机器学习·django·课程设计
vjmap16 小时前
AI 地图动画-以真实地图为画布的 AI 视频编辑器-唯杰 AI 地图动画正式上线
人工智能·编辑器·音视频·gis·cad
海盗123416 小时前
微软技术日报 2026-11-01:语言模型 API 免申请、8 个威胁组织被分四档
人工智能·microsoft·语言模型·机器人·人工智能aigc
lingxiao1688816 小时前
Halcon之OCR应用
人工智能·ocr
一级新生16 小时前
LLM _ Agent _ Skill _ 专家 的关系与选型笔记
java·开发语言·人工智能·笔记·大模型·智能体·skill
杰克说16 小时前
人工智能前沿部署工程师(FDE),第五章·管理端·企业后台与WMA配置实战
人工智能·云计算·腾讯云·fde