基于Langchain+RAG的银行智能客服系统设计与开发
欢迎关注B站:麦麦大数据
一、项目背景
随着金融科技的快速发展,银行客户服务面临着前所未有的挑战。传统的人工客服存在响应慢、成本高、服务时间受限等问题。为了提升客户服务体验,本文将介绍一款基于**LangChain + RAG(检索增强生成)**技术构建的银行智能客服系统。

二、技术架构
2.1 整体架构
本系统采用前后端分离架构设计,前端使用Vue3 + TypeScript,后端采用Flask框架,核心AI能力基于LangChain框架实现。
┌─────────────────────────────────────────────────────────────────────────┐
│ 智能客服系统架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 前端 UI │ │ Flask API │ │ LLM 服务 │ │
│ │ (Vue3) │◄───►│ (后端) │◄───►│ (硅基流动) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 数据存储层 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ MySQL │ │ Redis │ │ FAISS │ │ 文件系统 │ │ │
│ │ │ (业务) │ │ (会话) │ │(向量库) │ │(文档) │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
2.2 技术栈
| 层级 | 技术选型 |
|---|---|
| 前端 | Vue3 + TypeScript + Pinia + Element Plus + ECharts |
| 后端 | Python Flask + SQLAlchemy |
| AI框架 | LangChain |
| 向量数据库 | FAISS |
| 大模型 | GLM-4.6 (通过硅基流动API调用) |
| 文本嵌入 | BAAI/bge-m3 |
三、核心功能模块
3.1 用户认证模块
支持用户注册、登录,采用JWT令牌进行身份认证。

3.2 智能对话模块
基于RAG的智能问答,支持流式输出、多轮对话。


系统会展示参考文档来源,增强回答的可信度。

3.3 知识库管理模块
支持PDF、Word等文档上传,自动向量化处理。


3.4 管理后台
提供用户管理、数据统计等功能。

四、RAG技术实现
4.1 RAG工作流程
RAG(检索增强生成)是一种将检索系统与生成模型结合的技术,其核心流程包括:
- 文档加载与分块 - 将PDF、Word等文档加载后,使用
RecursiveCharacterTextSplitter进行文本分块 - 向量化存储 - 使用Embedding模型将文本块转换为向量,存储到FAISS向量数据库
- 相似度检索 - 用户提问时,将问题转换为向量,在向量库中检索相似文档
- 增强生成 - 将检索到的相关文档作为上下文,发送给大模型生成答案
4.2 核心代码实现
文档向量化服务
python
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
class EmbeddingService:
def __init__(self):
self.text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
)
def embed_document(self, document):
# 文本分块
texts = self.text_splitter.create_documents([document.content])
# 向量化并存储到FAISS
vector_store = FAISS.from_texts(
texts=[t.page_content for t in texts],
embedding=embeddings,
metadatas=metadatas
)
vector_store.save_local("vector_store")
知识检索服务
python
class KnowledgeService:
def search(self, query: str, k: int = 5):
vector_store = FAISS.load_local("vector_store", embeddings)
docs = vector_store.similarity_search_with_score(query, k=k)
return [
{
"content": doc.page_content,
"metadata": doc.metadata,
"score": score,
}
for doc, score in docs
]
增强生成对话
python
class ChatService:
def chat(self, message: str, user_id: int):
# 1. 检索知识库
docs = knowledge_service.search(message, k=5)
# 2. 构建提示词
knowledge_context = "\n\nRelevant knowledge:\n" + "\n".join(
[doc["content"][:500] for doc in docs]
)
prompt = f"""你是一个银行客服助手。
相关知识:
{knowledge_context}
用户问题:{message}
请根据相关知识回答用户问题。"""
# 3. 调用大模型生成答案
response = llm.invoke(prompt)
return {
"answer": response.content,
"sources": [doc["metadata"] for doc in docs]
}
4.3 流式输出实现
使用LangChain的astream实现打字机效果的流式输出:
python
async def stream_chat(self, message: str):
# ... 省略检索代码 ...
async for chunk in llm.astream(prompt):
content = chunk.content if hasattr(chunk, "content") else str(chunk)
yield content # 流式yield每个chunk
# 最后返回参考来源
yield {"sources": sources}
前端通过EventSource接收流式数据:
typescript
const response = await fetch('/api/chat/stream', {
method: 'POST',
body: JSON.stringify({ message: userInput.value })
})
const reader = response.body?.getReader()
const decoder = new TextDecoder()
while (true) {
const { done, value } = await reader.read()
if (done) break
const text = decoder.decode(value)
// 逐字追加到回答区域
}
五、系统部署
5.1 环境要求
- Python 3.10+
- MySQL 8.x
- Node.js 18+
5.2 安装依赖
bash
# 后端
cd backend
pip install -r requirements.txt
# 前端
cd frontend
npm install
5.3 配置说明
在.env文件中配置API密钥:
env
SILICONFLOW_API_KEY=your_api_key
SILICONFLOW_API_BASE=https://api.siliconflow.cn/v1
LLM_MODEL=THUDM/glm-4-9b-chat
EMBEDDING_MODEL=BAAI/bge-m3
5.4 启动服务
bash
# 启动后端
python run.py
# 启动前端
cd frontend
npm run dev
六、效果展示
6.1 知识库管理

6.2 用户管理

6.3 对话历史

七、总结
本文介绍了基于LangChain + RAG技术构建的银行智能客服系统,该系统具有以下特点:
- RAG知识增强 - 通过FAISS向量数据库实现精准的知识检索,大幅提升回答准确率
- 流式输出 - 支持打字机效果的实时回答,提升用户体验
- 可扩展性强 - 基于LangChain框架,便于集成更多AI能力
- 完整的业务功能 - 支持用户认证、知识库管理、对话历史等完整功能
源码获取:联系麦麦大数据获取
欢迎关注B站:麦麦大数据