项目背景与设计目标
在许多企业或个人的实际应用场景中,我们往往并不需要构建复杂的在线服务,而是期望获得一个满足以下核心需求的解决方案:
- 本地化部署与数据安全:服务可在本地运行,确保敏感数据不出本地环境。
- 强大的模型支持:能够无缝对接如 DeepSeek 这类具备优秀推理能力的大语言模型。
- 便捷的知识库集成:支持以API等方式,快速接入个人或团队已有的知识库。
- 极致的响应速度:追求毫秒级延迟,实现“感觉上秒回”的用户体验。
- 灵活的集成方式:可以方便地通过 CLI、Web 界面或其他服务进行调用与集成。
基于这些目标,我们设计并实现了一个实验性项目:nway_brain。该项目采用 Rust 作为核心后端语言,结合 DeepSeek 模型,旨在打造一个高性能、可本地部署的知识库问答引擎。为了最大限度地提升响应速度,我们还为其引入了端到端语义缓存机制。
总体架构概览
整个系统的架构可以清晰地划分为五个核心模块:
-
数据层
- 原始文件:支持通过标准化API处理各类文档。
- 向量索引:将文档切片嵌入后的向量存储在本地的向量数据库(如 LanceDB)中。
- 元信息:管理文档ID、段落位置、标签等附加信息。
-
检索层
- 负责从向量数据库中检索出与用户查询最相关的 Top-K 文本片段。
- 支持多路检索策略,例如融合 BM25 关键词检索与向量语义检索,以提高召回准确率。
-
语义缓存层
- Key:用户查询(Query)经过嵌入模型得到的向量。
- Value:模型针对该查询生成的最终答案(包含引用来源)。
- 命中策略:当新查询与缓存中某个条目的向量相似度超过预设阈值时,直接返回缓存的答案,完全绕过检索与推理过程,这是实现毫秒级响应的关键。
-
推理层
- 将检索到的相关文本片段与历史对话记录组合,构建成符合模型要求的 Prompt。
- 通过 HTTP 调用 DeepSeek 的官方API或本地部署的推理服务(如 Ollama)。
- 支持流式输出与中途打断,提升交互体验。
-
接入层
- 提供 HTTP RESTful API 或 gRPC 接口。
- 提供命令行客户端。
- (可选)提供简易的 Web 前端界面。
架构示意图如下:
┌──────────────┐
│ CLI / Web │
└──────┬───────┘
│ HTTP/gRPC
┌──────▼─────────┐
│ nway_brain │
│ (Rust Service)│
└───┬────────┬───┘
│ │
┌───▼────┐ ┌─▼────────┐
│语义缓存│ │ 检索层 │
└───┬────┘ └────┬─────┘
│ │
│ ┌─────▼───────┐
│ │ 向量数据库 │
│ └─────┬───────┘
│ │
┌───▼───────────▼───────┐
│ DeepSeek │
│ (推理服务) │
└───────────────────────┘
通过选用 Rust 这类高性能系统级语言,我们能够从底层优化服务的响应效率与资源利用率。同时,结合前沿的大语言模型技术,为知识问答提供了强大的语义理解能力。
核心配置文件解析
项目的主要配置通过 config.ini 文件进行管理,一个典型的配置示例如下:
# Server 配置
[server]
host = 0.0.0.0
port = 13000
# 存储与向量化配置
[storage]
data_dir = ./data
embed_model = BAAI/bge-small-zh-v1.5
# LLM 配置
[llm]
enable_gpu = true
model_path = models/llm/qwen2.5-3b-instruct-q4_k_m.gguf
tokenizer_path = models/llm/qwen2.5_tokenizer.json
max_new_tokens = 256
配置说明:
[server]:定义服务监听的地址和端口,默认为 13000。
[storage]:data_dir 指定数据存储目录;embed_model 指定用于生成文本向量的嵌入模型。
[llm]:配置大模型参数。model_path 指向本地模型文件(例如已量化的 DeepSeek 模型)。若要使用 DeepSeek,只需将路径替换为对应的模型文件即可。enable_gpu 用于切换是否使用GPU加速。
重要提示:本服务支持同时使用 GPU 和 CPU 进行推理,请根据您的硬件环境选择合适的启动方式。
服务启动与 API 接口
启动服务
在配置完成后,通过以下命令启动服务(GPU版本):
./nway_brain_gpu
核心 API 接口
服务启动后,可通过以下主要接口进行交互:
| 功能 |
方法 |
路径 |
| 获取监控指标 |
GET |
/metrics |
| 创建业务知识库 |
POST |
/api/business/create |
| 删除业务知识库 |
DELETE |
/api/business/{id} |
| 向知识库新增条目 |
POST |
/api/business/{id}/knowledge |
| 删除知识库条目 |
DELETE |
/api/business/{id}/knowledge/{kid} |
| 更新业务配置 |
POST |
/api/business/{id}/config |
| 执行问答(RAG/FAQ) |
POST |
/api/business/{id}/query |
所有API调用均以 http://127.0.0.1:13000 为默认基础地址。
快速测试与部署
项目包中通常附带有测试资源,例如 test 文件夹,其中可能包含用于初始化示例话术数据的 Python 脚本(如 init_water_data.py),帮助用户快速验证系统功能。整个系统依赖于本地的向量数据库与文件存储,部署简单,无需依赖复杂的在线中间件。
通过以上架构与配置,nway_brain 项目实现了一个兼顾性能、安全性与实用性的本地知识库智能引擎原型,为构建私有化AI应用提供了有价值的参考。
|