办公软件这块,被 WPS 和 Office 的弹窗广告、会员订阅、隐私策略劝退过的人不在少数。想用 AI 写文档、改表格、润色排版,又不想被“AI 会员”二次收费,更不想去下载来路不明的破解版。这次我们就把目光放到 GitHub 上:有没有开源方案,能组合出一套“干净无广告、数据可控、带 AI 能力”的 Office 办公套件?
先给结论:这条路完全走得通。GitHub 上主流的开源办公套件,比如 LibreOffice、OnlyOffice,基础能力早已覆盖 Word、Excel、PPT 的大部分日常使用场景。再加上开源的本地大模型服务,比如 Ollama 或 vLLM,就能给文档和表格接上 AI 写稿、润色、翻译、排版建议、公式生成这些能力。组合起来以后,对标 WPS AI 一点不虚,核心优势是免费、无广告、数据留在本机,还能批量处理文档。
这篇文章会按实际部署顺序展开:先看这套组合的规格和适用边界,再讲环境准备、安装启动、功能测试、接口 API、批量任务、资源占用和常见排错。如果你不想装破解、又希望本地办公套件具备 AI 能力,建议先收藏备用。
1. 核心能力速览
先给规格。下面的表格把整套组合的关键能力列清楚,方便你快速判断适不适合自己。
| 能力项 | 说明 |
|---|---|
| 项目形态 | GitHub 开源办公套件(LibreOffice / OnlyOffice 等)+ 开源本地大模型服务(Ollama / vLLM 等)组合 |
| 主要功能 | 文档写作、表格处理、演示文稿、PDF 转换、AI 润色改写、内容生成、批量格式转换 |
| AI 能力获取 | 通过本地模型或任意 OpenAI 兼容 API 接入,不需要依赖某个商业软件的 AI 会员 |
| 广告情况 | 开源套件本身无广告,不弹会员,不强制登录 |
| 数据隐私 | 本地部署时文档和模型请求均在本机完成,数据不出内网 |
| 硬件门槛 | 办公套件部分 CPU 即可;本地 AI 模型建议 8G 以上内存,有 NVIDIA 独显体验更好 |
| 显存占用 | 取决于模型参数规模和量化方式,没有固定值,需按实际模型测试 |
| 支持平台 | Windows / Linux / macOS |
| 启动方式 | 办公套件图形界面或命令行启动;AI 服务通过命令行启动 |
| 是否支持 API | 支持;文档转换有命令行接口,AI 层走 OpenAI 兼容接口 |
| 是否支持批量任务 | 支持;可以批量转 PDF、批量润色、批量生成表格数据 |
| 适合场景 | 个人办公、小微企业、高校实验室、内网文档处理流水线 |
如果你只想要一个“点击就能用”的开箱即用整合包,这套方案需要自己花半小时搭建;但只要搭好一次,后面无论是写作、改表、批量转格式,都能复用。
2. 适用场景与使用边界
2.1 这套组合适合谁
第一类人是个人内容创作者和办公人员。每天要写周报、方案、会议纪要,手头有大量 Word 和 Excel 文件,受够了广告弹窗,也不想把内容传到第三方平台。把办公套件和本地大模型装在自己电脑上,数据不出本机,AI 润色和改写随叫随到。
第二类是高校和科研团队。论文初稿润色、实验数据整理、批量转换 PDF、整理参考文献摘要,这些工作用开源工具加脚本非常好使,而且完全符合学术场景对数据合规的要求。
第三类是企业内网用户。内网环境不能访问外部 AI 服务,也不允许装商业办公软件的云功能。这时用开源办公套件加内网模型服务,可以撑起一套基础的“企业级 AI Office”。
2.2 不适合什么场景
如果你需要的是极致兼容微软 Office 复杂宏、复杂排版、多人实时协同,那 LibreOffice 这类开源套件在个别场景下仍不如原版 Office 顺手,OnlyOffice 的协同体验也和企业版商业软件有差距。另外,如果你完全不会命令行,也不想看日志,只想双击一个 EXE 就得到全套 AI 功能,那这套方案的上手成本可能超出预期。
2.3 合规与安全边界
这里必须说清楚:开源办公套件不是“破解版”的替代品,而是独立的合法软件。不要下载任何打着“WPS 破解版”“Office 免激活”旗号的来源不明安装包,更不要安装来路不明的激活工具——这类东西捆绑广告、窃取文档、植入木马的风险极高。GitHub 上正规开源项目的代码和安装包都是公开的,但下载时也要认准官方仓库和 release 页面,避免第三方转存包被投毒。
使用 AI 处理文档时,如果调用云端 API,公司内部文档、客户信息、个人隐私数据必须脱敏;更稳妥的做法是使用本地模型,让数据完全留在本机。另外,AI 生成的内容不能直接作为最终交付物,尤其是合同、公文、论文、财务报表这类关键材料,人工复核是必须的。
3. 环境准备与前置条件
先列一份通用检查清单,具体版本以你的操作系统和所选项目为准。
| 准备项 | 说明 |
|---|---|
| 操作系统 | Windows 10/11、Ubuntu 22.04/24.04、CentOS Stream、macOS 均可 |
| Python | 不需要装办公套件,但如果做批量任务脚本,建议 Python 3.10 以上 |
| 办公软件 | LibreOffice 或 OnlyOffice 的桌面版 / 服务版 |
| 本地大模型服务 | Ollama 或 vLLM,用于提供 AI 接口 |
| 模型文件 | 根据你的硬件选择参数规模,常见 7B、14B 模型,量化后体积从几 GB 到十几 GB 不等 |
| 磁盘空间 | 办公套件约 1-2GB;模型文件另算 |
| 内存 | 办公文档处理要求不高;本地推理建议 16GB 起步 |
| GPU(可选) | NVIDIA 显卡优先,用于本地大模型推理加速 |
| 端口 | Ollama 默认 11434;自定义服务建议避开 80、443 等常用端口 |
确认环境时,重点看两件事:第一,你准备跑多大的模型;第二,你的机器是 CPU 还是 GPU。这决定了 AI 能力是“能用”还是“好用”。
4. 安装部署与启动方式
下面给出一个通用部署流程,具体命令需要按你选择的发行版和版本号微调。
4.1 安装办公套件
以 LibreOffice 为例,在 Ubuntu / Debian 系系统上:
sudo apt update sudo apt install libreoffice在 CentOS / RHEL 系系统上:
sudo dnf install libreofficeWindows 用户直接去 LibreOffice 官方网站下载安装包,一路点下一步即可。OnlyOffice 也可以从官网或 GitHub 仓库的 release 页面下载对应平台的安装包。安装完成后,可以用命令行先验证一下核心转换功能是否正常:
libreoffice --version如果看到版本号,说明办公套件已就绪。
4.2 安装本地大模型服务
本地模型服务推荐先用 Ollama,它把模型下载和 API 启动都封装成了极简命令,对新手最友好。安装脚本以官网为准,Linux 上是:
curl -fsSL https://ollama.com/install.sh | shWindows 和 macOS 可以直接下载安装包。装完后拉取一个通用中英文模型,这里以 7B 参数的通用模型为例:
ollama pull qwen2.5:7b模型文件较大,首次下载需要一段时间。下载完成后启动服务:
ollama serve默认情况下,Ollama 会在11434端口启动一个服务。看到类似Listening on 127.0.0.1:11434的日志,本地 AI 服务就跑起来了。
4.3 验证 AI 接口
新开一个终端,直接用 curl 测试接口:
curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:7b", "messages": [ {"role": "user", "content": "用一句话介绍开源办公套件"} ] }'返回内容里包含choices和message字段,说明接口可通。这个接口是 OpenAI 兼容格式,后面写文档润色脚本、接入办公流程都会用到。
4.4 Windows 下的启动注意点
Windows 上最常见的坑是端口被占用,或者 Ollama 服务没有真正启动。建议在系统托盘或任务管理器里确认 Ollama 进程是否存在;如果端口冲突,可以改端口:
set OLLAMA_HOST=127.0.0.1:11435 ollama serve改完端口后,所有脚本和 curl 测试中的地址也要同步修改。
5. 功能测试与效果验证
部署完成后,不要急着直接处理重要文档,先按下面的测试流程把功能跑一遍,确认每个环节稳定后再接入真实工作。
5.1 文档写作测试
测试目标:验证 AI 能根据主题自动生成可编辑的文档内容。
先写一个最简单的 Python 脚本,调用本地模型生成一段周报:
# ai_office_demo.py import requests url = "http://localhost:11434/v1/chat/completions" payload = { "model": "qwen2.5:7b", "messages": [ {"role": "system", "content": "你是一个办公助手,输出简洁的中文周报。"}, {"role": "user", "content": "请写一份关于开源办公套件调研的本周工作进展,包含已完成、待办、风险。"} ], "temperature": 0.3 } resp = requests.post(url, json=payload, timeout=300) content = resp.json()["choices"][0]["message"]["content"] print(content)运行:
python ai_office_demo.py判断标准:
- 能正常返回结构化文字,没有报错;
- 内容包含“已完成、待办、风险”等关键要素;
- 文字通顺,不是生硬的关键词堆砌。
失败排查:
- 如果请求超时,看模型文件是否还在加载;
- 如果返回内容为空,先手动运行
ollama run qwen2.5:7b确认模型可用; - 如果返回 404,检查接口地址是否写成了
/v1/chat/completions。
5.2 文档润色与修改测试
测试目标:验证 AI 能对已有文本做改写、润色、扩写或摘要。
把上面的脚本扩展成函数:
def refine_text(text: str, instruction: str = "润色,使表达更正式") -> str: url = "http://localhost:11434/v1/chat/completions" payload = { "model": "qwen2.5:7b", "messages": [ {"role": "system", "content": "你是资深文字编辑,请根据指令处理用户文本。"}, {"role": "user", "content": f"{instruction}\n\n{text}"} ], "temperature": 0.2 } resp = requests.post(url, json=payload, timeout=300) return resp.json()["choices"][0]["message"]["content"] test_text = "我们今天测试了一下开源办公软件,感觉还是可以用的,虽然没有广告,但功能要自己研究。" print(refine_text(test_text, "润色,使表达更正式,并压缩到50字以内"))常用指令模板:
- “润色,使表达更正式”
- “改成小红书风格,口语化”
- “提取要点,不超过 5 条”
- “扩写,补充数据支撑建议”
- “检查错别字和病句”
这些指令完全可以沉淀成模板,后续在批量任务里复用。
5.3 表格生成与公式测试
测试目标:验证 AI 能生成表格数据,并且能输出可粘贴进 Excel 的内容。
提示词示例:
生成一张 5 行 3 列的表格,内容是本周项目进度情况,列名分别是:项目、进度、备注。 输出格式用 Markdown 表格。把返回内容复制到编辑器里,再粘贴到 LibreOffice Calc 或 OnlyOffice 表格中。也可以用 Python 的openpyxl直接把结果写入 xlsx 文件:
import openpyxl wb = openpyxl.Workbook() ws = wb.active ws["A1"] = "项目" ws["B1"] = "进度" ws["C1"] = "备注" rows = [ ["文档模块", "80%", "接口已通"], ["表格模块", "50%", "公式测试中"], ["批量转换", "30%", "待联调"], ] for r in rows: ws.append(r) wb.save("project_status.xlsx") print("已生成 project_status.xlsx")判断标准:
- xlsx 文件能正常打开;
- 中文不乱码;
- 单元格内容正确。
5.4 排版与格式转换测试
测试目标:验证开源办公套件的排版能力和转换稳定性。
先用 LibreOffice 图形界面打开一个 docx 文档,调整标题、字体、行距后保存。然后测试命令行批量转换:
libreoffice --headless --convert-to pdf test.docx --outdir ./outputlibreoffice --headless --convert-to docx test.md --outdir ./output第二个命令需要先确认系统里有对应的 Writer 过滤器,部分发行版需要额外安装libreoffice-writer包。
判断标准:
- PDF 输出排版与屏幕显示一致;
- 中文字体正常显示;
- 转换过程无报错,退出码为 0。
6. 接口 API 与批量任务
办公自动化真正值钱的地方在于接口调用和批量任务。下面给一套通用方案。
6.1 AI 润色接口封装
把前面写的润色函数封装成一个本地 HTTP 服务,这样其他工具也能调用:
# server.py from flask import Flask, request, jsonify import requests app = Flask(__name__) OLLAMA_URL = "http://localhost:11434/v1/chat/completions" MODEL = "qwen2.5:7b" @app.route("/refine", methods=["POST"]) def refine(): data = request.get_json() text = data.get("text", "") instruction = data.get("instruction", "润色,使表达更正式") payload = { "model": MODEL, "messages": [ {"role": "system", "content": "你是资深文字编辑。"}, {"role": "user", "content": f"{instruction}\n\n{text}"} ], "temperature": 0.2 } resp = requests.post(OLLAMA_URL, json=payload, timeout=300) result = resp.json()["choices"][0]["message"]["content"] return jsonify({"result": result}) if __name__ == "__main__": app.run(host="127.0.0.1", port=8001)启动服务:
pip install flask requests python server.py调用接口:
curl http://127.0.0.1:8001/refine \ -H "Content-Type: application/json" \ -d '{"text": "今天的会议讨论了项目进度,下一步要加快测试。", "instruction": "改成正式会议纪要风格"}'返回 JSON:
{ "result": "今日会议就项目当前进展进行了讨论,并明确下一步需加大测试推进力度。" }6.2 批量 Word 转 PDF
用一个 Python 脚本把inputs目录下所有 docx 批量转成 PDF:
from pathlib import Path import subprocess input_dir = Path("inputs") output_dir = Path("output") output_dir.mkdir(exist_ok=True) for f in input_dir.glob("*.docx"): cmd = [ "libreoffice", "--headless", "--convert-to", "pdf", str(f), "--outdir", str(output_dir) ] proc = subprocess.run(cmd, capture_output=True, text=True) if proc.returncode == 0: print(f"OK: {f.name}") else: print(f"FAIL: {f.name}") print(proc.stderr)这个脚本加到 crontab 或 Windows 计划任务里,就能做定时批量转换。
6.3 批量润色任务
给批量润色加一个输入输出目录的约定,处理时先读取文本文件,再调用 AI 接口,最后写到 output 目录:
mkdir inputs outputsPython 脚本:
from pathlib import Path from server import refine # 复用上面的函数或直接 requests 调用本地服务 input_dir = Path("inputs") output_dir = Path("outputs") output_dir.mkdir(exist_ok=True) for f in input_dir.glob("*.md"): text = f.read_text(encoding="utf-8") result = refine(text, "润色,保持原意,使表达更专业") output_dir.joinpath(f.name).write_text(result, encoding="utf-8") print(f"已完成: {f.name}")批量任务注意两点:一是加错误重试,因为本地模型偶尔会超时;二是加延迟或限速,避免同时发出大量请求把显存打爆。
7. 资源占用与性能观察
这部分是本地部署最值得关心的地方。办公套件本身资源占用很低,打开文档或转 PDF 时 CPU 短时间波动,内存基本在几百 MB 到 1GB 左右。真正占用大头是本地的 AI 模型。
7.1 显存与内存怎么看
在 Linux 下用nvidia-smi观察实时显存:
nvidia-smiWindows 下打开“任务管理器 -> 性能 -> GPU”,查看“专用 GPU 内存”。最直观的判断方式是:模型加载后,显存稳定在一个值附近;请求进来时显存会短暂爬升;请求结束后回落到加载时水位。
7.2 CPU 推理和 GPU 推理的差异
GPU 推理的速度优势非常明显。同一个 7B 模型,GPU 生成一句 50 字的内容可能是几秒,纯 CPU 推理多半要十几秒甚至更久,具体取决于 CPU 性能和上下文长度。如果你只有 CPU,建议:
- 选择量化程度更高的模型;
- 控制输入文本长度;
- 把并发数降到 1;
- 设置更长的请求超时时间。
7.3 如何降低占用
- 使用更小的模型或量化版本;
- 减少上下文长度,润色时只传需要修改的段落,不要传整篇文档;
- 关闭多路并发,一次只处理一条请求;
- 不使用时直接关掉 Ollama 服务,释放显存。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| AI 接口返回 404 | 接口路径写错,或 Ollama 版本不支持/v1接口 | 用浏览器访问http://localhost:11434,确认服务在线 | 改用/api/chat,或升级 Ollama |
| AI 接口超时 | 模型首次加载慢,或 CPU 推理过慢 | 观察是否第一次请求后才超时 | 先用ollama run预加载模型,增大 timeout |
| 文档转 PDF 中文乱码 | 系统缺少中文字体 | 检查/usr/share/fonts下是否安装了中文字体 | 安装fonts-noto-cjk或 Windows 字体 |
| LibreOffice 启动报错 | 缺少组件包或权限异常 | 运行libreoffice --version看报错 | 补装libreoffice-writer、libreoffice-calc等组件 |
| 端口被占用 | 其他服务占用了 11434 或 8001 | Windows 用 `netstat -ano | findstr 11434,Linux 用ss -lntp` |
| 批量任务中部分文件转换失败 | 文件损坏或加密 | 单独对失败文件执行一次转换 | 修复文件,或跳过并记录日志 |
| 显存不足 | 模型过大或并发过高 | nvidia-smi 查看显存 | 换量化模型,降低并发 |
还有一个高频问题:GitHub 仓库访问慢。办公套件和 Ollama 的安装包不一定要在 GitHub 直接下载,很多开源项目有官网或国内镜像源;安装依赖用系统自带的包管理器,也可以避免反复超时。
9. 最佳实践与使用建议
第一,先小参数跑通,再上生产。第一次部署时,用最小模型、最短文本、单条请求验证链路,不要一上来就批量处理几百个文件。
第二,保持一套最小可运行配置。把下面的内容写进 README 或笔记里:模型名称、启动命令、接口地址、几个关键脚本路径。这样换机器或者换环境时,不用重新摸索。
第三,目录分层管理。建议统一为inputs、outputs、scripts、logs四个目录,输入文档、输出结果、脚本、日志互不污染。
第四,批量任务必须加日志和失败重试。AI 服务偶尔会超时或返回空内容,批量脚本里要记录每个文件的处理状态,失败后单独重试,而不是整个任务重跑。
第五,接口服务要限制访问范围。如果 AI 服务只在本机使用,让服务监听127.0.0.1,不要监听0.0.0.0;如果在局域网内共享,加上简单的 token 校验或把服务放在内网网关后面。
第六,涉及人脸、声音、版权素材、公司内部文档时,先确认授权边界。开源工具不等于可以随便处理所有数据,关键交付物必须人工复核。
10. 总结与下一步
这套“GitHub 开源办公套件 + 本地大模型”的组合,最值得尝试的点是:用一个完全可控、无广告、不付费的办公环境,拿到接近商业软件 AI 助手的核心能力。数据留在本机,意味着你可以放心理文档;接口标准化,意味着它能接入你自己的批量处理和自动化流程。
最先应该验证的是本地模型接口能不能通,以及 LibreOffice 的批量转 PDF 是否稳定。这两件事跑通了,后面的文档润色、表格生成、格式排版就都是顺水推舟的事。
最容易踩的坑是模型显存估算错误和批量任务并发设置过大。记住一个原则:先小后大,先单条后批量,先短文本后长文本。
下一步可以扩展的方向很多:把润色接口接入飞书或钉钉机器人,做成群里的文档助手;把批量转换和定时任务结合,做成自动汇报流水线;或者在团队内网部署一台带 GPU 的服务器,大家都走同一个 AI Office 接口。开源办公的价值不在于某一个软件的界面多漂亮,而在于你能把它真正接到自己的工作流里。