我如何为新加坡法律构建 RAG 引擎

发布: (2026年2月7日 GMT+8 12:50)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for How I built an RAG engine for Singapore Laws

大家好!

我是一名学生开发者。最近,我创建了 Explore Singapore,一个基于 RAG 的搜索引擎,抓取了约 20,000 页新加坡政府的法案和法律。

在发布 MVP 后,我收到了关于幻觉(hallucinations)和查询深度的关键反馈。我采纳了这些反馈,专注于改进,并刚刚发布了 Version 2

设计与 UI

我希望避免枯燥的政府网站。

设计:深受 Apple 极简风格的启发。
技术:自定义前端与 Python 后端交互。

V2 的工程大改造

社区在三个主要方面对我提出了挑战。以下是我的解决方案:

1. “人格” 修复

问题:我使用了“三重故障转移”系统,包含三个模型作为备份。当主模型失效时,备份模型的回答风格完全不同。

解决方案:添加了动态系统指令。当后端切换到 Model B 时,会使用专为 Model B 设计的提示,使其模仿主模型的结构和语调。用户不会察觉到切换。

2. “深度搜索” 修复

问题:对 “Starting a business” 的简单语义搜索会遗漏相关的法律,如 “Tax” 或 “Labor” 法案。

解决方案:实现了多查询检索(Multi‑Query Retrieval,MQR)。现在,一个 LLM 会拦截你的查询,将其拆分为子意图(例如 “Business Registration”、 “Corporate Tax”、 “Employment Rules”),同时搜索所有子意图并合并结果。

结果:答案更加丰富、具备上下文感知。

3. “幻觉” 修复

问题:垃圾进,垃圾出。如果 FAISS 检索到了不合适的文档,LLM 会产生不准确的信息。

解决方案:加入了交叉编码器重新排序层。

  1. FAISS 抓取前 10 条结果。
  2. 专用的交叉编码器模型对它们进行相关性评估。
  3. 将不相关的部分剔除后再交给聊天 LLM。

技术栈

  • 嵌入模型:BGE‑M3(本地运行)
  • 向量数据库:FAISS
  • 后端:Python + 自定义三模型故障转移(在 Hugging Face 上运行)
  • 逻辑:多查询 + 重新排序(V2 新增)

试一试

我仍在学习中,期待听到你们对新逻辑的看法。

欢迎对平台提出反馈——尤其是关于故障转移速度的意见!👇

0 浏览
Back to Blog

相关文章

阅读更多 »

UX/UI 排版

Typography 是指什么?- 使用哪种字体 - 在什么位置多大 - 多粗 - 行间距 - …