大模型选型与部署:从API到私有化的完整路径

说实话,大模型选型这件事,我踩过的坑比走过的路还多。2023年刚开始做AI Agent落地时,团队一上来就选了当时最强的GPT-4,结果一个月烧了十几万API费用,业务场景却只跑通了20%。嗯,从那以后我养成了一个习惯——先想清楚场景,再选模型。

一、主流大模型API接入:选对工具,事半功倍

目前市面上主流的API服务,我按自己的使用经验排了个序:

模型 优势场景 我的评价 成本参考
GPT-4o 复杂推理、多轮对话 综合能力最强,但贵 输入$5/1M tokens
Claude 3.5 Sonnet 长文本、代码生成 200K上下文,性价比高 输入$3/1M tokens
文心一言4.0 中文理解、合规场景 国内部署,延迟低 按QPS计费
通义千问2.5 多模态、开源生态 阿里系集成方便 部分免费额度

核心原则:不要盲目追求最强模型。我见过太多项目,用GPT-4做简单的文本分类,纯粹是杀鸡用牛刀。先评估你的场景需要什么级别的推理能力,再决定。

二、API接入实战:代码说话

以GPT-4o为例,我习惯用OpenAI的Python SDK。这里有个小技巧——一定要加异常处理和重试机制。为什么?因为API调用在网络波动时经常超时,不加重试,你的Agent就会莫名其妙挂掉。

import openai
from tenacity import retry, stop_after_attempt, wait_exponential

class LLMClient:
    def __init__(self, api_key, model="gpt-4o"):
        self.client = openai.OpenAI(api_key=api_key)
        self.model = model
    
    @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
    def chat(self, messages, temperature=0.7):
        try:
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=temperature
            )
            return response.choices[0].message.content
        except openai.RateLimitError:
            print("触发了限流,等待重试...")
            raise
        except openai.APITimeoutError:
            print("API超时,重新尝试...")
            raise

# 使用示例
client = LLMClient(api_key="your-key")
result = client.chat([
    {"role": "system", "content": "你是一个AI助手"},
    {"role": "user", "content": "帮我总结一下这篇文章"}
])

我的经验:temperature参数别乱调。做客服场景用0.3以下,保证回复稳定;做创意生成用0.8以上。我曾经因为temperature设太高,让客服机器人给客户写了首诗...场面一度很尴尬。

三、私有化部署:vLLM vs Ollama

为什么要私有化部署?说白了就两个原因:数据安全和成本控制。我服务过一家金融客户,所有数据都不能出内网,那只能自己部署。

目前主流方案有两个,我分别说说:

vLLM:高性能推理引擎

vLLM的核心优势是PagedAttention技术,显存利用率极高。我在项目中用vLLM部署了Llama 3 70B,8张A100能跑到每秒50个token,延迟控制在200ms以内。

# 安装
pip install vllm

# 启动服务
python -m vllm.entrypoints.openai.api_server \
    --model /path/to/llama-3-70b \
    --tensor-parallel-size 8 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9

# 客户端调用(兼容OpenAI格式)
import openai
client = openai.OpenAI(base_url="http://localhost:8000/v1")
response = client.chat.completions.create(
    model="llama-3-70b",
    messages=[{"role": "user", "content": "你好"}]
)

Ollama:轻量级部署方案

Ollama更适合个人开发者或小团队。它把模型打包成容器,一条命令就能跑起来。我经常用它做快速原型验证。

# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh

# 拉取并运行模型
ollama pull qwen2.5:7b
ollama run qwen2.5:7b

# 通过API调用
curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "解释一下什么是AI Agent"
}'

避坑指南:我曾经在Ollama上部署了70B模型,结果发现推理速度慢到无法接受。后来才意识到,Ollama的定位是轻量级,适合7B-13B的模型。大模型还是得上vLLM或者TensorRT-LLM。

四、模型微调策略:什么时候该微调?

这个问题我经常被问到。我的回答是:能不微调就别微调。为什么?因为微调成本高、周期长,而且容易过拟合。

那什么时候必须微调?我总结了三个场景:

  1. 领域术语理解:比如医疗、法律等专业领域,通用模型不认识那些术语
  2. 特定输出格式:比如必须输出JSON格式,且字段有严格约束
  3. 风格迁移:比如要让模型模仿某个作家的文风

微调的方法,我推荐LoRA(Low-Rank Adaptation)。它只更新少量参数,训练速度快,显存占用小。我在一个法律文书项目中,用LoRA微调了Qwen2.5 7B,只用了2小时就完成了训练,效果提升了30%。

# 使用Hugging Face PEFT库进行LoRA微调
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType

# 加载基础模型
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B")

# 配置LoRA
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=8,  # 秩,一般8-16
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["q_proj", "v_proj"]  # 只微调注意力层
)

# 应用LoRA
peft_model = get_peft_model(model, lora_config)
peft_model.print_trainable_parameters()  # 只有0.5%的参数可训练

关键指标:微调后一定要做A/B测试。我习惯用同样的prompt,对比微调前后的输出。如果微调后在其他通用任务上表现下降,说明过拟合了,需要调整数据或减少训练轮数。

五、知识体系总览

下面这张图是我自己总结的选型决策流程,你可以照着这个思路走:

大模型选型与部署决策流程 场景需求分析 数据是否必须留在内网? 私有化部署 vLLM / Ollama API调用 GPT-4o / Claude / 文心 是否需要微调? LoRA微调 → 部署上线 → 持续监控

这张图的核心逻辑很简单:先看数据能不能出内网,能就API,不能就私有化。然后评估通用模型够不够用,不够就微调。我每次做新项目都按这个流程走,基本没出过大的偏差。

最后说一句:模型选型不是一锤子买卖。我建议每季度重新评估一次,因为模型迭代太快了。去年还觉得GPT-4不可替代,今年开源模型已经追上来不少。保持开放心态,别被某个模型绑架。


公众号:蓝海资料掘金营,微信deep3321