用服务器搭 “私人 AI 助手”:不用联网也能用,支持语音对话 / 文档总结(教程)
你是不是也有过这些顾虑?用 ChatGPT 怕数据泄露,用在线 AI 助手没网就歇菜,想让 AI 帮忙总结文档、语音聊天,却总被 “联网依赖” 和 “隐私安全” 卡脖子?
其实不用妥协 —— 咱们完全能在自己的服务器上搭一个全离线、高隐私、多功能的私人 AI 助手。不用上传数据到第三方,断网时照样语音对话、秒总结 PDF/Word,所有数据都握在自己手里。
这篇教程就带你用开源工具搞定这件事,从硬件准备到代码跑通全程保姆级讲解,哪怕你只有基础 Linux 操作能力,跟着做也能成功。
准备工作
2.1 硬件要求
不用追求 “服务器级别” 的高价配置,普通主机甚至旧电脑改造都能上:
- 核心配置:CPU 至少 4 核(比如 Intel i5-10400、AMD Ryzen 5 5600 这类常见型号),内存 8GB 起步(模型加载要占 3-6GB,内存够了才不卡顿),硬盘留 50GB 以上空间(SSD 最好,加载模型更快);
- 显卡可选:有 NVIDIA 显卡(显存 6GB 以上,比如 RTX 3060/4060)能让 AI 反应快一倍,没有也没关系,纯 CPU 照样能跑,就是速度稍慢点儿;
- 外设提醒:如果想在服务器本地语音聊天,插个麦克风和音箱就行;远程用的话,VNC 这类远程桌面软件开个 “音频转发” 也能实现。
2.2 软件与资源
核心是 “全离线”,所以要提前把需要的东西下载好,避免到时候卡壳:
- 操作系统:优先选 Ubuntu 22.04 LTS,Server 版轻量,Desktop 版有图形界面,新手用着更顺手;
- 必装工具:
- Docker:把环境打包好,不用纠结 “这个依赖装不上” 的问题;
- Python 3.9+:写脚本、管依赖都靠它;
- Ollama:轻量级框架,加载 AI 模型特别方便,离线也能用;
- Whisper:OpenAI 开源的语音识别工具,中文识别准确率很高;
- Coqui TTS:生成语音的工具,离线能把文字转成自然的人声;
- PyPDF2/python-docx:专门读 PDF 和 Word 的库,总结文档全靠它们;
离线资源包(重点!):
这些都要在能联网的电脑上下载好,再传到服务器里:
- Ollama 离线包:去Ollama GitHub Releases下ollama-linux-amd64文件,就几 MB;
- AI 模型(选轻量的,跑得更快):
- 对话模型:Llama 3 8B(Ollama 里叫llama3:8b,联网电脑用ollama pull llama3:8b下载,默认存在~/.ollama/models);
- 语音识别:Whisper Small(点这下载,约 4GB,识别速度和准确率平衡得好);
- 语音合成:Coqui 的tts_models-en-ljspeech-tacotron2-DDC_ph(点这下载,约 1GB,人声不生硬);
- Python 依赖:联网电脑建个requirements.txt,写清楚torch==2.1.0、transformers==4.35.2这些包名,用pip download -r requirements.txt把.whl文件全下下来,传到服务器备用。
三、搭建步骤(全程离线操作)
3.1 服务器环境初始化(Ubuntu 系统)
先把基础环境搭好,后续步骤才不会出问题。
1. 离线装 Docker
如果服务器能联网,直接apt install docker.io最省事;离线的话按下面来:
- 把下载好的 Docker 离线包(比如docker-27.0.3.tgz)传到服务器的/opt目录;
- 解压安装,输这几行命令:
cd /opt
tar -zxvf docker-27.0.3.tgz
cp docker/* /usr/bin/
# 启动Docker并设为开机启动
systemctl start docker
systemctl enable docker
# 看看装没装好
docker --version
能显示版本号就说明成了。
2. 有显卡?配置 NVIDIA 支持
没显卡的话直接跳下一步,有显卡的话得让 Docker 能调用显卡,跑模型更快:
- 先装 NVIDIA 驱动:提前下好对应显卡的.run文件(比如NVIDIA-Linux-x86_64-550.54.14.run),传去服务器,输命令:
chmod +x NVIDIA-Linux-x86_64-550.54.14.run
./NVIDIA-Linux-x86_64-550.54.14.run --no-network
按提示一路确认就行;
- 再装 NVIDIA Container Toolkit:参考官方离线指南,装完后输docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi,能看到显卡信息就对了。
3.2 离线部署 AI 对话模型(用 Ollama)
Ollama 用起来特别简单,几步就能把对话模型跑起来。
1. 装 Ollama
把之前下的ollama-linux-amd64文件传到服务器的/usr/bin目录,再给权限:
cp ollama-linux-amd64 /usr/bin/ollama
chmod +x /usr/bin/ollama
2. 加载离线模型
- 联网电脑下载的~/.ollama/models目录,压缩后传到服务器的同一个路径(比如服务器的~/.ollama/models);
- 启动 Ollama 服务,后台运行不占终端:
nohup ollama serve &
# 测试下模型能不能用
ollama run llama3:8b "你好,我是私人AI助手"
如果 AI 能回复 “你好” 之类的话,说明模型服务没问题了。
3.3 做语音对话功能(Whisper+Coqui TTS)
现在让 AI 能 “听” 能 “说”,实现语音聊天。
1. 搭 Python 环境
把提前下好的 Python 依赖包(.whl文件)传到服务器的/opt/python-packages目录,然后装依赖:
pip install --no-index --find-links=/opt/python-packages torch transformers pydub whisper TTS
2. 写语音对话脚本(
voice_chat.py
)
直接复制下面的代码,保存成voice_chat.py文件,注释都写得很清楚,不用改太多:
import whisper
from TTS.api import TTS
import pyaudio
import wave
import subprocess# 初始化模型:有显卡用cuda,没有用cpu
asr_model = whisper.load_model("small", device="cuda" if subprocess.run("nvidia-smi", capture_output=True).returncode == 0 else "cpu")
tts_model = TTS(model_name="tts_models/en-ljspeech-tacotron2-DDC_ph", gpu=subprocess.run("nvidia-smi", capture_output=True).returncode == 0)# 录音功能:默认录5秒,采样率16000(Whisper推荐)
def record_audio(duration=5, sample_rate=16000):CHUNK = 1024FORMAT = pyaudio.paInt16CHANNELS = 1wf = wave.open("input.wav", 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(pyaudio.PyAudio().get_sample_size(FORMAT))wf.setframerate(sample_rate)p = pyaudio.PyAudio()stream = p.open(format=FORMAT, channels=CHANNELS, rate=sample_rate, input=True, frames_per_buffer=CHUNK)print("正在录音...")for _ in range(0, int(sample_rate / CHUNK * duration)):data = stream.read(CHUNK)wf.writeframes(data)stream.stop_stream()stream.close()p.terminate()wf.close()return "input.wav"# 语音转文字(ASR)
def audio_to_text(audio_path):result = asr_model.transcribe(audio_path, language="zh") # 指定中文识别return result["text"]# 文字转语音(TTS),并播放
def text_to_audio(text, output_path="output.wav"):tts_model.tts_to_file(text=text, file_path=output_path)# Ubuntu用aplay播放,需要装alsa-utilssubprocess.run(["aplay", output_path])# 对话主逻辑:循环录音→识别→对话→合成语音
def voice_chat():while True:audio_path = record_audio()user_text = audio_to_text(audio_path)print(f"你:{user_text}")# 说“退出”就结束对话if "退出" in user_text:print("AI:再见!")text_to_audio("再见!")break# 调用Ollama模型获取回复ai_response = subprocess.run(["ollama", "run", "llama3:8b", user_text],capture_output=True, text=True).stdout.strip()print(f"AI:{ai_response}")# 把回复转成语音播放text_to_audio(ai_response)if __name__ == "__main__":voice_chat()
3. 启动语音对话
先装播放音频的依赖,再跑脚本:
# 离线的话提前下alsa-utils的deb包,比如alsa-utils_1.2.6-1ubuntu1_amd64.deb
dpkg -i alsa-utils_1.2.6-1ubuntu1_amd64.deb
# 运行脚本
python voice_chat.py
看到 “正在录音” 就可以说话了,默认录 5 秒,说完等一会儿,AI 就会语音回复你,说 “退出” 就能结束。
3.4 做文档总结功能(PyPDF2+Ollama)
让 AI 帮你读 PDF/Word,自动总结重点,省不少时间。
1. 装文档解析依赖
还是用离线包安装:
pip install --no-index --find-links=/opt/python-packages PyPDF2 python-docx
2. 写文档总结脚本(doc_summary.py)
复制下面的代码,保存成doc_summary.py:
import PyPDF2
from docx import Document
import subprocess# 读文档内容:支持PDF和docx
def read_document(file_path):content = ""if file_path.endswith(".pdf"):with open(file_path, "rb") as f:reader = PyPDF2.PdfReader(f)for page in reader.pages:content += page.extract_text() + "\n"elif file_path.endswith(".docx"):doc = Document(file_path)for para in doc.paragraphs:content += para.text + "\n"else:raise ValueError("目前只支持PDF和Word(docx)文档哦")# Llama 3 8B大概支持8k tokens,取前10000字符避免超限制return content[:10000]# 调用AI生成总结
def generate_summary(content):# 给AI的提示词,让它总结得清晰点prompt = f"请总结下面的文档内容,分3-5点说明核心信息,语言简洁:\n{content}"summary = subprocess.run(["ollama", "run", "llama3:8b", prompt],capture_output=True, text=True).stdout.strip()return summary# 主函数:传文档路径就能生成总结
if __name__ == "__main__":import sysif len(sys.argv) != 2:print("用法:python doc_summary.py <文档路径> (比如 python doc_summary.py test.pdf)")sys.exit(1)file_path = sys.argv[1]try:content = read_document(file_path)print("正在生成总结...")summary = generate_summary(content)# 打印总结并保存到文件print("\n文档总结:")print("-" * 50)print(summary)with open("summary.txt", "w", encoding="utf-8") as f:f.write(summary)print("-" * 50)print("总结已经存到 summary.txt 里啦")except Exception as e:print(f"出问题了:{e}")
3. 测试文档总结
把要总结的文档(比如test.pdf)传到服务器,输命令:
python doc_summary.py test.pdf
等几秒,屏幕上会显示总结,同时生成summary.txt文件,方便后续查看。
四、功能测试与优化
4.1 离线验证:断网也能用
- 先断开服务器网络:sudo nmcli networking off;
- 再重新跑语音对话和文档总结脚本,能正常用就说明 “全离线” 没问题;
- 如果模型加载失败,看看~/.ollama/models目录里的文件全不全,不全的话重新传一遍。
4.2 性能优化:让 AI 跑得更快
- CPU 用户:用量化版模型llama3:8b-q4_0,内存占用能降到 4GB 左右,速度还能快 20%,调用时把命令里的llama3:8b换成llama3:8b-q4_0就行;
- 显卡用户:确认nvidia-smi能看到显卡,模型会自动用 GPU,推理速度能快一倍以上;
- 语音延迟:觉得录音 5 秒太长,把voice_chat.p里的duration=5改成3;或者把 Whisper 模型换成更小的whisper-tiny,识别更快(准确率会稍降)。
五、常见问题解决
遇到问题别慌,先看这几个高频解决办法:
- 语音没反应?
- 本地用:输arecord -l看看麦克风有没有被识别,没识别的话重新插一下;
- 远程用:VNC、向日葵这些工具里,要开 “音频转发”,不然服务器收不到声音。
2.文档乱码?
- PDF 乱码:换pdfplumber库(离线装pdfplumber依赖),把read_document里的 PyPDF2 代码换成 pdfplumber 的读取逻辑;
- Word 乱码:确认是docx格式,不是老的doc格式,doc格式可以先转成docx再试。
3.Ollama 崩溃?
- 输tail -f nohup.out看日志,如果提示 “内存不足”,先关了其他不用的进程,或者换量化模型(llama3:8b-q4_0)。