通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI 企业内网知识库问答系统构建全流程

发布时间:2026/5/20 16:16:41

通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI 企业内网知识库问答系统构建全流程 通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI 企业内网知识库问答系统构建全流程你是不是也遇到过这种情况公司内部的技术文档、产品手册、会议纪要、规章制度散落在各个角落想找个资料得问一圈人翻好几个共享文件夹最后还不一定能找到。新员工入职光是熟悉内部知识就得花上好几个月。这种信息检索的痛点不仅浪费时间更影响工作效率。今天我们就来聊聊怎么用现在很火的大模型技术给企业搭建一个专属的、安全的“智能知识库”。你不用再担心数据泄露也不用花大价钱买复杂的商业软件。核心思路很简单把公司内部的文档“喂”给一个聪明的大脑大模型让它帮你记住所有内容然后你随时可以用自然语言提问它就能从海量文档里找到答案告诉你。我们这次选用的“大脑”是通义千问1.5-1.8B-Chat模型的量化版本它体积小、推理快特别适合部署在资源有限的环境里。整个流程我会手把手带你走一遍从准备文档到最终上线一个带网页界面的问答系统确保数据全程留在你的内网里。1. 为什么要在内网搭建知识库问答系统在开始动手之前我们先得想明白这件事到底能解决什么问题值不值得做。直接使用公网上的大模型聊天工具来查询公司内部信息显然行不通主要有几个硬伤。首先就是数据安全。公司的产品设计图、客户名单、财务数据、战略规划这些信息一旦上传到公网风险完全不可控。内网部署是守住安全底线的唯一选择。其次是答案的准确性和针对性。公网模型的知识截止于它的训练数据它不可能知道你公司上周刚更新的产品特性或者某个内部流程的具体规定。问它这些问题要么答非所问要么干脆说不知道。我们需要的是一个只基于我们提供资料来回答的“专家”。最后是成本与可持续性。依赖外部API每次问答都要付费长期来看是一笔不小的开支而且响应速度受网络影响。自己部署一次后续的边际成本就很低了还能根据业务发展随时更新知识库。所以构建一个内网知识库问答系统核心价值就三点安全可控、答案精准、成本可控。它能把沉淀在文档里的“死知识”变成随时可交互的“活资产”直接提升团队的信息获取效率和决策质量。2. 系统核心架构与工具选型整个系统可以想象成一个“问答流水线”主要分三个核心部分我们用一张图来理解[用户提问] - (前端Web界面) - [问题文本] | v (核心处理引擎) / \ [向量检索模块] [大模型推理模块] (从知识库找相关片段) (组织语言生成答案) \ / v [最终答案] - (前端Web界面) - 展示给用户1. 知识库向量数据库这是系统的记忆体。我们不是把整篇文档直接塞给模型而是先把所有文档切分成一段段有意义的文本块比如几百字一段然后通过一个“嵌入模型”把每一段文本转换成一组数字称为向量。这些数字就像文本的“指纹”语义相近的文本其向量在数字空间里的位置也接近。最后把这些向量和对应的原始文本存储起来就构成了可快速检索的向量知识库。这里我们选用ChromaDB它轻量、易用非常适合快速原型和中小规模应用。2. 大模型推理服务这是系统的大脑。负责理解用户问题并根据检索到的知识片段生成通顺、准确的答案。我们选用通义千问1.5-1.8B-Chat-GPTQ-Int4。这里的“1.8B”是指18亿参数属于“小规模”大模型在保证一定理解能力的同时对计算资源要求不高。“GPTQ-Int4”是一种量化技术能把模型压缩得更小、推理更快非常适合部署。我们将通过星图GPU平台来获取并运行这个模型的服务。3. 应用层WebUI这是系统的脸面。一个简单的网页界面让用户能方便地输入问题、看到答案。我们将用Gradio来快速搭建它几行代码就能生成一个交互式Web应用特别适合这种demo和内部工具。整个流程中数据流完全在内网闭环用户提问 - WebUI接收 - 从内网向量库检索 - 发送检索结果和问题到内网模型服务 - 模型生成答案 - 返回给WebUI展示。原始文档和加工后的向量库都存储在内网服务器模型也部署在内网确保“数据不出域”。3. 第一步准备与处理企业内部知识文档知识库的质量直接决定了问答系统的上限。这一步的目标是把杂乱无章的原始文档变成结构化、可检索的文本片段集合。首先收集文档。把你希望纳入系统的所有文档集中到一个目录里支持.txt,.md,.pdf,.docx,.pptx等常见格式。比如company_docs/目录下可以有产品白皮书.pdf、开发规范.md、2024年Q2会议纪要.docx等等。接下来我们需要编写一个处理脚本完成文本提取、分割和向量化。这里我们用Python来实现。# knowledge_prepare.py import os from langchain.document_loaders import DirectoryLoader, TextLoader, PyPDFLoader, UnstructuredWordDocumentLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import Chroma # 1. 配置路径 documents_directory ./company_docs # 你的文档目录 persist_directory ./vector_db # 向量数据库保存路径 # 2. 加载文档根据后缀名使用不同加载器 def load_documents(directory): documents [] for root, dirs, files in os.walk(directory): for file in files: file_path os.path.join(root, file) try: if file.endswith(.pdf): loader PyPDFLoader(file_path) elif file.endswith(.docx): loader UnstructuredWordDocumentLoader(file_path) elif file.endswith(.txt) or file.endswith(.md): loader TextLoader(file_path, encodingutf-8) else: print(f暂不支持的文件格式: {file}) continue loaded_docs loader.load() # 为每个文档片段添加来源元数据 for doc in loaded_docs: doc.metadata[source] file_path documents.extend(loaded_docs) print(f已加载: {file_path}) except Exception as e: print(f加载文件 {file_path} 时出错: {e}) return documents print(开始加载文档...) all_documents load_documents(documents_directory) print(f共加载 {len(all_documents)} 个文档片段。) # 3. 分割文本 text_splitter RecursiveCharacterTextSplitter( chunk_size500, # 每个片段大约500字符 chunk_overlap50, # 片段间重叠50字符避免上下文断裂 separators[\n\n, \n, 。, , , , , , ] ) print(正在分割文本...) split_docs text_splitter.split_documents(all_documents) print(f分割后得到 {len(split_docs)} 个文本块。) # 4. 生成向量并存入数据库 # 使用一个开源的轻量级嵌入模型可以在内网离线运行 embedding_model HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, # 中文效果好的小模型 model_kwargs{device: cpu}, # 如果没有GPU用CPU也可以稍慢 encode_kwargs{normalize_embeddings: True} ) print(正在生成向量并构建数据库...) vectordb Chroma.from_documents( documentssplit_docs, embeddingembedding_model, persist_directorypersist_directory ) vectordb.persist() # 持久化保存到磁盘 print(f向量数据库已构建并保存至: {persist_directory})运行这个脚本后你的./vector_db目录下就会保存好整个向量知识库。以后有新增文档重新运行这个脚本即可更新知识库。chunk_size可以调整如果文档技术性很强可以适当调小如300以获得更精确的检索。4. 第二步部署通义千问模型推理服务有了知识库我们需要让“大脑”运转起来。我们将利用星图GPU平台它提供了预置的模型镜像和环境能让我们免去复杂的环境配置快速在内网GPU服务器上启动模型服务。1. 获取模型镜像在星图平台镜像广场搜索 “Qwen-1.8B-Chat-GPTQ-Int4” 或类似名称的镜像。选择官方或经过验证的镜像确保其已集成好像 vLLM 或 Text Generation Inference 这样的高效推理框架。2. 部署服务在平台上根据指引创建一个新的部署实例。关键配置如下镜像选择上一步找到的Qwen GPTQ镜像。资源选择带有GPU的规格例如一张T4或4090显卡就足够运行这个量化模型。端口映射将容器内部的API服务端口通常是8000或8080映射到宿主机的一个端口如7860。环境变量/启动命令确保服务以API模式启动。例如如果使用vLLM启动命令可能类似python -m vllm.entrypoints.openai.api_server --model /path/to/model --served-model-name qwen1.8b --api-key token --port 8000。3. 验证服务部署成功后你会在平台获得一个内网访问地址比如http://192.168.1.100:7860。你可以用curl命令简单测试一下服务是否正常。curl http://192.168.1.100:7860/v1/completions \ -H Content-Type: application/json \ -H Authorization: Bearer token \ -d { model: qwen1.8b, prompt: 你好请介绍一下你自己。, max_tokens: 100 }如果看到返回了一段模型生成的自我介绍说明推理服务已经就绪。这个服务将作为我们问答系统的后台“思考引擎”。5. 第三步构建完整的问答链与Web界面现在我们要把知识库检索和模型推理这两个核心环节连接起来并给它们套上一个好用的外壳。这就是“检索增强生成”RAG的流程先检索相关知识再让模型基于这些知识生成答案。我们使用 LangChain 框架来编排这个流程并用 Gradio 构建界面。# app.py from langchain.vectorstores import Chroma from langchain.embeddings import HuggingFaceEmbeddings from langchain.chains import RetrievalQA from langchain.llms import VLLMOpenAI # 使用适配vLLM的LangChain接口 import gradio as gr # 1. 加载我们之前构建的向量数据库 persist_directory ./vector_db embedding_model HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, model_kwargs{device: cpu} ) vectordb Chroma( persist_directorypersist_directory, embedding_functionembedding_model ) # 2. 连接到我们部署的模型服务假设是OpenAI API兼容格式 # 注意这里的 base_url 是你内网模型服务的地址 model_api_base http://192.168.1.100:7860/v1 # 请替换为你的实际地址 llm VLLMOpenAI( openai_api_keytoken, # 与部署时设置的api-key一致 openai_api_basemodel_api_base, model_nameqwen1.8b, max_tokens512, temperature0.1 # 温度调低让答案更确定、更基于检索内容 ) # 3. 构建检索问答链 retriever vectordb.as_retriever(search_kwargs{k: 3}) # 每次检索最相关的3个片段 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 简单地将所有检索到的文本“塞”给模型 retrieverretriever, return_source_documentsTrue # 返回参考来源便于追溯 ) # 4. 定义Gradio交互函数 def answer_question(question, history): 处理用户提问 if not question.strip(): return 请输入问题。, history try: # 调用问答链 result qa_chain({query: question}) answer result[result] source_docs result[source_documents] # 组织回复内容并附上来源 response f{answer}\n\n**参考来源**\n for i, doc in enumerate(source_docs[:2]): # 显示前2个来源 source_file doc.metadata.get(source, 未知文件) # 简单截取片段预览 snippet doc.page_content[:100] ... response f{i1}. 文件: {source_file}\n 片段: {snippet}\n # 更新对话历史Gradio Chatbot格式 history.append((question, response)) return , history # 清空输入框返回更新后的历史 except Exception as e: error_msg f系统处理时出现错误: {str(e)} history.append((question, error_msg)) return , history # 5. 创建并启动Gradio Web界面 with gr.Blocks(title企业内网知识库问答系统, themegr.themes.Soft()) as demo: gr.Markdown(# 企业内网知识库智能问答) gr.Markdown(欢迎使用您可以在此咨询公司产品、技术、制度等相关问题。) chatbot gr.Chatbot(label对话历史, height400) msg gr.Textbox(label请输入您的问题, placeholder例如我们产品的核心优势是什么, lines2) clear_btn gr.Button(清空对话) # 设置提交动作 msg.submit(answer_question, [msg, chatbot], [msg, chatbot]) clear_btn.click(lambda: None, None, chatbot, queueFalse) # 在内网启动服务指定端口例如 7865 if __name__ __main__: demo.launch(server_name0.0.0.0, server_port7865, shareFalse)运行python app.py后打开浏览器访问http://你的服务器IP:7865就能看到问答界面了。你可以尝试问一些知识库里有的问题比如“我们的报销流程是怎样的”或者“XX产品支持哪些接口”。系统会先从向量库找到相关文档段落然后指示模型根据这些段落生成答案并在答案下方注明参考了哪些文件保证了答案的可追溯性。6. 总结走完这一整套流程一个基本可用的企业内网知识库问答系统就搭建起来了。回顾一下最关键的三步是处理文档建库、部署模型服务、用RAG链把两者串起来。实际用起来你会发现它确实能解决不少问题。新员工可以随时问它公司制度销售可以快速查询产品技术细节开发人员也能方便地回溯设计文档。整个系统跑在内网数据安全得到保障而且由于用了量化后的小模型响应速度很快对硬件要求也不高。当然这只是一个起点。如果想让它更好用后续还有很多可以优化的地方。比如可以尝试不同的文本分割策略让检索更精准可以给模型设计更精巧的提示词让它的回答格式更符合要求或者引入对话历史让它能进行多轮追问。前端的Gradio界面也可以做得更美观甚至集成到企业内部办公平台里去。最根本的还是要维护好知识库这个“源头活水”。建立定期更新文档并重新构建向量库的流程这个系统才会持续产生价值。技术是工具解决业务问题才是目的。希望这个全流程的梳理能帮你把大模型这个“黑科技”实实在在地用起来让企业内的知识流动得更顺畅。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻