离线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)、内存使用、响应时间,确保长期稳定运行。
💬 评论 (0)