1. 项目概述
在构建基于大模型的问答系统或RAG(检索增强生成)系统时,用户输入的查询往往存在诸多问题:口语化表达、指代模糊、语义碎片化、格式不规范等。这些问题如果直接传递给下游的检索系统或大模型,会导致检索召回率低、回答不准确、无效调用成本增加等一系列问题。
传统的解决方案主要有两种:一种是硬编码规则,通过正则表达式和关键词匹配来处理;另一种是直接调用云端大模型进行重写。前者维护成本高且覆盖场景有限,后者则成本高昂且响应延迟大。
我们的方案通过结合Spring AI框架和本地轻量级大模型(LLM),实现了智能化的查询重写系统。核心思路是:先通过本地部署的轻量LLM判断查询是否需要复杂的语义重写,再根据判断结果分别采用规则重写或云端大模型重写。这样既保证了处理效果,又有效控制了成本。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体架构
系统采用"两层判断+两级重写"的架构设计:
- 本地轻量LLM层:负责判断用户查询是否需要复杂的语义重写
- 规则重写层:处理简单查询,使用Spring AI内置的RewriteQueryTransformer
- 云端大模型层:处理复杂查询,调用如GPT-3.5等模型进行语义级重写
- 降级规则层:在本地LLM异常时提供兜底判断
2.2 核心组件
| 组件名称 | 技术选型 | 核心职责 | 特点 |
|---|---|---|---|
| 本地轻量LLM | Llama 3-8B/Phi-3-mini量化版 | 判断查询是否需要语义重写 | 本地部署、零调用成本、响应快 |
| 规则重写组件 | Spring AI RewriteQueryTransformer | 简单查询的标准化重写 | 本地执行、毫秒级响应 |
| 云端大模型 | GPT-3.5/通义千问等 | 复杂查询的语义级重写 | 语义理解能力强、成本较高 |
| 降级规则模块 | 关键词匹配+长度检测 | 本地LLM异常时的兜底判断 | 轻量可靠、保障系统可用性 |
2.3 工作流程
- 用户输入原始查询
- 本地LLM判断查询类型(简单/复杂)
- 根据判断结果:
- 简单查询:走规则重写
- 复杂查询:调用云端大模型重写
- 输出重写后的查询给下游系统
- 异常情况:本地LLM不可用时,走降级规则判断
3. 关键技术实现
3.1 本地LLM部署与优化
我们选择Ollama作为本地LLM的部署工具,主要优势在于:
- 一键部署,支持多种模型
- 提供REST API,方便集成
- 支持量化模型,降低硬件要求
推荐使用的模型:
- Llama 3-8B-instruct:平衡性能和效果
- Phi-3-mini:更轻量,适合CPU运行
- Qwen-2-7B:中文理解能力强
部署步骤:
bash复制# 安装Ollama
curl -fsSL https://ollama.com
