零基础本地部署小龙虾 OpenClaw:超详细保姆级教程

核心内容摘要

æ‰‹æŠŠæ‰‹æ•™ä½ ç”¨Qwen2.5-0.5Bæ�­å»ºä¸ªäººçŸ¥è¯†é—®ç­”系统
GTE+SeqGPT保姆级教程:vivid_gen.py中三类任务Prompt模板详解

M2LOrder模型在社交媒体舆情监控中的实战应用

引言在日常工作场景中批量处理合同、报告类文档是高频刚需传统人工逐份阅读、

总结、分类的模式不仅耗时耗力、易漏关键信息还存在敏感数据泄露风险。

而基于本地批量文档处理方案恰好破解了这些痛点。

不仅不需要联网部署能在本地设备安全处理数百份文档兼顾处理效率与数据隐私保护。

依托模型强大的文本理解能力与Schema引导输出机制可快速生成标准化摘要与多标签分类配合TextSplitter完美适配长文档处理需求最终以CSV格式输出结构化结果。

无论是梳理合同台账、归档报告还是提取核心数据该方案都能大幅降低人工成本提升文档处理的精准度与标准化水平成为大模型本地化落地的核心实用场景之一。

基础概念理解在开始实操前我们先明确几个关键概念这是后续所有操作的基础

批量文档摘要与分类针对本地存储的数百份合同、报告等文档无需手动逐个阅读通过AI自动提取每份文档的核心信息摘要并按照预设规则标注对应的业务标签分类最终输出结构化结果如CSV供后续使用。

Qwen

5 7B通义千问推出的开源大语言模型7B代表模型参数量为70亿具备优秀的文本理解、

总结与分类能力支持本地部署运行无需联网能保障合同等敏感文档的安全性是本地批量处理文档的最优选型之一。

TextSplitter文本分割工具由于大模型存在上下文窗口限制Qwen

5 7B默认上下文窗口通常为4096 tokens约3000字左右超过限制的长文档如万字合同无法直接输入模型TextSplitter会将长文档分割为多个符合窗口限制的小文本块再逐块处理、最终整合结果。

Schema 引导输出通过明确的格式要求如固定模板、字段引导大模型输出标准化结果避免模型输出格式混乱如有的写摘要在前有的写分类在前方便后续批量处理和CSV导出。

多标签分类一份文档可能对应多个类别如一份房屋租赁合同可同时标注合同、租赁类、办公相关三个标签区别于每个标签只能选一个的场景更贴合实际文档处理需求。

应用流程原理

整体流程批量文档摘要与分类的核心逻辑是批量读取→文本预处理→分块→AI处理→结果整合→CSV导出每一步的作用如下流程说明

批量读取遍历指定文件夹自动识别并读取所有.docx/.pdf文档的文本内容。

文本预处理清理文档中的无效字符如分页符、空格、乱码、去除冗余内容如页眉页脚、签名栏减少模型处理干扰。

文本分块通过TextSplitter将长文本分割为符合模型上下文窗口限制的小文本块同时保证语义完整性。

AI处理将每个文本块输入Qwen

5 7B通过预设的Schema提示词引导模型生成该块的摘要与分类再将所有块的结果整合为完整文档的摘要与分类。

结果整合将每份文档的「文件名→原文路径→完整摘要→多标签」整理为结构化数据。

CSV导出将结构化数据写入CSV文件方便后续在Excel中查看、编辑、分析。

TextSplitter 分块原理常用的TextSplitter如RecursiveCharacterTextSplitter采用“递归分割语义保留”策略具体步骤

预设分割符优先级\n\n段落分隔 \n换行空格 无分隔符强制分割。

从最高优先级分割符开始尝试将文本分割为多个片段每个片段的token数不超过预设阈值如3000tokens。

若某个片段无法用当前分割符分割到阈值内则降级使用下一个优先级分割符。

最后为每个片段添加少量重叠内容如前一个片段的最后50个token避免分割导致的语义断层保证后续整合结果的完整性。

Schema 提示词引导原理大模型的输出具有跟随性即会根据用户提供的格式要求调整输出形式。

Schema 提示词的核心是明确任务固定格式示例引导让模型输出标准化结果具体逻辑

明确任务告诉模型我们需要

总结文档核心信息并标注多标签。

固定格式定义输出的字段如文档摘要、多标签分类并规定字段的呈现形式如用###分隔标签用,分隔。

示例引导提供

个简单示例让模型更直观地理解格式要求减少格式错误。

约束条件告诉模型标签仅从预设列表中选择、摘要控制在200字以内避免输出不符合需求的内容。

大模型的价值体现

发挥大模型的文本理解优势大模型具备强大的上下文理解和语义归纳能力相比传统的关键词匹配分类、规则式摘要能更准确地提取合同/报告的核心信息处理复杂句式和隐含语义。

落地大模型的本地实用场景批量文档处理是企业/个人的高频需求本地部署大模型处理既保障了数据安全敏感合同不泄露又降低了使用成本无需按调用次数付费是大模型从演示到实用的重要落地场景。

验证大模型的工程化能力通过TextSplitter解决上下文窗口限制、通过Schema解决输出标准化、通过批量处理解决效率问题这些步骤是大模型工程化落地的核心环节为后续更复杂的AI应用打下基础如智能合同审查、报告分析系统等。

优化大模型的输出效果Schema 提示词和文本分块是大模型应用的常用优化手段通过这些手段可以让大模型的输出更贴合实际需求减少后续人工处理成本提升大模型的实用价值。

示例运行解析

文档准备将需要处理的数百份合同/报告整理到同一个本地文件夹中要求如下

格式统一优先推荐.docx或.pdf可按需扩展其他需要支持的格式。

文件名清晰如“20250101-房屋租赁合同-甲方XX.docx”方便后续对应结果。

文件夹路径无中文特殊字符如避免D:\我的文档\合同\未处理可改为D:\Documents\Contracts\ToProcess防止代码读取报错。

批量读取文档支持docx和pdf此部分完成对指定文件夹中 .docx 和 .pdf 文档的批量读取提取原始文本并初步调用清洗函数是整个流程的数据入口。

# 导入所需库 import os import re import pandas as pd from docx import Document import PyPDF2 # # 配置参数只需修改这部分路径和参数 # MODEL_PATH rD:\AIWorld\models\Qwen

1.

B-Chat-4bit # Qwen

5 7B模型路径 DOCUMENT_FOLDER rD:\Documents\Contracts\ToProcess # 文档文件夹路径 OUTPUT_CSV_PATH rD:\Documents\Contracts\Batch_Result.csv # 输出CSV文件路径 MAX_SUMMARY_LENGTH 200 # 摘要最大字数 MAX_CHUNK_TOKENS 3000 # 每个文本块的最大token数 CHUNK_OVERLAP_TOKENS 50 # 文本块之间的重叠token数 # 预设多标签列表可根据你的业务需求修改/扩展 PREDEFINED_TAGS [合同, 租赁类, 买卖类, 服务类, 报告, 财务报告, 审计报告, 项目报告, 办公相关, 个人相关] # # 步骤1工具函数 - 读取单个文档支持.docx和.pdf # def read_single_document(file_path): 读取单个文档的文本内容支持.docx和.pdf格式 :param file_path: 单个文档的完整路径 :return: 清理后的文档文本内容 text_content # 区分文档格式分别处理 if file_path.endswith(.docx): try: doc Document(file_path) for paragraph in doc.paragraphs: if paragraph.text.strip(): # 跳过空段落 text_content paragraph.text \n\n except Exception as e: print(f读取.docx文档失败{file_path}错误信息{str(e)}) return elif file_path.endswith(.pdf): try: with open(file_path, rb) as pdf_file: pdf_reader PyPDF

PdfReader(pdf_file) for page in pdf_reader.pages: page_text page.extract_text() if page_text.strip(): # 跳过空页面 text_content page_text \n\n except Exception as e: print(f读取.pdf文档失败{file_path}错误信息{str(e)}) return else: print(f不支持的文档格式{file_path}) return # 文本预处理清理无效字符、冗余空格 text_content clean_text(text_content) return text_content重点说明支持主流办公文档格式Word 和 PDF通过 python-docx 和 PyPDF2 提取纯文本跳过空段落/空页避免无效内容干扰提取后立即调用 clean_text() 进行初步清洗为后续处理奠定基础。

文本预处理清洗与标准化对提取的原始文本进行深度清洗去除控制字符、页码、版权信息及冗余空白输出干净、结构化的纯文本为后续分块提供高质量输入。

# # 步骤2工具函数 - 文本预处理清理无效内容 # def clean_text(text): 清理文本中的无效字符、冗余空格、分页符等 :param text: 原始文本内容 :return: 清理后的文本内容 # 去除多余的空格、换行符 text re.sub(r\n, \n\n, text) text re.sub(r\s, , text) # 去除常见的无效字符如分页符、特殊符号 text re.sub(r[\x00-\x08\x0b\x0c\x0e-\x1f\x7f], , text) # 去除页眉页脚常见的重复内容可根据你的文档情况扩展 text re.sub(r第\d页/\d页, , text) text re.sub(r版权所有\s*©.*, , text) return text.strip()重点说明使用正则表达式清除分页符、页眉页脚、版权信息等非语义噪声统一空白与换行格式保留段落结构\n\n 分段输出干净、连续的文本流提升后续分块与模型理解的准确性。

文本分块适配模型上下文窗口利用 LangChain 的智能分块器按 token 数精准切分长文档保留语义边界如按段落切分并设置重叠区域防止关键信息断裂确保每块可被模型有效处理。

from langchain.text_splitter import RecursiveCharacterTextSplitter # # 步骤3工具函数 - 文本分块使用Langchain的RecursiveCharacterTextSplitter # def split_text_into_chunks(text, tokenizer): 将长文本分割为符合模型上下文窗口限制的小文本块 :param text: 清理后的完整文档文本 :param tokenizer: 模型对应的tokenizer :return: 文本块列表 # 初始化文本分割器 text_splitter RecursiveCharacterTextSplitter( chunk_sizeMAX_CHUNK_TOKENS, chunk_overlapCHUNK_OVERLAP_TOKENS, length_functionlambda x: len(tokenizer.encode(x)), # 以token数作为长度计算标准 separators[\n\n, \n, , ] # 分割符优先级 ) # 执行分割 chunks text_splitter.split_text(text) return chunks重点说明利用 LangChain 的递归分块器按 token 数非字符数精准控制块大小设置 chunk_overlap50 避免语义割裂如句子被切断优先在语义边界段落 行 空格切分保障每块内容完整性适配 Qwen 模型上下文限制如 32K确保长文档可处理。

调用本地大模型摘要分类此部分为核心大模型处理层通过结构化 Prompt 引导 Qwen 模型生成标准化摘要与多标签并解析输出最后将多个文本块结果融合为完整文档级结果。

from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline import torch # # 步骤4工具函数 - 构建Schema提示词 # def build_prompt(chunk_text): 构建符合Schema要求的提示词引导模型输出标准化结果 :param chunk_text: 单个文本块的内容 :return: 完整的提示词 prompt f 你是一名专业的文档处理助手负责

总结文档核心信息并标注多标签分类。

请严格按照以下要求完成任务

文档摘要

总结该文本块的核心信息控制在{MAX_SUMMARY_LENGTH}字以内语言简洁、准确不遗漏关键信息。

多标签分类从预设标签列表中选择1个或多个符合文本内容的标签标签之间用英文逗号,分隔不得使用预设列表外的标签。

输出格式严格按照以下固定格式输出不得添加任何额外内容、注释或标点符号 ### 文档摘要 [你的摘要内容] ### 多标签分类 [你的标签内容] 预设标签列表{,.join(PREDEFINED_TAGS)} 文本块内容 {chunk_text} return prompt.strip() # # 步骤5工具函数 - 调用Qwen

5 7B模型处理单个文本块 # def process_single_chunk(chunk_text, model, tokenizer): 调用Qwen

5 7B模型处理单个文本块生成摘要与分类 :param chunk_text: 单个文本块的内容 :param model: 加载后的Qwen

5 7B模型 :param tokenizer: 加载后的模型tokenizer :return: 该文本块的摘要str、标签str # 构建提示词 prompt build_prompt(chunk_text) # 构建模型输入符合Qwen模型的输入格式要求 messages [ {role: user, content: prompt} ] input_ids tokenizer.apply_chat_template(messages, return_tensorspt).to(model.device) # 模型生成配置控制输出长度、避免重复 generation_config { max_new_tokens: 500, # 足够容纳摘要和标签 temperature:

3, # 温度越低输出越稳定、越符合格式要求 top_p:

9, do_sample: False, # 关闭采样保证输出一致性 eos_token_id: tokenizer.eos_token_id, pad_token_id: tokenizer.pad_token_id } # 执行生成 with torch.no_grad(): # 关闭梯度计算减少内存占用 outputs model.generate(input_ids, **generation_config) # 解析输出结果 response tokenizer.decode(outputs[0][input_ids.shape[1]:], skip_special_tokensTrue).strip() # 提取摘要和标签按照Schema格式解析 summary tags try: # 匹配### 文档摘要后的内容 summary_match re.search(r### 文档摘要\n(.*?)\n### 多标签分类, response, re.DOTALL) # 匹配### 多标签分类后的内容 tags_match re.search(r### 多标签分类\n(.*), response, re.DOTALL) if summary_match: summary summary_match.group(

.strip() if tags_match: tags tags_match.group(

.strip() except Exception as e: print(f解析模型输出失败错误信息{str(e)}模型原始输出{response}) return summary, tags # # 步骤6工具函数 - 整合多个文本块的结果 # def integrate_chunk_results(chunk_summaries, chunk_tags): 整合所有文本块的摘要和标签生成完整文档的结果 :param chunk_summaries: 所有文本块的摘要列表 :param chunk_tags: 所有文本块的标签列表 :return: 完整摘要str、完整标签str # 整合摘要去重后拼接保持简洁 integrated_summary \n.join([s for s in chunk_summaries if s]) # 若整合后摘要过长再次精简取前MAX_SUMMARY_LENGTH*2字避免过长 if len(integrated_summary) MAX_SUMMARY_LENGTH * 2: integrated_summary integrated_summary[:MAX_SUMMARY_LENGTH * 2] ... # 整合标签去重保持格式统一 all_tags [] for tag_str in chunk_tags: if tag_str: tags [t.strip() for t in tag_str.split(,)] all_tags.extend(tags) # 去重并排序保持结果一致性 unique_tags sorted(list(set(all_tags))) integrated_tags ,.join(unique_tags) return integrated_summary, integrated_tags重点说明通过 Schema Prompt 强约束输出格式确保结果可解析使用 Qwen 官方 apply_chat_template 构造合规输入低温度 关闭采样 → 提升输出稳定性与格式一致性正则精准提取字段避免模型自由发挥导致解析失败。

CSV 导出结构化结果交付主流程协调全流程加载模型 → 遍历文档 → 调用前述各模块 → 汇

总结果 → 导出为带中文编码的 CSV 文件实现全端的自动化处理输出可直接用于业务系统或人工审核。

# # 步骤7主函数 - 批量处理所有文档 # def batch_process_documents(): 批量处理指定文件夹中的所有文档生成摘要与分类最终导出CSV # 步骤

1加载Qwen

5 7B模型和tokenizer print(开始加载Qwen

5 7B模型请稍候首次加载可能需要

分钟...) try: # 加载tokenizer tokenizer AutoTokenizer.from_pretrained( MODEL_PATH, trust_remote_codeTrue ) # 加载模型 model AutoModelForCausalLM.from_pretrained( MODEL_PATH, trust_remote_codeTrue, torch_dtypetorch.float16, # 使用float16精度减少内存占用 device_mapauto # 自动分配设备优先使用GPU无GPU则使用CPU ) # 模型设置为评估模式 model.eval() print(模型加载成功) except Exception as e: print(f模型加载失败错误信息{str(e)}) return # 步骤

2初始化结果列表 result_list [] # 步骤

3遍历文档文件夹批量处理每个文档 print(f开始遍历文档文件夹{DOCUMENT_FOLDER}) for file_name in os.listdir(DOCUMENT_FOLDER): file_path os.path.join(DOCUMENT_FOLDER, file_name) # 仅处理.docx和.pdf文件 if not (file_path.endswith(.docx) or file_path.endswith(.pdf)): continue print(f\n开始处理文档{file_name}) # 步骤

7.

1读取文档文本 doc_text read_single_document(file_path) if not doc_text: print(f文档{file_name}无有效文本跳过处理) continue # 步骤

7.

2文本分块 text_chunks split_text_into_chunks(doc_text, tokenizer) print(f文档{file_name}分割为{len(text_chunks)}个文本块) # 步骤

7.

3处理每个文本块 chunk_summaries [] chunk_tags [] for idx, chunk in enumerate(text_chunks): print(f正在处理第{idx1}/{len(text_chunks)}个文本块) summary, tags process_single_chunk(chunk, model, tokenizer) chunk_summaries.append(summary) chunk_tags.append(tags) # 步骤

7.

4整合文本块结果 integrated_summary, integrated_tags integrate_chunk_results(chunk_summaries, chunk_tags) # 步骤

7.

5添加到结果列表 result_list.append({ 文档文件名: file_name, 文档完整路径: file_path, 文档摘要: integrated_summary, 多标签分类: integrated_tags }) print(f文档{file_name}处理完成摘要{integrated_summary[:50]}...标签{integrated_tags}) # 步骤

4将结果导出为CSV文件 if result_list: try: df pd.DataFrame(result_list) df.to_csv(OUTPUT_CSV_PATH, indexFalse, encodingutf_8_sig) # utf_8_sig支持Excel中文显示 print(f\n所有文档处理完成结果已导出至CSV文件{OUTPUT_CSV_PATH}) except Exception as e: print(fCSV文件导出失败错误信息{str(e)}) else: print(\n无有效文档处理结果未生成CSV文件) # # 运行主函数 # if __name__ __main__: batch_process_documents()重点说明汇总所有文本块的摘要先拼接再进行标签的去重排序生成文档级结果使用 pandas 构建结构化表格字段包括文件名、路径、摘要、标签encodingutf_8_sig 确保 Excel 正确显示中文便于业务人员直接使用最终输出为标准 CSV可无缝对接数据库、BI 工具或人工审核流程。

运行流程和输出示例输出文档房屋租赁合同_

pdf处理完成摘要: 本合同约定甲方将位于XX的房屋出租给乙方租期1年月租金5000元。

...标签: 合同,租赁类文档软件服务协议.docx处理完成摘要: 本协议约定乙方为甲方提供软件开发与维护服务服务期6个月。

...标签: 合同,服务类文档年度审计报告_

pdf处理完成摘要: 经审计公司2023年度财务报表在所有重大方面公允反映经营成果。

...标签: 报告,审计报告文档设备采购合同.docx处理完成摘要: 甲方同意向乙方采购一批办公设备总价人民币12万元。

...标签: 合同,买卖类文档员工健康体检报告.pdf处理完成摘要: 该体检报告显示受检者血压、血糖等指标均在正常范围内。

...标签: 报告,个人相关所有文档处理完成结果已保存至: D:\AIWorld\test\Batch_Result_Simulated.csvBatch_Result_Simulated.csv文件内容预览

优化与扩展

1 TextSplitter 优化细节

以Token数为长度标准代码中使用length_functionlambda x: len(tokenizer.encode(x))直接以模型的token数作为文本块长度的计算标准比以字符数更准确因为不同字符的token数不同如中文汉字通常1个字符1个token英文单词通常1个单词多个token。

重叠token设置CHUNK_OVERLAP_TOKENS50让相邻文本块之间有50个token的重叠内容避免分割导致的语义断层如一份合同的某个条款被分割在两个文本块中重叠部分可以保证模型理解完整条款。

分割符优先级优先使用\n\n段落分隔分割保证每个文本块尽可能是一个完整的段落最大化保留语义完整性。

2 Schema 提示词优化细节

格式强制约束明确要求模型严格按照固定格式输出不得添加任何额外内容并使用###分隔字段方便后续用正则表达式解析。

预设标签列表将标签限制在预设列表中避免模型输出不规范的标签如租赁合同和租赁协议同时出现保证分类结果的统一性。

示例隐含引导虽然代码中未直接给出完整示例但通过明确的字段定义和格式要求模型已能理解输出规范若需要进一步提升格式准确率可在提示词中添加1个简单示例如在输出格式后添加示例### 文档摘要\n本次合同为甲方与乙方的房屋租赁协议租赁期限为1年。

\n### 多标签分类\n合同,租赁类,办公相关。

3 结果整合优化细节

摘要去重与精简整合多个文本块的摘要时先去重再拼接若拼接后过长则进一步精简避免摘要冗余。

标签去重与排序整合多个文本块的标签时先去重避免同一个标签出现多次再排序保证标签格式的统一性便于后续筛选分析。

五、

总结总的来说示例比较简单直接相比前几期的烧脑轻松了许多今天这个本地批量文档处理方案不难上手核心就是把“读文档、切文本、模型处理、导结果”这几步串起来。

我们不用怕复杂先把基础环境搭好用自己比较熟悉的模型也可以普通办公本就能跑通。

重点吃透TextSplitter分块和Schema提示词这两个点前者解决长文档处理难题后者保证输出格式统一这俩弄明白了整体流程就顺了。

建议大家先拿10份左右的文档做测试调整分块重叠度和提示词细节跑通后再批量处理。

遇到格式解析问题优先检查提示词约束和正则表达式。

平时可以多扩展预设标签适配不同业务场景。

慢慢摸索模型参数微调处理效率和准确率会越来越高这套方法落地后能省不少人工值得多花点时间打磨。

91 一起草wwwcom17官方版-91 一起草wwwcom17官方版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123