用服务器搭 “私人 AI 助手”:不用联网也能用,支持语音对话 / 文档总结(教程)

发布于:2025-09-05 ⋅ 阅读:(20) ⋅ 点赞:(0)

你是不是也有过这些顾虑?用 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 软件与资源​

核心是 “全离线”,所以要提前把需要的东西下载好,避免到时候卡壳:​

  1. 操作系统:优先选 Ubuntu 22.04 LTS,Server 版轻量,Desktop 版有图形界面,新手用着更顺手;​
  2. 必装工具:​
  • Docker:把环境打包好,不用纠结 “这个依赖装不上” 的问题;​
  • Python 3.9+:写脚本、管依赖都靠它;​
  • Ollama:轻量级框架,加载 AI 模型特别方便,离线也能用;​
  • Whisper:OpenAI 开源的语音识别工具,中文识别准确率很高;​
  • Coqui TTS:生成语音的工具,离线能把文字转成自然的人声;​
  • PyPDF2/python-docx:专门读 PDF 和 Word 的库,总结文档全靠它们;​

离线资源包(重点!):​

这些都要在能联网的电脑上下载好,再传到服务器里:​

  • 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 = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    wf = 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-utils
    subprocess.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 sys
    if 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,识别更快(准确率会稍降)。​

五、常见问题解决​

遇到问题别慌,先看这几个高频解决办法:​

  1. 语音没反应?​
  • 本地用:输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)。

网站公告

今日签到

点亮在社区的每一天
去签到