我在工厂里天天要用MES系统查工单、看良率、追踪批次...以前打开MES系统 → 输入账号密码 → 层层导航 → 找数据 → 导出Excel → 再分析...麻烦死了。后来我搭了个本地大模型助理用自然语言就能查询MES数据。今天ETCH-01的良率是多少 → 直接出结果帮我查一下WAF20240610001这个批次的当前工序 → 2秒出结果为什么用本地部署 MES数据是工厂核心机密不能发到云端。所以必须本地部署。我的选择Ollama免费开源 Llama38B参数8GB显存即可运行硬件要求8GB显存RTX 3060及以上或 Mac M系列芯片软件要求Python 3.9LangChainChromaDB向量数据库架构设计整个系统分3层1. 数据层MES系统的SQL数据库 设备手册文档2. 知识层Chroma向量数据库存储文档切片3. 应用层LangChain连接Ollama SQL工具 文档检索[配图说明本地大模型助理架构图MES数据库文档 → 向量库 → Ollama/Llama3 → 用户界面]完整部署教程Step 1安装Ollama# Windows/Mac/Linux通用# 官网下载https://ollama.com/download# 或者用命令行安装Mac/Linuxcurl -fsSL https://ollama.com/install.sh | sh# 下载模型Llama3 8B8GB显存够用ollama pull llama3# 测试运行ollama run llama3 你好请介绍一下你自己Step 2构建MES知识库import sqlite3from langchain.document_loaders import DirectoryLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.embeddings import OllamaEmbeddingsfrom langchain.vectorstores import Chroma# 示例把MES数据库的表结构存入知识库conn sqlite3.connect(mes.db)cursor conn.cursor()cursor.execute(SELECT sql FROM sqlite_master WHERE typetable)schemas cursor.fetchall()conn.close()# 把表结构写成文档schema_text \n.join([s[0] for s in schemas if s[0]])with open(mes_schema.txt, w, encodingutf-8) as f:f.write(fMES数据库表结构\n{schema_text})# 加载并拆分文档loader DirectoryLoader(./mes_docs, glob**/*.txt)docs loader.load()splitter RecursiveCharacterTextSplitter(chunk_size300, chunk_overlap30)chunks splitter.split_documents(docs)# 存入向量数据库embeddings OllamaEmbeddings(modelllama3)vectorstore Chroma.from_documents(documentschunks,embeddingembeddings,persist_directory./mes_kb)print(f知识库已构建{len(chunks)}个文档片段)Step 3构建SQL查询ChainText-to-SQLfrom langchain.chains import create_sql_query_chainfrom langchain.chat_models import ChatOllamafrom langchain.utilities import SQLDatabasefrom langchain_experimental.sql import SQLDatabaseChain# 连接MES数据库db SQLDatabase.from_uri(sqlite:///mes.db)# 创建LLMllm ChatOllama(modelllama3, base_urlhttp://localhost:11434)# 创建SQL查询Chaindb_chain create_sql_query_chain(llm, db)# 测试查询question ETCH-01设备今天的产出是多少片result db_chain.invoke({question: question})print(f生成的SQL: {result})实际运行效果问题今天ETCH-01的良率是多少生成的SQL:SELECTROUND(SUM(good_qty) * 100.0 / SUM(output_qty), 2) AS yield_rateFROM mes_productionWHERE equipment_id ETCH-01AND shift_date CURDATE()执行结果: 98.3%---问题帮我查批次WAF20240610001当前在哪道工序生成的SQL:SELECTb.lot_id,m.process_name,m.step_name,m.start_timeFROM mes_lot_flow bJOIN mes_process m ON b.current_process_id m.process_idWHERE b.lot_id WAF20240610001执行结果:lot_idWAF20240610001, 刻蚀工序, ETCH-03腔室1, 2026-06-11 14:23:15[配图说明本地大模型助理运行截图自然语言查询SQL执行结果]工程化做个简单的Web界面# 使用Gradio快速做界面pip install gradioimport gradio as grfrom langchain.chains import create_sql_query_chainfrom langchain.chat_models import ChatOllamafrom langchain.utilities import SQLDatabasedb SQLDatabase.from_uri(sqlite:///mes.db)llm ChatOllama(modelllama3, base_urlhttp://localhost:11434)db_chain create_sql_query_chain(llm, db)def query_mes(question):try:sql db_chain.invoke({question: question})# 执行SQL简化版实际需要安全处理result db.execute(sql).fetchall()return fSQL: {sql}\n\n结果: {result}except Exception as e:return f查询失败: {str(e)}# 启动Web界面gr.Interface(fnquery_mes,inputstext,outputstext,titleMES数据查询助手,description用自然语言查询MES数据本地部署数据安全).launch(server_name0.0.0.0, server_port7860)[配图说明Gradio Web界面截图输入框查询结果展示]总结与注意事项⚠️ 部署前必读1. 数据安全所有数据都在本地不用担心泄露2. SQL注入实际使用必须对SQL执行做权限控制不要让LLM随意增删改3. 模型选择Llama3 8B够用追求精度可以用70B需要40GB显存4. 更新知识库MES结构变化时要同步更新向量数据库 实测效果日常查询从5分钟→10秒数据分析效率提升30倍。--- 你们厂的MES系统好用吗有没有想过用AI改造评论区聊聊 觉得有用点赞收藏关注我一起探索AI在制造业的落地
我用本地大模型给MES工程师做了个个人助理(Ollama+知识库,附完整部署教程)
发布时间:2026/6/11 16:59:52
我在工厂里天天要用MES系统查工单、看良率、追踪批次...以前打开MES系统 → 输入账号密码 → 层层导航 → 找数据 → 导出Excel → 再分析...麻烦死了。后来我搭了个本地大模型助理用自然语言就能查询MES数据。今天ETCH-01的良率是多少 → 直接出结果帮我查一下WAF20240610001这个批次的当前工序 → 2秒出结果为什么用本地部署 MES数据是工厂核心机密不能发到云端。所以必须本地部署。我的选择Ollama免费开源 Llama38B参数8GB显存即可运行硬件要求8GB显存RTX 3060及以上或 Mac M系列芯片软件要求Python 3.9LangChainChromaDB向量数据库架构设计整个系统分3层1. 数据层MES系统的SQL数据库 设备手册文档2. 知识层Chroma向量数据库存储文档切片3. 应用层LangChain连接Ollama SQL工具 文档检索[配图说明本地大模型助理架构图MES数据库文档 → 向量库 → Ollama/Llama3 → 用户界面]完整部署教程Step 1安装Ollama# Windows/Mac/Linux通用# 官网下载https://ollama.com/download# 或者用命令行安装Mac/Linuxcurl -fsSL https://ollama.com/install.sh | sh# 下载模型Llama3 8B8GB显存够用ollama pull llama3# 测试运行ollama run llama3 你好请介绍一下你自己Step 2构建MES知识库import sqlite3from langchain.document_loaders import DirectoryLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.embeddings import OllamaEmbeddingsfrom langchain.vectorstores import Chroma# 示例把MES数据库的表结构存入知识库conn sqlite3.connect(mes.db)cursor conn.cursor()cursor.execute(SELECT sql FROM sqlite_master WHERE typetable)schemas cursor.fetchall()conn.close()# 把表结构写成文档schema_text \n.join([s[0] for s in schemas if s[0]])with open(mes_schema.txt, w, encodingutf-8) as f:f.write(fMES数据库表结构\n{schema_text})# 加载并拆分文档loader DirectoryLoader(./mes_docs, glob**/*.txt)docs loader.load()splitter RecursiveCharacterTextSplitter(chunk_size300, chunk_overlap30)chunks splitter.split_documents(docs)# 存入向量数据库embeddings OllamaEmbeddings(modelllama3)vectorstore Chroma.from_documents(documentschunks,embeddingembeddings,persist_directory./mes_kb)print(f知识库已构建{len(chunks)}个文档片段)Step 3构建SQL查询ChainText-to-SQLfrom langchain.chains import create_sql_query_chainfrom langchain.chat_models import ChatOllamafrom langchain.utilities import SQLDatabasefrom langchain_experimental.sql import SQLDatabaseChain# 连接MES数据库db SQLDatabase.from_uri(sqlite:///mes.db)# 创建LLMllm ChatOllama(modelllama3, base_urlhttp://localhost:11434)# 创建SQL查询Chaindb_chain create_sql_query_chain(llm, db)# 测试查询question ETCH-01设备今天的产出是多少片result db_chain.invoke({question: question})print(f生成的SQL: {result})实际运行效果问题今天ETCH-01的良率是多少生成的SQL:SELECTROUND(SUM(good_qty) * 100.0 / SUM(output_qty), 2) AS yield_rateFROM mes_productionWHERE equipment_id ETCH-01AND shift_date CURDATE()执行结果: 98.3%---问题帮我查批次WAF20240610001当前在哪道工序生成的SQL:SELECTb.lot_id,m.process_name,m.step_name,m.start_timeFROM mes_lot_flow bJOIN mes_process m ON b.current_process_id m.process_idWHERE b.lot_id WAF20240610001执行结果:lot_idWAF20240610001, 刻蚀工序, ETCH-03腔室1, 2026-06-11 14:23:15[配图说明本地大模型助理运行截图自然语言查询SQL执行结果]工程化做个简单的Web界面# 使用Gradio快速做界面pip install gradioimport gradio as grfrom langchain.chains import create_sql_query_chainfrom langchain.chat_models import ChatOllamafrom langchain.utilities import SQLDatabasedb SQLDatabase.from_uri(sqlite:///mes.db)llm ChatOllama(modelllama3, base_urlhttp://localhost:11434)db_chain create_sql_query_chain(llm, db)def query_mes(question):try:sql db_chain.invoke({question: question})# 执行SQL简化版实际需要安全处理result db.execute(sql).fetchall()return fSQL: {sql}\n\n结果: {result}except Exception as e:return f查询失败: {str(e)}# 启动Web界面gr.Interface(fnquery_mes,inputstext,outputstext,titleMES数据查询助手,description用自然语言查询MES数据本地部署数据安全).launch(server_name0.0.0.0, server_port7860)[配图说明Gradio Web界面截图输入框查询结果展示]总结与注意事项⚠️ 部署前必读1. 数据安全所有数据都在本地不用担心泄露2. SQL注入实际使用必须对SQL执行做权限控制不要让LLM随意增删改3. 模型选择Llama3 8B够用追求精度可以用70B需要40GB显存4. 更新知识库MES结构变化时要同步更新向量数据库 实测效果日常查询从5分钟→10秒数据分析效率提升30倍。--- 你们厂的MES系统好用吗有没有想过用AI改造评论区聊聊 觉得有用点赞收藏关注我一起探索AI在制造业的落地