Skip to content

AI模型部署方案

本文档是 系统设计主文档 的子文档,详细描述Ollama和云端LLM的模型部署方案。


五、AI模型部署方案

5.1 模型选型

5.1.1 LLM (大语言模型)

设备类型推荐模型参数量内存需求性能
高性能PCLLaMA3-70B70B64GB RAM + 显卡接近GPT-3.5
普通PCQwen2-7B7B16GB RAM日常使用足够
低配PCPhi-3-mini3.8B8GB RAM轻量但实用
旗舰手机MiniCPM-2B2.4B6GB RAM移动端最优
中端手机Gemma-2B2B4GB RAM速度快
云端APIGPT-4/Claude-无需本地资源最强性能

5.1.2 Embedding模型 (向量化)

模型维度大小语言支持用途
bge-large-zh-v1.510241.3GB中英文PC端,高精度
bge-base-zh-v1.5768400MB中英文平衡性能和精度
bge-small-zh-v1.551295MB中英文移动端,轻量
text-embedding-ada-0021536API多语言云端,最强效果

5.1.3 向量数据库

数据库类型优点缺点适用设备
ChromaDB嵌入式简单,自带持久化性能一般PC和移动端
Qdrant独立服务高性能,功能丰富需要单独部署PC (Docker)
Milvus分布式企业级,可扩展复杂,资源占用大服务器
FAISS超高性能无持久化,需自己封装高级用户

5.2 PC端部署方案

5.2.1 Docker Compose配置

yaml
version: "3.8"

services:
  # Ollama - LLM推理引擎
  ollama:
    image: ollama/ollama:latest
    container_name: chainlesschain-llm
    ports:
      - "11434:11434"
    volumes:
      - ./ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu] # 如果有NVIDIA显卡

  # Qdrant - 向量数据库
  qdrant:
    image: qdrant/qdrant:latest
    container_name: chainlesschain-vectordb
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - ./qdrant_data:/qdrant/storage

  # AnythingLLM - RAG问答系统
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: chainlesschain-rag
    ports:
      - "3001:3001"
    volumes:
      - ./anythingllm_data:/app/server/storage
    environment:
      - LLM_PROVIDER=ollama
      - OLLAMA_BASE_URL=http://ollama:11434
      - VECTOR_DB=qdrant
      - QDRANT_ENDPOINT=http://qdrant:6333
      - EMBEDDING_ENGINE=native # 使用内置Embedding

  # Git服务器 (可选,自托管)
  gitea:
    image: gitea/gitea:latest
    container_name: chainlesschain-git
    ports:
      - "3000:3000"
      - "2222:22"
    volumes:
      - ./gitea_data:/data
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3

一键启动脚本:

bash
#!/bin/bash
# setup_pc.sh

echo "正在启动Chainlesschain AI系统..."

# 1. 启动Docker容器
docker-compose up -d

# 2. 等待服务就绪
echo "等待服务启动..."
sleep 10

# 3. 下载LLM模型
echo "下载语言模型 (首次运行需要几分钟)..."
docker exec chainlesschain-llm ollama pull qwen2:7b

# 4. 下载Embedding模型
docker exec chainlesschain-llm ollama pull nomic-embed-text

# 5. 创建向量数据库集合
curl -X PUT 'http://localhost:6333/collections/knowledge_base' \
  -H 'Content-Type: application/json' \
  -d '{
    "vectors": {
      "size": 768,
      "distance": "Cosine"
    }
  }'

echo "✅ 系统启动完成!"
echo "LLM API: http://localhost:11434"
echo "向量数据库: http://localhost:6333"
echo "RAG问答: http://localhost:3001"

5.3 移动端部署方案

5.3.1 Android集成

kotlin
// 使用MLC LLM在Android上运行本地模型
class LocalLLM(context: Context) {
    private val mlcEngine = MLCEngine(context)

    fun initialize() {
        // 下载并加载MiniCPM-2B模型
        val modelPath = downloadModel("MiniCPM-2B-Q4")  // 量化到4bit
        mlcEngine.loadModel(modelPath)
    }

    suspend fun chat(prompt: String, history: List<Message>): String {
        return mlcEngine.generate(prompt, maxTokens = 512)
    }
}

// Embedding模型
class LocalEmbedding(context: Context) {
    private val tfLite = Interpreter(loadModelFile("bge-small-zh-v1.5.tflite"))

    fun embed(text: String): FloatArray {
        // 分词
        val tokens = tokenizer.encode(text)
        // 推理
        val embedding = FloatArray(512)
        tfLite.run(tokens, embedding)
        return embedding
    }
}

5.3.2 iOS集成

swift
// 使用Core ML运行本地模型
class LocalLLM {
    private var model: MLModel?

    func initialize() {
        // 加载编译好的.mlpackage模型
        let modelURL = Bundle.main.url(forResource: "MiniCPM-2B", withExtension: "mlpackage")!
        model = try? MLModel(contentsOf: modelURL)
    }

    func generate(prompt: String) async -> String {
        // 使用Core ML推理
        let input = MLDictionary(["input_text": prompt])
        let output = try? model?.prediction(from: input)
        return output?["generated_text"] as? String ?? ""
    }
}

5.4 混合部署策略

智能路由:

python
class AIRouter:
    def __init__(self):
        self.pc_llm_available = check_pc_api("http://192.168.1.100:11434")
        self.mobile_llm_available = check_mobile_model()
        self.cloud_api_key = get_api_key("openai")

    def route_request(self, prompt: str, context_length: int,
                      quality_required: str) -> str:
        """
        智能选择使用哪个模型
        """
        # 1. 长上下文 -> 云端API
        if context_length > 8000:
            return self.call_cloud_api(prompt)

        # 2. 高质量要求 + 在家 -> PC端模型
        if quality_required == "high" and self.pc_llm_available:
            return self.call_pc_llm(prompt)

        # 3. 快速响应 + 移动场景 -> 本地模型
        if quality_required == "fast" and self.mobile_llm_available:
            return self.call_mobile_llm(prompt)

        # 4. 默认 -> 云端API (如果有密钥)
        if self.cloud_api_key:
            return self.call_cloud_api(prompt)

        # 5. 降级到任何可用的模型
        if self.mobile_llm_available:
            return self.call_mobile_llm(prompt)

        return "抱歉,当前没有可用的AI模型"

实现状态 (v0.20.0)

LLM支持:

  • Ollama - 本地部署(qwen2:7b等)
  • 14+云端API - Anthropic, OpenAI, Dashscope, Zhipuai, Volcengine, Qianfan等

Embedding:

  • ChromaDB 3.1.8 - 向量数据库
  • @chroma-core/default-embed 0.1.9 - 嵌入模型

完成度: 100% ✅ (本地+云端混合部署)

附录:规范章节补全(v5.0.3.108)

本文为设计文档。为对齐项目文档标准结构,下列章节以 见正文 指引或简述方式补齐若干视角,不重复正文细节。

1. 概述

见正文头部。AI 模型部署方案:本地 / 云端 LLM 模型部署策略。

2. 核心特性

Ollama / 云 API / 模型选型 / 部署。

3. 系统架构

见正文架构 / 设计章节。

4. 系统定位

ChainlessChain 的「AI 模型部署方案」。

5. 核心功能

见正文功能 / 设计章节。

6. 技术架构

见正文实现 / 技术章节。

7. 系统特点

见正文(状态 / 版本 / 特性)。

8. 应用场景

见正文应用场景 / 背景。

9. 竞品对比

见正文对比 / 借鉴(如有)。

10. 配置参考

见正文配置 / 参数章节。

11. 性能指标

见正文性能 / 指标章节。

12. 测试覆盖

见正文测试 / E2E 章节。

13. 安全考虑

见正文安全 / 权限章节。

14. 故障排除

见正文故障 / trap / 已知限制章节。

15. 关键文件

见正文实现位置 / 关键文件章节。

16. 使用示例

见正文使用 / 命令 / API 示例。

17. 相关文档

系统设计主文档、相关设计文档。

基于 MIT 许可发布