大模型服务平台 TokenHub DeepSeek 调用指南

DeepSeek 系列模型已接入大模型服务平台 TokenHub,支持 OpenAI Chat Completions 和 Anthropic 两种协议,开发者无需更换 SDK 即可快速接入。这里说明通用调用示例以及 DeepSeek 特有的思考模式、Function Calling 等核心能力。

相关产品
大模型服务平台 TokenHub 产品页,含版本规格、价格与购买入口。

二、前提条件

·已注册腾讯云账号并开通 TokenHub 服务。

·已在 TokenHub 控制台 获取 API Key。

·已根据所用语言安装对应 SDK 或具备 HTTP 请求能力。

三、支持的模型

TokenHub 当前支持以下 DeepSeek 模型(具体以 模型列表 为准):

模型 ID 类型 思考能力 上下文窗口 最大输入 最大输出
deepseek/deepseek-flash 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek-v4-flash-202605deepseek/deepseek-v4-flash-0731deepseek/deepseek-v4-flash 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek-v4-pro-202606deepseek/deepseek-v4-pro-0813deepseek/deepseek-v4-pro 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek-v4.1-flash-1017 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek-v4.1-flash 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek-v4-pro-0813 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek-v4-pro 通用对话模型 可开关(默认开启) 1M 1M 384K
deepseek/deepseek-v4-flash-vision-exp 多模态理解模型 可开关(默认开启) 1M 1M 384K

注意:说明:

注意:由 DeepSeek 直接提供的模型服务,TokenHub 不对该服务提供 SLA 保障,且 TokenHub 的服务协议不对此模型服务生效。使用即视为你已知晓并同意遵守 DeepSeek 的服务协议,请你在使用前务必仔细阅读相关内容。如不接受上述内容,请立即停止使用。

四、与其他模型的关键差异

维度 DeepSeek V4-Flash / V4-Pro OpenAI / Claude / GLM 等
思考能力开关 通过 thinking.type 参数显式控制 通常通过切换 model 或单独的 reasoning 参数控制
推理过程字段 响应中独立返回 reasoning_content 多数模型不暴露推理过程
OpenAI SDK 访问推理字段 必须用 hasattr / getattr –
temperature 0~2,默认 1,可自由调节 默认可在 0~2 自由调节
max_tokens 推荐值 普通任务 1024~4096;思考模式建议 ≥ 2048 通常 1024~4096 即可
上下文窗口 最高 1M tokens 通常 128K tokens
最大输出 最高 384K tokens 通常 16K tokens
多轮对话 messages 回写 只需回写 content,无需回写 reasoning_content 通常只需回写 content

五、快速开始

以下示例展示最简单的单轮对话调用,请将 YOUR_API_KEY 替换为你创建的 API Key。

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "你好,请介绍一下你自己"} ], "max_tokens": 1024 }'# pip install openaifrom openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=[ {"role": "user", "content": "你好,请介绍一下你自己"} ], max_tokens=1024,)print(response.choices[0].message.content)// npm install openaiimport OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const response = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [ { role: "user", content: "你好,请介绍一下你自己" } ], max_tokens: 1024,});console.log(response.choices[0].message.content);// 使用 OkHttp,添加依赖:implementation("com.squareup.okhttp3:okhttp:4.12.0")import okhttp3.*;import org.json.*;OkHttpClient httpClient = new OkHttpClient();JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("max_tokens", 1024);JSONArray messages = new JSONArray();JSONObject userMsg = new JSONObject();userMsg.put("role", "user");userMsg.put("content", "你好,请介绍一下你自己");messages.put(userMsg);body.put("messages", messages);Request request = new Request.Builder() .url("https://tokenhub.tencentmaas.com/v1/chat/completions") .addHeader("Authorization", "Bearer YOUR_API_KEY") .addHeader("Content-Type", "application/json") .post(RequestBody.create(body.toString(), MediaType.get("application/json"))) .build();try (Response response = httpClient.newCall(request).execute()) { JSONObject result = new JSONObject(response.body().string()); System.out.println(result.getJSONArray("choices") .getJSONObject(0).getJSONObject("message").getString("content"));}"package mainimport ( "bytes" "encoding/json" "fmt" "io" "net/http")func main() { body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "messages": []map[string]string{ {"role": "user", "content": "你好,请介绍一下你自己"}, }, "max_tokens": 1024, } data, _ := json.Marshal(body) req, _ := http.NewRequest("POST", "https://tokenhub.tencentmaas.com/v1/chat/completions", bytes.NewBuffer(data)) req.Header.Set("Authorization", "Bearer YOUR_API_KEY") req.Header.Set("Content-Type", "application/json") resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() respBody, _ := io.ReadAll(resp.Body) var result map[string]interface{} json.Unmarshal(respBody, &result) choices := result["choices"].([]interface{}) msg := choices[0].(map[string]interface{})["message"].(map[string]interface{}) fmt.Println(msg["content"])}

七、基础对话

发送单轮对话请求,获取模型回复。

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "介绍一下大语言模型"} ], "max_tokens": 1024, "thinking": {"type": "disabled"} }'"from openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=[ {"role": "user", "content": "介绍一下大语言模型"} ], max_tokens=1024, extra_body={"thinking": {"type": "disabled"}}, # 关闭思考模式,减少 token 消耗)print(response.choices[0].message.content)import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const response = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [ { role: "user", content: "介绍一下大语言模型" } ], max_tokens: 1024, // @ts-ignore – thinking 为 DeepSeek 扩展字段 thinking: { type: "disabled" },});console.log(response.choices[0].message.content);import okhttp3.*;import org.json.*;OkHttpClient httpClient = new OkHttpClient();JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("max_tokens", 1024);JSONArray messages = new JSONArray();JSONObject userMsg = new JSONObject();userMsg.put("role", "user");userMsg.put("content", "介绍一下大语言模型");messages.put(userMsg);body.put("messages", messages);JSONObject thinking = new JSONObject();thinking.put("type", "disabled");body.put("thinking", thinking);Request request = new Request.Builder() .url("https://tokenhub.tencentmaas.com/v1/chat/completions") .addHeader("Authorization", "Bearer YOUR_API_KEY") .addHeader("Content-Type", "application/json") .post(RequestBody.create(body.toString(), MediaType.get("application/json"))) .build();try (Response response = httpClient.newCall(request).execute()) { JSONObject result = new JSONObject(response.body().string()); System.out.println(result.getJSONArray("choices") .getJSONObject(0).getJSONObject("message").getString("content"));}body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "messages": []map[string]string{ {"role": "user", "content": "介绍一下大语言模型"}, }, "max_tokens": 1024, "thinking": map[string]string{"type": "disabled"},}// … 其余请求代码同快速开始示例

八、流式输出

将 stream 设置为 true 开启 SSE 流式输出,适合长文本生成场景,可有效避免超时,改善用户体验。

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "写一首关于春天的短诗"} ], "max_tokens": 512, "stream": true, "thinking": {"type": "disabled"} }'from openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)stream = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=[ {"role": "user", "content": "写一首关于春天的短诗"} ], max_tokens=512, stream=True, extra_body={"thinking": {"type": "disabled"}},)for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const stream = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [ { role: "user", content: "写一首关于春天的短诗" } ], max_tokens: 512, stream: true, // @ts-ignore thinking: { type: "disabled" },});for await (const chunk of stream) { const content = chunk.choices[0]?.delta?.content; if (content) process.stdout.write(content);}// 流式输出建议使用 OkHttp EventSourceimport okhttp3.*;import okhttp3.sse.*;import org.json.*;OkHttpClient httpClient = new OkHttpClient();JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("max_tokens", 512);body.put("stream", true);JSONArray messages = new JSONArray();JSONObject msg = new JSONObject();msg.put("role", "user");msg.put("content", "写一首关于春天的短诗");messages.put(msg);body.put("messages", messages);body.put("thinking", new JSONObject().put("type", "disabled"));Request request = new Request.Builder() .url("https://tokenhub.tencentmaas.com/v1/chat/completions") .addHeader("Authorization", "Bearer YOUR_API_KEY") .addHeader("Content-Type", "application/json") .post(RequestBody.create(body.toString(), MediaType.get("application/json"))) .build();EventSources.createFactory(httpClient).newEventSource(request, new EventSourceListener() { @Override public void onEvent(EventSource source, String id, String type, String data) { if ("[DONE]".equals(data)) return; try { JSONObject json = new JSONObject(data); String content = json.getJSONArray("choices").getJSONObject(0) .getJSONObject("delta").optString("content", ""); if (!content.isEmpty()) System.out.print(content); } catch (JSONException ignored) {} }});import ( "bufio" "bytes" "encoding/json" "fmt" "net/http" "strings")body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "messages": []map[string]string{{"role": "user", "content": "写一首关于春天的短诗"}}, "max_tokens": 512, "stream": true, "thinking": map[string]string{"type": "disabled"},}data, _ := json.Marshal(body)req, _ := http.NewRequest("POST", "https://tokenhub.tencentmaas.com/v1/chat/completions", bytes.NewBuffer(data))req.Header.Set("Authorization", "Bearer YOUR_API_KEY")req.Header.Set("Content-Type", "application/json")resp, _ := http.DefaultClient.Do(req)defer resp.Body.Close()scanner := bufio.NewScanner(resp.Body)for scanner.Scan() { line := scanner.Text() if !strings.HasPrefix(line, "data: ") || line == "data: [DONE]" { continue } var chunk map[string]interface{} json.Unmarshal([]byte(strings.TrimPrefix(line, "data: ")), &chunk) choices := chunk["choices"].([]interface{}) delta := choices[0].(map[string]interface{})["delta"].(map[string]interface{}) if content, ok := delta["content"].(string); ok { fmt.Print(content) }}

九、System Prompt

通过 system 角色消息设置模型的行为指令和背景信息。

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "system", "content": "你是一位专业的 Python 编程助手,只回答与 Python 相关的问题,回答简洁明了。"}, {"role": "user", "content": "如何读取一个 CSV 文件?"} ], "max_tokens": 512, "thinking": {"type": "disabled"} }'from openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)response = client.chat.completions.create( model=deepseek-v4.1-flash-1017, messages=[ { "role": "system", "content": "你是一位专业的 Python 编程助手,只回答与 Python 相关的问题,回答简洁明了。", }, {"role": "user", "content": "如何读取一个 CSV 文件?"}, ], max_tokens=512, extra_body={"thinking": {"type": "disabled"}},)print(response.choices[0].message.content)import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const response = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [ { role: "system", content: "你是一位专业的 Python 编程助手,只回答与 Python 相关的问题,回答简洁明了。", }, { role: "user", content: "如何读取一个 CSV 文件?" }, ], max_tokens: 512, // @ts-ignore thinking: { type: "disabled" },});console.log(response.choices[0].message.content);JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("max_tokens", 512);body.put("thinking", new JSONObject().put("type", "disabled"));JSONArray messages = new JSONArray();messages.put(new JSONObject().put("role", "system") .put("content", "你是一位专业的 Python 编程助手,只回答与 Python 相关的问题,回答简洁明了。"));messages.put(new JSONObject().put("role", "user") .put("content", "如何读取一个 CSV 文件?"));body.put("messages", messages);// … 发送请求代码同上body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "messages": []map[string]string{ {"role": "system", "content": "你是一位专业的 Python 编程助手,只回答与 Python 相关的问题,回答简洁明了。"}, {"role": "user", "content": "如何读取一个 CSV 文件?"}, }, "max_tokens": 512, "thinking": map[string]string{"type": "disabled"},}// … 发送请求代码同快速开始

十、多轮对话

将历史消息一并传入 messages 数组,即可实现上下文记忆的多轮对话。

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "我叫小明,我喜欢打篮球"}, {"role": "assistant", "content": "你好,小明!打篮球是一项很棒的运动。"}, {"role": "user", "content": "你还记得我的名字和爱好吗?"} ], "max_tokens": 256, "thinking": {"type": "disabled"} }'from openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)# 维护对话历史conversation = [ {"role": "system", "content": "你是一个友好的 AI 助手。"},]def chat(user_input): conversation.append({"role": "user", "content": user_input}) response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=conversation, max_tokens=1024, extra_body={"thinking": {"type": "disabled"}}, ) reply = response.choices[0].message.content conversation.append({"role": "assistant", "content": reply}) return replyprint(chat("我叫小明,我喜欢打篮球"))print(chat("你还记得我的名字和爱好吗?"))import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const conversation = [ { role: "system", content: "你是一个友好的 AI 助手。" },];async function chat(userInput) { conversation.push({ role: "user", content: userInput }); const response = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: conversation, max_tokens: 1024, // @ts-ignore thinking: { type: "disabled" }, }); const reply = response.choices[0].message.content; conversation.push({ role: "assistant", content: reply }); return reply;}console.log(await chat("我叫小明,我喜欢打篮球"));console.log(await chat("你还记得我的名字和爱好吗?"));// 多轮对话核心:将 messages 数组累积传入JSONArray messages = new JSONArray();messages.put(new JSONObject().put("role", "system").put("content", "你是一个友好的 AI 助手。"));messages.put(new JSONObject().put("role", "user").put("content", "我叫小明,我喜欢打篮球"));messages.put(new JSONObject().put("role", "assistant").put("content", "你好,小明!打篮球是一项很棒的运动。"));messages.put(new JSONObject().put("role", "user").put("content", "你还记得我的名字和爱好吗?"));JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("messages", messages);body.put("max_tokens", 1024);body.put("thinking", new JSONObject().put("type", "disabled"));// … 发送请求代码同上body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "messages": []map[string]string{ {"role": "system", "content": "你是一个友好的 AI 助手。"}, {"role": "user", "content": "我叫小明,我喜欢打篮球"}, {"role": "assistant", "content": "你好,小明!打篮球是一项很棒的运动。"}, {"role": "user", "content": "你还记得我的名字和爱好吗?"}, }, "max_tokens": 1024, "thinking": map[string]string{"type": "disabled"},}// … 发送请求代码同快速开始

十一、Function Calling(工具调用)

Function Calling 允许模型调用外部工具获取实时数据。模型本身不执行函数,而是返回应调用的函数名和参数,由用户代码执行后将结果传回模型,最终得到自然语言回答。

调用流程:

1. 用户提问 → 模型返回 tool_calls(包含函数名和参数)。

2. 用户代码执行该函数 → 将结果以 role: tool 消息传回。

3. 模型根据函数结果生成最终自然语言回答。

cURLPythonNode.jsJavaGo# 第一轮:发送问题 + 工具定义curl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "北京今天天气怎么样?"} ], "tools": [{ "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称,如北京"} }, "required": ["city"] } } }], "thinking": {"type": "disabled"} }'# 第二轮:将工具执行结果传回(tool_call_id 替换为实际返回的 id)curl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "北京今天天气怎么样?"}, {"role": "assistant", "tool_calls": [{"id": "call_xxx", "type": "function", "function": {"name": "get_weather", "arguments": "{\\"city\\": \\"北京\\"}"}}]}, {"role": "tool", "tool_call_id": "call_xxx", "content": "晴,气温28℃,湿度50%"} ], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "获取指定城市的天气信息", "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}}}], "thinking": {"type": "disabled"} }'from openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)# 定义工具tools = [ { "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称,如北京"} }, "required": ["city"], }, }, }]# 第一轮:发送问题messages = [{"role": "user", "content": "北京今天天气怎么样?"}]response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=messages, tools=tools, extra_body={"thinking": {"type": "disabled"}},)assistant_message = response.choices[0].message# 模型发起工具调用if response.choices[0].finish_reason == "tool_calls": tool_call = assistant_message.tool_calls[0] print(f"模型调用工具:{tool_call.function.name},参数:{tool_call.function.arguments}") # 执行工具(此处为模拟返回) tool_result = "晴,气温28℃,湿度50%" # 第二轮:将工具结果传回模型 messages.append(assistant_message) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": tool_result, }) final_response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=messages, tools=tools, extra_body={"thinking": {"type": "disabled"}}, ) print(final_response.choices[0].message.content)import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const tools = [ { type: "function", function: { name: "get_weather", description: "获取指定城市的天气信息", parameters: { type: "object", properties: { city: { type: "string", description: "城市名称,如北京" }, }, required: ["city"], }, }, },];// 第一轮const messages = [{ role: "user", content: "北京今天天气怎么样?" }];const response1 = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages, tools, // @ts-ignore thinking: { type: "disabled" },});const assistantMsg = response1.choices[0].message;if (response1.choices[0].finish_reason === "tool_calls") { const toolCall = assistantMsg.tool_calls[0]; console.log(`工具调用:${toolCall.function.name},参数:${toolCall.function.arguments}`); const toolResult = "晴,气温28℃,湿度50%"; messages.push(assistantMsg); messages.push({ role: "tool", tool_call_id: toolCall.id, content: toolResult }); const response2 = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages, tools, // @ts-ignore thinking: { type: "disabled" }, }); console.log(response2.choices[0].message.content);}JSONObject toolFunc = new JSONObject() .put("name", "get_weather") .put("description", "获取指定城市的天气信息") .put("parameters", new JSONObject() .put("type", "object") .put("properties", new JSONObject() .put("city", new JSONObject().put("type", "string").put("description", "城市名称"))) .put("required", new JSONArray().put("city")));JSONArray tools = new JSONArray() .put(new JSONObject().put("type", "function").put("function", toolFunc));JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("messages", new JSONArray().put(new JSONObject().put("role", "user").put("content", "北京今天天气怎么样?")));body.put("tools", tools);body.put("thinking", new JSONObject().put("type", "disabled"));// … 发送请求,解析 tool_calls,执行工具,构造第二轮请求body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "messages": []map[string]string{ {"role": "user", "content": "北京今天天气怎么样?"}, }, "tools": []map[string]interface{}{{ "type": "function", "function": map[string]interface{}{ "name": "get_weather", "description": "获取指定城市的天气信息", "parameters": map[string]interface{}{ "type": "object", "properties": map[string]interface{}{ "city": map[string]string{"type": "string", "description": "城市名称"}, }, "required": []string{"city"}, }, }, }}, "thinking": map[string]string{"type": "disabled"},}// … 发送请求,解析 tool_calls,构造第二轮请求

十二、思考模式

DeepSeek 模型支持通过 thinking 参数控制是否开启推理思考模式,无需切换模型 ID。开启思考模式后,模型会先进行内部推理再给出最终答案,适合需要精确推理的复杂任务。

十三、thinking 参数说明

字段 类型 默认值 取值范围 说明
type string "enabled" "enabled" / "disabled" 控制思考模式开关

十四、思考深度(reasoning_effort)

reasoning_effort 是请求顶层参数,与 thinking 平级,用于控制模型的推理强度,便于在效果与延迟之间灵活权衡。

取值 说明
"low" 轻度推理。适合简单任务、快速响应场景。
"high" 增强推理(默认值)。适合常规推理、代码生成等场景。
"max" 深度推理。适合复杂推理、长程任务、深度代码分析等场景。

出于兼容考虑,medium、xhigh 会映射为 high。

reasoning_effort 不是 OpenAI 标准字段。使用 OpenAI SDK 时需通过 SDK 提供的额外字段机制(Python 用 extra_body、Node.js 直接传字段);HTTP 直接调用时放在请求体顶层。示例如下:

十五、开启或关闭思考

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "user", "content": "解方程 x^2 – 5x + 6 = 0"} ], "max_tokens": 2048, "reasoning_effort": "high", "thinking": {"type": "enabled"} }'from openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=[{"role": "user", "content": "解方程 x^2 – 5x + 6 = 0"}], max_tokens=2048, extra_body={"thinking": {"type": "enabled"}}, reasoning_effort="high",)msg = response.choices[0].message# 获取推理过程(思考模式专属字段)reasoning = getattr(msg, "reasoning_content", None)if reasoning: print("=== 推理过程 ===") print(reasoning)print("=== 最终答案 ===")print(msg.content)import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const response = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [{ role: "user", content: "解方程 x^2 – 5x + 6 = 0" }], max_tokens: 2048, // @ts-ignore thinking: { type: "enabled" }, reasoning_effort: "high",});const msg = response.choices[0].message;const reasoning = (msg as any).reasoning_content;if (reasoning) { console.log("=== 推理过程 ==="); console.log(reasoning);}console.log("=== 最终答案 ===");console.log(msg.content);JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("max_tokens", 2048);body.put("messages", new JSONArray() .put(new JSONObject().put("role", "user").put("content", "解方程 x^2 – 5x + 6 = 0")));body.put("thinking", new JSONObject().put("type", "enabled"));body.put("reasoning_effort", "high");// … 发送请求try (Response response = httpClient.newCall(request).execute()) { JSONObject result = new JSONObject(response.body().string()); JSONObject message = result.getJSONArray("choices") .getJSONObject(0).getJSONObject("message"); String reasoning = message.optString("reasoning_content", ""); String content = message.getString("content"); System.out.println("推理过程: " + reasoning); System.out.println("最终答案: " + content);}body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "max_tokens": 2048, "messages": []map[string]string{ {"role": "user", "content": "解方程 x^2 – 5x + 6 = 0"}, }, "thinking": map[string]string{"type": "enabled"}, "reasoning_effort": "high",}// … 发送请求,从响应中解析 reasoning_content 和 content 字段

十六、响应结构示例

开启思考模式后,响应的 message 中会包含 reasoning_content 字段:

{ "choices": [{ "message": { "role": "assistant", "reasoning_content": "我需要解二次方程 x^2 – 5x + 6 = 0。\\n因式分解:(x-2)(x-3) = 0\\n所以 x = 2 或 x = 3。", "content": "方程 x² – 5x + 6 = 0 的解为:**x = 2** 或 **x = 3**" }, "finish_reason": "stop" }], "usage": { "completion_tokens": 120, "completion_tokens_details": { "reasoning_tokens": 80 } }}

十七、流式思考输出

开启流式输出时,reasoning_content 和 content 均以增量 delta 形式返回,需分别处理:

PythonNode.jsfrom openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)stream = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=[{"role": "user", "content": "分析一下量子计算的优势和挑战"}], max_tokens=2048, stream=True, extra_body={"thinking": {"type": "enabled"}},)print("=== 推理过程(实时)===")answer_started = Falsefor chunk in stream: if not chunk.choices: continue delta = chunk.choices[0].delta reasoning_delta = getattr(delta, "reasoning_content", None) if reasoning_delta: print(reasoning_delta, end="", flush=True) if delta.content: if not answer_started: print("\\n\\n=== 最终答案(实时)===") answer_started = True print(delta.content, end="", flush=True)import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const stream = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [{ role: "user", content: "分析一下量子计算的优势和挑战" }], max_tokens: 2048, stream: true, // @ts-ignore thinking: { type: "enabled" },});let answerStarted = false;process.stdout.write("=== 推理过程(实时)===\\n");for await (const chunk of stream) { const delta = chunk.choices[0]?.delta; if (!delta) continue; const reasoning = (delta as any).reasoning_content; if (reasoning) process.stdout.write(reasoning); if (delta.content) { if (!answerStarted) { process.stdout.write("\\n\\n=== 最终答案(实时)===\\n"); answerStarted = true; } process.stdout.write(delta.content); }}

十八、多轮对话中使用思考模式

在多轮对话中,无需将上一轮的 reasoning_content 回传给模型,只需回传 content 字段即可。

Pythonfrom openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)messages = [{"role": "user", "content": "斐波那契数列的第10项是多少?"}]response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=messages, max_tokens=1024, extra_body={"thinking": {"type": "enabled"}},)assistant_msg = response.choices[0].messageprint("第一轮回答:", assistant_msg.content)# 多轮对话:只回传 content,不回传 reasoning_contentmessages.append({"role": "assistant", "content": assistant_msg.content})messages.append({"role": "user", "content": "那第20项呢?"})response2 = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=messages, max_tokens=1024, extra_body={"thinking": {"type": "enabled"}},)print("第二轮回答:", response2.choices[0].message.content)

注意:说明:

注意:多轮对话回写 assistant 消息时,只需将 content 字段传入,无需传入 reasoning_content。

十九、JSON 模式

设置 response_format 为 json_object 可以确保模型输出合法的 JSON 字符串,适合需要结构化数据的场景。

注意:使用 JSON 模式时,必须在 system 或 user 消息中明确要求模型输出 JSON 格式,否则可能导致模型一直输出空内容。

cURLPythonNode.jsJavaGocurl https://tokenhub.tencentmaas.com/v1/chat/completions \\ -H "Content-Type: application/json" \\ -H "Authorization: Bearer YOUR_API_KEY" \\ -d '{ "model": "deepseek-v4.1-flash-1017", "messages": [ {"role": "system", "content": "请以 JSON 格式返回结果。"}, {"role": "user", "content": "返回三座中国城市的信息,每个包含 name、province、population 字段"} ], "max_tokens": 512, "response_format": {"type": "json_object"}, "thinking": {"type": "disabled"} }'import jsonfrom openai import OpenAIclient = OpenAI( api_key="YOUR_API_KEY", base_url="https://tokenhub.tencentmaas.com/v1",)response = client.chat.completions.create( model="deepseek-v4.1-flash-1017", messages=[ {"role": "system", "content": "请以 JSON 格式返回结果。"}, { "role": "user", "content": "返回三座中国城市的信息,每个包含 name、province、population 字段", }, ], max_tokens=512, response_format={"type": "json_object"}, extra_body={"thinking": {"type": "disabled"}},)result = json.loads(response.choices[0].message.content)print(json.dumps(result, ensure_ascii=False, indent=2))import OpenAI from "openai";const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://tokenhub.tencentmaas.com/v1",});const response = await client.chat.completions.create({ model: "deepseek-v4.1-flash-1017", messages: [ { role: "system", content: "请以 JSON 格式返回结果。" }, { role: "user", content: "返回三座中国城市的信息,每个包含 name、province、population 字段", }, ], max_tokens: 512, response_format: { type: "json_object" }, // @ts-ignore thinking: { type: "disabled" },});const result = JSON.parse(response.choices[0].message.content);console.log(JSON.stringify(result, null, 2));JSONObject body = new JSONObject();body.put("model", "deepseek-v4.1-flash-1017");body.put("max_tokens", 512);body.put("response_format", new JSONObject().put("type", "json_object"));body.put("thinking", new JSONObject().put("type", "disabled"));body.put("messages", new JSONArray() .put(new JSONObject().put("role", "system").put("content", "请以 JSON 格式返回结果。")) .put(new JSONObject().put("role", "user").put("content", "返回三座中国城市的信息,每个包含 name、province、population 字段")));// … 发送请求,解析返回的 JSON 字符串body := map[string]interface{}{ "model": "deepseek-v4.1-flash-1017", "max_tokens": 512, "response_format": map[string]string{"type": "json_object"}, "thinking": map[string]string{"type": "disabled"}, "messages": []map[string]string{ {"role": "system", "content": "请以 JSON 格式返回结果。"}, {"role": "user", "content": "返回三座中国城市的信息,每个包含 name、province、population 字段"}, },}// … 发送请求

20、联网搜索

DeepSeek 原厂直供模型支持服务端联网搜索能力。开启后,模型在回答时可自动调用联网搜索工具获取实时网络信息,解决模型知识时效性不足的问题,适合新闻资讯、时事查询、公开资料检索等场景。联网搜索过程由模型在服务端自主完成:模型自行判断是否需要搜索、生成搜索词、阅读搜索结果,必要时打开网页读取正文,并在多轮搜索后生成带来源链接的回答。

联网搜索无需在控制台开通服务,通过对话接口的 tools 参数即可开启。DeepSeek 已面向 Agent 与 RAG 场景提供独立的 Search / Fetch API(按 query 搜索网页、按 URL 抓取网页正文),TokenHub 当前暂未开放该独立端点,仅支持通过对话接口的 tools 参数使用联网搜索;也不支持通过 OpenAI Chat Completions API 的 tools 参数为原厂直供模型开启联网搜索。

注意:联网搜索按次计费说明:

21、支持的模型与协议

模型名称 模型 ID Anthropic Messages API OpenAI Responses API
DeepSeek-V4.1-Flash-1017(原厂直供) deepseek/deepseek-flash 支持 不支持
DeepSeek-V4-Flash 0731 正式版(原厂直供) deepseek-v4-flash-202605、deepseek/deepseek-v4-flash-0731、deepseek/deepseek-v4-flash 支持 不支持
DeepSeek-V4-Pro 0813 正式版(原厂直供) deepseek-v4-pro-202606、deepseek/deepseek-v4-pro-0813、deepseek/deepseek-v4-pro 支持 支持
DeepSeek-V4-Flash-Vision-Exp(原厂直供) deepseek/deepseek-v4-flash-vision-exp 支持 不支持

22、使用方式

Anthropic Messages API 与 OpenAI Responses API 的基础调用参数(Base URL、鉴权方式、通用请求参数)请参见 语言模型调用概览。使用联网搜索时,仅需在请求体中增加 tools 字段,两个协议的工具写法不同:

协议 端点 工具写法
Anthropic Messages API /v1/messages {"type": "web_search_20250305", "name": "web_search"}
OpenAI Responses API /v1/responses {"type": "web_search"}

Anthropic Messages API 请求示例:

cURLcurl -X POST 'https://tokenhub.tencentmaas.com/v1/messages' \\ -H 'x-api-key: YOUR_API_KEY' \\ -H 'anthropic-version: 2023-06-01' \\ -H 'Content-Type: application/json' \\ -d '{ "model": "deepseek/deepseek-flash", "max_tokens": 4096, "messages": [ { "role": "user", "content": "最近一周有哪些重要的 AI 行业新闻?请附来源链接。" } ], "tools": [ { "type": "web_search_20250305", "name": "web_search" } ] }'

OpenAI Responses API 请求示例(仅 DeepSeek-V4-Pro 系列模型支持):

cURLcurl -X POST 'https://tokenhub.tencentmaas.com/v1/responses' \\ -H 'Authorization: Bearer YOUR_API_KEY' \\ -H 'Content-Type: application/json' \\ -d '{ "model": "deepseek-v4-pro-202606", "input": "最近一周有哪些重要的 AI 行业新闻?请附来源链接。", "tools": [ { "type": "web_search" } ] }'

23、响应结构

开启联网搜索后,可通过响应中的搜索调用内容块确认联网是否生效,模型最终回答中直接包含来源链接:

协议 搜索调用内容块 说明
Anthropic Messages API server_tool_use 一次服务端搜索调用,input.query 为模型生成的搜索词。搜索调用次数通过 usage.server_tool_use 中的 web_search_requests / tool_search 字段返回。
OpenAI Responses API web_search_call 一次服务端搜索工具调用,action.type 为 search 时表示执行搜索,为 open_page 时表示模型打开网页读取正文。搜索调用次数通过 usage.server_tool_use 中的 tool_search / tool_fetch 字段返回。

24、计费次数查询

当前联网搜索仅支持通过模型内置参数(Server 端工具)方式使用,暂未开放独立的 Search / Fetch API 端点。计费次数可通过调用响应中的字段统计:

协议 计费次数查询方式
Anthropic Messages API(/v1/messages) 响应 usage.server_tool_use 字段返回本次调用的搜索次数(web_search_requests、tool_search)
OpenAI Responses API(/v1/responses) 响应 usage.server_tool_use 字段直接返回调用次数(tool_search 为 Search 次数,tool_fetch 为 Fetch 次数);也可统计 output 数组中 web_search_call 内容块的数量(action.type=search 计为 Search,action.type=open_page 计为 Fetch)

响应 usage 中的 server_tool_use 字段示例如下。

Anthropic Messages API:

{ "usage": { "input_tokens": 3488, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 384, "output_tokens": 373, "service_tier": "standard", "server_tool_use": { "web_search_requests": 1, "tool_search": 1 } }}

OpenAI Responses API:

{ "usage": { "input_tokens": 22316, "input_tokens_details": { "cached_tokens": 12160 }, "output_tokens": 2227, "output_tokens_details": { "reasoning_tokens": 838 }, "total_tokens": 24543, "server_tool_use": { "tool_search": 7, "tool_fetch": 5 } }}

注意:工具类型与协议必须匹配:Anthropic Messages API 使用 web_search_20250305(误写为 web_search 时请求返回 400 错误),OpenAI Responses API 使用 web_search(误写为 web_search_20250305 时联网能力不生效)。

25、推荐参数与最佳实践

参数 / 实践 建议 说明
max_tokens 普通任务 1024~4096;思考模式建议 ≥ 2048 思考内容和回答共享 token 配额
thinking 简单问答用 disabled;逻辑推理、数学题用 enabled 合理使用可降低成本
stream 长文本生成建议开启 避免请求超时,提升响应体验
temperature 一般无需修改,使用默认值 1 创意写作可调高至 1.3-1.5;代码生成可调低至 0.2-0.5
多轮对话 只将 content 回传,不回传 reasoning_content 减少 token 消耗
SDK 访问推理字段 Python 用 getattr(msg, "reasoning_content", None);Node.js 用 (msg as any).reasoning_content OpenAI SDK 类型定义中无此字段
模型选择 日常任务可选 deepseek-v4.1-flash-1017 或 deepseek-v4.1-flash;高精度任务可选 deepseek-v4-pro 具体模型能力及使用限制以模型列表为准

26、使用限制

限制项 说明
思考模式与 JSON 模式 不建议同时开启 thinking.type=enabled 和 response_format.type=json_object。
frequency_penalty / presence_penalty 已废弃,传入无效果。
超时风险 思考模式开启时响应时间较长,建议配合 stream=true 使用,避免超时。

27、相关文档

·语言模型调用概览:TokenHub 语言模型通用调用文档,包含 BaseURL、API Key、多轮对话、Function Calling、Anthropic 协议等通用说明。

赞 (0)
上一篇 4天前
下一篇 4天前