资讯动态

如何搭建一套基于RAG的智能语音交互系统

发布时间:2026/10/17 8:40:42 来源:尧图企业网站定制
如何搭建一套基于RAG的智能语音交互系统摘要本文介绍如何搭建一套基于 RAG检索增强生成的智能语音交互系统。系统采用 Flutter 客户端、Spring Boot 后端与 FastAPI 智能问答服务三层架构覆盖智能问答RAG Agent、知识入库、语音输入/输出、用户认证与知识库权限等核心业务流程。技术栈上使用 ChromaDB 做向量检索、S3 兼容对象存储保存原始文件、Redis 管理会话记忆并支持阿里云百炼 Provider 与 mock 降级路径。文章还详细列出了主要 API 端点与 SSE 流式事件协议适合希望快速搭建本地化、低资源智能语音问答系统的开发者参考。1. 概览项目采用 Flutter 客户端、Spring Boot 后端和 FastAPI 智能问答服务。业务按职责拆分Flutter跨平台交互界面提供登录入口、智能问答、语音输入/播放和知识录入界面。Spring Boot账号与 JWT、知识库元数据、管理员权限控制以及转发 Python 服务的 API。FastAPI知识处理、RAG 问答、Agent/Tool、会话记忆、文件解析和语音接口。本地基础设施Chroma 持久化向量库、S3 兼容对象存储、Redis 接口实现。当前设计优先适配低资源、无 Docker 的本地开发环境部分组件采用接口兼容的本地组件替代。服务间通过 HTTP 交互智能问答以 SSE 流式返回。2. 总体架构本地或可替换依赖cloud-python · FastAPI :8000cloud-java · Spring Boot 单体 :8080客户端当前默认地址Python APIJava API 可用JWT 链路尚未接入 Flutter经 Java 代理的部署路径HTTPSSE 不缓冲透传FlutterAndroid / WebFastAPI 静态 HTML 调试页面注册、登录、JWT知识库元数据与管理员权限Python API / SSE 转发H2 内存数据库REST API / SSEAgent 编排与 Tool切分、Embedding、检索、Prompt会话记忆与历史压缩LLM / Embedding / ASR / TTS / OCR ProviderChromaDB 持久化向量库Redis / fakeredisS3 兼容对象存储本地 moto mock阿里云百炼可选真实 Provider公开信息 API / mock3. 技术栈与选型层当前实现说明客户端Flutter / DartProvider可构建 Android 和 WebHTTP、SSE、录音、音频播放、文件选择分别使用对应 Dart 插件Java 服务Java 17、Spring Boot 3.2、Spring MVC、Spring Security、Spring Data JPA、WebClient单体服务未引入 Spring Cloud Alibaba、Nacos 或独立 GatewayPython 服务FastAPI、Uvicorn、Pydantic Settings异步 API配置从环境变量及cloud-python/.env读取对话/向量化阿里云百炼 Provider 与 mock Provider配置默认选择百炼 LLM/Embedding调用需有效凭据和上游可用向量检索ChromaDBPersistentClient默认落盘于cloud-python/data/chromacollection 中通过kb_id元数据隔离原始文件boto3 的 S3 兼容接口默认地址为本机127.0.0.1:9000、桶名工具数据公开信息服务及 mock 降级路径工具注册与 Agent 编排位于 Python 服务4. 核心业务流程4.1 智能问答RAG Agent客户端为/api/v1/chat/stream发送问题、可选session_id、kb_id和历史轮数。FastAPI 建立 SSE 响应先发送会话和链路信息。若请求指定知识库检索器对问题向量化在对应kb_id范围内做 Top-K 相似度检索并按相似度阈值过滤。Prompt 组合系统指令、命中片段和会话历史。Agent 可先让 LLM 判断是否需要调用注册的 Tool工具结果回填后继续生成回答。生成内容以增量事件发送完成后将用户问题和助手回答写入会话记忆并发送结束事件。4.2 知识入库文本录入通过POST /api/v1/knowledge/documents文件录入通过POST /api/v1/knowledge/files。文件接口检查类型、内容和大小默认最大 50 MB。图片走 OCR Provider音频/视频走 ASR Provider当前默认是 mock Provider。原始文本或文件写入 S3 兼容对象存储可提取文本进入共用入库管线。切分器生成带有知识库、来源和 chunk 标识的文本块Embedder 按批生成向量再写入向量库。问答侧按kb_id过滤检索结果避免不同知识库间的向量混用。### 4.3 语音输入与输出输入客户端录音或选择音频后请求/api/v1/asr识别文本进入问答流程。输出客户端将回答文本请求/api/v1/tts播放返回的音频。下面是智能问答RAG Agent的完整时序流程会话记忆 (Redis)Agent / LLM检索器 (ChromaDB)FastAPI 服务Spring Boot (Java)Flutter 客户端会话记忆 (Redis)Agent / LLM检索器 (ChromaDB)FastAPI 服务Spring Boot (Java)Flutter 客户端alt[需要调用 Tool]POST /api/v1/chat/stream (问题、session_id、kb_id)建立 SSE 响应发送 meta 事件问题向量化Top-K 相似度检索命中片段按相似度阈值过滤组合 Prompt系统指令 片段 历史判断是否需要调用 Tool调用注册的 Tool回填结果生成回答内容增量发送 answer_delta 事件写入用户问题与助手回答发送 done 事件含 usage4.3 用户认证与知识库权限提供注册、登录 API密码使用 BCrypt登录后签发 JWT。JWT 过滤器解析身份和角色并在知识库管理、录入接口上要求管理员角色。Java 侧 H2 保存用户和知识库元数据Python 侧保存知识内容与向量二者通过kb_id关联。下面是知识入库的完整流程图片音频 / 视频文本文本录入POST /knowledge/documents共用入库管线文件录入POST /knowledge/files类型检查内容 / 大小 ≤ 50MBOCR ProviderASR Provider写入 S3 兼容对象存储提取文本切分器生成文本块知识库 / 来源 / chunk 标识Embedder 分批生成向量写入向量库 ChromaDB按 kb_id 隔离问答侧按 kb_id 过滤检索5. API 与流式协议5.1 当前主要端点服务方法与路径用途PythonGET /health健康状态与依赖检查PythonPOST /api/v1/chat/streamSSE 智能问答PythonPOST /api/v1/knowledge/documents文本入库PythonPOST /api/v1/asr、POST /api/v1/tts语音识别与合成JavaPOST /api/v1/auth/register、POST /api/v1/auth/login注册与登录JavaPOST /api/v1/knowledge/bases、GET /api/v1/knowledge/bases、DELETE /api/v1/knowledge/bases/{kbId}知识库元数据管理5.2 SSE 事件问答流为text/event-stream。当前主要事件结构如下事件数据含义metasession_id、trace_id流开始时的会话和链路信息sourcessources数组可选的检索来源信息answer_deltatext增量答案片段doneusage正常完成及 token 使用信息errorcode、message流内错误Flutter 服务逐帧读取并解析 SSEJava 转发使用 WebClient 按数据缓冲区透传不聚合整段答案。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑