制造业知识管理:Ollama集成ChatGLM3-6B-128K构建FAQ系统
制造业知识管理Ollama集成ChatGLM3-6B-128K构建FAQ系统你有没有遇到过这种情况车间老师傅退休了他脑子里那套设备调试的“独门秘籍”也跟着走了新员工遇到设备故障翻遍厚厚的纸质手册也找不到答案不同产线的工艺参数标准不一出了问题互相扯皮。在制造业知识散落在各个角落——老师傅的经验、设备说明书、工艺文件、维修记录——就像一座座信息孤岛。传统做法是建个知识库把文档往里一扔。但真到用的时候员工要么找不到要么看不懂。一个复杂的设备故障描述可能涉及几十页手册的不同章节让人望而却步。今天咱们就来聊聊怎么用两个开源利器——Ollama和ChatGLM3-6B-128K搭建一个能“听懂人话”、还能“翻箱倒柜”帮你找答案的智能FAQ系统。这个系统不要求你懂深度学习也不需要昂贵的GPU服务器用你现有的电脑就能跑起来。1. 为什么制造业需要智能FAQ先说说咱们制造业面临的几个典型问题知识传承断层老员工经验丰富但往往“只可意会不可言传”。他们退休或离职后宝贵的实践经验就流失了。信息查找困难设备手册动辄几百页故障代码成千上万。当生产线突然停机维修人员要在海量文档中快速定位解决方案简直是大海捞针。标准执行不一同样的工艺不同班组、不同班次可能执行标准不同导致产品质量波动。培训成本高昂新员工上岗前需要长时间培训熟悉各种设备、工艺、安全规范。传统的解决方案是建立文档管理系统或Wiki但效果有限。员工需要知道“关键词”才能搜索而实际问题往往是自然语言描述的“这台数控机床报警显示E-045主轴转速上不去怎么回事”智能FAQ系统的价值就在于它能理解这种自然语言问题然后从你的知识库中找出最相关的答案甚至能综合多份文档给出解决方案。2. 技术选型为什么是Ollama ChatGLM3-6B-128K市面上大模型很多为什么偏偏选这两个组合咱们从实际应用角度分析一下。2.1 Ollama本地化部署的“瑞士军刀”Ollama最大的优势就是简单。它把大模型部署这个复杂过程变成了“下载即用”。你不需要配置复杂的Python环境不用折腾CUDA驱动更不用研究模型量化。对于制造企业的IT部门来说这大大降低了技术门槛。更重要的是Ollama支持本地部署。这意味着你的所有生产数据、工艺参数、设备信息都在本地服务器上完全符合制造业对数据安全的高要求。不像某些云端服务你得担心敏感数据泄露的风险。2.2 ChatGLM3-6B-128K为长文档而生的“专业选手”ChatGLM3-6B-128K是清华智谱AI开源的对话模型专门针对长文本优化。这里的“128K”不是指模型大小而是它能处理的上下文长度——大约相当于10万汉字。这对制造业知识管理太重要了想想看一份完整的设备操作手册可能就有几万字故障排查指南往往包含大量案例描述工艺标准文档涉及多个章节和附录普通模型可能只能记住最近几千字的对话但ChatGLM3-6B-128K能“记住”相当于一整本专业书的内容。这意味着它能在超长文档中准确找到相关信息不会因为上下文太长而“失忆”。而且这个模型对中文支持特别好理解制造业特有的专业术语和表达习惯比用英文模型翻译过来要准确得多。2.3 组合优势112把Ollama的易用性和ChatGLM3-6B-128K的长文本能力结合起来你就得到了一个部署简单几条命令就能跑起来使用方便提供标准的API接口方便集成到现有系统处理能力强能消化整个知识库文档成本可控可以在消费级显卡上运行数据安全全部流程都在内网完成3. 快速部署10分钟搭建你的智能问答引擎说了这么多到底怎么用咱们一步步来。3.1 环境准备首先确保你的电脑满足基本要求操作系统Windows 10/11macOS或Linux内存至少16GB处理长文本需要较大内存存储空间20GB以上空闲空间显卡可选有NVIDIA显卡GTX 1060 6G或以上速度会快很多3.2 安装Ollama打开终端Windows用PowerShell或CMDmacOS/Linux用Terminal输入以下命令Windows用户# 下载并安装Ollama curl -fsSL https://ollama.com/install.sh | sh # 或者直接访问官网下载安装包 # https://ollama.com/downloadmacOS用户# 使用Homebrew安装 brew install ollama # 或者下载dmg安装包Linux用户# Ubuntu/Debian curl -fsSL https://ollama.com/install.sh | sh # 或者手动下载安装安装完成后在终端输入ollama --version如果显示版本号就说明安装成功了。3.3 拉取ChatGLM3-6B-128K模型这是最关键的一步但也是最简单的一步# 一行命令搞定 ollama pull chatglm3:6b-128k这个命令会从Ollama的模型库中下载ChatGLM3-6B-128K。下载时间取决于你的网速模型大小约12GB一般需要10-30分钟。下载完成后运行模型# 启动模型服务 ollama run chatglm3:6b-128k如果看到类似下面的输出说明模型已经成功运行 Send a message (/? for help)按CtrlD退出交互模式模型会在后台继续运行。3.4 验证部署打开浏览器访问http://localhost:11434如果看到Ollama的API文档页面说明服务正常运行。更简单的测试方法是直接用curl发个请求curl http://localhost:11434/api/generate -d { model: chatglm3:6b-128k, prompt: 你好请介绍一下你自己, stream: false }如果返回了模型的自我介绍恭喜你智能问答引擎已经就位了4. 构建制造业知识库从零到一的实践模型跑起来了但现在是“空壳子”它还没有学习你们公司的专业知识。接下来咱们要喂数据。4.1 知识来源梳理制造业的知识通常分布在以下几个地方设备文档操作手册、维护指南、故障代码表工艺文件作业指导书、工艺参数表、质量标准经验记录维修记录、问题解决案例、改进建议培训材料新员工培训手册、安全操作规程标准规范ISO文档、行业标准、企业标准建议先从最重要的开始比如设备故障处理这是生产线最急需的。4.2 知识预处理让机器“读懂”专业文档原始文档直接扔给模型效果不好需要适当处理。咱们以一份数控机床故障手册为例原始文档片段故障代码E-045 故障描述主轴驱动过载 可能原因 1. 切削参数设置不当 2. 刀具磨损严重 3. 主轴轴承损坏 4. 驱动模块故障 处理步骤 1. 立即停止加工 2. 检查当前切削参数... 后续省略优化后的格式【故障代码】E-045 【故障现象】主轴驱动过载报警主轴转速无法达到设定值 【可能原因】 - 切削参数设置不当进给速度过快或切削深度过大 - 刀具磨损严重刀具刃口磨损导致切削力增大 - 主轴机械故障轴承损坏、主轴变形等 - 电气系统故障驱动模块过热、电源电压不稳定 【应急处理】 1. 立即按下急停按钮停止机床运行 2. 记录报警时的加工参数程序号、转速、进给等 3. 等待主轴完全停止后手动转动主轴检查阻力 【详细排查步骤】 步骤1检查切削参数... 后续省略 【相关文档】 - 《XX型数控机床操作手册》第45页 - 《刀具使用与维护规范》第12条看出区别了吗优化后的格式结构更清晰用【】标注关键信息内容更完整补充了实际现象描述步骤更具体给出了可操作的建议添加了关联文档方便追溯4.3 知识入库批量处理文档如果文档不多可以手动整理。但如果有很多文档咱们写个Python脚本批量处理import os import json from pathlib import Path def process_manufacturing_docs(doc_folder, output_file): 处理制造业文档转换为适合大模型学习的格式 knowledge_base [] # 支持多种文档格式 supported_extensions [.txt, .md, .pdf, .docx] for file_path in Path(doc_folder).rglob(*): if file_path.suffix.lower() in supported_extensions: try: # 读取文档内容 if file_path.suffix .txt: with open(file_path, r, encodingutf-8) as f: content f.read() elif file_path.suffix .md: with open(file_path, r, encodingutf-8) as f: content f.read() # 其他格式需要相应库处理这里简化 # 提取关键信息根据实际文档结构调整 doc_info { title: file_path.stem, content: content[:5000], # 截取前5000字符避免过长 source: str(file_path), type: determine_doc_type(file_path), # 自定义函数判断文档类型 keywords: extract_keywords(content) # 自定义函数提取关键词 } knowledge_base.append(doc_info) print(f已处理: {file_path.name}) except Exception as e: print(f处理失败 {file_path}: {e}) # 保存为JSON格式 with open(output_file, w, encodingutf-8) as f: json.dump(knowledge_base, f, ensure_asciiFalse, indent2) print(f处理完成共{len(knowledge_base)}个文档) return knowledge_base def determine_doc_type(file_path): 根据文件名判断文档类型 filename file_path.name.lower() if 故障 in filename or 报警 in filename: return troubleshooting elif 操作 in filename or 手册 in filename: return manual elif 工艺 in filename or 参数 in filename: return process elif 安全 in filename: return safety else: return other def extract_keywords(content): 简单关键词提取实际应用可以用更复杂的方法 # 这里是简化版实际可以用jieba等分词库 manufacturing_keywords [故障, 报警, 维修, 保养, 参数, 设置, 调整, 检查, 更换, 清洁] found_keywords [kw for kw in manufacturing_keywords if kw in content] return found_keywords[:5] # 返回前5个关键词 # 使用示例 if __name__ __main__: # 设置你的文档文件夹路径 doc_folder ./manufacturing_docs output_file ./knowledge_base.json if not os.path.exists(doc_folder): os.makedirs(doc_folder) print(f请将文档放入 {doc_folder} 文件夹后重新运行) else: kb process_manufacturing_docs(doc_folder, output_file)这个脚本会把指定文件夹里的文档转换成结构化的知识库。实际使用时你可能需要根据文档格式调整处理逻辑。5. 实现智能问答让系统真正“智能”起来有了知识库现在要让模型学会使用这些知识。这里有个关键概念RAG检索增强生成。简单说就是当用户提问时系统先到知识库里找到相关文档然后把文档和问题一起交给模型让模型基于这些文档生成答案。这样既保证了答案的准确性又利用了模型的自然语言理解能力。5.1 基础问答实现先实现一个最简单的版本import requests import json class ManufacturingFAQSystem: def __init__(self, ollama_urlhttp://localhost:11434): self.ollama_url ollama_url self.model_name chatglm3:6b-128k self.knowledge_base self.load_knowledge_base() def load_knowledge_base(self): 加载知识库 try: with open(./knowledge_base.json, r, encodingutf-8) as f: return json.load(f) except FileNotFoundError: print(知识库文件不存在请先构建知识库) return [] def search_relevant_docs(self, question, top_k3): 在知识库中搜索相关问题文档简化版 relevant_docs [] # 简单的关键词匹配实际应用应该用更智能的搜索 for doc in self.knowledge_base: relevance_score 0 # 检查标题是否相关 for keyword in doc.get(keywords, []): if keyword in question: relevance_score 2 # 检查内容是否相关 content_preview doc.get(content, )[:500] for keyword in doc.get(keywords, []): if keyword in question and keyword in content_preview: relevance_score 1 if relevance_score 0: relevant_docs.append({ doc: doc, score: relevance_score }) # 按相关性排序 relevant_docs.sort(keylambda x: x[score], reverseTrue) # 返回最相关的几个文档 return [item[doc] for item in relevant_docs[:top_k]] def build_prompt(self, question, relevant_docs): 构建给模型的提示词 prompt 你是一个制造业专家助手请根据提供的参考资料回答用户问题。 参考资料 # 添加相关文档 for i, doc in enumerate(relevant_docs, 1): prompt f\n【文档{i}】{doc.get(title, 未知标题)}\n prompt f内容{doc.get(content, )[:1000]}\n # 截取部分内容 prompt f 用户问题{question} 请根据以上参考资料回答如果参考资料中没有相关信息请如实说明。 回答要求 1. 基于参考资料不要编造信息 2. 如果参考资料中有具体步骤请按步骤说明 3. 如果涉及安全操作请特别强调安全注意事项 4. 回答要简洁明了便于现场操作人员理解 回答 return prompt def ask_question(self, question): 向FAQ系统提问 # 1. 搜索相关文档 relevant_docs self.search_relevant_docs(question) if not relevant_docs: return 抱歉在现有知识库中没有找到相关问题的解答。 # 2. 构建提示词 prompt self.build_prompt(question, relevant_docs) # 3. 调用Ollama API try: response requests.post( f{self.ollama_url}/api/generate, json{ model: self.model_name, prompt: prompt, stream: False, options: { temperature: 0.1, # 低温度让回答更确定 num_predict: 1000 # 最大生成长度 } }, timeout30 ) if response.status_code 200: result response.json() answer result.get(response, ).strip() # 添加参考资料引用 if answer and relevant_docs: answer \n\n【参考资料】 for doc in relevant_docs: answer f\n- {doc.get(title, 未知标题)} return answer else: return f请求失败状态码{response.status_code} except Exception as e: return f请求出错{str(e)} def interactive_mode(self): 交互式问答模式 print(制造业智能FAQ系统已启动) print(输入退出或quit结束对话) print(- * 50) while True: question input(\n请输入问题).strip() if question.lower() in [退出, quit, exit]: print(感谢使用再见) break if not question: continue print(\n思考中...) answer self.ask_question(question) print(f\n回答{answer}) # 使用示例 if __name__ __main__: faq_system ManufacturingFAQSystem() # 测试几个制造业典型问题 test_questions [ 数控机床报警E-045怎么处理, 如何保养加工中心的导轨, 焊接工艺参数怎么设置 ] for q in test_questions: print(f\n问题{q}) answer faq_system.ask_question(q) print(f回答{answer[:200]}...) # 只打印前200字符 print(- * 50) # 启动交互模式 # faq_system.interactive_mode()这个基础版本已经能工作了但搜索功能比较简陋。下面咱们升级一下。5.2 升级版使用向量搜索关键词匹配的缺点是只能找到字面相关的文档。比如“主轴不转”和“主轴无法启动”意思一样但字面不同就匹配不上。用向量搜索可以解决这个问题。import numpy as np from sentence_transformers import SentenceTransformer import pickle import os class EnhancedFAQSystem(ManufacturingFAQSystem): def __init__(self, ollama_urlhttp://localhost:11434): super().__init__(ollama_url) self.embedding_model None self.doc_embeddings None self.load_or_create_embeddings() def load_embedding_model(self): 加载文本向量化模型 # 使用轻量级的中文模型 try: model SentenceTransformer(paraphrase-multilingual-MiniLM-L12-v2) print(向量模型加载成功) return model except: print(加载向量模型失败使用备用方案) return None def create_document_embeddings(self): 为知识库文档创建向量索引 if self.embedding_model is None: self.embedding_model self.load_embedding_model() if self.embedding_model is None: print(无法创建向量索引回退到关键词搜索) return print(正在创建文档向量索引...) # 为每个文档创建向量 doc_texts [] for doc in self.knowledge_base: # 组合标题和内容作为文档表示 text f{doc.get(title, )} {doc.get(content, )[:500]} doc_texts.append(text) # 批量生成向量 embeddings self.embedding_model.encode(doc_texts, show_progress_barTrue) # 保存向量索引 self.doc_embeddings embeddings with open(./doc_embeddings.pkl, wb) as f: pickle.dump({ embeddings: embeddings, doc_info: self.knowledge_base }, f) print(f向量索引创建完成共{len(embeddings)}个文档) def load_or_create_embeddings(self): 加载或创建向量索引 if os.path.exists(./doc_embeddings.pkl): try: with open(./doc_embeddings.pkl, rb) as f: data pickle.load(f) self.doc_embeddings data[embeddings] # 确保知识库与向量索引一致 if len(self.knowledge_base) len(data[doc_info]): self.knowledge_base data[doc_info] print(向量索引加载成功) except: print(加载向量索引失败重新创建) self.create_document_embeddings() else: self.create_document_embeddings() def search_relevant_docs(self, question, top_k3): 使用向量搜索查找相关文档 # 如果向量索引不存在回退到父类的方法 if self.doc_embeddings is None or self.embedding_model is None: return super().search_relevant_docs(question, top_k) # 将问题转换为向量 question_embedding self.embedding_model.encode([question])[0] # 计算余弦相似度 similarities [] for i, doc_embedding in enumerate(self.doc_embeddings): # 余弦相似度 similarity np.dot(question_embedding, doc_embedding) / ( np.linalg.norm(question_embedding) * np.linalg.norm(doc_embedding) ) similarities.append((i, similarity)) # 按相似度排序 similarities.sort(keylambda x: x[1], reverseTrue) # 返回最相关的文档 relevant_docs [] for idx, similarity in similarities[:top_k]: if similarity 0.3: # 相似度阈值 doc self.knowledge_base[idx].copy() doc[similarity_score] float(similarity) relevant_docs.append(doc) return relevant_docs def ask_question(self, question, use_ragTrue): 提问可选择是否使用RAG if not use_rag: # 直接问模型不使用知识库 try: response requests.post( f{self.ollama_url}/api/generate, json{ model: self.model_name, prompt: f问题{question}\n请以制造业专家的身份回答, stream: False }, timeout30 ) if response.status_code 200: return response.json().get(response, ).strip() else: return 请求失败 except Exception as e: return f请求出错{str(e)} else: # 使用RAG检索增强生成 return super().ask_question(question) # 使用示例 if __name__ __main__: # 初始化增强版FAQ系统 enhanced_faq EnhancedFAQSystem() # 测试向量搜索效果 test_questions [ 机床主轴不动了怎么办, # 与主轴不转相似 加工中心怎么维护, 设备报警怎么处理 ] for q in test_questions: print(f\n问题{q}) # 搜索相关文档 relevant_docs enhanced_faq.search_relevant_docs(q, top_k2) print(f找到 {len(relevant_docs)} 个相关文档) for doc in relevant_docs: print(f - {doc.get(title, 未知)} (相似度: {doc.get(similarity_score, 0):.3f})) # 获取答案 answer enhanced_faq.ask_question(q) print(f回答{answer[:150]}...) print(- * 50)向量搜索能更好地理解问题的语义找到真正相关的文档即使字面不匹配。6. 实际应用制造业典型场景示例理论说完了看看在实际生产环境中怎么用。6.1 场景一设备故障快速排查问题夜班操作员报告“数控车床加工时突然停机报警显示E-045主轴转速显示为0”。传统做法操作员打电话给维修主管主管从家里赶到现场翻看纸质手册可能还要打电话问老师傅。智能FAQ做法操作员在车间电脑上输入问题“数控车床报警E-045主轴不转了怎么办”系统在1秒内返回答案根据故障手册E-045是主轴驱动过载报警。 立即执行 1. 按下急停按钮确保安全 2. 检查主轴温度是否异常正常应低于60°C 3. 检查刀具是否磨损或崩刃 4. 查看最近一次加工的切削参数 可能原因及处理 - 切削参数过大降低进给速度或切削深度 - 刀具问题更换新刀具 - 机械故障联系维修人员检查主轴轴承 - 电气故障检查驱动模块指示灯 参考文档《XX数控车床故障手册》第45页操作员按照指引初步排查如果是简单问题如刀具磨损当场解决复杂问题再呼叫维修。6.2 场景二新员工培训与指导问题新员工第一次操作激光切割机不确定参数怎么设置。传统做法找老师傅带或者自己翻300页的操作手册。智能FAQ做法新员工提问“激光切割不锈钢板厚度2mm怎么设置参数”系统综合多份文档给出建议针对2mm不锈钢板激光切割推荐参数 基础参数 - 功率1200-1500W - 速度2-3米/分钟 - 频率200-300Hz - 气压0.8-1.2Bar氮气保护 注意事项 1. 先在小料上试切调整焦点位置 2. 确保板材表面清洁无油污 3. 使用氮气防止氧化获得亮面切割 4. 监控切割背面挂渣情况 安全提醒 - 佩戴防护眼镜 - 确保排烟系统正常工作 - 切割完成后等待平台冷却再取件 参考《激光切割机操作规范》第3章 《不锈钢加工工艺卡》编号SS-2023-026.3 场景三工艺标准查询问题质检员发现一批零件尺寸超差需要查工艺标准。传统做法翻找纸质工艺文件可能版本不对或找不到。智能FAQ做法输入“零件号P-2024-056的尺寸公差标准是多少”系统直接从最新版工艺文件中提取零件P-2024-056主轴箱体关键尺寸公差 1. 主轴孔直径φ80H6 (0.019/0) 2. 端面跳动≤0.01mm 3. 平面度≤0.02mm/100mm 4. 孔距公差±0.02mm 检测方法 - 使用三坐标测量机 - 环境温度要求20±2°C - 测量前恒温4小时 最新版本Rev.3.2 (2024年5月修订) 生效日期2024年6月1日 参考《精密零件加工标准》第4.2节7. 系统优化与进阶功能基础功能实现了但要让系统真正好用还需要一些优化。7.1 多轮对话支持实际使用中用户往往需要连续问多个相关问题。比如先问“E-045报警怎么办”接着问“怎么检查主轴轴承”再问“轴承更换步骤”。class ConversationalFAQSystem(EnhancedFAQSystem): def __init__(self, ollama_urlhttp://localhost:11434): super().__init__(ollama_url) self.conversation_history [] self.max_history_length 5 # 保留最近5轮对话 def ask_with_context(self, question): 考虑对话历史的提问 # 构建包含历史的提示词 context_prompt 以下是之前的对话历史\n for i, (q, a) in enumerate(self.conversation_history[-self.max_history_length:]): context_prompt f用户{i1}: {q}\n context_prompt f助手{i1}: {a[:200]}...\n\n context_prompt f当前问题{question}\n context_prompt 请根据对话历史和知识库回答 # 搜索相关文档基于当前问题和历史 combined_query question for q, _ in self.conversation_history[-2:]: # 最近两个问题 combined_query q relevant_docs self.search_relevant_docs(combined_query) # 构建完整提示词 full_prompt self.build_prompt(context_prompt, relevant_docs) # 调用模型 try: response requests.post( f{self.ollama_url}/api/generate, json{ model: self.model_name, prompt: full_prompt, stream: False, options: { temperature: 0.2, num_predict: 1500 } }, timeout30 ) if response.status_code 200: answer response.json().get(response, ).strip() # 保存到历史 self.conversation_history.append((question, answer)) if len(self.conversation_history) self.max_history_length * 2: self.conversation_history self.conversation_history[-self.max_history_length * 2:] return answer else: return 请求失败 except Exception as e: return f请求出错{str(e)} def clear_history(self): 清空对话历史 self.conversation_history []7.2 答案可信度评估不是所有问题都能在知识库找到答案。系统应该能判断答案的可信度。def ask_question_with_confidence(self, question): 带可信度评估的提问 # 搜索相关文档 relevant_docs self.search_relevant_docs(question, top_k5) if not relevant_docs: return { answer: 在现有知识库中没有找到相关问题的解答。, confidence: 0.0, sources: [] } # 计算总体可信度基于最相关文档的相似度 top_similarity max([doc.get(similarity_score, 0) for doc in relevant_docs]) # 高相似度 (0.7) 表示很可能有答案 # 中等相似度 (0.4-0.7) 表示可能有相关但不完全匹配的内容 # 低相似度 (0.4) 表示相关性较弱 if top_similarity 0.7: confidence 0.9 elif top_similarity 0.4: confidence 0.6 else: confidence 0.3 # 获取答案 prompt self.build_prompt(question, relevant_docs[:3]) # 只用最相关的3个 answer self.get_answer_from_model(prompt) # 检查答案是否包含没有找到等短语 low_confidence_phrases [没有找到, 无法回答, 不知道, 不了解] if any(phrase in answer for phrase in low_confidence_phrases): confidence max(confidence - 0.3, 0.1) return { answer: answer, confidence: round(confidence, 2), sources: [doc.get(title, 未知) for doc in relevant_docs[:3]], top_similarity: round(top_similarity, 3) }7.3 知识库自动更新知识库不是一成不变的新设备、新工艺、新问题不断出现。系统应该支持便捷的知识更新。def add_document_to_kb(self, title, content, doc_typemanual, keywordsNone): 向知识库添加新文档 new_doc { title: title, content: content, type: doc_type, keywords: keywords or [], timestamp: datetime.now().isoformat() } # 添加到知识库 self.knowledge_base.append(new_doc) # 更新向量索引 if self.embedding_model is not None: text f{title} {content[:500]} new_embedding self.embedding_model.encode([text])[0] if self.doc_embeddings is None: self.doc_embeddings np.array([new_embedding]) else: self.doc_embeddings np.vstack([self.doc_embeddings, new_embedding]) # 保存到文件 self.save_knowledge_base() print(f文档 {title} 已添加到知识库) return True def save_knowledge_base(self): 保存知识库到文件 # 保存文档数据 with open(./knowledge_base.json, w, encodingutf-8) as f: json.dump(self.knowledge_base, f, ensure_asciiFalse, indent2) # 保存向量索引 if self.doc_embeddings is not None: with open(./doc_embeddings.pkl, wb) as f: pickle.dump({ embeddings: self.doc_embeddings, doc_info: self.knowledge_base }, f)8. 部署与集成建议8.1 硬件配置建议根据企业规模选择合适配置使用场景推荐配置预估成本支持用户数小型车间50人CPU: i5/R5以上内存: 32GB无显卡5-8千元10-20人同时使用中型工厂50-200人CPU: i7/R7内存: 64GB显卡: RTX 4060 12G1-1.5万元30-50人同时使用大型企业200人服务器CPU内存: 128GB显卡: RTX 4090或专业卡3万元以上100人同时使用8.2 系统集成方案Web界面用Flask或FastAPI做个简单界面from flask import Flask, request, jsonify, render_template app Flask(__name__) faq_system ConversationalFAQSystem() app.route(/) def index(): return render_template(index.html) app.route(/api/ask, methods[POST]) def ask(): data request.json question data.get(question, ) use_rag data.get(use_rag, True) if use_rag: result faq_system.ask_question_with_confidence(question) else: answer faq_system.ask_question(question, use_ragFalse) result {answer: answer, confidence: 0.5, sources: []} return jsonify(result) if __name__ __main__: app.run(host0.0.0.0, port5000, debugTrue)微信/钉钉集成通过机器人接口接入企业IMMES/ERP集成与现有制造执行系统对接直接在工位终端使用8.3 维护与更新定期更新知识库每月检查一次添加新文档、更新旧文档监控系统使用记录常见问题优化知识覆盖用户反馈机制让员工可以给答案评分或补充信息性能监控关注响应时间优化搜索算法9. 总结通过Ollama和ChatGLM3-6B-128K构建制造业FAQ系统咱们实现了一个成本低、部署简单、效果实用的智能知识管理方案。这个系统有几个明显优势降低技术门槛不用深度学习专家普通IT人员就能维护。Ollama的一键部署让大模型不再神秘。数据安全可控所有数据都在本地敏感的生产工艺、设备参数不会泄露。长文本处理能力强ChatGLM3-6B-128K能处理整个设备手册确保答案的完整性。持续进化随着使用系统会积累更多问答数据可以反过来优化知识库。成本效益高相比动辄几十万的商业系统这个方案几乎零成本除了电费。实际部署时建议从小范围试点开始。选一个痛点最明显的场景比如某个关键设备的故障处理先跑起来。收集3个月的使用数据看看员工是否爱用答案是否准确再逐步推广到其他场景。制造业的数字化转型不是一蹴而就的智能FAQ系统可以作为一个很好的切入点。它不改变现有流程只是让已有的知识更容易被找到、更容易被使用。当每个员工都能像问老师傅一样问系统当每次故障都能在几分钟内找到解决方案你会看到生产效率、产品质量和员工满意度的实实在在提升。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。