当前位置: 首页 > news >正文

垂直领域大模型构建:法律行业“类ChatGPT”系统的训练与落地

垂直领域大模型构建:法律行业“类ChatGPT”系统的训练与落地

在大模型技术重构各行业的浪潮中,法律行业因其文本密集、专业壁垒高、合规要求严的特点,成为垂直领域大模型落地的典型场景。法律工作者每天需处理海量法规、案例、合同等文本,传统工具在语义理解、逻辑推理和专业准确性上存在明显局限。构建法律行业“类ChatGPT”系统——具备专业法律知识、精准语义理解和合规输出能力的大模型,已成为提升法律服务效率、降低成本的核心突破口。

本文将系统拆解法律行业大模型的构建全流程,从数据准备、模型选型、微调策略到核心功能开发与落地实践,提供一套经过验证的技术方案,帮助法律科技企业和机构实现“AI+法律”的深度融合。

一、法律行业大模型的核心需求:专业、精准与合规

法律行业的特殊性决定了其对大模型的需求远超通用聊天机器人。深入理解这些需求,是构建高质量法律大模型的前提。

1. 专业知识覆盖:从“通用常识”到“法律专精”

法律行业的核心需求是专业知识的深度覆盖,具体体现在三个层面:

  • 法规体系完整性:需覆盖现行有效的法律、行政法规、地方性法规、司法解释(如中国的民法典、公司法及相关司法解释,美国的联邦法规与判例法),并支持法规时效性判断(如“某条款是否已被修订或废止”)。
  • 法律术语精准理解:法律领域存在大量专业术语(如“表见代理”“善意取得”“禁反言”),模型需准确理解其内涵而非字面含义。例如,“善意”在法律语境中并非指“道德良好”,而是“不知道或不应当知道存在瑕疵”。
  • 跨领域知识融合:法律问题常涉及其他专业领域(如金融法需懂金融产品,知识产权法需懂技术原理),模型需具备跨领域知识迁移能力。

痛点案例:某律所曾尝试用通用大模型审查合同,发现模型将“定金”与“订金”混淆(二者在法律上有本质区别:定金适用定金罚则,订金仅为预付款),险些导致法律风险。

2. 逻辑推理能力:模拟法律思维过程

法律工作的核心是逻辑推理,大模型需具备类律师的思维能力:

  • 三段论推理:从法律条文(大前提)、案件事实(小前提)推导出结论(如“民法典第577条规定违约需赔偿→甲方未按合同交货→甲方应承担赔偿责任”)。
  • 案例类比推理:根据类似案例的裁判思路,推导当前案件的可能结果(如“某专利侵权案与指导案例152号案情相似→应参照其裁判标准”)。
  • 反证与抗辩模拟:能从对立角度提出抗辩理由(如“原告主张被告违约,被告可抗辩不可抗力”)。

能力验证:优质法律大模型应能通过“法律逻辑测试题”,例如:“甲借乙10万元未还,诉讼时效期间届满后乙起诉,甲未提出时效抗辩,法院能否判决甲还款?”(正确结论:能,因诉讼时效抗辩需当事人主动提出)。

3. 合规与可解释性:法律AI的生命线

法律行业对合规性和可解释性的要求远高于其他领域:

  • 输出合规:模型输出不得违反法律法规(如不得提供虚假法律意见、不得怂恿规避法律),在中国需符合《生成式人工智能服务管理暂行办法》对法律领域的特殊规定。
  • 可追溯性:模型的结论需能追溯依据(如“该意见基于民法典第XX条和XX案例”),而非“黑箱输出”。
  • 风险提示:对不确定的法律问题需明确标注(如“本意见仅供参考,具体以法院裁判为准”),避免用户过度依赖。

合规红线:法律大模型不得宣称“法律咨询资质”,不得替代律师提供正式法律意见,输出内容必须包含免责声明。

二、数据准备:构建法律大模型的“专业知识库”

数据是法律大模型的“粮食”,其质量直接决定模型性能。法律数据的专业性和复杂性,要求一套严格的数据处理流程。

1. 数据来源:权威、全面与合规

法律数据需兼顾权威性和全面性,同时确保来源合规:

数据类型核心来源权威性要求合规要点
法律法规官方渠道(如中国人大网、司法部官网,美国联邦登记处)必须为现行有效文本,需标注发布机关、生效日期官方公开数据可直接使用,无需授权
裁判文书中国裁判文书网、北大法宝、威科先行;美国PACER系统需包含案号、法院、裁判日期等元数据,确保真实性需脱敏处理(隐去当事人隐私信息)
合同模板律所公开模板、官方示范文本(如住建部施工合同示范文本)需经专业律师审核,确保条款合法性避免使用涉密或版权受限的商业合同
法律问答律师咨询记录、法律论坛优质问答(如“知乎法律话题”精选内容)需包含明确问题和专业解答,避免错误信息需获得权利人授权,或使用CC协议内容

数据规模建议:构建基础法律大模型需至少100万+高质量法律文本,其中法规数据10万+、裁判文书50万+、合同模板5万+、法律问答35万+。

2. 数据清洗:从“原始数据”到“训练素材”

法律数据存在大量噪声(如重复内容、错误标注、格式混乱),需经过多轮清洗:

(1)文本预处理
  • 格式标准化:统一文本格式(如将PDF、Word格式转为纯文本),去除冗余标记(如裁判文书中的“法院印章”图片、页眉页脚)。
  • 去重处理:删除重复内容(如同一法规在不同网站的重复发布),合并相似文本(如同一案例的不同版本)。
  • 隐私脱敏:对裁判文书中的姓名、身份证号、住址等隐私信息进行脱敏(如用“[原告A]”替代真实姓名,用“XXXX年XX月XX日”替代具体生日)。

工具示例:用Python清洗裁判文书文本

import re
import jieba
from sklearn.feature_extraction.text import TfidfVectorizerdef clean_judicial_document(text):# 1. 去除HTML/XML标签text = re.sub(r'<.*?>', '', text)# 2. 去除特殊符号和乱码text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9,.,。;;()()::]', ' ', text)# 3. 隐私脱敏:替换身份证号text = re.sub(r'\d{17}[\dXx]', '[身份证号]', text)# 4. 隐私脱敏:替换姓名(假设中文姓名为2-4个汉字)text = re.sub(r'([\u4e00-\u9fa5]{2,4})(?=:|:|,)', '[当事人]', text)# 5. 去除多余空格和空行text = re.sub(r'\s+', ' ', text).strip()return text# 加载原始数据并清洗
with open("raw_judicial_doc.txt", "r", encoding="utf-8") as f:raw_text = f.read()
clean_text = clean_judicial_document(raw_text)
(2)专业清洗
  • 时效性过滤:删除已失效的法规条文(如1999年《合同法》已被《民法典》取代,需标记为“已失效”)。
  • 错误修正:修正文本中的专业错误(如“《劳动合同法》第100条”实际不存在,应为“第10条”)。
  • 结构化处理:对裁判文书进行结构化解析,提取“案件事实”“争议焦点”“裁判理由”“裁判结果”等关键部分。

结构化示例:裁判文书结构化后的数据格式

{"case_id": "(2023)沪01民终12345号","court": "上海市第一中级人民法院","date": "2023-06-15","case_type": "合同纠纷","facts": "原告与被告签订《软件开发合同》,约定被告应于2022年12月前交付系统...","disputes": ["被告是否构成违约?", "违约金数额是否过高?"],"reasoning": "被告未按合同约定时间交付,构成违约(民法典第577条)...","result": "被告向原告支付违约金5万元..."
}

3. 数据标注:构建高质量监督微调数据集

监督微调(SFT)数据的质量直接决定模型的专业能力,需进行精细标注:

(1)标注类型
  • 问答对标注:将法律问题与专业解答配对(如Q:“借条没写还款日期,有效期多久?”A:“诉讼时效为20年,从出具借条之日起算(民法典第188条)”)。
  • 指令微调标注:标注“任务类型+输入+输出”格式(如“任务:合同条款风险识别;输入:[合同条款文本];输出:[风险点+法律依据]”)。
  • 思维链(Chain-of-Thought)标注:标注推理过程(如“用户问:公司拖欠工资怎么办?→ 步骤1:确认劳动关系(劳动合同/工资条);步骤2:向劳动监察投诉(劳动合同法第85条);步骤3:申请劳动仲裁…”)。
(2)标注规范
  • 准确性优先:所有标注内容需经执业律师审核,确保法律观点正确。
  • 格式统一:采用JSONL格式存储标注数据,方便模型加载:
    {"instruction": "识别合同违约条款", "input": "甲方逾期交货的,每日按货款的0.01%支付违约金。", "output": "1. 风险点:违约金比例过低(0.01%/日≈3.65%/年,可能不足以弥补损失);2. 法律依据:民法典第585条(约定的违约金低于损失的,可请求增加)。"}
    {"instruction": "法律咨询", "input": "试用期内公司可以随便解除劳动合同吗?", "output": "不可以。法律依据:劳动合同法第21条..."}
    
  • 多样性覆盖:覆盖不同法律领域(民法、刑法、行政法等)、不同难度级别(基础问题到复杂争议)。

标注规模建议:监督微调数据集至少需10万+标注样本,其中思维链标注占比不低于20%,以增强模型推理能力。

三、模型选型与微调:从通用底座到法律专精

法律大模型的构建通常采用“通用大模型+垂直微调”的路线,即基于成熟的通用大模型,通过微调使其具备法律专业能力。

1. 基础模型选型:平衡能力与成本

基础模型的选择需考虑模型规模、法律理解能力、微调成本等因素:

模型类型代表模型优势劣势适用场景
开源通用模型LLaMA 2(7B/13B/70B)、Qwen(通义千问,7B/14B)、Mistral Large可本地化部署、成本可控、支持深度微调需自行优化法律能力、对数据质量要求高有技术团队、需本地化部署的律所/企业
开源法律模型LawGPT(基于LLaMA微调)、Legal-BERT已具备基础法律能力、训练成本低模型规模小(多为7B以下)、复杂推理能力弱轻量化应用、预算有限场景
闭源API微调GPT-4 Turbo Fine-tuning、Claude 3 Custom基础能力强、微调便捷、支持多轮对话数据需上传至第三方、成本高、定制受限快速验证场景、无本地化部署需求的企业

选型建议

  • 追求性价比:选择Qwen-14B或LLaMA 2 13B作为基础模型(平衡能力与计算成本);
  • 强调推理能力:优先选择LLaMA 2 70B或GPT-4 Turbo(复杂法律推理能力更强);
  • 本地化部署:必须选择开源模型,避免数据合规风险。

2. 微调策略:分阶段优化法律能力

法律大模型的微调需分阶段进行,逐步增强专业能力:

(1)预训练阶段:注入法律知识

对基础模型进行领域继续预训练(Domain Continual Pretraining),向模型注入法律领域知识:

  • 数据输入:使用清洗后的法规、裁判文书等无标注文本(规模100万+);
  • 训练目标:延续通用预训练的“下一句预测”“掩码语言模型(MLM)”任务,让模型学习法律文本的语言规律和专业术语;
  • 技术要点:采用低学习率(5e-6 ~ 1e-5)、小批量(Batch Size=32~64),避免破坏模型基础能力。

代码示例:用Hugging Face Transformers进行继续预训练

from transformers import (AutoModelForCausalLM,AutoTokenizer,TrainingArguments,Trainer,DataCollatorForLanguageModeling
)
import datasets# 加载基础模型和分词器
model_name = "meta-llama/Llama-2-13b-chat-hf"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token# 加载法律预训练数据
dataset = datasets.load_dataset("text", data_files={"train": "legal_pretrain_data.txt"})["train"]# 数据预处理:分词
def preprocess_function(examples):return tokenizer(examples["text"],truncation=True,max_length=512,padding="max_length",return_overflowing_tokens=False,)
tokenized_dataset = dataset.map(preprocess_function, batched=True)# 配置训练参数
training_args = TrainingArguments(output_dir="./legal-llama-pretrain",num_train_epochs=3,per_device_train_batch_size=8,gradient_accumulation_steps=4,learning_rate=5e-6,warmup_ratio=0.05,logging_steps=100,save_steps=1000,fp16=True,  # 启用混合精度训练report_to="tensorboard",
)# 数据整理器(用于MLM任务)
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer,mlm=True,mlm_probability=0.15,  # 15%的token被掩码
)# 训练器
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_dataset,data_collator=data_collator,
)# 开始训练
trainer.train()
(2)监督微调阶段:强化法律任务能力

通过监督微调(SFT) 让模型掌握法律专业任务(如法律咨询、合同审查):

  • 数据输入:使用标注的法律问答、指令数据(10万+样本);
  • 训练目标:让模型学习“输入→输出”的映射关系,生成符合法律专业要求的回答;
  • 技术要点:采用LoRA(Low-Rank Adaptation)技术降低显存需求(7B模型用LoRA可在单张A100上训练),重点微调注意力层参数。

LoRA微调优势

  • 显存需求降低50%~70%(无需存储完整模型梯度);
  • 训练速度提升2~3倍;
  • 可灵活切换不同领域的微调权重(如“合同审查”“刑事辩护”不同权重)。
(3)RLHF阶段:对齐法律专业偏好

通过人类反馈强化学习(RLHF) 优化模型输出,使其更符合法律专业规范:

  • 数据输入:法律专家对模型输出的排序(如“哪个回答更专业?”“哪个风险提示更全面?”);
  • 训练目标:让模型学习法律专家的偏好(如“优先引用最新法规”“明确标注风险等级”);
  • 适用场景:对输出质量要求极高的场景(如付费法律咨询系统),基础版本可省略此步骤。

3. 法律专项优化:超越通用能力的关键

除常规微调外,需针对法律领域特性进行专项优化:

(1)法律术语增强
  • 术语表构建:整理5万+法律术语库,包含“术语→定义→示例”;
  • 术语嵌入训练:在微调中加入术语对齐任务(如“用法律术语替换下列表述:‘公司欠员工工资’→‘用人单位拖欠劳动报酬’”)。
(2)法规检索增强
  • 训练模型识别“需要引用法规”的场景,并格式化输出法律依据(如“结论:…;法律依据:《民法典》第XX条”);
  • 接入外部法规数据库,支持模型在推理时动态检索最新法规(解决模型知识时效性问题)。
(3)逻辑严谨性增强
  • 训练模型输出“三段论推理结构”(法律依据→事实分析→结论);
  • 加入“反事实推理”训练(如“如果合同中未约定违约金,本案结果会如何?”)。

四、核心功能开发:法律大模型的落地场景

基于微调后的法律大模型,可开发覆盖法律实务全流程的核心功能,实现“AI赋能法律”的具体价值。

1. 合同智能审查:效率提升的“杀手级应用”

合同审查是法律工作的高频场景,大模型可实现自动化条款分析与风险识别

(1)核心功能
  • 条款合规性检查:自动比对合同条款与现行法规(如“竞业限制条款期限超过2年→提示违反劳动合同法第24条”);
  • 风险点识别与分级:标注高/中/低风险条款(如“付款条件模糊→高风险;违约责任未约定→中风险”);
  • 优化建议生成:针对风险条款提供修改建议(如“建议将‘甲方可随时解除合同’修改为‘甲方需提前30日书面通知解除合同(民法典第563条)’”);
  • 格式规范化:统一合同格式(如当事人信息、争议解决条款表述)。
(2)技术实现
  • 前端:上传合同文件(支持PDF、Word),可视化展示风险点(高亮标注);
  • 后端:
    1. 用PyPDF2/ python-docx提取合同文本;
    2. 调用法律大模型API进行审查(提示词示例:“任务:审查采购合同付款条款;要求:识别风险点、提供法律依据和修改建议;文本:[合同文本]”);
    3. 结构化返回结果并存储审查记录。

代码示例:合同审查API调用

def review_contract(contract_text, model):prompt = f"""任务:审查合同条款并提供法律意见要求:1. 识别至少3个风险点,按严重程度排序;2. 每个风险点需说明法律依据(具体法规条款);3. 提供具体修改建议。合同文本:{contract_text[:2000]}  # 截取前2000字(可分页处理长合同)"""# 调用微调后的法律大模型response = model.generate(input_ids=tokenizer(prompt, return_tensors="pt").input_ids.to("cuda"),max_new_tokens=1024,temperature=0.1,  # 低温度确保输出稳定top_p=0.9,)# 解析结果review_result = tokenizer.decode(response[0], skip_special_tokens=True)return parse_review_result(review_result)  # 结构化结果# 结构化审查结果
def parse_review_result(text):# 提取风险点、依据、建议(实际需更复杂的解析逻辑)risks = re.findall(r'风险点:(.*?)\n', text)bases = re.findall(r'法律依据:(.*?)\n', text)suggestions = re.findall(r'修改建议:(.*?)\n', text)return {"risk_level": "高" if any("严重" in r for r in risks) else "中","risks": [{"risk": r, "basis": b, "suggestion": s} for r, b, s in zip(risks, bases, suggestions)]}
(3)落地效果

某律所实测显示,法律大模型可将合同审查效率提升60%以上,基础风险点识别准确率达92%,显著降低律师重复劳动。

2. 法律咨询与检索:智能问答与案例匹配

大模型可构建智能法律助手,实现7×24小时法律咨询与案例检索:

(1)核心功能
  • 自然语言法律咨询:用日常语言提问,模型用通俗易懂的方式解答(如“老板不给加班费怎么办?→ 解答步骤+法律依据+证据准备清单”);
  • 类案检索与推荐:输入案情描述,自动匹配相似裁判案例(如“输入‘二手房买卖违约纠纷’→ 返回5个相似案例及裁判要点”);
  • 法规时效性查询:查询法规当前效力(如“查询‘婚姻法第24条’→ 提示‘已被民法典婚姻家庭编司法解释替代’”);
  • 诉讼成本估算:根据案件类型、标的额估算诉讼费、律师费等(如“100万元标的额的合同纠纷→ 诉讼费约13800元,律师费约5万-10万”)。
(2)技术实现
  • 结合向量数据库(如Milvus、Pinecone)存储法规和案例的向量表示,实现快速相似检索;
  • 构建“问题→向量→检索→大模型生成”的流水线:
    1. 用户提问转换为向量;
    2. 检索向量数据库获取相关法规和案例;
    3. 将检索结果作为上下文输入大模型,生成回答。

优势:解决大模型“知识过时”问题,通过检索获取最新法规和案例,确保回答时效性。

3. 法律文书生成:从模板到个性化定制

大模型可自动生成起诉状、答辩状、合同等法律文书,降低文书撰写成本

(1)核心功能
  • 文书模板填充:用户输入关键信息(如当事人、事实经过),自动生成完整文书(如“输入借款金额、日期、当事人信息→ 生成借条模板”);
  • 个性化文书定制:根据复杂案情生成定制化文书(如“输入交通事故案情→ 生成包含具体赔偿项目的起诉状”);
  • 文书质量检查:检查文书格式、表述规范性(如“起诉状被告信息不全→ 提示补充身份证号/住址”)。
(2)技术实现
  • 构建文书模板库,定义变量占位符(如{{原告姓名}}{{诉讼请求}});
  • 大模型根据用户输入的案情,自动填充变量并优化表述:
    def generate_lawsuit_doc(case_info, model):prompt = f"""任务:根据以下案情生成民事起诉状案情:{case_info}要求:1. 包含原告、被告信息、诉讼请求、事实与理由、证据清单;2. 诉讼请求需明确具体(如赔偿金额、利息计算方式);3. 事实与理由引用相关法律条文。"""response = model.generate(prompt=prompt, max_new_tokens=2048)return response
    

落地价值:中小律所和个人用户可快速生成专业法律文书,降低法律服务门槛。

五、落地挑战与解决方案:法律大模型的“最后一公里”

法律大模型落地面临技术、业务和合规的多重挑战,需针对性解决。

1. 核心挑战

(1)技术挑战
  • 推理准确性不足:复杂案件(如多方法律关系、新型案件)的推理准确率低,易出现“幻觉”(虚构法律依据)。
  • 知识时效性滞后:法规修订、新案例发布后,模型无法实时更新知识。
  • 长文本处理能力弱:长篇合同(如100页以上)处理时易丢失关键信息。
(2)业务挑战
  • 用户信任建立难:法律工作者对AI输出的可靠性持怀疑态度,不愿完全依赖。
  • 专业壁垒高:技术团队缺乏法律知识,法律团队缺乏AI认知,协作成本高。
  • 场景碎片化:不同律所、不同业务(诉讼/非诉)需求差异大,难以标准化。
(3)合规挑战
  • 数据隐私风险:处理客户敏感信息(如商业秘密、个人隐私)时存在泄露风险。
  • 责任界定模糊:模型输出错误导致法律后果时,责任如何划分(开发者/使用者/模型?)。
  • 监管合规要求:需符合各地AI监管法规(如中国《生成式人工智能服务管理暂行办法》、欧盟AI法案)。

2. 解决方案

(1)技术优化方案
  • 多模型融合:简单任务用轻量级模型(如Qwen-7B)保证效率,复杂任务用大模型(如LLaMA 2 70B)保证准确性;
  • 检索增强生成(RAG):强制模型在回答法律问题时引用检索到的最新法规和案例,减少幻觉;
  • 长文本分段处理:将长合同按章节拆分,逐段审查后汇总结果,保留上下文关联信息。
(2)业务落地策略
  • 人机协同模式:AI辅助律师而非替代律师,输出结果需经人工审核(如“AI审查→律师复核”流程);
  • 分阶段落地:先落地低风险场景(如合同模板生成、法规检索),再逐步扩展到高风险场景(如诉讼策略建议);
  • 行业共建:联合律所、法学院共建模型,确保技术与业务需求对齐。
(3)合规保障措施
  • 数据安全机制:输入数据加密传输,敏感信息脱敏处理,模型训练数据经合规审核;
  • 输出合规控制:所有输出包含明确免责声明(如“本内容仅供参考,不构成法律意见”),限制模型生成“绝对化结论”;
  • 审计追溯系统:记录模型所有调用和输出,支持溯源分析,满足监管要求。

六、总结:法律大模型的未来展望

法律行业大模型的构建是“技术+专业”深度融合的过程,其价值不仅在于提升效率,更在于降低法律服务门槛,推动法律普惠。从实践来看,成功的法律大模型需具备三个核心特质:专业知识的深度、推理逻辑的严谨、合规输出的可控

未来,随着技术的演进,法律大模型将向三个方向发展:

  • 更精准的专业能力:通过更大规模的法律数据和更先进的微调技术,实现接近资深律师的专业判断能力;
  • 更自然的人机协同:从“工具型输出”转向“伙伴型交互”,理解律师思维习惯,提供个性化辅助;
  • 更全面的场景覆盖:从合同审查、咨询等单点场景,扩展到“案件预测→策略生成→文书撰写→庭审支持”的全流程赋能。

对于法律科技企业和机构而言,构建法律大模型需避免“技术炫技”,坚持“需求导向”——以解决法律实务中的真实痛点为目标,在数据质量、模型优化和合规保障上持续投入。唯有如此,才能让法律大模型真正成为法律工作者的“得力助手”,推动法律行业的智能化升级。

http://www.lryc.cn/news/625344.html

相关文章:

  • 快手可灵招海外产品运营实习生
  • 亚矩阵云手机智能定位:助力Snapchat矩阵账号的本地化内容运营穿透技术
  • 【光学神经网络与人工智能应用专题】
  • 禾赛激光雷达AT128P/海康相机(2):基于欧几里德聚类的激光雷达障碍物检测
  • 【科研绘图系列】R语言绘制多种小提琴和云雨图
  • Kubernetes 简介
  • 初步学习WPF-Prism
  • 深入解析:Unity、Unreal Engine与Godot引擎中的Uniform变量管理
  • [ORACLE数据库] ORACLE 的 PL/SQL 块
  • 摄像头模块在运动相机中的应用
  • arcgis-提取范围中最大占比面积的信息或唯一值
  • 面试问题详解四:Qt 多线程与信号槽机制
  • Day09 Go语言深入学习(1)
  • 8.19作业
  • 工业相机基本知识解读:像元、帧率、数据接口等
  • 视觉采集模块的用法
  • HTML应用指南:利用GET请求获取全国新荣记门店位置信息
  • BEV:隐式相机视角转换-----BEVFormer
  • C#/.NET/.NET Core技术前沿周刊 | 第 50 期(2025年8.11-8.17)
  • 【leetcode 3】最长连续序列 (Longest Consecutive Sequence) - 解题思路 + Golang实现
  • Selenium使用指南
  • Ubuntu conda虚拟环境下pip换源
  • jsPDF 不同屏幕尺寸 生成的pdf不一致,怎么解决
  • 软件测试-Selenium学习笔记
  • LeetCode 134.加油站:贪心策略下的环形路线可行性判断
  • 【基础-判断】用户在长视频、短视频、直播、通话、会议、拍摄类应用等场景下,可以采用悬停适配在折叠屏半折态时,上屏进行浏览下屏进行交互操作
  • 技术分享:跨域问题的由来与解决
  • WebSocket的连接原理
  • Ansible 配置并行 - 项目管理笔记
  • Go 并发入门:从 goroutine 到 worker pool