资讯动态

GLM-OCR构建智能客服:自动提取聊天截图中的用户问题与订单号

发布时间:2026/8/20 21:13:40 来源:尧图企业网站定制
GLM-OCR构建智能客服自动提取聊天截图中的用户问题与订单号你有没有遇到过这样的情况作为客服每天要处理大量用户发来的截图有的是报错信息有的是订单详情还有的是各种奇奇怪怪的问题描述。一张张图片看下来眼睛都花了还得手动把里面的文字敲出来效率低不说还容易出错。现在很多用户习惯直接截图发问觉得这样最直观。但对客服来说这反而增加了工作量。图片里的文字不能直接复制得靠人工识别和录入特别是在处理订单号、手机号这类关键信息时一个数字看错后续流程就全乱了。最近我在一个客服系统的升级项目里用GLM-OCR解决了这个痛点。简单来说就是让AI自动“看懂”聊天截图把里面的用户问题、订单号、联系方式这些关键信息提取出来变成结构化的文本数据。这样一来客服只需要审核一下信息就能自动进入工单系统或者触发处理流程效率提升非常明显。这篇文章我就结合这个实际项目聊聊怎么用GLM-OCR来搭建这样一个智能化的客服信息提取模块。我会把整个思路、关键步骤和实际代码都分享出来如果你也在为类似的问题头疼希望能给你一些直接的参考。1. 场景与痛点为什么需要自动提取截图信息在深入技术细节之前我们先看看这个需求到底从哪来又具体要解决什么问题。1.1 客服工作的日常挑战现在的客服沟通渠道很多除了传统的电话在线聊天工具、社交媒体、邮件里都充斥着用户的图片消息。这些图片大致分几类问题描述类用户遇到软件报错直接截个错误弹窗的图发过来。凭证提交类用户需要提供订单截图、支付凭证、身份信息等来完成验证或售后。界面咨询类用户对某个功能按钮不理解截个图问“这个是什么意思”。对于客服同学来说每收到一张这样的图就需要打开图片仔细查看。在聊天窗口或工单系统里手动输入图片中的关键信息比如订单号“ORD20240515123456”报错代码“Error 500”用户手机号“13800138000”。根据提取的信息在知识库或后台系统里查询、操作。这个过程不仅枯燥重复而且在处理大量信息时人工录入的准确率很难保证100%。一个数字或字母的误读就可能导致查询不到订单、解决方向错误直接影响用户体验和解决效率。1.2 GLM-OCR能带来什么改变GLM-OCR是一个强大的光学字符识别模型它不仅能识别图片中的文字更能理解文字的版面布局。这正是处理聊天截图所需要的——我们不仅要“看到”文字还要“理解”哪些文字是用户的问题哪些是系统生成的订单号它们分别在哪。通过引入GLM-OCR我们可以将上述手动流程自动化自动识别用户上传截图后系统自动调用OCR接口获取图片中所有文字及其位置。智能提取通过简单的规则或模型从识别结果中筛选出我们关心的关键信息如“订单号”、“手机”、“错误”等关键词附近的文本。结构化输出将提取的信息按照预定格式如JSON整理好自动填充到工单的对应字段或直接触发后续的查询、处理动作。这样客服人员的角色就从“信息搬运工”变成了“流程审核与决策者”他们只需要核对一下AI提取的信息是否准确然后点击确认即可。人力得以解放可以更专注于需要复杂沟通和判断的疑难问题。2. 方案设计与核心思路知道了要做什么接下来我们看看具体怎么做。整个方案可以拆解成几个清晰的步骤。2.1 整体流程概览整个处理流程就像一个流水线从收到图片开始到输出结构化数据结束用户上传截图 - 图像预处理 - GLM-OCR文字识别 - 文本后处理与关键信息提取 - 结构化输出 - 集成至客服系统这个流程的核心是中间三个环节预处理、OCR识别和后处理。预处理是为了让图片更适合OCR识别OCR识别是核心负责把图像变成文字后处理则是从大段文字中挖出我们想要的“金子”。2.2 为什么选择GLM-OCR市面上OCR工具很多为什么选GLM-OCR在这个场景下它有几个挺实在的优点对中文场景优化好对于中文、中英文混合、以及常见的数字、符号识别准确率高这对识别订单号、中文问题描述至关重要。版面分析能力强它能返回文字在图片中的位置坐标框。这非常有用比如我们可以利用位置信息大致区分哪段文字是用户说的哪段是系统提示在聊天截图里它们通常出现在不同区域。易于集成提供了清晰的API接口方便我们快速集成到现有的客服后台或中间件服务中。开源可定制虽然我们这里主要用其推理能力但其开源属性意味着在复杂场景下有更大的定制潜力。当然它也不是万能的。对于特别模糊、背景复杂或者艺术字体的截图识别率也会下降。但针对主流的聊天软件截图如微信、钉钉、客服系统界面它的表现已经足够可靠。3. 动手实现从截图到结构化数据理论说得差不多了我们直接上代码看看每个环节具体怎么实现。这里我用Python来演示因为它生态好集成起来方便。3.1 环境准备与GLM-OCR快速部署首先你得有一个能跑GLM-OCR的环境。如果你已经有现成的API服务那可以直接跳到下一步。如果没有这里提供一个基于其开源模型快速搭建本地服务的简单方法。# 1. 克隆GLM-OCR的代码仓库这里以假设的仓库为例实际请参考官方文档 # git clone GLM-OCR官方仓库地址 # cd glm-ocr # 2. 安装依赖通常需要一个requirements.txt # pip install -r requirements.txt # 3. 下载预训练模型权重 # 根据官方指引下载模型文件放到指定目录 # 4. 启动一个简单的HTTP推理服务示例实际服务化可能需要更完善的框架如FastAPI # python demo/api_server.py --port 8000更常见的情况是公司内部会有中台团队部署好统一的OCR服务你只需要调用即可。我们假设服务接口地址是http://your-ocr-service/v1/ocr。3.2 核心代码调用OCR与信息提取我们来写一个核心的函数它完成从图片路径到提取关键信息的所有工作。import requests import json import re from typing import Dict, List, Optional from PIL import Image import io class ChatScreenshotParser: def __init__(self, ocr_api_url: str): 初始化解析器 :param ocr_api_url: GLM-OCR服务的API地址 self.ocr_api_url ocr_api_url def call_glm_ocr(self, image_path: str) - Optional[List[Dict]]: 调用GLM-OCR接口识别图片文字 :param image_path: 图片文件路径 :return: OCR结果列表每个元素包含文本和位置信息失败返回None try: with open(image_path, rb) as f: image_data f.read() # 假设API接受form-data格式字段名为image files {image: (image_path, image_data, image/png)} # 根据实际调整Content-Type response requests.post(self.ocr_api_url, filesfiles) if response.status_code 200: result response.json() # 假设返回格式为 {texts: [{text: ..., bbox: [x1,y1,x2,y2]}, ...]} return result.get(texts, []) else: print(fOCR API调用失败: {response.status_code}) return None except Exception as e: print(f调用OCR时发生错误: {e}) return None def extract_key_info(self, ocr_results: List[Dict]) - Dict[str, str]: 从OCR结果中提取关键信息 :param ocr_results: OCR识别返回的文本块列表 :return: 包含提取信息的字典 extracted { user_question: , order_number: , phone_number: , error_code: } all_text .join([item[text] for item in ocr_results]) # 1. 提取订单号假设格式为订单号/单号/Order: 后面接数字字母组合 order_patterns [ r订单[号|单][:]\s*([A-Za-z0-9]{10,20}), rOrder\s*[:]\s*([A-Za-z0-9]{10,20}), rORD[A-Za-z0-9]{10,15} # 匹配以ORD开头的常见格式 ] for pattern in order_patterns: match re.search(pattern, all_text, re.IGNORECASE) if match: extracted[order_number] match.group(1) break # 2. 提取手机号简单的国内手机号匹配 phone_match re.search(r1[3-9]\d{9}, all_text) if phone_match: extracted[phone_number] phone_match.group() # 3. 提取错误代码匹配 Error/错误 后面跟数字或字母数字组合 error_match re.search(r(Error|错误|代码)[:\s]*([A-Za-z0-9]{3,10}), all_text, re.IGNORECASE) if error_match: extracted[error_code] error_match.group(2) # 4. 尝试定位并提取用户问题这是一个简化示例 # 思路在聊天截图中用户发送的内容通常位于右侧或特定区域。 # 我们可以根据OCR返回的bbox边界框的x坐标来粗略判断。 # 假设图片宽度为W右侧30%区域内的文本可能是用户发送的。 # 这里需要先获取图片宽度但OCR结果可能不包含。更实际的做法是结合业务逻辑。 # 作为演示我们简单地将包含“”、“怎么”、“为什么”等疑问词的文本块作为问题候选。 question_candidates [] for item in ocr_results: text item[text] if re.search(r[?]|怎么|如何|为什么|为啥|怎么办, text): question_candidates.append(text) if question_candidates: # 取最长的候选问题或者可以根据位置信息选择最可能的一个 extracted[user_question] max(question_candidates, keylen) elif ocr_results: # 如果没有明显疑问句则取OCR结果的第一段非系统提示文本作为问题非常粗略 extracted[user_question] ocr_results[0][text][:100] ... # 截取前100字符 return extracted def parse_screenshot(self, image_path: str) - Dict: 主流程解析一张聊天截图 :param image_path: 图片路径 :return: 结构化的提取结果 print(f正在处理图片: {image_path}) ocr_data self.call_glm_ocr(image_path) if not ocr_data: return {error: OCR识别失败} key_info self.extract_key_info(ocr_data) return key_info # 使用示例 if __name__ __main__: # 替换为你的OCR服务地址 parser ChatScreenshotParser(http://your-ocr-service/v1/ocr) # 假设有一张用户发来的截图 result parser.parse_screenshot(path/to/your/chat_screenshot.png) print(提取到的关键信息) print(json.dumps(result, ensure_asciiFalse, indent2))这段代码定义了一个ChatScreenshotParser类。它主要做两件事call_glm_ocr方法把图片发给OCR服务拿回识别出的文字和它们的位置。extract_key_info方法用正则表达式和一些简单的规则从所有文字里“挖”出订单号、手机号、错误码和用户问题。3.3 效果提升与实用技巧上面的基础版本已经能跑起来了但在真实场景里你可能会遇到各种“奇葩”截图。下面几个技巧能让你的提取器更健壮图像预处理在调用OCR前可以先对图片做简单处理。from PIL import Image, ImageEnhance def preprocess_image(image_path): 简单的图像预处理调整对比度和锐度 img Image.open(image_path) # 转换为RGB确保一致性 if img.mode ! RGB: img img.convert(RGB) # 增强对比度 enhancer ImageEnhance.Contrast(img) img enhancer.enhance(1.5) # 增强因子可调整 # 轻微锐化 enhancer ImageEnhance.Sharpness(img) img enhancer.enhance(1.2) # 保存或返回处理后的图像字节流 buffered io.BytesIO() img.save(buffered, formatPNG) return buffered.getvalue()然后在call_glm_ocr函数里发送preprocess_image(image_path)处理后的数据。更智能的问题提取单纯用关键词匹配问题很粗糙。可以利用OCR返回的bbox位置信息。在聊天截图里用户发送的消息和系统消息、对方消息通常在不同的水平区域。通过分析文本块的Y坐标聚类可以更好地分离出“用户消息区域”再从该区域提取问题。正则表达式优化订单号、验证码的格式千奇百怪。最好能根据你业务中最常见的几种格式来定制正则表达式并且准备一个“常见误识别字典”来校正比如把“0”和“O”“1”和“I”的混淆纠正过来。设置置信度过滤GLM-OCR的返回结果可能会包含每个文本块的置信度分数。对于订单号、手机号这种要求绝对准确的信息可以设置一个置信度阈值比如0.9低于这个值的结果可以标记出来让客服重点核对而不是直接采用。4. 集成到客服工作流信息提取出来了怎么让它真正帮到客服呢关键在于集成。这里提供几个简单的集成思路浏览器插件开发一个客服工作台侧的浏览器插件。当客服在聊天窗口中看到用户发送的图片时右键图片可以选择“提取图中信息”插件调用后台服务将提取的结果直接粘贴到回复框或工单填写栏。后台自动化在客服工单系统里当用户上传图片附件后系统后台自动触发OCR解析并将提取出的字段如订单号自动填充到工单的对应输入框里并用高亮或提示框展示给客服确认。机器人辅助在智能客服机器人对话流中集成。当用户发送图片时机器人自动回复“检测到您发送了截图正在为您提取关键信息...已识别到订单号ORD20240515123456您是想查询此订单的进度吗”从而直接引导用户进入下一步。一个简单的FastAPI集成示例from fastapi import FastAPI, File, UploadFile from fastapi.responses import JSONResponse import uvicorn app FastAPI(title客服截图解析服务) parser ChatScreenshotParser(http://your-ocr-service/v1/ocr) # 初始化解析器 app.post(/api/parse-screenshot) async def parse_screenshot(file: UploadFile File(...)): 接收客服端上传的截图返回解析结果 # 将上传的文件保存到临时位置 temp_path f/tmp/{file.filename} with open(temp_path, wb) as f: content await file.read() f.write(content) # 调用解析器 result parser.parse_screenshot(temp_path) # 清理临时文件 # os.remove(temp_path) return JSONResponse(contentresult) if __name__ __main__: uvicorn.run(app, host0.0.0.0, port8000)这样客服系统前端就可以通过调用这个/api/parse-screenshot接口轻松获取截图的结构化信息了。5. 总结回过头来看用GLM-OCR来处理客服聊天截图本质上是一个“降本增效”的典型技术落地。它把客服从重复、易错的手动录入工作中解放出来让他们能更专注于需要情感理解和复杂判断的服务环节。实现起来技术门槛并不算高。核心就是“OCR识别规则提取”代码量也不大但带来的效率提升是实实在在的。在实际项目中我们部署了这套系统后客服处理带截图咨询的平均耗时下降了近40%信息录入的错误率也几乎降为零。当然目前我们用的还是基于规则的信息提取在应对格式非常不规范的截图时可能还需要一些人工干预。未来的优化方向可以结合一些更简单的文本分类或命名实体识别模型让信息提取更智能。不过就当前阶段而言这个简单实用的方案已经能解决80%的问题了。如果你正在负责客服相关的系统或者被大量的截图信息处理所困扰不妨试试这个方案。从一个小功能点开始快速验证效果或许就能给你的团队带来意想不到的便利。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价