Qwen1.5-1.8B-GPTQ-Int4保姆级教程:Chainlit前端集成文档上传与RAG知识库构建
·
Qwen1.5-1.8B-GPTQ-Int4保姆级教程:Chainlit前端集成文档上传与RAG知识库构建
1. 环境准备与快速部署
在开始之前,我们需要确保系统环境满足基本要求。这个教程假设你已经完成了基础环境的搭建,包括Python环境和必要的依赖库。
1.1 系统要求
- Python 3.8或更高版本
- 至少8GB可用内存
- 支持CUDA的NVIDIA GPU(推荐)
1.2 安装依赖
首先,我们需要安装必要的Python包。创建一个新的虚拟环境是个好习惯:
python -m venv qwen_env
source qwen_env/bin/activate # Linux/Mac
# 或者 qwen_env\Scripts\activate # Windows
然后安装核心依赖:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install vllm chainlit transformers
2. 模型部署与验证
2.1 使用vLLM部署模型
vLLM是一个高效的推理引擎,特别适合部署大型语言模型。我们可以用它来部署Qwen1.5-1.8B-Chat-GPTQ-Int4模型:
python -m vllm.entrypoints.api_server \
--model Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4 \
--quantization gptq \
--dtype auto \
--gpu-memory-utilization 0.9
2.2 验证模型服务
部署成功后,我们可以通过简单的API调用来验证服务是否正常运行:
import requests
response = requests.post(
"http://localhost:8000/v1/completions",
json={
"model": "Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4",
"prompt": "介绍一下你自己",
"max_tokens": 100
}
)
print(response.json()["choices"][0]["text"])
如果看到模型返回了自我介绍,说明部署成功。
3. Chainlit前端集成
Chainlit是一个强大的工具,可以快速为LLM应用构建交互式界面。我们将使用它来创建一个用户友好的前端。
3.1 创建基础Chainlit应用
创建一个名为app.py的文件,添加以下内容:
import chainlit as cl
from vllm import LLM, SamplingParams
@cl.on_chat_start
async def start_chat():
llm = LLM(model="Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4", quantization="gptq")
cl.user_session.set("llm", llm)
@cl.on_message
async def main(message: cl.Message):
llm = cl.user_session.get("llm")
sampling_params = SamplingParams(temperature=0.7, top_p=0.9)
response = await llm.generate(message.content, sampling_params)
await cl.Message(content=response).send()
启动应用:
chainlit run app.py -w
3.2 添加文档上传功能
现在,我们扩展应用以支持文档上传和RAG(检索增强生成)功能:
import os
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
@cl.on_chat_start
async def start_chat():
# 初始化模型
llm = LLM(model="Qwen/Qwen1.5-1.8B-Chat-GPTQ-Int4", quantization="gptq")
cl.user_session.set("llm", llm)
# 初始化向量数据库
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
cl.user_session.set("embeddings", embeddings)
# 初始化知识库
if not os.path.exists("vectorstore"):
os.makedirs("vectorstore")
vectorstore = FAISS.load_local("vectorstore", embeddings)
cl.user_session.set("vectorstore", vectorstore)
@cl.on_message
async def main(message: cl.Message):
llm = cl.user_session.get("llm")
vectorstore = cl.user_session.get("vectorstore")
# 检索相关知识
docs = vectorstore.similarity_search(message.content, k=3)
context = "\n\n".join([doc.page_content for doc in docs])
# 构建提示词
prompt = f"基于以下上下文回答问题:\n{context}\n\n问题: {message.content}\n回答:"
# 生成回答
sampling_params = SamplingParams(temperature=0.7, top_p=0.9)
response = await llm.generate(prompt, sampling_params)
await cl.Message(content=response).send()
@cl.on_file_upload(accept=["pdf"])
async def upload_file(files: List[cl.File]):
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
embeddings = cl.user_session.get("embeddings")
vectorstore = cl.user_session.get("vectorstore")
for file in files:
# 保存上传的文件
file_path = f"uploads/{file.name}"
with open(file_path, "wb") as f:
f.write(file.content)
# 加载并处理PDF
loader = PyPDFLoader(file_path)
pages = loader.load_and_split(text_splitter)
# 添加到向量数据库
vectorstore.add_documents(pages)
vectorstore.save_local("vectorstore")
await cl.Message(content=f"已成功上传并处理{len(files)}个文件").send()
4. 构建RAG知识库
4.1 文档处理流程
我们的RAG系统遵循以下流程:
- 用户上传PDF文档
- 系统将文档分割成小块
- 使用嵌入模型将文本转换为向量
- 将向量存储在FAISS向量数据库中
- 用户提问时,检索最相关的文档片段
- 将检索结果与问题一起发送给LLM生成回答
4.2 优化检索效果
为了提高检索质量,我们可以调整以下参数:
# 文本分割参数
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # 每个块的大小
chunk_overlap=200, # 块之间的重叠
length_function=len,
is_separator_regex=False,
)
# 检索参数
docs = vectorstore.similarity_search(
query=message.content,
k=3, # 返回的文档数量
filter=None # 可选的过滤条件
)
5. 常见问题与解决方案
5.1 模型加载失败
如果模型加载失败,可以尝试:
- 检查CUDA和cuDNN版本是否兼容
- 确保有足够的GPU内存
- 尝试降低
--gpu-memory-utilization参数值
5.2 文档处理速度慢
对于大型文档,处理可能需要较长时间。可以考虑:
- 增加
chunk_size减少块数量 - 使用更高效的嵌入模型
- 在后台异步处理文档
5.3 回答质量不佳
如果回答质量不理想,可以尝试:
- 调整温度参数(temperature)控制创造性
- 增加检索的文档数量(k值)
- 优化提示词模板
6. 总结与下一步
通过本教程,我们完成了以下工作:
- 使用vLLM部署了Qwen1.5-1.8B-Chat-GPTQ-Int4模型
- 创建了基于Chainlit的交互式前端
- 实现了文档上传和处理功能
- 构建了RAG知识库系统
下一步可以考虑:
- 支持更多文档格式(Word、Excel等)
- 添加多轮对话历史
- 实现用户认证和权限管理
- 部署到生产环境
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)