
DeepSeek 系列模型以开源、强推理、低推理成本成为工程落地的热门选择。但"会用"和"精通"之间隔着一条完整的工程链路:API 调用、提示词工程、结构化输出、RAG、微调、量化、部署、监控。本文按入门到精通的路径,给出可运行的代码和工程要点。
DeepSeek 提供 OpenAI 兼容接口,安装官方 SDK 即可:
pip install openaiimport os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com",
)
def chat(prompt: str, model: str = "deepseek-chat") -> str:
resp = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "你是一名严谨的技术助手。"},
{"role": "user", "content": prompt},
],
temperature=0.3,
stream=False,
)
return resp.choices[0].message.content
print(chat("用三句话解释什么是 RAG。"))要点:
deepseek-chat:通用对话,适合摘要、生成、问答;deepseek-reasoner:强推理,适合数学、代码、复杂推理;长文本生成用流式,降低首字延迟:
def stream_chat(prompt: str):
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
stream=True,
)
for chunk in resp:
delta = chunk.choices[0].delta.content
if delta:
yield delta
for piece in stream_chat("写一段 200 字的项目介绍。"):
print(piece, end="", flush=True)工程中常用 JSON 输出,便于程序解析:
import json
SCHEMA_PROMPT = """你是信息抽取器。只输出 JSON,格式:
{"name": "", "category": "", "tags": [], "risk": "low|medium|high"}
不要输出解释,不要编造字段。"""
def extract(text: str) -> dict:
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": SCHEMA_PROMPT},
{"role": "user", "content": text},
],
response_format={"type": "json_object"},
temperature=0,
)
return json.loads(resp.choices[0].message.content)关键:即使开启 JSON 模式,仍要做 schema 校验。 模型可能漏字段或类型不符,生产环境应使用 Pydantic 验证。
DeepSeek 知识有截止日期,RAG 用于接入私有知识:
def rag_answer(question: str, top_k: int = 3) -> str:
docs = vector_search(question, top_k=top_k)
context = "\n\n".join(d["content"] for d in docs)
prompt = f"""只根据以下资料回答问题。资料没有依据时回答"未找到相关依据"。
资料:
{context}
问题:{question}"""
return chat(prompt)RAG 工程要点:
数据敏感或调用量大时,本地部署。推荐用 vLLM:
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model deepseek-ai/DeepSeek-V3 \
--served-model-name deepseek-chat \
--tensor-parallel-size 8 \
--max-model-len 32768 \
--gpu-memory-utilization 0.9 \
--port 8000调用方式与官方一致:
local = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")
def local_chat(prompt: str) -> str:
resp = local.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
)
return resp.choices[0].message.content关键参数:
tensor-parallel-size:多卡并行数;max-model-len:最大上下文,越大越占显存;gpu-memory-utilization:显存利用率;垂直场景可用 LoRA 微调:
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"deepseek-ai/DeepSeek-V3", device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-V3")
lora = LoraConfig(
r=16, lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05, bias="none",
)
model = get_peft_model(model, lora)微调要点:
import time
from dataclasses import dataclass
@dataclass
class CallMetric:
model: str
prompt_tokens: int
completion_tokens: int
latency_ms: float
def call_with_metric(prompt: str):
start = time.time()
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
)
latency = (time.time() - start) * 1000
u = resp.usage
return resp.choices[0].message.content, CallMetric(
model="deepseek-chat",
prompt_tokens=u.prompt_tokens,
completion_tokens=u.completion_tokens,
latency_ms=latency,
)核心指标:成功率、P99 延迟、Token 消耗、单次成本、缓存命中率。
优化手段:高频问题缓存、非实时任务批处理、简单任务用小模型、长上下文及时压缩。
DeepSeek 从入门到精通的路径:
阶段 | 能力 | 关键点 |
|---|---|---|
入门 | API 调用 | 密钥管理、基础对话 |
进阶 | 流式、结构化、RAG | schema 校验、权限过滤 |
精通 | 部署、微调、监控 | vLLM、LoRA、成本控制 |
模型能力只是起点。真正决定效果和成本的是工程化:合理的模型路由、严格的 schema 校验、持续的指标监控和明确的合规边界。掌握这条链路,才能在真实业务中稳定落地。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。