离线AI Agent:没有网络也能用的AI方案

📘 AI教程 💬 🔥 Trending 发布者: leakey
离线AI Agent:没有网络也能用的AI方案

🩺 摘要

有些场景没有网络——工厂车间、偏远地区、飞机上。离线AI Agent怎么做?

📝 详情

离线AI完整部署指南

技术栈选型对比

组件 推荐方案 备选方案 内存占用
模型推理 Ollama llama.cpp, vLLM 约4-8GB
向量数据库 ChromaDB FAISS, SQLite-vss 约200MB
嵌入模型 BGE-small-zh-v1.5 text2vec-base-chinese 约500MB
文本生成 Qwen3-7B-Q4_K_M DeepSeek-R1-Distill-Qwen-7B 约4GB
总计 约9-13GB

第一步:安装Ollama

# 下载离线安装包(在没有网络的机器上)
# 联网机器上:
curl -fsSL https://ollama.com/install.sh | sh

# 拉取模型(可提前下载,复制到离线机器)
ollama pull qwen3:7b-q4_K_M
ollama pull nomic-embed-text

# 验证安装
ollama run qwen3:7b-q4_K_M "你好,请用一句话介绍自己"

第二步:搭建本地RAG系统

import chromadb
from chromadb.utils import embedding_functions

class OfflineRAG:
    """完全离线运行的RAG系统"""

    def __init__(self, persist_dir="./offline_rag_db"):
        self.emb_fn = embedding_functions.SentenceTransformerEmbeddingFunction(
            model_name="BAAI/bge-small-zh-v1.5",
            device="cpu"
        )
        self.client = chromadb.PersistentClient(path=persist_dir)
        self.collection = self.client.get_or_create_collection(
            name="knowledge_base",
            embedding_function=self.emb_fn
        )

    def add_documents(self, documents: list, ids: list, metadatas: list = None):
        self.collection.add(
            documents=documents,
            ids=ids,
            metadatas=metadatas or [{}] * len(documents)
        )
        print(f"已添加 {len(documents)} 篇文档")

    def query(self, question: str, k: int = 3) -> str:
        results = self.collection.query(
            query_texts=[question],
            n_results=k
        )
        context = "\n\n".join(results['documents'][0])
        prompt = f"基于以下资料回答问题:\n\n{context}\n\n问题:{question}"
        return self._call_local_llm(prompt)

    def _call_local_llm(self, prompt: str) -> str:
        import requests
        response = requests.post(
            "http://localhost:11434/api/generate",
            json={
                "model": "qwen3:7b-q4_K_M",
                "prompt": prompt,
                "stream": False,
                "options": {
                    "temperature": 0.3,
                    "num_predict": 512
                }
            }
        )
        return response.json()["response"]

第三步:性能调优

调优项 默认值 推荐值 效果
量化级别 Q8_0 Q4_K_M 内存减少50%,质量仅下降2-3%
上下文长度 32768 8192 推理速度提升2倍
批处理大小 512 256 显存占用减少30%
温度 0.7 0.3 答案更稳定,幻觉减少

第四步:启动服务

# 启动Ollama服务(后台运行)
ollama serve &

# 验证
curl http://localhost:11434/api/tags

# 导入知识库文档
python3 offline_rag_setup.py --data-dir ./docs --persist-dir ./chroma_db

# 启动API服务
python3 offline_api_server.py --port 8080

离线 vs 在线对比

维度 在线(GPT-4o) 离线(Qwen3-7B Q4)
单次回复成本 约0.01元 约0.0003元(电费)
延迟P50 约1.5秒 约3.8秒
准确率(中文) 92% 85%
数据隐私 受API提供商政策限制 完全自主可控
可用性 依赖API服务 永远在线

实施步骤

第一步:在一台有网络的机器上完成环境搭建和模型下载(Ollama + Qwen3-7B-Q4 + ChromaDB)。

第二步:把程序和模型文件拷贝到离线机器(通过U盘或内网传输)。

第三步:导入知识库文档,先做100次测试查询,确认回答质量达标。

第四步:如果质量低于80%,尝试更大的模型(Qwen3-14B-Q4)或增加上下文长度。

第五步:设置本地监控——定期检查磁盘空间(模型文件约7GB)、内存使用、响应时间,确保长期稳定运行。