ChatGLM-6B+Flask实战:手把手教你搭建本地知识库问答系统(附避坑指南)

从零搭建QQ风格AI对话伴侣:ChatGLM-6B实战指南 对话系统作为自然语言处理(NLP)的核心应用,通过接口层、处理层和智能层的模块化设计实现人机交互。其技术原理基于深度学习模型对语义的理解与生成,在智能客服、虚拟伴侣等场景具有重要价值。本文以QQ聊天场景为例,详细讲解如何使用Python+ChatGLM-6B开源模型构建个性化AI对话系统,涵盖协议模拟、Flask服务搭建、模型量化部署等关键技术环节。项目采用Transformers库实现轻量级本地推理,特别适合开发者学习对话系统开发与模型微调实践,其中Prompt工程和对话历史管理是提升交互质量的关键要素。 阅读详情

ChatGLM-6B+Flask极简实战:3090显卡本地知识库问答系统搭建指南

在AI技术快速迭代的今天,如何将大语言模型与轻量级Web框架结合,构建高效的本地知识库问答系统,成为许多开发者关注的重点。本文将聚焦ChatGLM-6B与Flask这一黄金组合,通过最小技术栈实现核心功能,特别针对3090显卡用户提供优化方案,并分享实际开发中的避坑经验。

1. 环境准备与依赖管理

1.1 硬件与基础环境配置

对于使用NVIDIA 3090显卡的开发者,首先需要确保CUDA环境正确安装。3090显卡基于Ampere架构,24GB GDDR6X显存完全能满足ChatGLM-6B的推理需求。

# 验证CUDA安装
nvidia-smi
# 应显示类似输出:
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 515.65.01    Driver Version: 515.65.01    CUDA Version: 11.7     |

推荐使用conda创建独立Python环境,避免依赖冲突:

conda create -n chatglm python=3.8.16 -y
conda activate chatglm

1.2 关键依赖安装顺序

依赖安装顺序直接影响项目成功率,以下是经过验证的安装流程:

# 1. 安装PyTorch(根据CUDA版本选择)
pip install torch==1.13.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117

# 2. 安装ChatGLM-6B核心依赖
pip install transformers==4.27.1 sentencepiece==0.1.98

# 3. Flask及相关组件
pip install flask==2.2.3 flask-cors==3.0.10

注意:若出现libcudart.so缺失错误,需检查CUDA_HOME环境变量是否指向正确路径,例如: export CUDA_HOME=/usr/local/cuda-11.7

2. ChatGLM-6B模型加载优化

2.1 模型量化与显存管理

3090显卡24GB显存可直接加载FP16精度的ChatGLM-6B模型(约13GB显存占用)。若需同时运行其他服务,可采用int8量化:

from transformers import AutoTokenizer, AutoModel
model_path = "THUDM/chatglm-6b"

# FP16加载
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().cuda()

# int8量化加载(显存需求降至10GB)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).quantize(8).cuda()

2.2 常见加载问题解决方案

问题1:RuntimeError: CUDA out of memory

  • 解决方案:添加max_memory参数分配合适显存
model = AutoModel.from_pretrained(
    model_path,
    trust_remote_code=True,
    max_memory={0:"20GiB", "cpu":"32GiB"}
).half().cuda()

问题2:ModuleNotFoundError: No module named 'icd'

  • 解决方案:安装缺失依赖
pip install icd -i https://pypi.tuna.tsinghua.edu.cn/simple

3. Flask API服务设计

3.1 最小化API实现

创建app.py文件实现核心问答接口:

from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route('/api/chat', methods=['POST'])
def chat():
    data = request.get_json()
    query = data.get('query', '')
    history = data.get('history', [])
    
    response, updated_history = model.chat(tokenizer, query, history)
    return jsonify({
        "response": response,
        "history": updated_history
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, threaded=True)

3.2 性能优化技巧

  • 启用多线程:Flask默认单线程,添加threaded=True参数支持并发
  • 请求超时设置:添加超时控制避免长时间等待
from functools import wraps
from flask import abort
import signal

class TimeoutError(Exception):
    pass

def timeout(seconds=10):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            def handler(signum, frame):
                raise TimeoutError()
            
            signal.signal(signal.SIGALRM, handler)
            signal.alarm(seconds)
            try:
                result = func(*args, **kwargs)
            finally:
                signal.alarm(0)
            return result
        return wrapper
    return decorator

@app.route('/api/chat', methods=['POST'])
@timeout(30)
def chat():
    # 原有实现

4. 本地知识库集成方案

4.1 轻量级知识库实现

无需复杂知识图谱,使用FAISS实现向量检索:

from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import DirectoryLoader

# 加载本地文档
loader = DirectoryLoader('knowledge/', glob="**/*.txt")
documents = loader.load()

# 生成向量库
embeddings = HuggingFaceEmbeddings(model_name="GanymedeNil/text2vec-large-chinese")
vector_db = FAISS.from_documents(documents, embeddings)
vector_db.save_local("faiss_index")

4.2 知识库问答集成

修改Flask接口整合知识检索:

@app.route('/api/knowledge_chat', methods=['POST'])
def knowledge_chat():
    data = request.get_json()
    query = data.get('query', '')
    
    # 知识检索
    docs = vector_db.similarity_search(query, k=3)
    context = "\n".join([doc.page_content for doc in docs])
    
    # 带上下文的问答
    prompt = f"基于以下知识:\n{context}\n\n回答:{query}"
    response, _ = model.chat(tokenizer, prompt)
    
    return jsonify({
        "response": response,
        "sources": [doc.metadata.get('source') for doc in docs]
    })

5. 前端交互界面开发

5.1 最小化HTML界面

创建templates/index.html实现聊天界面:

<!DOCTYPE html>
<html>
<head>
    <title>本地知识库问答</title>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <style>
        #chatbox { height: 400px; overflow-y: scroll; border: 1px solid #ccc; padding: 10px; }
        .user-msg { color: blue; margin: 5px 0; }
        .bot-msg { color: green; margin: 5px 0; }
    </style>
</head>
<body>
    <div id="chatbox"></div>
    <input type="text" id="userInput" placeholder="输入问题...">
    <button onclick="sendMessage()">发送</button>

    <script>
        async function sendMessage() {
            const input = document.getElementById('userInput');
            const chatbox = document.getElementById('chatbox');
            
            chatbox.innerHTML += `<div class="user-msg">用户:${input.value}</div>`;
            
            try {
                const response = await axios.post('/api/knowledge_chat', {
                    query: input.value
                });
                
                chatbox.innerHTML += `<div class="bot-msg">AI:${response.data.response}</div>`;
                if(response.data.sources) {
                    chatbox.innerHTML += `<div class="bot-msg">来源:${response.data.sources.join(', ')}</div>`;
                }
            } catch (error) {
                chatbox.innerHTML += `<div class="bot-msg" style="color:red">错误:${error.message}</div>`;
            }
            
            input.value = '';
            chatbox.scrollTop = chatbox.scrollHeight;
        }
    </script>
</body>
</html>

5.2 启动完整服务

更新app.py添加前端路由:

from flask import render_template

@app.route('/')
def index():
    return render_template('index.html')

6. 部署与性能监控

6.1 生产环境部署建议

使用Gunicorn+Gevent提升并发能力:

pip install gunicorn gevent
gunicorn -k gevent -w 4 -b 0.0.0.0:5000 app:app

6.2 显存监控方案

添加显存监控接口:

@app.route('/api/gpu_status')
def gpu_status():
    import torch
    return jsonify({
        "total_memory": torch.cuda.get_device_properties(0).total_memory,
        "used_memory": torch.cuda.memory_allocated(0),
        "free_memory": torch.cuda.memory_reserved(0)
    })

7. 进阶优化方向

对于希望进一步提升系统能力的开发者,可以考虑:

  1. 缓存机制:使用Redis缓存常见问答
  2. 异步处理:Celery处理长时任务
  3. 混合检索:结合关键词与向量检索
  4. 微调模型:LoRA方式适配专业领域

实际测试中,在3090显卡上该系统可支持约15-20并发请求,平均响应时间在3秒以内。关键是要控制好prompt长度,避免超出模型的上下文窗口限制(ChatGLM-6B为2048 tokens)。

本地部署ChatGLM-6B实现离线智能问答系统 大语言模型(LLM)的本地化部署是AI工程落地的关键环节,其核心在于脱离云端依赖、实现全链路可控推理。原理上需兼顾模型量化压缩、硬件适配、流式响应与上下文管理等多重技术约束;技术价值体现在数据主权保障、低延迟响应及教学可调试性;典型应用场景包括高校课程设计、毕业设计答辩、内网实验室AI服务等对部署自主性要求严格的环境。本文聚焦ChatGLM-6B在消费级GPU(如RTX 3060)上的INT4量化部署实践,覆盖从tokenizer加载、4bit模型初始化到Flask-SocketIO长连接服务封装的完整闭环 阅读详情

相关推荐

ChatGLM3-6B知识库问答实战:从模型加载到RAG部署

ChatGLM3-6B本质上是面向企业知识管理的可控推理引擎,而非通用对话模型;其核心原理在于限定上下文内的精准信息抽取与语言重组,技术价值体现在输出可追溯、逻辑可审计、结果可验证,广泛应用于合同审查、设备维修知识图谱、内部FAQ系统等强合规场景。结合BGE-Large-Zh向量化与语义切片,构建端到端RAG流水线,实现从PDF文档到结构化答案的闭环处理——本文详解模型加载验证、检索生成协同、Prompt硬约束设计及生产级避坑要点。

weixin_27419879的博客 200

ChatGLM3-6B-128K商业应用:企业知识库问答系统搭建

本文介绍了如何在星图GPU平台上自动化部署【ollama】ChatGLM3-6B-128K镜像,快速构建企业知识库问答系统。依托128K超长上下文能力,该镜像可精准理解并回答产品手册、客服FAQ等内部文档中的专业问题,适用于销售政策查询、技术支持响应和新员工培训等典型场景。

weixin_35879493的博客 133

ChatGLM-6B本地部署指南:Python 3.10+INT4量化+CUDA 11.8最小可行方案

大语言模型(LLM)本地化部署是企业私有知识库、安全敏感场景和边缘AI应用的基础能力。其核心原理在于模型加载、显存管理与软硬件环境协同优化。技术价值体现在数据不出域、低延迟响应与可定制推理逻辑。典型应用场景包括内部文档智能问答、嵌入式NLP指令解析及轻量级Web服务接口。实践中,ChatGLM-6B因其架构简洁与社区支持完善成为入门首选,而INT4量化与Python 3.10严格版本约束则是保障‘装得进、跑得通’的关键前提——前者将显存占用压至6GB内,后者规避tokenizers与transformers

weixin_29057065的博客 211

ChatGLM-6B代码实例:Python调用API接口实现自动化问答系统

本文介绍了如何在星图GPU平台上自动化部署ChatGLM-6B智能对话服务镜像,并利用Python调用其API接口快速构建自动化问答系统。该方案可轻松应用于智能客服场景,实现7x24小时在线、理解上下文的多轮对话,有效提升用户服务效率与体验。

weixin_33628677的博客 1077

状态估计【扩展卡尔曼滤波算法的神经网络训练】BP神经网络、扩展卡尔曼滤波EKF+BP、粒子滤波PF轨迹估计研究(Matlab代码实现)

内容概要:本文围绕状态估计与神经网络融合技术展开研究,重点介绍了扩展卡尔曼滤波(EKF)与BP神经网络的联合算法(EKF+BP)以及粒子滤波(PF)在轨迹估计中的应用。资源基于Matlab/Simulink平台,提供了BP神经网络、EKF+BP融合算法和PF的完整代码实现,旨在通过仿真手段提升非线性系统的状态估计精度。文中不仅涵盖了卡尔曼滤波系列(如UKF、EKF、PF)的基本原理与实现方法,还展示了其在风电预测、电池寿命预测、无人机状态估计、雷达跟踪等领域的广泛应用,突出其在复杂动态系统建模与轨迹预测中的实用价值。; 适合人群:具备一定Matlab编程基础,从事自动化、控制工程、电气工程、人工智能及相关领域的研究生、科研人员和工程技术人员。; 使用场景及目标:①深入理解并掌握扩展卡尔曼滤波与BP神经网络融合的建模机制与实现流程;②开展非线性系统的状态估计与动态轨迹跟踪仿真研究;③应用于无人机导航、机器人定位、电力系统状态监测、信号处理等领域的算法开发与系统优化。; 阅读建议:本资源以Matlab代码为核心,建议读者结合提供的仿真模型与参考文献动手实践,重点关注EKF与BP网络的参数配置、融合策略设计及滤波性能对比,通过比较UKF、EKF与PF等不同滤波算法的估计效果,深化对状态估计算法优劣与适用场景的理解。

5分钟搞定mmdetection3d多模态推理可视化:从KITTI数据集到3D检测结果展示

本文提供了一份快速上手MMDetection3D进行多模态推理可视化的实战指南。文章详细介绍了从环境搭建、KITTI数据集准备,到模型选择、配置解析,再到执行多模态推理并生成3D检测结果可视化的完整流程,旨在帮助开发者在30分钟内快速验证模型并直观展示检测效果。

weixin_29051149的博客 250

从零构建知识库问答系统:基于ChatGLM-6B与知识图谱的实战指南

本文详细介绍了如何从零构建基于ChatGLM-6B与知识图谱的知识库问答系统。通过结合大模型与知识图谱技术,系统能够精准回答专业问题,避免纯大模型方案的'胡说八道'现象。文章涵盖环境搭建、知识图谱构建、模型集成、服务化部署等全流程,并提供了实战中的避坑指南与优化建议。

weixin_30872157的博客 448

无刷直流电机计算转速

一个霍尔传感器周期(Tms)有两种模式输出方式(3FG/1FG),一个电周期是6个60°电角度,电机磁极数是P,磁极对数PP = P / 2 3FG模式: 1个电周期= 6 * T 1FG模式: 1个电周期= 2 * T 1秒钟电周期个数: 1分钟电周期个数: 1分钟转速: 举例: 假设电机磁极数是8,3FG模式下,霍尔周期700us,计算该条件下转速 ...

meimiaorenshengqq的博客 9699

ChatGLM3-6B-128K部署案例:Ollama镜像在私有知识库问答系统中的落地

本文介绍了如何在星图GPU平台上自动化部署【ollama】ChatGLM3-6B-128K镜像,快速构建私有知识库问答系统。通过零代码配置,用户可高效实现对长篇技术文档、合同与手册的精准语义理解与问答,显著提升企业内部知识检索与业务响应效率。

weixin_36300623的博客 302

别再手动算频谱了!用这个在线FFT工具,5分钟搞定JSON/CSV数据分析

本文介绍了一款高效的在线FFT工具,帮助用户快速分析JSON/CSV格式的时域数据,5分钟内完成频谱分析。通过傅里叶变换(FFT)算法,大幅提升计算效率,解决传统手动计算的痛点,适用于工业振动分析、设备故障诊断等场景。

weixin_29172201的博客 262

深入解析ADC采样电容:从充电误差到LSB精度的关键设计

本文深入解析了ADC采样电容在模数转换中的核心作用,重点探讨了充电时间常数与采样误差的博弈关系。通过推导最小采样时间公式,揭示了精度、速度、源阻抗与内部电容之间的制约关系,并提供了从理论计算到外部驱动电路设计的实战指南,是确保ADC达到LSB精度的关键。

android的专栏 1104

用Flask+ChatGLM-6B打造企业级知识库助手:从API封装到权限设计

本文详细介绍了如何利用Flask框架与ChatGLM-6B模型构建企业级知识库助手系统,涵盖API封装、权限设计、本地化部署等关键环节。通过分层架构设计、JWT认证和RBAC权限模型,实现安全可靠的企业知识管理解决方案,助力企业数字化转型。

weixin_29054399的博客 376

视频编解码——视频编解码器工作原理

目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间

路人coder 1万+

用Flask+ChatGLM-6B搭建企业级知识库助手:从API封装到权限控制

本文详细介绍了如何利用Flask框架和ChatGLM-6B大模型构建企业级知识库助手,涵盖API封装、权限控制和本地化部署等关键环节。通过实战代码示例,展示如何实现模型服务化、RBAC权限管理及知识检索增强,为企业提供安全可控的智能问答解决方案。

weixin_29102619的博客 82

2025年华为杯中国研究生数学建模竞赛A题 通用神经网络处理器下的核内调度问题 思路+代码

针对通用神经网络处理器下的核内调度问题,我们提出了一套基于分层优化框架的系统性解决方案。该方案首先通过缓存敏感的启发式拓扑排序算法生成最小峰值缓存占用的调度序列,在满足计算图依赖关系的前提下优先选择能够释放或减少缓存占用的节点;随后采用最佳适应算法进行精细化的缓存分配,结合LRU换出策略动态管理多级缓存空间,最小化额外数据搬运量;最后引入多目标遗传算法进行联合优化,在严格控制数据搬运量不显著增加的前提下,通过关键路径分析、流水线并行和数据预取等技术进一步优化总执行时间。

YOLO 786

大数据在电力行业的应用案例解析-【电力技术】(九)大数据在电力储能运维中的深度应用(含故障预测代码)

大数据技术为电力储能运维提供了“精准化、智能化、高效化”的解决方案,破解了传统运维的核心痛点,实现了储能系统从“被动抢修”到“主动运维”的转型,为新型电力系统建设提供了重要支撑。当前,随着储能产业的快速发展,大数据与储能运维的融合将更加深入,未来将结合人工智能、物联网、区块链等技术,实现储能运维的全流程智能化——从设备故障的提前预警,到寿命的精准预测,再到运维策略的自动优化、调度协同的实时响应,进一步提升储能系统的安全性、经济性与可靠性。

getusushu的博客 88

ChatGLM3-6B实战教程:如何将本地ChatGLM3-6B接入企业微信/钉钉机器人

本文介绍了如何在星图GPU平台上自动化部署🤖 ChatGLM3-6B镜像,构建企业级AI协作助手。通过该平台,用户可快速完成模型服务部署,并将其接入企业微信或钉钉机器人,实现高频问题自动应答、技术文档智能检索等典型办公场景,提升团队响应效率与知识复用能力。

weixin_35364187的博客 533

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

chatglm6b和闻达的功能扩展

最近大火的chatgpt,老板说让我看看能不能用自己的数据,回答专业一些,所以做了一些调研,最近用这个倒是成功推理了自己的数据,模型也开源了,之后有机会也训练一下自己的数据。

weixin_38226321的博客 4091

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ChatGLM3-6B与Flask快速构建API服务

本文介绍了如何在星图GPU平台自动化部署🤖 ChatGLM3-6B镜像,快速构建AI对话API服务。通过Flask框架集成该大语言模型,用户可轻松搭建智能对话接口,适用于小程序、智能客服等应用场景,提升开发效率。

weixin_28949937的博客 384

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【知识库实战项目】基于大模型+知识图谱的知识库问答,大模型入门到精通,收藏这篇就足够了! (附项目)

今天给大家介绍一个git开源的宝藏项目 — 基于大模型+知识图谱的知识库问答,这里还搭配了一个演示dome给大家,如需要此项目练手的,我已经打包好了放在文末~

pythonhy的博客 1132

从零构建智能对话系统:基于ChatGLM-6B的本地化实践指南

本文详细介绍了如何从零开始基于ChatGLM-6B模型在本地构建智能对话系统。内容涵盖硬件选型、环境配置、模型加载与量化、Web界面搭建,以及使用Flask构建生产级API和部署方案。重点探讨了本地化部署在数据隐私、成本控制和响应速度方面的优势,为开发者提供了一份完整的实践指南。

efc123456的博客 586

CodeGeeX2-6B本地部署实战:仅需6GB显存的AI编程助手完全指南

CodeGeeX2-6B是基于ChatGLM2架构的第二代多语言代码生成模型,专为开发者设计的AI编程助手。相比第一代,它在HumanEval-X评测集的六种编程语言上性能全面提升,仅需6GB显存即可本地化部署,支持中英文双输入,最大8192序列长度,让编程效率提升一个数量级。 ## ✨ 项目亮点:为什么选择CodeGeeX2-6B CodeGeeX2-6B不是普通的代码生成工具,而是经过60

gitblog_00150的博客 427

【大模型实战项目】基于大模型+知识图谱的知识库问答 (附项目)

今天给大家介绍一个git开源的宝藏项目 — 基于大模型+知识图谱的知识库问答,这里还搭配了一个演示dome给大家,如需要此项目练手的,我已经打包好了放在文末~

Y525698136的博客 1382

别再写Flask了!用Streamlit 1.31.0快速给ChatGLM3-6B做个Web聊天界面(附完整代码)

本文介绍了如何使用Streamlit 1.31.0快速为ChatGLM3-6B构建Web聊天界面,替代传统的Flask开发方式。通过Streamlit的简洁API和内置组件,开发者可以轻松实现对话历史管理、流式响应和多模态支持,大幅提升LLM应用开发效率。

weixin_30698527的博客 523

ChatGLM-6B VSCode插件开发:AI编程助手实战

本文介绍了如何在星图GPU平台上自动化部署ChatGLM-6B 智能对话服务镜像,构建本地化AI编程助手。通过VSCode插件集成,开发者可在编辑器内实时获取代码补全、错误解释与文档生成等能力,典型应用于日常编码调试与遗留代码理解场景,兼顾隐私安全与开发效率。

weixin_28949937的博客 486
上一篇: 全志T113 Tina5.0开发实战:从零构建自定义OpenWrt板级支持包
下一篇: 告别数据线!3步搞定Scrcpy无线投屏,安卓手机秒变电脑第二屏(附多设备管理技巧)
Python
博客等级 码龄26年 1973粉丝 1567原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值