DeepSeek批量模型 API 简介
概念解释
批量推理服务通过离线方式进行大规模数据处理,非常适合需要处理大量数据且无需实时获取结果的场景,如:
数据评测、日志分析等。此外,批量推理的计费也低于实时推理,可有效节省资源消耗成本。
本文档中极速体验部分提供了接入代码示例及教程。调用方无需准备任何数据,也无需了解本文档其他部分内容,仅通过三个步骤即可实现一键运行,快速体验到批量推理的效果。
说明
本文档主要针对需要集成HTTP API的技术开发工程师,详细描述DeepSeek批量模型的技术内容。
如果您有与我们商务合作的需求,可以通过以下方式联系我们:
商务邮箱: AIcloud_Business@corp.youdao.com
如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:
客服QQ:1906538062
智云翻译技术交流QQ 1群: 652880659
智云翻译技术交流QQ 2群: 669384425
智云翻译技术交流QQ 3群: 807539209
智云翻译技术交流QQ 4群: 936752411
联系邮箱: zhiyun@corp.youdao.com
温馨提示:
- 本文档主要针对开发人员,接入测试前需要获取
应用ID
和应用密钥
,请按照新手指南 获取。
流程说明
以下为一次批量推理任务的标准处理流程:
输入文件
输入文件是一个jsonl格式的文件(即每行都是一个json格式的数据),有如下特点:
- 每行代表1个对模型的请求,每个请求间互相独立。
- 单个批量推理任务最大允许5000个请求,即5000行。
输入行结构
输入文件中每行是一个独立请求,其结构如下:
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
custom_id | string | 必须 | 该请求的标记,用以与完成后的结果对应 | custom_id需在其所在的输入文件中全局唯一,不可重复。 | |
body | string | 必须 | 调底层模型的入参,支持的参数可参考模型调用接口文档 | 不支持设置model参数,系统会根据创建任务接口的参数自动设置。所有请求需使用同一模型。不支持设置stream, stream_options参数。 |
输入文件示例
{"custom_id":"1","body":{"messages":[{"role":"user","content":"默写静夜思"}],"temperature":1}}
{"custom_id":"2","body":{"messages":[{"role":"user","content":"世界上面积最大的国家是哪个"}],"temperature":1}}
输出文件
批量推理的请求允许部分成功。比如输入文件有100个请求,可能80个成功,20个失败。
任务结束后,输出文件分为结果文件及错误文件:处理成功的请求会保存在结果文件中,处理失败的请求则会保存在错误文件中,请求通过custom_id与输入文件一一对应。
结果文件
结果文件行结构
名称 | 类型 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|
custom_id | string | 该请求的标记,用以与输入的请求对应 | ||
id | string | 该请求调底层模型的处理id | ||
error | string | 错误原因 | ||
response | string | 请求响应结果 | ||
response.body | object | 调底层模型的返回结果 | 结果完全兼容OpenAI SDK,可参考火山引擎的文本对话API文档的非流式返回结构:对话(Chat) API-响应 | |
response.requestId | string | 该次调模型请求的请求ID | ||
response.statusCode | int | 请求的响应状态码 |
结果文件示例(为方便阅读,已通过json formatter调整缩进等格式):
{
"custom_id":"1",
"id":"INFER_db931ae0-0b11-4e7a-bbdb-3a92d6890f0f",
"response":{
"body":{
"choices":[
{
"finish_reason":"stop",
"index":0,
"message":{
"content":"\n\n《静夜思》\n床前明月光,疑是地上霜。\n举头望明月,低头思故乡。\n\n注:此版本是明代刊行的通行版本(收录于《唐诗三百首》等经典选本),与宋代文献记载的早期版本(「床前看月光,疑是地上霜。举头望山月,低头思故乡」)存在细微差异。两种版本均广为流传,体现了古诗词在传播过程中的文字流变现象。",
"reasoning_content":"好的,用户让我默写李白的《静夜思》。首先,我需要确认这首诗的内容是否正确。这首诗是五言绝句,共有四句。第一句“床前明月光”没问题,但要注意有些版本是“床前看月光”或者“床前明月光”。第二句“疑是地上霜”通常不会有问题。第三句和第四句,有些版本是“举头望明月,低头思故乡”,而有些可能是“举头望山月”。这里需要判断用户希望得到哪种版本。李白的诗在流传过程中可能有不同的版本,所以得考虑最常见的那个。现在的教材大多用“举头望明月”这个版本,可能更符合现代人的记忆。为了确保正确,可以回忆一下权威出版物或者教材里的版本,比如人教版语文课本用的是哪个。如果用户是学生,可能需要准确的课本内容。另外,用户可能没有其他复杂的需求,只是单纯想默写,所以直接给出正确的诗句即可,不需要额外解释,但最好注明可能存在版本差异,以免引起误解。最后检查每个字的正确性,比如“疑是地上霜”的“疑”字不要写成“凝”,“举头”不要写成“抬头”。确保无误后就可以回复了。\n",
"role":"assistant"
}
}
],
"created":1753147220,
"id":"chatcmpl-3afe7fcadcad4af7a30b52a3ee1ec2d0",
"model":"deepseek_r1",
"object":"chat.completion",
"usage":{
"completion_tokens":352,
"completion_tokens_details":{
"reasoning_tokens":253
},
"prompt_tokens":5,
"prompt_tokens_details":{
"cached_tokens":0
},
"total_tokens":357
}
},
"request_id":"INFER_db931ae0-0b11-4e7a-bbdb-3a92d6890f0f",
"status_code":0
}
}
{
"custom_id":"2",
"id":"INFER_dd4a6320-8408-4cc7-91f4-17f117e297f6",
"response":{
"body":{
"choices":[
{
"finish_reason":"stop",
"index":0,
"message":{
"content":"\n\n世界上面积最大的国家是 **俄罗斯联邦**(简称俄罗斯)。 \n其国土总面积约为 **1712.5万平方公里**(CIA《世界概况》数据),横跨欧亚大陆,覆盖了全球约八分之一的陆地面积,远超第二大国加拿大(约998万平方公里)。俄罗斯的领土包括广阔的平原、山脉、森林、河流(如伏尔加河和勒拿河)以及丰富的自然资源。\n\n**补充说明**: \n- 领土争议或计算标准(如是否包含水域)可能导致数据细微差异,但俄罗斯的领先地位无争议。 \n- 若单算陆地面积,中国(约960万平方公里)和俄罗斯的排名不变。",
"reasoning_content":"嗯,用户问世界上面积最大的国家是哪个。这个问题看起来简单,但其实需要确认几个点。首先,我需要确定是用哪个标准来衡量面积,是总面积还是陆地面积?一般来说,提到国家面积时通常指的是总面积,包括陆地和水域,比如湖泊、河流等。俄罗斯作为最大的国家,领土横跨欧亚两大洲,面积超过1700万平方公里,应该是正确答案。不过,我是不是应该考虑一些特殊情况,比如争议地区?比如南极洲虽然有一些国家宣称拥有主权,但根据《南极条约》,这些主张被冻结了,所以不算。另外,俄罗斯的面积数据是否有变动?需要确认最新的数据来源是否支持。另外,加拿大的面积也很大,但通常是排第二,之后是中国、美国等。用户可能想确认这个排序是否准确。用户没有提到其他因素,比如人口或者经济,所以专注于地理面积。此外,是否可能有某些资料有不同的数据,比如是否将某些区域算入国家面积,比如领海或专属经济区?不过一般国家面积统计以陆地面积为主。我需要确认标准的数据来源,例如CIA世界概况或者其他权威机构的数据。考虑到这些因素,答案应该是俄罗斯。不过,要确保不会有拼写错误或者国家名称的错误,比如苏联已经解体,现在是俄罗斯。还有可能,用户可能混淆了面积最大的国家和人口最多的国家,但问题明确问的是面积。所以综合来看,俄罗斯是正确的回答,但需要简洁明确地指出。\n",
"role":"assistant"
}
}
],
"created":1753147220,
"id":"chatcmpl-7cf25a6debb14fa482b809a7b33a6534",
"model":"deepseek_r1",
"object":"chat.completion",
"usage":{
"completion_tokens":440,
"completion_tokens_details":{
"reasoning_tokens":297
},
"prompt_tokens":6,
"prompt_tokens_details":{
"cached_tokens":0
},
"total_tokens":446
}
},
"request_id":"INFER_dd4a6320-8408-4cc7-91f4-17f117e297f6",
"status_code":0
}
}
错误文件
结构同结果文件
错误文件示例:
{
"custom_id":"50",
"error":"Auth fail:invalid apiKey",
"id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580",
"response":{
"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580",
"status_code":90103
}
}
接口调用参数
创建批量推理任务
请求方式:POST
接口地址:https://openapi.youdao.com/llmgateway/batchInfer/createTask
请求参数
- Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json | |
Authorization | Bearer ${api_key} | 是 | 在智云控制台申请 | token鉴权 |
- Body
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
CompletionWindow | string | 必须 | 任务过期时间。超过过期时间后,未执行的请求会被取消。已执行的请求结果会被保存。 | 取值范围:24h ~ 144h | |
ModelRefernce | object | 必须 | 任务使用的模型: | { "FoundationModel":{ "Name":"deepseek-r1", "ModelVersion":"250120" } } | |
InputFileLocation | String | 必须 | 输入文件url |
- Body示例
{
"CompletionWindow":"36h",
"ModelReference":{
"FoundationModel":{
"Name":"deepseek-r1",
"ModelVersion":"250120"
}
},
"InputFileLocation":"[www.demo.com](http://www.demo.com)"
}
- 返回结果
正常返回
示例
{
"code":0,
"msg":"SUCCESS",
"data":{
"Id":"BATCH_xxx"
},
"request_id":"f1972786-7e27-4df7-ad23-3456d354a207"
}
查询批量推理任务
请求方式:POST
接口地址:https://openapi.youdao.com/llmgateway/batchInfer/getTask
请求参数
- Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json | |
Authorization | Bearer ${api_key} | 是 | 在智云控制台申请 | token鉴权 |
- Body
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
Id | string | 必须 | 要查询的任务ID |
- Body示例
{ "Id" : "BATCH_3bee2339-2b18-4ccc-affe-0d6b4835766e" }
- 返回结果
正常返回
示例
{
"code": 0,
"msg": "SUCCESS",
"data": {
"Id": "BATCH_d2762f2d-9fce-4a01-b6a8-187a5722d555",
"CompletionWindow": "24h",
"ModelReference": {
"FoundationModel": {
"Name": "deepseek-v3",
"ModelVersion": "250324"
}
},
"InputFileLocation": "www.demo-input.com",
"OutputFileLocation": "www.demo-output.com",
"ErrorFileLocation": "www.demo-error.com",
"Status": {
"Phase": "Completed",
"Code": null,
"Message": null
},
"RequestCounts": {
"Total": 2,
"Completed": 2,
"Failed": 0
}
},
"request_id": "f57c5523-bf4f-40a9-9cda-43a05337e333"
}
- 任务状态列表
状态码 | 名称 | 描述 |
---|---|---|
Initializing | 初始化阶段 | 验证任务输入文件是否符合要求 |
Queued | 排队阶段 | 因资源调度原因,正在排队等待处理 |
Running | 运行阶段 | 任务正在被执行 |
Completed | 已完成阶段 | 所有请求已处理完毕,任务完成 |
Terminating | 终止中阶段 | 由于任务到期或手动终止,任务当前处于终止中状态。 |
Terminated | 已中止阶段 | 任务已中止 |
Failed | 失败阶段 | 由于输入文件不符合要求等原因,任务已失败 |
中止批量推理任务
请求方式:POST
接口地址:https://openapi.youdao.com/llmgateway/batchInfer/terminateTask
请求参数
- Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json | |
Authorization | Bearer ${api_key} | 是 | 在智云控制台申请 | token鉴权 |
- Body
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
Id | string | 必须 | 要中止的任务ID | 部分状态下不可中止(Terminating, Completed, Failed, Terminated) |
- Body示例
{ "Id" : "BATCH_3bee2339-2b18-4ccc-affe-0d6b4835766e" }
返回结果
正常返回 示例
{
"code":0,
"msg":"SUCCESS",
"data":{
"Id":"BATCH_38207071-4825-43b3-8214-fd51daf8f5a4"
},
"request_id":"898f7c1a-dda4-4310-b4fe-4cdfe1421d6d"
获取批量推理任务列表
请求方式:POST
接口路径:https://openapi.youdao.com/llmgateway/api/v1/chat/completions
请求参数
- Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json | |
Authorization | Bearer ${api_key} | 是 | 在智云控制台申请 | token鉴权 |
- Body
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 | |
---|---|---|---|---|---|---|
PageNumber | int | 否 | 1 | 分页查询时的起始页码 | ||
PageSize | int | 否 | 10 | 分页查询时每页显示的记录数,取值:最小值为1, 最大值为100 | ||
SortBy | string | 否 | CreateTime | 指定排序指标,取值: CreateTime为创建时间,UpdateTime为更新时间 | ||
SortOrder | string | 否 | Desc | 指定排序顺序。 取值: Asc为升序排列,Desc为降序排列 |
- Body示例
{
"PageSize" : "1",
"PageNumber" : "2",
"SortBy": "CreateTime",
"SortOrder": "Asc"
}
返回结果
正常返回 示例
{
"code": 0,
"msg": "SUCCESS",
"data": {
"PageNumber": 1,
"PageSize": 2,
"Items": [
{
"Id": "BATCH_3c6ebcbf-8172-4f4f-b30c-b5ca011a06ab",
"CompletionWindow": "32h",
"ModelReference": {
"FoundationModel": {
"Name": "deepseek-r1",
"ModelVersion": "250120"
}
},
"InputFileLocation": "www.demo-input.com",
"OutputFileLocation": "www.demo-output.com",
"ErrorFileLocation": "www.demo-error.com",
"Status": {
"Phase": "Completed",
"Code": null,
"Message": null
},
"RequestCounts": {
"Total": 3,
"Completed": 3,
"Failed": 0
}
},
{
"Id": "BATCH_c6b6fee9-0672-476c-a73b-c490abd20f89",
"CompletionWindow": "32h",
"ModelReference": {
"FoundationModel": {
"Name": "deepseek-r1",
"ModelVersion": "250120"
}
},
"InputFileLocation": "www.demo-input.com",
"OutputFileLocation": "www.demo-output.com",
"ErrorFileLocation": "www.demo-error.com",
"Status": {
"Phase": "Completed",
"Code": null,
"Message": null
},
"RequestCounts": {
"Total": 3,
"Completed": 3,
"Failed": 0
}
}
]
},
"request_id": "aa077336-50e0-4b78-b620-03839dec88d1"
}
极速体验
我们提供了python版本的接入代码,其中封装了整个从上传文件到轮询、下载文件的全流程。调用方可通过仅仅3个步骤,在短短几分钟内快速体验到批量推理的效果。
- 步骤一:安装nos sdk
pip3 install nos-python3-sdk
处理流程中涉及输入文件上传,因此需安装nos sdk,详情参见NOS官方文档
- 步骤二:替换为自己的APIKey
申请APIKey的方法参见下方描述信息
- 步骤三:运行main方法
项目中已准备好样例输入文件,调用方点击运行main方法即可,点击后程序会自动完成上传文件、创建任务、轮询任务、下载结果文件的整套流程。
效果
极速体验模式是让接入方可以快速体验到批量推理的流程及效果。如果要实际使用,接入方可能需要对Demo代码进行一些调整,如修改输入文件、修改轮询次数等等。
这些项已作为配置项置于main方法顶层,接入方准备好自己的输入文件,修改相关配置后即可再次运行并获得结果。
# ---------------------------- 配置区 ---------------------------
CONFIG = {
"base_url": "https://openapi.youdao.com/llmgateway/batchInfer", # 批量推理服务URL
"auth_token": "此处替换为您的APIKey", # 鉴权token,即APIKey,申请方式参见ReadMe文档
"input_file_path": "input_file/sample_input_file.jsonl", # 输入文件路径
"completion_window": "36h", # 任务完成窗口,具体参见接口文档
"model_name": "deepseek-r1", # 模型名称,具体参见接口文档
"model_version": "250120", # 模型版本,具体参见接口文档
"max_retries": 100, # 查询任务状态时的最大轮询次数
"retry_intervals": 30 # 查询任务状态时的最大轮询间隔
}
APIKey获取
创建APPID
- 登录智云控制台
- 控制台:选择自然语言翻译服务-deepseek服务-创建应用-勾选deepseek服务
- 已有APPID:选择已有应用,勾选deepseek服务
获取APIKey
1.点击应用总览-API Key
创建API Key
- 此步骤生成的apikey用于鉴权,替换“接入Demo语言”中的${api_key}变量
模型支持
批量推理任务仅支持自研模型:
模型 | 版本 | 最大上下文长度 | 最大输入长度(token) | 最大输出长度 | 最大思考内容长度 | 刊例价(元/1M token) | 模型名称(Name) | 模型版本(ModelVersion) |
---|---|---|---|---|---|---|---|---|
DeepSeek-R1 | 批量推理 | 64k | 48k | 16k | 16k | 输入:2元 输出:8元 | deepseek-r1 | 250120 |
DeepSeek-V3 | 批量推理 | 64k | 48k | 16k | - | 输入:1元 输出:4元 | deepseek-v3 | 250324 |
错误代码列表
错误码 | 含义 |
---|---|
100101 - 缺少参数错误 | 原因:请求体格式错误 | 解决方法:检查是否参数漏填。| 返回结构示例如下:{"code":100101,"msg":"USER_LACK_MODEL","request_id":"519387c7-c318-4786-b49a-11cbda135527" } |
100102 - 参数填写错误 | 原因:参数或批量推理输入文件填写错误 | 解决方法:检查参数填写是否正确。| 返回结构示例如下:{"code":100102,"msg":"USER_WRONG_MODEL","request_id":"f0396806-4ff3-42dc-87d3-e2bb0d6842f0" } |
100103 - 参数取值错误 | 原因:参数或批量推理输入文件取值范围错误 | 解决方法: 检查参数取值范围是否有误 | 返回结构示例如下:{"code":100103,"msg":"USER_COMPLETION_WINDOW_INVALID","request_id":"b862715c-728d-4df9-a9cb-e07d0f7005fe" } |
100260 - 任务流转失败 | 原因:此错误可能出现在批量推理任务的错误文件中,含义是批量推理任务流转失败 | 解决方法:请联系我们解决 | 返回结构示例如下:{"custom_id":"50","error":"CUR_BATCH_TASK_WRONG_STATUS","id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","response":{"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","status_code":100260} } |
100261 任务输入文件错误 | 原因:此错误可能出现在批量推理任务的错误文件中,含义是处理批量推理任务输入文件失败 | 解决方法:请检查您的输入文件是否符合要求 | 返回结构示例如下:{"custom_id":"50","error":"CUR_DOWNLOAD_INPUT_DATA_ERROR","id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","response":{"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","status_code":100261} } |
100262 ~ 100265 - 任务处理错误 | 原因:此类错误可能出现在批量推理任务的错误文件中, 含义是批量推理任务处理过程异常 | 解决方法:请联系我们解决 | 返回结构示例如下:{"custom_id":"50","error":"CUR_BATCH_TASK_TERMINATE_STAGE_FAILED","id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","response":{"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","status_code":100264} } |
100266 - 任务超时错误 | 原因:此错误可能出现在批量推理任务的错误文件中, 含义是可能因资源不足,或机器重启,导致请求/任务出现超时异常 | 解决方法:可尝试加大过期窗口重试失败请求,若问题一直存在,请联系我们解决 | 返回结构示例如下:{"custom_id":"50","error":"CUR_BATCH_TASK_EXECUTE_OVERTIME","id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","response":{"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","status_code":100266}} |
100267 - 定时任务异常 | 原因:此错误可能出现在批量推理任务的错误文件中, 含义是批量推理定时任务处理失败 | 解决方法:请联系我们解决 | 返回结构示例如下:{"custom_id":"50","error":"CUR_BATCH_TASK_EXPIRE_JOB_ERROR","id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","response":{"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","status_code":100267} } |
90103 - 认证失败 | 原因:此错误可能出现在批量推理任务的错误文件中,APIKey错误、无权限、账户余额不足,认证失败。 | 解决方法:请检查您的APIKey 是否正确,是否在智云控制台开通了deepseek权限,账户余额是否充足 | 返回结构示例如下:{"custom_id":"50","error":"Auth fail:invalid apiKey","id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","response":{"request_id":"INFER_60b7f0f7-8580-450e-b109-466aa0161580","status_code":90103}} |
Demo示例
请下载后使用 Python Demo