开发者必看:DeepSeek API接入指南(附代码)

正文内容

GitHub上一个帖子最近被顶得很高,楼主问:“有没有比OpenAI便宜、能力在线、支持工具调用的模型?”

底下第一条回复就五个字:DeepSeek,下一个。

评论区直接炸了。有人贴了自己的token消耗截图,有人贴代码,还有人把华为云的接入文档链接甩了出来。那篇文档里写得挺清楚:DeepSeek-V3.2支持128K上下文,输入每百万tokens 0.28美元,输出0.42美元,缓存命中只要0.028美元

比GPT-4便宜了不止一个量级。

一、先搞定API Key

华为云的文档里写得很细:先去MaaS控制台,找到“预置服务”页签,选DeepSeek-V3.2,点“开通服务”。开通后点“调用说明”,创建API Key。

有个坑得注意:Key创建后不会立即生效,等几分钟才能用。

Alibaba Cloud的文档也提了同样的事——Base URL默认是https://api.deepseek.com/v1,不用改。但如果走华为云或者Zenlayer的渠道,地址会变

WaveSpeedAI的开发者Dora踩过一个更细的坑:她把Key直接写在代码里,结果不小心推到GitHub,两小时后收到账单报警。后来她改成python-dotenv加载环境变量

from dotenv import load_dotenv
import os

load_dotenv()
API_KEY = os.getenv("DEEPSEEK_API_KEY")

if not API_KEY:
    raise RuntimeError("Missing DEEPSEEK_API_KEY")

她的帖子底下有人回复:“第一次跑API的人,80%的错都是Key没配好。”

二、最简代码:跑通第一个对话

AIML API的文档给了Python和JavaScript的完整示例。Python版长这样:

import requests
import json

response = requests.post(
    "https://api.deepseek.com/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    },
    json={
        "model": "deepseek-chat",
        "messages": [
            {"role": "user", "content": "介绍一下你自己"}
        ]
    }
)

data = response.json()
print(json.dumps(data, indent=2, ensure_ascii=False))

Dora在WaveSpeedAI的博客里补充了一个细节:模型名称会变。她测试的时候用的是deepseek-chat,但不同区域、不同时间可能叫deepseek-v3.2deepseek-reasoner每次跑之前看一眼官方文档确认一下,能省半小时查错时间。

三、流式输出:让响应“动起来”

如果你做过聊天机器人,应该知道流式输出对用户体验的影响有多大。等十几秒才看到完整回复,和字一个一个往外蹦,完全是两种感受。

DeepSeek支持标准的SSE(Server-Sent Events)流式。Dora给的代码可以直接复制:

payload = {
    "model": "deepseek-chat",
    "messages": [{"role": "user", "content": "给我讲个长一点的故事"}],
    "stream": True,
    "temperature": 0.2
}

with requests.post(
    "https://api.deepseek.com/v1/chat/completions",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json=payload,
    stream=True,
    timeout=60
) as r:
    r.raise_for_status()
    for line in r.iter_lines(decode_unicode=True):
        if not line:
            continue
        if line.startswith("data: "):
            chunk = line[6:]
            if chunk == "[DONE]":
                break
            # 解析JSON,提取内容

她在帖子里特意说了一句:“早期token到达的速度很快,一两秒就能看到第一个字。接入CLI工具后感觉明显比GPT快。”

四、工具调用:让AI“动手做事”

DeepSeek最值钱的能力之一,是并行工具调用

AG2的文档里给了一个旅游助手的例子:同时让AI查汇率和天气,它会一次性调两个工具,然后整合结果。

@user_proxy.register_for_execution()
@chatbot.register_for_llm(description="Currency exchange calculator.")
def currency_calculator(
    base_amount: float,
    base_currency: str = "USD",
    quote_currency: str = "EUR"
) -> str:
    # 实现汇率换算逻辑
    return f"{quote_amount} {quote_currency}"

那个例子里,用户说“我要去欧洲待一周,预算1000美元”,AI自动去查美元兑欧元汇率,再调天气工具看当地气温,最后给出换多少钱、带什么衣服的建议。

五、Rust版:给追求极致性能的人

如果你用Rust,crates.io上有个ds-api,支持工具定义、流式输出、中断注入。

它的设计挺有意思:用宏定义工具,方法签名自动转成JSON Schema

#[tool]
impl Tool for Search {
    /// Search the web and return results.
    /// query: the search query
    async fn search(&self, query: String) -> Value {
        json!({ "results": format!("results for: {query}") })
    }
}

然后在主循环里消费事件流

while let Some(event) = stream.next().await {
    match event.unwrap() {
        AgentEvent::Token(text) => print!("{text}"),
        AgentEvent::ToolCall(c) => println!("\n[calling {}]", c.name),
        AgentEvent::ToolResult(r) => println!("[result] {}", r.result),
    }
}

GitHub上这个项目的issues区有人问“和Python版本比速度怎么样”,作者回:Rust版在tool call密集场景下快30%左右,但第一次接入的学习曲线陡一点。

六、错误处理:别等崩了才想起来

Dora在WaveSpeedAI的第二篇帖子里专门讲了错误处理。她定义了一个可重试的状态码集合:

RETRIABLE = {408, 409, 425, 429, 500, 502, 503, 504}

加上指数退避:

backoff = 0.5
for i in range(attempts):
    try:
        return await chat_once(client, messages)
    except RuntimeError as e:
        if "Retryable" in str(e) and i < attempts - 1:
            await asyncio.sleep(backoff)
            backoff *= 2
            continue
        raise

她在帖子里补了一句:“429最常见,限流了。加随机jitter(50-150ms)能避免同时重试造成的‘羊群效应’。”

七、Dify集成:10分钟搭个智能客服

华为云有一篇文档专门讲DeepSeek + Dify搭建网站客服。步骤很清晰:

  1. 在华为云“西南-贵阳一”区域部署Dify
  2. 开通DeepSeek预置服务,获取API Key和地址
  3. 在Dify里添加“OpenAI-API-compatible”供应商,填地址和Key
  4. 上传知识库文档,配置提示词

文档里有个截图:Dify后台配置页,填Base URL时要去掉末尾的/chat/completions,只留https://api.modelarts-maas.com。很多人卡在这一步。

配置完后,可以在网页里嵌入一个智能客服,基于企业内部文档回答问题。评论区有人贴了自己公司的落地效果:上线后人工客服咨询量降了60%。

八、Zenlayer的参数说明

Zenlayer的文档把参数解释得最清楚

参数说明
temperature0-2,越大越随机,代码场景建议0.1-0.3
max_tokens单次回复最大token数
presence_penalty-2到2,正值鼓励新话题
frequency_penalty-2到2,正值降低重复

有个做翻译工具的开发者在底下留言:“presence_penalty设0.6,翻译时能避免反复用同一个词,输出流畅很多。”


DeepSeek的API文档散在各处,华为云的、阿里云的、Zenlayer的各讲了一部分。但核心代码就那么几段,上面这些够你跑通90%的场景了。

有人把更完整的Python SDK封装发在了 DeepSeek API 专题里,支持流式、工具调用、异步批量,可以直接拿去改。

文章评分

这篇文章对您有帮助吗?

分享到

微信
朋友圈
QQ
QQ空间
微博
抖音
小红书
复制
二维码

实用功能

夜间模式
小字
大字
收藏
目录
笔记
朗读
相关
搜索
我的笔记
文章内搜索
相关文章推荐
正在加载相关文章...

反馈建议

您需要登录后才能填写意见反馈信息

分享二维码

使用手机扫描二维码

操作成功