专栏名称: 前端早读课
我们关注前端,产品体验设计,更关注前端同行的成长。 每天清晨五点早读,四万+同行相伴成长。
目录
相关文章推荐
前端大全  ·  湖南大学的 DeepSeek ... ·  2 天前  
前端大全  ·  55 ... ·  2 天前  
前端早读课  ·  【第3469期】为什么 React ... ·  2 天前  
前端大全  ·  被骂了!腾讯道歉 + 立刻改正 ·  4 天前  
前端大全  ·  无敌了!强烈建议前端立即拿下软考! ·  4 天前  
51好读  ›  专栏  ›  前端早读课

【第3427期】前端数据中心使用LLM训练错误信息

前端早读课  · 公众号  · 前端  · 2024-12-05 08:00

正文

前言

分享了如何利用 LLM(大型语言模型)来训练前端数据中心的错误信息处理模块,以解决错误信息的拆分和分类问题。今日前端早读课文章由 @陈泽伟分享,公号:Goodme 前端团队授权。

正文从这开始~~

在错误模块中,我们收集了 APP、小程序(微信、支付宝、钉钉、抖音等等)、浏览器、webview 等等平台的错误

【第3382期】B站前端错误监控实践

小程序我们使用 taro 编写,但是 taro 的错误是一个字符串,他把 message 和 stack 整合在一起了、

然后我们就会得到各种各样的报错信息:

 MiniProgramError
Module build failed (from xxx.js):
SyntaxError: xxx.tsx: Unexpected token (180:12)

[0m [90m 178 |[39m {
[90m 179 |[39m isReady [33m&&[39m indexFallback[33m?[39m[33m.[39menableActivity [33m&&[39m
[31m[1m>[22m[39m[90m 180 |[39m }
[90m |[39m [31m[1m^[22m[39m
[90m 181 |[39m
[90m 182 |[39m [33m<[39m[33mTaskSection[39m position[33m=[39m[32m"index"[39m [33m/[39m[33m>[39m
[90m 183 |[39m[0m
at toParseError (xxx.ts:74:19)
at TypeScriptParserMixin.raise (xxx.ts:1490:19)
 USER_PAGE_NOT_FOUND_ERROR: Page[xxx] not found. May be caused by: 1. Forgot to add page route in app.json. 2. Invoking Page() in async task. construct@[native 
code]
t@file:xxx.js:2:43094
t@file:xxx.js:2:55180
t@file:xxx.js:2:55373
@file:xxx.js:2:524958
OC@file:xxx.js:2:525081

等等。。。

如果用正则去匹配,完全无法穷尽,只会得到各种各样奇怪的内容

如何拆分

因为我们错误告警等等需要针对错误聚合后的信息进行告警、忽略、流程处理等等,所以我们需要尽量收敛同一个类型的错误不要因为 message 扩散。

针对一些规范的错误、例如 TypeError、Error 等等常见的普通错误,我们直接在 SDK 使用正则拆分

但是针对一些各种平台自定义的小程序错误、甚至自定义错误我们采用 AI 方式去识别

技术方案

其实很多开源模型都可以通过微调来实现,例如 Hugging Face、spaCy 等等

这里我们通过 spaCy 来进行微调模型

spaCy 提供了一个预训练小型英语 NLP 模型: en_core_web_sm, 这个模型体积小、加载快、资源消耗低

微调模型

准备预训练数据集

微调模型最重要的就是如何准备训练数据

因为本来实在有点懒、所以准备使用 chatgpt 来准备训练数据,人工进行数据校验

首先我们直接导出数据库中几十万条之前上报的错误信息(我是通过数据库工具直接导出 csv 文件)

然后将文件直接喂给 chatgpt,告诉 chatgpt 如何进行数据修改

然后我们再对数据进行查看,如果有一些格式的错误无法被正确分类,就告诉 chatgpt 如何进行分类

最后告诉 chatgpt 导出我们需要的预训练数据集

训练模型

直接跑训练代码(简要)

 import spacy
import random
from spacy.training.example import Example
import json

# 加载 spaCy 格式的训练数据
with open("xxx.json", "r", encoding="utf-8") as f:
train_data = json.load(f)

# 加载或初始化 spaCy 模型
nlp = spacy.blank("en") # 创建一个空的 spaCy 模型
if "ner" not in nlp.pipe_names:
ner = nlp.add_pipe("ner", last=True)
else:
ner = nlp.get_pipe("ner")

# 添加标签
for _, annotations in train_data:
for ent in annotations["entities"]:
ner.add_label(ent[2]) # 添加实体标签,例如 "MESSAGE""STACK"

# 准备训练数据
train_examples = []
for text, annotations in train_data:
example = Example.from_dict(nlp.make_doc(text), annotations)
train_examples.append(example)

# 开始训练
optimizer = nlp.initialize()

# 设置训练参数






请到「今天看啥」查看全文