{"repo": "3099404236/progress-radar", "files": {"1.md": {"ad1e71806edfb6cd59c824d7ca5c07064eef8803": {"t": 1785746652.2300322, "n": 24662, "h": "34807415b081d292", "c": "首次调用 API\nDeepSeek API 使用与 OpenAI/Anthropic 兼容的 API 格式,通过修改配置,您可以使用 OpenAI/Anthropic SDK 来访问 DeepSeek API,或使用与 OpenAI/Anthropic API 兼容的软件。\n\nPARAM\tVALUE\nbase_url (OpenAI)\thttps://api.deepseek.com\nbase_url (Anthropic)\thttps://api.deepseek.com/anthropic\napi_key\tapply for an API key\nmodel*\tdeepseek-v4-flash\ndeepseek-v4-pro\ndeepseek-chat (将于 2026/07/24 弃用)\ndeepseek-reasoner (将于 2026/07/24 弃用)\n* deepseek-chat 与 deepseek-reasoner 两个模型名将于 2026/07/24 弃用。出于兼容考虑,二者分别对应 deepseek-v4-flash 的非思考与思考模式。\n\n接入 Agent 工具\nDeepSeek API 已接入多种主流 AI Agent 与编程助手工具。如果你使用 Claude Code、GitHub Copilot、OpenCode 等工具,可以直接将 DeepSeek 作为后端模型,无需编写代码即可开始使用。\n\n详见 Agent 工具接入指南。\n\n调用对话 API\n在创建 API key 之后,你可以使用以下样例脚本,通过 OpenAI API 格式来访问 DeepSeek 模型。样例为非流式输出,您可以将 stream 设置为 true 来使用流式输出。\n\nAnthropic API 格式的访问样例,请参考Anthropic API。\n\ncurl\npython\nnodejs\ncurl https://api.deepseek.com/chat/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer ${DEEPSEEK_API_KEY}\" \\\n -d '{\n \"model\": \"deepseek-v4-pro\",\n \"messages\": [\n {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n {\"role\": \"user\", \"content\": \"Hello!\"}\n ],\n \"thinking\": {\"type\": \"enabled\"},\n \"reasoning_effort\": \"high\",\n \"stream\": false\n }'\n\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南思考模式\n思考模式\nDeepSeek 模型支持思考模式:在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。\n\n思考模式开关与思考强度控制\n控制参数(OpenAI 格式)\t控制参数(Anthropic 格式)\n思考模式开关(1)\t{\"thinking\": {\"type\": \"enabled/disabled\"}}\n思考强度控制(2)(3)\t{\"reasoning_effort\": \"high/max\"}\t{\"output_config\": {\"effort\": \"high/max\"}}\n(1) 默认思考开关为 enabled\n(2) 思考模式下,对普通请求,默认 effort 为 high;对一些复杂 Agent 类请求(如 Claude Code、OpenCode),effort 自动设置为 max\n(3) 思考模式下,出于兼容考虑 low、medium 会映射为 high, xhigh 会映射为 max\n\n您在使用 OpenAI SDK 设置 thinking 参数时,需要将 thinking 参数传入 extra_body 中:\n\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n # ...\n reasoning_effort=\"high\",\n extra_body={\"thinking\": {\"type\": \"enabled\"}}\n)\n\n输入输出参数\n思考模式不支持 temperature、top_p、presence_penalty、frequency_penalty 参数。请注意,为了兼容已有软件,设置参数不会报错,但也不会生效。\n\n在思考模式下,思维链内容通过 reasoning_content 参数返回,与 content 同级。在后续的轮次的拼接中,可以选择性地返回 reasoning_content 给 API:\n\n在两个 user 消息之间,如果模型未进行工具调用,则中间 assistant 的 reasoning_content 无需参与上下文拼接,在后续轮次中将其传入 API 会被忽略。详见多轮对话拼接。\n在两个 user 消息之间,如果模型进行了工具调用,则中间 assistant 的 reasoning_content 需参与上下文拼接,在后续所有 user 交互轮次中必须回传给 API。详见工具调用。\n多轮对话拼接\n在每一轮对话过程中,模型会输出思维链内容(reasoning_content)和最终回答(content)。如果没有工具调用,则在下一轮对话中,之前轮输出的思维链内容不会被拼接到上下文中,如下图所示:\n\n\n样例代码\n下面的代码以 Python 语言为例,展示了如何访问思维链和最终回答,以及如何在多轮对话中进行上下文拼接。\n\n非流式\n流式\nfrom openai import OpenAI\nclient = OpenAI(api_key=\"\", base_url=\"https://api.deepseek.com\")\n\n# Turn 1\nmessages = [{\"role\": \"user\", \"content\": \"9.11 and 9.8, which is greater?\"}]\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n reasoning_effort=\"high\"\n extra_body={\"thinking\": {\"type\": \"enabled\"}},\n)\n\nreasoning_content = response.choices[0].message.reasoning_content\ncontent = response.choices[0].message.content\n\n# Turn 2\n# The reasoning_content will be ignored by the API\nmessages.append(response.choices[0].message)\nmessages.append({'role': 'user', 'content': \"How many Rs are there in the word 'strawberry'?\"})\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n reasoning_effort=\"high\"\n extra_body={\"thinking\": {\"type\": \"enabled\"}},\n)\n# ...\n\n工具调用\nDeepSeek 模型的思考模式支持工具调用功能。模型在输出最终答案之前,可以进行多轮的思考与工具调用,以提升答案的质量。其调用模式如下图所示:\n\n\n请注意,区别于思考模式下的未进行工具调用的轮次,进行了工具调用的轮次,在后续所有请求中,必须完整回传 reasoning_content 给 API。\n\n若您的代码中未正确回传 reasoning_content,API 会返回 400 报错。正确回传方法请您参考下面的样例代码。\n\n样例代码\n下面是一个简单的在思考模式下进行工具调用的样例代码:\n\nimport os\nimport json\nfrom openai import OpenAI\nfrom datetime import datetime\n\n# The definition of the tools\ntools = [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_date\",\n \"description\": \"Get the current date\",\n \"parameters\": { \"type\": \"object\", \"properties\": {} },\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"description\": \"Get weather of a location, the user should supply the location and date.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": { \"type\": \"string\", \"description\": \"The city name\" },\n \"date\": { \"type\": \"string\", \"description\": \"The date in format YYYY-mm-dd\" },\n },\n \"required\": [\"location\", \"date\"]\n },\n }\n },\n]\n\n# The mocked version of the tool calls\ndef get_date_mock():\n return datetime.now().strftime(\"%Y-%m-%d\")\n\ndef get_weather_mock(location, date):\n return \"Cloudy 7~13°C\"\n\nTOOL_CALL_MAP = {\n \"get_date\": get_date_mock,\n \"get_weather\": get_weather_mock\n}\n\ndef run_turn(turn, messages):\n sub_turn = 1\n while True:\n response = client.chat.completions.create(\n model='deepseek-v4-pro',\n messages=messages,\n tools=tools,\n reasoning_effort=\"high\",\n extra_body={ \"thinking\": { \"type\": \"enabled\" } },\n )\n messages.append(response.choices[0].message)\n reasoning_content = response.choices[0].message.reasoning_content\n content = response.choices[0].message.content\n tool_calls = response.choices[0].message.tool_calls\n print(f\"Turn {turn}.{sub_turn}\\n{reasoning_content=}\\n{content=}\\n{tool_calls=}\")\n # If there is no tool calls, then the model should get a final answer and we need to stop the loop\n if tool_calls is None:\n break\n for tool in tool_calls:\n tool_function = TOOL_CALL_MAP[tool.function.name]\n tool_result = tool_function(**json.loads(tool.function.arguments))\n print(f\"tool result for {tool.function.name}: {tool_result}\\n\")\n messages.append({\n \"role\": \"tool\",\n \"tool_call_id\": tool.id,\n \"content\": tool_result,\n })\n sub_turn += 1\n print()\n\nclient = OpenAI(\n api_key=os.environ.get('DEEPSEEK_API_KEY'),\n base_url=os.environ.get('DEEPSEEK_BASE_URL'),\n)\n\n# The user starts a question\nturn = 1\nmessages = [{\n \"role\": \"user\",\n \"content\": \"How's the weather in Hangzhou Tomorrow\"\n}]\nrun_turn(turn, messages)\n\n# The user starts a new question\nturn = 2\nmessages.append({\n \"role\": \"user\",\n \"content\": \"How's the weather in Guangzhou Tomorrow\"\n})\nrun_turn(turn, messages)\n\n\n在 Turn 1 的每个子请求中,都携带了该 Turn 下产生的 reasoning_content 给 API,从而让模型继续之前的思考。response.choices[0].message 携带了 assistant 消息的所有必要字段,包括 content、reasoning_content、tool_calls。简单起见,可以直接用如下代码将消息 append 到 messages 结尾:\n\nmessages.append(response.choices[0].message)\n\n这行代码等价于:\n\nmessages.append({\n 'role': 'assistant',\n 'content': response.choices[0].message.content,\n 'reasoning_content': response.choices[0].message.reasoning_content,\n 'tool_calls': response.choices[0].message.tool_calls,\n})\n\n且在 Turn 2 的请求中,我们仍然携带着 Turn1 所产生的 reasoning_content 给 API。\n\n该代码的样例输出如下:\n\nTurn 1.1\nreasoning_content=\"The user is asking about the weather in Hangzhou tomorrow. I need to get tomorrow's date first, then call the weather function.\"\ncontent=\"Let me check tomorrow's weather in Hangzhou for you. First, let me get tomorrow's date.\"\ntool_calls=[ChatCompletionMessageFunctionToolCall(id='call_00_kw66qNnNto11bSfJVIdlV5Oo', function=Function(arguments='{}', name='get_date'), type='function', index=0)]\ntool result for get_date: 2026-04-19\n\nTurn 1.2\nreasoning_content=\"Today is 2026-04-19, so tomorrow is 2026-04-20. Now I'll call the weather function for Hangzhou.\"\ncontent=''\ntool_calls=[ChatCompletionMessageFunctionToolCall(id='call_00_H2SCW6136vWJGq9SQlBuhVt4', function=Function(arguments='{\"location\": \"Hangzhou\", \"date\": \"2026-04-20\"}', name='get_weather'), type='function', index=0)]\ntool result for get_weather: Cloudy 7~13°C\n\nTurn 1.3\nreasoning_content='The weather result is in. Let me share this with the user.'\ncontent=\"Here's the weather forecast for **Hangzhou tomorrow (April 20, 2026)**:\\n\\n- 🌤 **Condition:** Cloudy \\n- 🌡 **Temperature:** 7°C ~ 13°C (45°F ~ 55°F)\\n\\nIt'll be on the cooler side, so you might want to bring a light jacket if you're heading out! Let me know if you need anything else.\"\ntool_calls=None\n\nTurn 2.1\nreasoning_content='The user is asking about the weather in Guangzhou tomorrow. Today is 2026-04-19, so tomorrow is 2026-04-20. I can directly call the weather function.'\ncontent=''\ntool_calls=[ChatCompletionMessageFunctionToolCall(id='call_00_8URkLt5NjmNkVKhDmMcNq9Mo', function=Function(arguments='{\"location\": \"Guangzhou\", \"date\": \"2026-04-20\"}', name='get_weather'), type='function', index=0)]\ntool result for get_weather: Cloudy 7~13°C\n\nTurn 2.2\nreasoning_content='The weather result for Guangzhou is the same as Hangzhou. Let me share this with the user.'\ncontent=\"Here's the weather forecast for **Guangzhou tomorrow (April 20, 2026)**:\\n\\n- 🌤 **Condition:** Cloudy \\n- 🌡 **Temperature:** 7°C ~ 13°C (45°F ~ 55°F)\\n\\nIt'll be cool and cloudy, so a light jacket would be a good idea if you're going out. Let me know if there's anything else you'd like to know!\"\ntool_calls=None\n\n\n上一页\nLangcli\n下一页\n多轮对话\n思考模式开关与思考强度控制\n输入输出参数\n多轮对话拼接\n样例代码\n工具调用\n样例代码\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南多轮对话\n多轮对话\n本指南将介绍如何使用 DeepSeek /chat/completions API 进行多轮对话。\n\nDeepSeek /chat/completions API 是一个“无状态” API,即服务端不记录用户请求的上下文,用户在每次请求时,需将之前所有对话历史拼接好后,传递给对话 API。\n\n下面的代码以 Python 语言,展示了如何进行上下文拼接,以实现多轮对话。\n\nfrom openai import OpenAI\nclient = OpenAI(api_key=\"\", base_url=\"https://api.deepseek.com\")\n\n# Round 1\nmessages = [{\"role\": \"user\", \"content\": \"What's the highest mountain in the world?\"}]\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages\n)\n\nmessages.append(response.choices[0].message)\nprint(f\"Messages Round 1: {messages}\")\n\n# Round 2\nmessages.append({\"role\": \"user\", \"content\": \"What is the second?\"})\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages\n)\n\nmessages.append(response.choices[0].message)\nprint(f\"Messages Round 2: {messages}\")\n\n在第一轮请求时,传递给 API 的 messages 为:\n\n[\n {\"role\": \"user\", \"content\": \"What's the highest mountain in the world?\"}\n]\n\n在第二轮请求时:\n\n要将第一轮中模型的输出添加到 messages 末尾\n将新的提问添加到 messages 末尾\n最终传递给 API 的 messages 为:\n\n[\n {\"role\": \"user\", \"content\": \"What's the highest mountain in the world?\"},\n {\"role\": \"assistant\", \"content\": \"The highest mountain in the world is Mount Everest.\"},\n {\"role\": \"user\", \"content\": \"What is the second?\"}\n]\n\n上一页\n思考模式\n下一页\n对话前缀续写(Beta)\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南对话前缀续写(Beta)\n对话前缀续写(Beta)\n对话前缀续写沿用 Chat Completion API,用户提供 assistant 开头的消息,来让模型补全其余的消息。\n\n注意事项\n使用对话前缀续写时,用户需确保 messages 列表里最后一条消息的 role 为 assistant,并设置最后一条消息的 prefix 参数为 True。\n用户需要设置 base_url=\"https://api.deepseek.com/beta\" 来开启 Beta 功能。\n样例代码\n下面给出了对话前缀续写的完整 Python 代码样例。在这个例子中,我们设置 assistant 开头的消息为 \"```python\\n\" 来强制模型输出 python 代码,并设置 stop 参数为 ['```'] 来避免模型的额外解释。\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com/beta\",\n)\n\nmessages = [\n {\"role\": \"user\", \"content\": \"Please write quick sort code\"},\n {\"role\": \"assistant\", \"content\": \"```python\\n\", \"prefix\": True}\n]\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n stop=[\"```\"],\n)\nprint(response.choices[0].message.content)\n\n上一页\n多轮对话\n下一页\nFIM 补全(Beta)\n注意事项\n样例代码\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南FIM 补全(Beta)\nFIM 补全(Beta)\n在 FIM (Fill In the Middle) 补全中,用户可以提供前缀和后缀(可选),模型来补全中间的内容。FIM 常用于内容续写、代码补全等场景。\n\n注意事项\n模型的最大补全长度为 4K。\n用户需要设置 base_url=\"https://api.deepseek.com/beta\" 来开启 Beta 功能。\n样例代码\n下面给出了 FIM 补全的完整 Python 代码样例。在这个例子中,我们给出了计算斐波那契数列函数的开头和结尾,来让模型补全中间的内容。\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com/beta\",\n)\n\nresponse = client.completions.create(\n model=\"deepseek-v4-pro\",\n prompt=\"def fib(a):\",\n suffix=\" return fib(a-1) + fib(a-2)\",\n max_tokens=128\n)\nprint(response.choices[0].text)\n\n配置 Continue 代码补全插件\nContinue 是一款支持代码补全的 VSCode 插件,您可以参考这篇文档来配置 Continue 以使用代码补全功能。\n\n上一页\n对话前缀续写(Beta)\n下一页\nJSON Output\n注意事项\n样例代码\n配置 Continue 代码补全插件\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南JSON Output\nJSON Output\n在很多场景下,用户需要让模型严格按照 JSON 格式来输出,以实现输出的结构化,便于后续逻辑进行解析。\n\nDeepSeek 提供了 JSON Output 功能,来确保模型输出合法的 JSON 字符串。\n\n注意事项\n设置 response_format 参数为 {'type': 'json_object'}。\n用户传入的 system 或 user prompt 中必须含有 json 字样,并给出希望模型输出的 JSON 格式的样例,以指导模型来输出合法 JSON。\n需要合理设置 max_tokens 参数,防止 JSON 字符串被中途截断。\n在使用 JSON Output 功能时,API 有概率会返回空的 content。我们正在积极优化该问题,您可以尝试修改 prompt 以缓解此类问题。\n样例代码\n这里展示了使用 JSON Output 功能的完整 Python 代码:\n\nimport json\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com\",\n)\n\nsystem_prompt = \"\"\"\nThe user will provide some exam text. Please parse the \"question\" and \"answer\" and output them in JSON format. \n\nEXAMPLE INPUT: \nWhich is the highest mountain in the world? Mount Everest.\n\nEXAMPLE JSON OUTPUT:\n{\n \"question\": \"Which is the highest mountain in the world?\",\n \"answer\": \"Mount Everest\"\n}\n\"\"\"\n\nuser_prompt = \"Which is the longest river in the world? The Nile River.\"\n\nmessages = [{\"role\": \"system\", \"content\": system_prompt},\n {\"role\": \"user\", \"content\": user_prompt}]\n\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n response_format={\n 'type': 'json_object'\n }\n)\n\nprint(json.loads(response.choices[0].message.content))\n\n\n模型将会输出:\n\n{\n \"question\": \"Which is the longest river in the world?\",\n \"answer\": \"The Nile River\"\n}\n\n上一页\nFIM 补全(Beta)\n下一页\nTool Calls\n注意事项\n样例代码\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南Tool Calls\nTool Calls\nTool Calls 让模型能够调用外部工具,来增强自身能力。\n\n非思考模式\n样例代码\n这里以获取用户当前位置的天气信息为例,展示了使用 Tool Calls 的完整 Python 代码。\n\nTool Calls 的具体 API 格式请参考对话补全文档。\n\nfrom openai import OpenAI\n\ndef send_messages(messages):\n response = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n tools=tools\n )\n return response.choices[0].message\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com\",\n)\n\ntools = [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"description\": \"Get weather of a location, the user should supply a location first.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\",\n }\n },\n \"required\": [\"location\"]\n },\n }\n },\n]\n\nmessages = [{\"role\": \"user\", \"content\": \"How's the weather in Hangzhou, Zhejiang?\"}]\nmessage = send_messages(messages)\nprint(f\"User>\\t {messages[0]['content']}\")\n\ntool = message.tool_calls[0]\nmessages.append(message)\n\nmessages.append({\"role\": \"tool\", \"tool_call_id\": tool.id, \"content\": \"24℃\"})\nmessage = send_messages(messages)\nprint(f\"Model>\\t {message.content}\")\n\n\n这个例子的执行流程如下:\n\n用户:询问现在的天气\n模型:返回 function get_weather({location: 'Hangzhou'})\n用户:调用 function get_weather({location: 'Hangzhou'}),并传给模型。\n模型:返回自然语言,\"The current temperature in Hangzhou is 24°C.\"\n注:上述代码中 get_weather 函数功能需由用户提供,模型本身不执行具体函数。\n\n思考模式\n从 DeepSeek-V3.2 开始,API 支持了思考模式下的工具调用能力,详见思考模式。\n\nstrict 模式(Beta)\n在 strict 模式下,模型在输出 Function 调用时会严格遵循 Function 的 JSON Schema 的格式要求,以确保模型输出的 Function 符合用户的定义。在思考与非思考模式下的工具调用,均可使用 strict 模式。\n\n要使用 strict 模式,需要:\n\n用户需要设置 base_url=\"https://api.deepseek.com/beta\" 来开启 Beta 功能\n在传入的 tools 列表中,所有 function 均需设置 strict 属性为 true\n服务端会对用户传入的 Function 的 JSON Schema 进行校验,如不符合规范,或遇到服务端不支持的 JSON Schema 类型,将返回错误信息\n以下是 strict 模式下 tool 的定义样例:\n\n{\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"strict\": true,\n \"description\": \"Get weather of a location, the user should supply a location first.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\",\n }\n },\n \"required\": [\"location\"],\n \"additionalProperties\": false\n }\n }\n}\n\nstrict 模式支持的 JSON Schema 类型\nobject\nstring\nnumber\ninteger\nboolean\narray\nenum\nanyOf\nobject 类型\nobject 定义一个包含键值对的深层结构,其中 properties 定义了对象中每个键(属性)的 schema。每个 object 的所有属性均需设置为 required,且 object 中 additionalProperties 属性必须为 false。\n\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"age\": { \"type\": \"integer\" }\n },\n \"required\": [\"name\", \"age\"],\n \"additionalProperties\": false\n}\n\nstring 类型\n支持的参数:\npattern:使用正则表达式来约束字符串的格式\nformat:使用预定义的常见格式进行校验,目前支持:\nemail:电子邮件地址\nhostname:主机名\nipv4:IPv4 地址\nipv6:IPv6 地址\nuuid:uuid\n不支持的参数\nminLength\nmaxLength\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"user_email\": {\n \"type\": \"string\",\n \"description\": \"The user's email address\",\n \"format\": \"email\" \n },\n \"zip_code\": {\n \"type\": \"string\",\n \"description\": \"Six digit postal code\",\n \"pattern\": \"^\\\\d{6}$\"\n }\n }\n}\n\nnumber/integer 类型\n支持的参数\nconst:固定数字为常数\ndefault:数字的默认值\nminimum:最小值\nmaximum:最大值\nexclusiveMinimum:不小于\nexclusiveMaximum:不大于\nmultipleOf:数字输出为这个值的倍数\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"score\": {\n \"type\": \"integer\",\n \"description\": \"A number from 1-5, which represents your rating, the higher, the better\",\n \"minimum\": 1,\n \"maximum\": 5\n }\n },\n \"required\": [\"score\"],\n \"additionalProperties\": false\n}\n\n\narray 类型\n不支持的参数\nminItems\nmaxItems\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"keywords\": {\n \"type\": \"array\",\n \"description\": \"Five keywords of the article, sorted by importance\",\n \"items\": {\n \"type\": \"string\",\n \"description\": \"A concise and accurate keyword or phrase.\"\n }\n }\n },\n \"required\": [\"keywords\"],\n \"additionalProperties\": false\n}\n\nenum\nenum 可以确保输出是预期的几个选项之一,例如在订单状态的场景下,只能是有限几个状态之一。\n\n样例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"order_status\": {\n \"type\": \"string\",\n \"description\": \"Ordering status\",\n \"enum\": [\"pending\", \"processing\", \"shipped\", \"cancelled\"]\n }\n }\n}\n\nanyOf\n匹配所提供的多个 schema 中的任意一个,可以处理可能具有多种有效格式的字段,例如用户的账户可能是邮箱或者手机号中的一个:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"account\": {\n \"anyOf\": [\n { \"type\": \"string\", \"format\": \"email\", \"description\": \"可以是电子邮件地址\" },\n { \"type\": \"string\", \"pattern\": \"^\\\\d{11}$\", \"description\": \"或11位手机号码\" }\n ]\n }\n }\n}\n\n$ref 和 $def\n可以使用 $def 定义模块,再用 $ref 引用以减少模式的重复和模块化,此外还可以单独使用 $ref 定义递归结构。\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"report_date\": {\n \"type\": \"string\",\n \"description\": \"The date when the report was published\"\n },\n \"authors\": {\n \"type\": \"array\",\n \"description\": \"The authors of the report\",\n \"items\": {\n \"$ref\": \"#/$def/author\"\n }\n }\n },\n \"required\": [\"report_date\", \"authors\"],\n \"additionalProperties\": false,\n \"$def\": {\n \"authors\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"author's name\"\n },\n \"institution\": {\n \"type\": \"string\",\n \"description\": \"author's institution\"\n },\n \"email\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"author's email\"\n }\n },\n \"additionalProperties\": false,\n \"required\": [\"name\", \"institution\", \"email\"]\n }\n }\n}\n\n上一页\nJSON Output\n下一页\n上下文硬盘缓存\n非思考模式\n样例代码\n思考模式\nstrict 模式(Beta)\nstrict 模式支持的 JSON Schema 类型\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南上下文硬盘缓存\n上下文硬盘缓存\nDeepSeek API 上下文硬盘缓存技术对所有用户默认开启,用户无需修改代码即可享用。\n\n用户的每一个请求都会触发硬盘缓存的构建。若后续请求与之前的请求在前缀上存在重复,则重复部分只需要从缓存中拉取,计入“缓存命中”。\n\n缓存落盘与命中规则\n缓存命中的前提是相应前缀已被“落盘”(写入硬盘缓存)。受 Sliding Window Attention 机制的影响,缓存前缀的存取与判别与之前有所不同。每条缓存前缀是一个独立的完整单元。后续请求只有在完整匹配缓存前缀单元时,才能命中缓存。\n\n缓存前缀落盘时机:\n请求结束位置落盘:每次请求的用户输入结束位置与模型输出结束位置,会产生两个缓存前缀单元。后续请求若完整匹配了它们,则可命中。\n\n公共前缀检测落盘:当系统检测到多次请求之间存在公共前缀时,会将该公共前缀作为一个独立的缓存前缀单元进行落盘。后续请求若完整复用了该缓存前缀单元,则可命中。\n\n按固定 token 间隔落盘:在长输入或长输出中,系统会以一定的 token 数量为间隔,截取缓存前缀单元,避免长前缀因迟迟未达到结束位置而完全无法被缓存。\n\n举例 1:用户第一轮请求内容为 A + B,第二轮请求内容为 A + B + C,则第二轮请求能完整匹配 A + B 这个缓存前缀单元,可以命中 A + B 的缓存。详见下文例一。\n\n举例 2:用户第一轮请求的内容为 A + B,第二轮请求的内容为 A + C,则第二轮请求无法命中缓存,因为 A + C 不能完整匹配第一轮的缓存前缀单元(A + B)。但此时系统会识别到两轮请求存在公共前缀 A,并将 A 作为缓存前缀单元落盘。当第三轮请求 A + D 到来时,能完整匹配 A 这个缓存前缀单元,可以命中 A 的缓存。详见下文例二。\n\n例一:多轮对话\n第一次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位乐于助人的助手\"},\n {\"role\": \"user\", \"content\": \"中国的首都是哪里?\"}\n]\n\n第二次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位乐于助人的助手\"},\n {\"role\": \"user\", \"content\": \"中国的首都是哪里?\"},\n {\"role\": \"assistant\", \"content\": \"中国的首都是北京。\"},\n {\"role\": \"user\", \"content\": \"美国的首都是哪里?\"}\n]\n\n在上例中,第二次请求可以完整复用第一次请求的缓存前缀单元,这部分会计入“缓存命中”。\n\n例二:长文本问答\n第一次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位资深的财报分析师...\"}\n {\"role\": \"user\", \"content\": \"<财报内容>\\n\\n请总结一下这份财报的关键信息。\"}\n]\n\n第二次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位资深的财报分析师...\"}\n {\"role\": \"user\", \"content\": \"<财报内容>\\n\\n请分析一下这份财报的盈利情况。\"}\n]\n\n第三次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位资深的财报分析师...\"}\n {\"role\": \"user\", \"content\": \"<财报内容>\\n\\n请分析一下公司收入与支出占比。\"}\n]\n\n在上例中,前两次请求不会命中缓存。前两次请求完成后,系统会识别出 system 消息 + user 消息中的<财报内容>为缓存前缀单元,并进行落盘。在第三次请求中,由于完整匹配了前面落盘的缓存前缀单元,则可命中缓存。\n\n查看缓存命中情况\n在 DeepSeek API 的返回中,我们在 usage 字段中增加了两个字段,来反映请求的缓存命中情况:\n\nprompt_cache_hit_tokens:本次请求的输入中,缓存命中的 tokens 数\n\nprompt_cache_miss_tokens:本次请求的输入中,缓存未命中的 tokens 数\n\n硬盘缓存与输出随机性\n硬盘缓存只匹配到用户输入的前缀部分,输出仍然是通过计算推理得到的,仍然受到 temperature 等参数的影响,从而引入随机性。其输出效果与不使用硬盘缓存相同。\n\n其它说明\n缓存系统是“尽力而为”,不保证 100% 缓存命中\n\n缓存构建耗时为秒级。缓存不再使用后会自动被清空,时间一般为几个小时到几天\n\n上一页\nTool Calls\n下一页\nAnthropic API\n缓存落盘与命中规则\n缓存前缀落盘时机:\n例一:多轮对话\n例二:长文本问答\n查看缓存命中情况\n硬盘缓存与输出随机性\n其它说明\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n"}, "fa81cca22e1016ea992d2bc2ab6d50d947ea597d": {"t": 1785766582.4472034, "n": 24662, "h": "34807415b081d292", "c": "首次调用 API\nDeepSeek API 使用与 OpenAI/Anthropic 兼容的 API 格式,通过修改配置,您可以使用 OpenAI/Anthropic SDK 来访问 DeepSeek API,或使用与 OpenAI/Anthropic API 兼容的软件。\n\nPARAM\tVALUE\nbase_url (OpenAI)\thttps://api.deepseek.com\nbase_url (Anthropic)\thttps://api.deepseek.com/anthropic\napi_key\tapply for an API key\nmodel*\tdeepseek-v4-flash\ndeepseek-v4-pro\ndeepseek-chat (将于 2026/07/24 弃用)\ndeepseek-reasoner (将于 2026/07/24 弃用)\n* deepseek-chat 与 deepseek-reasoner 两个模型名将于 2026/07/24 弃用。出于兼容考虑,二者分别对应 deepseek-v4-flash 的非思考与思考模式。\n\n接入 Agent 工具\nDeepSeek API 已接入多种主流 AI Agent 与编程助手工具。如果你使用 Claude Code、GitHub Copilot、OpenCode 等工具,可以直接将 DeepSeek 作为后端模型,无需编写代码即可开始使用。\n\n详见 Agent 工具接入指南。\n\n调用对话 API\n在创建 API key 之后,你可以使用以下样例脚本,通过 OpenAI API 格式来访问 DeepSeek 模型。样例为非流式输出,您可以将 stream 设置为 true 来使用流式输出。\n\nAnthropic API 格式的访问样例,请参考Anthropic API。\n\ncurl\npython\nnodejs\ncurl https://api.deepseek.com/chat/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer ${DEEPSEEK_API_KEY}\" \\\n -d '{\n \"model\": \"deepseek-v4-pro\",\n \"messages\": [\n {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n {\"role\": \"user\", \"content\": \"Hello!\"}\n ],\n \"thinking\": {\"type\": \"enabled\"},\n \"reasoning_effort\": \"high\",\n \"stream\": false\n }'\n\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南思考模式\n思考模式\nDeepSeek 模型支持思考模式:在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。\n\n思考模式开关与思考强度控制\n控制参数(OpenAI 格式)\t控制参数(Anthropic 格式)\n思考模式开关(1)\t{\"thinking\": {\"type\": \"enabled/disabled\"}}\n思考强度控制(2)(3)\t{\"reasoning_effort\": \"high/max\"}\t{\"output_config\": {\"effort\": \"high/max\"}}\n(1) 默认思考开关为 enabled\n(2) 思考模式下,对普通请求,默认 effort 为 high;对一些复杂 Agent 类请求(如 Claude Code、OpenCode),effort 自动设置为 max\n(3) 思考模式下,出于兼容考虑 low、medium 会映射为 high, xhigh 会映射为 max\n\n您在使用 OpenAI SDK 设置 thinking 参数时,需要将 thinking 参数传入 extra_body 中:\n\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n # ...\n reasoning_effort=\"high\",\n extra_body={\"thinking\": {\"type\": \"enabled\"}}\n)\n\n输入输出参数\n思考模式不支持 temperature、top_p、presence_penalty、frequency_penalty 参数。请注意,为了兼容已有软件,设置参数不会报错,但也不会生效。\n\n在思考模式下,思维链内容通过 reasoning_content 参数返回,与 content 同级。在后续的轮次的拼接中,可以选择性地返回 reasoning_content 给 API:\n\n在两个 user 消息之间,如果模型未进行工具调用,则中间 assistant 的 reasoning_content 无需参与上下文拼接,在后续轮次中将其传入 API 会被忽略。详见多轮对话拼接。\n在两个 user 消息之间,如果模型进行了工具调用,则中间 assistant 的 reasoning_content 需参与上下文拼接,在后续所有 user 交互轮次中必须回传给 API。详见工具调用。\n多轮对话拼接\n在每一轮对话过程中,模型会输出思维链内容(reasoning_content)和最终回答(content)。如果没有工具调用,则在下一轮对话中,之前轮输出的思维链内容不会被拼接到上下文中,如下图所示:\n\n\n样例代码\n下面的代码以 Python 语言为例,展示了如何访问思维链和最终回答,以及如何在多轮对话中进行上下文拼接。\n\n非流式\n流式\nfrom openai import OpenAI\nclient = OpenAI(api_key=\"\", base_url=\"https://api.deepseek.com\")\n\n# Turn 1\nmessages = [{\"role\": \"user\", \"content\": \"9.11 and 9.8, which is greater?\"}]\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n reasoning_effort=\"high\"\n extra_body={\"thinking\": {\"type\": \"enabled\"}},\n)\n\nreasoning_content = response.choices[0].message.reasoning_content\ncontent = response.choices[0].message.content\n\n# Turn 2\n# The reasoning_content will be ignored by the API\nmessages.append(response.choices[0].message)\nmessages.append({'role': 'user', 'content': \"How many Rs are there in the word 'strawberry'?\"})\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n reasoning_effort=\"high\"\n extra_body={\"thinking\": {\"type\": \"enabled\"}},\n)\n# ...\n\n工具调用\nDeepSeek 模型的思考模式支持工具调用功能。模型在输出最终答案之前,可以进行多轮的思考与工具调用,以提升答案的质量。其调用模式如下图所示:\n\n\n请注意,区别于思考模式下的未进行工具调用的轮次,进行了工具调用的轮次,在后续所有请求中,必须完整回传 reasoning_content 给 API。\n\n若您的代码中未正确回传 reasoning_content,API 会返回 400 报错。正确回传方法请您参考下面的样例代码。\n\n样例代码\n下面是一个简单的在思考模式下进行工具调用的样例代码:\n\nimport os\nimport json\nfrom openai import OpenAI\nfrom datetime import datetime\n\n# The definition of the tools\ntools = [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_date\",\n \"description\": \"Get the current date\",\n \"parameters\": { \"type\": \"object\", \"properties\": {} },\n }\n },\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"description\": \"Get weather of a location, the user should supply the location and date.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": { \"type\": \"string\", \"description\": \"The city name\" },\n \"date\": { \"type\": \"string\", \"description\": \"The date in format YYYY-mm-dd\" },\n },\n \"required\": [\"location\", \"date\"]\n },\n }\n },\n]\n\n# The mocked version of the tool calls\ndef get_date_mock():\n return datetime.now().strftime(\"%Y-%m-%d\")\n\ndef get_weather_mock(location, date):\n return \"Cloudy 7~13°C\"\n\nTOOL_CALL_MAP = {\n \"get_date\": get_date_mock,\n \"get_weather\": get_weather_mock\n}\n\ndef run_turn(turn, messages):\n sub_turn = 1\n while True:\n response = client.chat.completions.create(\n model='deepseek-v4-pro',\n messages=messages,\n tools=tools,\n reasoning_effort=\"high\",\n extra_body={ \"thinking\": { \"type\": \"enabled\" } },\n )\n messages.append(response.choices[0].message)\n reasoning_content = response.choices[0].message.reasoning_content\n content = response.choices[0].message.content\n tool_calls = response.choices[0].message.tool_calls\n print(f\"Turn {turn}.{sub_turn}\\n{reasoning_content=}\\n{content=}\\n{tool_calls=}\")\n # If there is no tool calls, then the model should get a final answer and we need to stop the loop\n if tool_calls is None:\n break\n for tool in tool_calls:\n tool_function = TOOL_CALL_MAP[tool.function.name]\n tool_result = tool_function(**json.loads(tool.function.arguments))\n print(f\"tool result for {tool.function.name}: {tool_result}\\n\")\n messages.append({\n \"role\": \"tool\",\n \"tool_call_id\": tool.id,\n \"content\": tool_result,\n })\n sub_turn += 1\n print()\n\nclient = OpenAI(\n api_key=os.environ.get('DEEPSEEK_API_KEY'),\n base_url=os.environ.get('DEEPSEEK_BASE_URL'),\n)\n\n# The user starts a question\nturn = 1\nmessages = [{\n \"role\": \"user\",\n \"content\": \"How's the weather in Hangzhou Tomorrow\"\n}]\nrun_turn(turn, messages)\n\n# The user starts a new question\nturn = 2\nmessages.append({\n \"role\": \"user\",\n \"content\": \"How's the weather in Guangzhou Tomorrow\"\n})\nrun_turn(turn, messages)\n\n\n在 Turn 1 的每个子请求中,都携带了该 Turn 下产生的 reasoning_content 给 API,从而让模型继续之前的思考。response.choices[0].message 携带了 assistant 消息的所有必要字段,包括 content、reasoning_content、tool_calls。简单起见,可以直接用如下代码将消息 append 到 messages 结尾:\n\nmessages.append(response.choices[0].message)\n\n这行代码等价于:\n\nmessages.append({\n 'role': 'assistant',\n 'content': response.choices[0].message.content,\n 'reasoning_content': response.choices[0].message.reasoning_content,\n 'tool_calls': response.choices[0].message.tool_calls,\n})\n\n且在 Turn 2 的请求中,我们仍然携带着 Turn1 所产生的 reasoning_content 给 API。\n\n该代码的样例输出如下:\n\nTurn 1.1\nreasoning_content=\"The user is asking about the weather in Hangzhou tomorrow. I need to get tomorrow's date first, then call the weather function.\"\ncontent=\"Let me check tomorrow's weather in Hangzhou for you. First, let me get tomorrow's date.\"\ntool_calls=[ChatCompletionMessageFunctionToolCall(id='call_00_kw66qNnNto11bSfJVIdlV5Oo', function=Function(arguments='{}', name='get_date'), type='function', index=0)]\ntool result for get_date: 2026-04-19\n\nTurn 1.2\nreasoning_content=\"Today is 2026-04-19, so tomorrow is 2026-04-20. Now I'll call the weather function for Hangzhou.\"\ncontent=''\ntool_calls=[ChatCompletionMessageFunctionToolCall(id='call_00_H2SCW6136vWJGq9SQlBuhVt4', function=Function(arguments='{\"location\": \"Hangzhou\", \"date\": \"2026-04-20\"}', name='get_weather'), type='function', index=0)]\ntool result for get_weather: Cloudy 7~13°C\n\nTurn 1.3\nreasoning_content='The weather result is in. Let me share this with the user.'\ncontent=\"Here's the weather forecast for **Hangzhou tomorrow (April 20, 2026)**:\\n\\n- 🌤 **Condition:** Cloudy \\n- 🌡 **Temperature:** 7°C ~ 13°C (45°F ~ 55°F)\\n\\nIt'll be on the cooler side, so you might want to bring a light jacket if you're heading out! Let me know if you need anything else.\"\ntool_calls=None\n\nTurn 2.1\nreasoning_content='The user is asking about the weather in Guangzhou tomorrow. Today is 2026-04-19, so tomorrow is 2026-04-20. I can directly call the weather function.'\ncontent=''\ntool_calls=[ChatCompletionMessageFunctionToolCall(id='call_00_8URkLt5NjmNkVKhDmMcNq9Mo', function=Function(arguments='{\"location\": \"Guangzhou\", \"date\": \"2026-04-20\"}', name='get_weather'), type='function', index=0)]\ntool result for get_weather: Cloudy 7~13°C\n\nTurn 2.2\nreasoning_content='The weather result for Guangzhou is the same as Hangzhou. Let me share this with the user.'\ncontent=\"Here's the weather forecast for **Guangzhou tomorrow (April 20, 2026)**:\\n\\n- 🌤 **Condition:** Cloudy \\n- 🌡 **Temperature:** 7°C ~ 13°C (45°F ~ 55°F)\\n\\nIt'll be cool and cloudy, so a light jacket would be a good idea if you're going out. Let me know if there's anything else you'd like to know!\"\ntool_calls=None\n\n\n上一页\nLangcli\n下一页\n多轮对话\n思考模式开关与思考强度控制\n输入输出参数\n多轮对话拼接\n样例代码\n工具调用\n样例代码\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南多轮对话\n多轮对话\n本指南将介绍如何使用 DeepSeek /chat/completions API 进行多轮对话。\n\nDeepSeek /chat/completions API 是一个“无状态” API,即服务端不记录用户请求的上下文,用户在每次请求时,需将之前所有对话历史拼接好后,传递给对话 API。\n\n下面的代码以 Python 语言,展示了如何进行上下文拼接,以实现多轮对话。\n\nfrom openai import OpenAI\nclient = OpenAI(api_key=\"\", base_url=\"https://api.deepseek.com\")\n\n# Round 1\nmessages = [{\"role\": \"user\", \"content\": \"What's the highest mountain in the world?\"}]\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages\n)\n\nmessages.append(response.choices[0].message)\nprint(f\"Messages Round 1: {messages}\")\n\n# Round 2\nmessages.append({\"role\": \"user\", \"content\": \"What is the second?\"})\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages\n)\n\nmessages.append(response.choices[0].message)\nprint(f\"Messages Round 2: {messages}\")\n\n在第一轮请求时,传递给 API 的 messages 为:\n\n[\n {\"role\": \"user\", \"content\": \"What's the highest mountain in the world?\"}\n]\n\n在第二轮请求时:\n\n要将第一轮中模型的输出添加到 messages 末尾\n将新的提问添加到 messages 末尾\n最终传递给 API 的 messages 为:\n\n[\n {\"role\": \"user\", \"content\": \"What's the highest mountain in the world?\"},\n {\"role\": \"assistant\", \"content\": \"The highest mountain in the world is Mount Everest.\"},\n {\"role\": \"user\", \"content\": \"What is the second?\"}\n]\n\n上一页\n思考模式\n下一页\n对话前缀续写(Beta)\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南对话前缀续写(Beta)\n对话前缀续写(Beta)\n对话前缀续写沿用 Chat Completion API,用户提供 assistant 开头的消息,来让模型补全其余的消息。\n\n注意事项\n使用对话前缀续写时,用户需确保 messages 列表里最后一条消息的 role 为 assistant,并设置最后一条消息的 prefix 参数为 True。\n用户需要设置 base_url=\"https://api.deepseek.com/beta\" 来开启 Beta 功能。\n样例代码\n下面给出了对话前缀续写的完整 Python 代码样例。在这个例子中,我们设置 assistant 开头的消息为 \"```python\\n\" 来强制模型输出 python 代码,并设置 stop 参数为 ['```'] 来避免模型的额外解释。\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com/beta\",\n)\n\nmessages = [\n {\"role\": \"user\", \"content\": \"Please write quick sort code\"},\n {\"role\": \"assistant\", \"content\": \"```python\\n\", \"prefix\": True}\n]\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n stop=[\"```\"],\n)\nprint(response.choices[0].message.content)\n\n上一页\n多轮对话\n下一页\nFIM 补全(Beta)\n注意事项\n样例代码\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南FIM 补全(Beta)\nFIM 补全(Beta)\n在 FIM (Fill In the Middle) 补全中,用户可以提供前缀和后缀(可选),模型来补全中间的内容。FIM 常用于内容续写、代码补全等场景。\n\n注意事项\n模型的最大补全长度为 4K。\n用户需要设置 base_url=\"https://api.deepseek.com/beta\" 来开启 Beta 功能。\n样例代码\n下面给出了 FIM 补全的完整 Python 代码样例。在这个例子中,我们给出了计算斐波那契数列函数的开头和结尾,来让模型补全中间的内容。\n\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com/beta\",\n)\n\nresponse = client.completions.create(\n model=\"deepseek-v4-pro\",\n prompt=\"def fib(a):\",\n suffix=\" return fib(a-1) + fib(a-2)\",\n max_tokens=128\n)\nprint(response.choices[0].text)\n\n配置 Continue 代码补全插件\nContinue 是一款支持代码补全的 VSCode 插件,您可以参考这篇文档来配置 Continue 以使用代码补全功能。\n\n上一页\n对话前缀续写(Beta)\n下一页\nJSON Output\n注意事项\n样例代码\n配置 Continue 代码补全插件\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南JSON Output\nJSON Output\n在很多场景下,用户需要让模型严格按照 JSON 格式来输出,以实现输出的结构化,便于后续逻辑进行解析。\n\nDeepSeek 提供了 JSON Output 功能,来确保模型输出合法的 JSON 字符串。\n\n注意事项\n设置 response_format 参数为 {'type': 'json_object'}。\n用户传入的 system 或 user prompt 中必须含有 json 字样,并给出希望模型输出的 JSON 格式的样例,以指导模型来输出合法 JSON。\n需要合理设置 max_tokens 参数,防止 JSON 字符串被中途截断。\n在使用 JSON Output 功能时,API 有概率会返回空的 content。我们正在积极优化该问题,您可以尝试修改 prompt 以缓解此类问题。\n样例代码\n这里展示了使用 JSON Output 功能的完整 Python 代码:\n\nimport json\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com\",\n)\n\nsystem_prompt = \"\"\"\nThe user will provide some exam text. Please parse the \"question\" and \"answer\" and output them in JSON format. \n\nEXAMPLE INPUT: \nWhich is the highest mountain in the world? Mount Everest.\n\nEXAMPLE JSON OUTPUT:\n{\n \"question\": \"Which is the highest mountain in the world?\",\n \"answer\": \"Mount Everest\"\n}\n\"\"\"\n\nuser_prompt = \"Which is the longest river in the world? The Nile River.\"\n\nmessages = [{\"role\": \"system\", \"content\": system_prompt},\n {\"role\": \"user\", \"content\": user_prompt}]\n\nresponse = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n response_format={\n 'type': 'json_object'\n }\n)\n\nprint(json.loads(response.choices[0].message.content))\n\n\n模型将会输出:\n\n{\n \"question\": \"Which is the longest river in the world?\",\n \"answer\": \"The Nile River\"\n}\n\n上一页\nFIM 补全(Beta)\n下一页\nTool Calls\n注意事项\n样例代码\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南Tool Calls\nTool Calls\nTool Calls 让模型能够调用外部工具,来增强自身能力。\n\n非思考模式\n样例代码\n这里以获取用户当前位置的天气信息为例,展示了使用 Tool Calls 的完整 Python 代码。\n\nTool Calls 的具体 API 格式请参考对话补全文档。\n\nfrom openai import OpenAI\n\ndef send_messages(messages):\n response = client.chat.completions.create(\n model=\"deepseek-v4-pro\",\n messages=messages,\n tools=tools\n )\n return response.choices[0].message\n\nclient = OpenAI(\n api_key=\"\",\n base_url=\"https://api.deepseek.com\",\n)\n\ntools = [\n {\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"description\": \"Get weather of a location, the user should supply a location first.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\",\n }\n },\n \"required\": [\"location\"]\n },\n }\n },\n]\n\nmessages = [{\"role\": \"user\", \"content\": \"How's the weather in Hangzhou, Zhejiang?\"}]\nmessage = send_messages(messages)\nprint(f\"User>\\t {messages[0]['content']}\")\n\ntool = message.tool_calls[0]\nmessages.append(message)\n\nmessages.append({\"role\": \"tool\", \"tool_call_id\": tool.id, \"content\": \"24℃\"})\nmessage = send_messages(messages)\nprint(f\"Model>\\t {message.content}\")\n\n\n这个例子的执行流程如下:\n\n用户:询问现在的天气\n模型:返回 function get_weather({location: 'Hangzhou'})\n用户:调用 function get_weather({location: 'Hangzhou'}),并传给模型。\n模型:返回自然语言,\"The current temperature in Hangzhou is 24°C.\"\n注:上述代码中 get_weather 函数功能需由用户提供,模型本身不执行具体函数。\n\n思考模式\n从 DeepSeek-V3.2 开始,API 支持了思考模式下的工具调用能力,详见思考模式。\n\nstrict 模式(Beta)\n在 strict 模式下,模型在输出 Function 调用时会严格遵循 Function 的 JSON Schema 的格式要求,以确保模型输出的 Function 符合用户的定义。在思考与非思考模式下的工具调用,均可使用 strict 模式。\n\n要使用 strict 模式,需要:\n\n用户需要设置 base_url=\"https://api.deepseek.com/beta\" 来开启 Beta 功能\n在传入的 tools 列表中,所有 function 均需设置 strict 属性为 true\n服务端会对用户传入的 Function 的 JSON Schema 进行校验,如不符合规范,或遇到服务端不支持的 JSON Schema 类型,将返回错误信息\n以下是 strict 模式下 tool 的定义样例:\n\n{\n \"type\": \"function\",\n \"function\": {\n \"name\": \"get_weather\",\n \"strict\": true,\n \"description\": \"Get weather of a location, the user should supply a location first.\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\",\n }\n },\n \"required\": [\"location\"],\n \"additionalProperties\": false\n }\n }\n}\n\nstrict 模式支持的 JSON Schema 类型\nobject\nstring\nnumber\ninteger\nboolean\narray\nenum\nanyOf\nobject 类型\nobject 定义一个包含键值对的深层结构,其中 properties 定义了对象中每个键(属性)的 schema。每个 object 的所有属性均需设置为 required,且 object 中 additionalProperties 属性必须为 false。\n\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"age\": { \"type\": \"integer\" }\n },\n \"required\": [\"name\", \"age\"],\n \"additionalProperties\": false\n}\n\nstring 类型\n支持的参数:\npattern:使用正则表达式来约束字符串的格式\nformat:使用预定义的常见格式进行校验,目前支持:\nemail:电子邮件地址\nhostname:主机名\nipv4:IPv4 地址\nipv6:IPv6 地址\nuuid:uuid\n不支持的参数\nminLength\nmaxLength\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"user_email\": {\n \"type\": \"string\",\n \"description\": \"The user's email address\",\n \"format\": \"email\" \n },\n \"zip_code\": {\n \"type\": \"string\",\n \"description\": \"Six digit postal code\",\n \"pattern\": \"^\\\\d{6}$\"\n }\n }\n}\n\nnumber/integer 类型\n支持的参数\nconst:固定数字为常数\ndefault:数字的默认值\nminimum:最小值\nmaximum:最大值\nexclusiveMinimum:不小于\nexclusiveMaximum:不大于\nmultipleOf:数字输出为这个值的倍数\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"score\": {\n \"type\": \"integer\",\n \"description\": \"A number from 1-5, which represents your rating, the higher, the better\",\n \"minimum\": 1,\n \"maximum\": 5\n }\n },\n \"required\": [\"score\"],\n \"additionalProperties\": false\n}\n\n\narray 类型\n不支持的参数\nminItems\nmaxItems\n示例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"keywords\": {\n \"type\": \"array\",\n \"description\": \"Five keywords of the article, sorted by importance\",\n \"items\": {\n \"type\": \"string\",\n \"description\": \"A concise and accurate keyword or phrase.\"\n }\n }\n },\n \"required\": [\"keywords\"],\n \"additionalProperties\": false\n}\n\nenum\nenum 可以确保输出是预期的几个选项之一,例如在订单状态的场景下,只能是有限几个状态之一。\n\n样例:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"order_status\": {\n \"type\": \"string\",\n \"description\": \"Ordering status\",\n \"enum\": [\"pending\", \"processing\", \"shipped\", \"cancelled\"]\n }\n }\n}\n\nanyOf\n匹配所提供的多个 schema 中的任意一个,可以处理可能具有多种有效格式的字段,例如用户的账户可能是邮箱或者手机号中的一个:\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"account\": {\n \"anyOf\": [\n { \"type\": \"string\", \"format\": \"email\", \"description\": \"可以是电子邮件地址\" },\n { \"type\": \"string\", \"pattern\": \"^\\\\d{11}$\", \"description\": \"或11位手机号码\" }\n ]\n }\n }\n}\n\n$ref 和 $def\n可以使用 $def 定义模块,再用 $ref 引用以减少模式的重复和模块化,此外还可以单独使用 $ref 定义递归结构。\n\n{\n \"type\": \"object\",\n \"properties\": {\n \"report_date\": {\n \"type\": \"string\",\n \"description\": \"The date when the report was published\"\n },\n \"authors\": {\n \"type\": \"array\",\n \"description\": \"The authors of the report\",\n \"items\": {\n \"$ref\": \"#/$def/author\"\n }\n }\n },\n \"required\": [\"report_date\", \"authors\"],\n \"additionalProperties\": false,\n \"$def\": {\n \"authors\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"description\": \"author's name\"\n },\n \"institution\": {\n \"type\": \"string\",\n \"description\": \"author's institution\"\n },\n \"email\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"author's email\"\n }\n },\n \"additionalProperties\": false,\n \"required\": [\"name\", \"institution\", \"email\"]\n }\n }\n}\n\n上一页\nJSON Output\n下一页\n上下文硬盘缓存\n非思考模式\n样例代码\n思考模式\nstrict 模式(Beta)\nstrict 模式支持的 JSON Schema 类型\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n跳到主要内容\nDeepSeek API 文档 Logo\nDeepSeek API 文档\n中文(中国)\nDeepSeek Platform\n\n快速开始\n首次调用 API\n模型 & 价格\nToken 用量计算\n限速\n错误码\n接入 Agent 工具\nAPI 指南\n思考模式\n多轮对话\n对话前缀续写(Beta)\nFIM 补全(Beta)\nJSON Output\nTool Calls\n上下文硬盘缓存\nAnthropic API\nAPI 文档\n基本信息\n对话(Chat)\n对话补全\n补全(Completions)\n模型(Model)\n其它\n新闻\n其它资源\n常见问题\n更新日志\nAPI 指南上下文硬盘缓存\n上下文硬盘缓存\nDeepSeek API 上下文硬盘缓存技术对所有用户默认开启,用户无需修改代码即可享用。\n\n用户的每一个请求都会触发硬盘缓存的构建。若后续请求与之前的请求在前缀上存在重复,则重复部分只需要从缓存中拉取,计入“缓存命中”。\n\n缓存落盘与命中规则\n缓存命中的前提是相应前缀已被“落盘”(写入硬盘缓存)。受 Sliding Window Attention 机制的影响,缓存前缀的存取与判别与之前有所不同。每条缓存前缀是一个独立的完整单元。后续请求只有在完整匹配缓存前缀单元时,才能命中缓存。\n\n缓存前缀落盘时机:\n请求结束位置落盘:每次请求的用户输入结束位置与模型输出结束位置,会产生两个缓存前缀单元。后续请求若完整匹配了它们,则可命中。\n\n公共前缀检测落盘:当系统检测到多次请求之间存在公共前缀时,会将该公共前缀作为一个独立的缓存前缀单元进行落盘。后续请求若完整复用了该缓存前缀单元,则可命中。\n\n按固定 token 间隔落盘:在长输入或长输出中,系统会以一定的 token 数量为间隔,截取缓存前缀单元,避免长前缀因迟迟未达到结束位置而完全无法被缓存。\n\n举例 1:用户第一轮请求内容为 A + B,第二轮请求内容为 A + B + C,则第二轮请求能完整匹配 A + B 这个缓存前缀单元,可以命中 A + B 的缓存。详见下文例一。\n\n举例 2:用户第一轮请求的内容为 A + B,第二轮请求的内容为 A + C,则第二轮请求无法命中缓存,因为 A + C 不能完整匹配第一轮的缓存前缀单元(A + B)。但此时系统会识别到两轮请求存在公共前缀 A,并将 A 作为缓存前缀单元落盘。当第三轮请求 A + D 到来时,能完整匹配 A 这个缓存前缀单元,可以命中 A 的缓存。详见下文例二。\n\n例一:多轮对话\n第一次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位乐于助人的助手\"},\n {\"role\": \"user\", \"content\": \"中国的首都是哪里?\"}\n]\n\n第二次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位乐于助人的助手\"},\n {\"role\": \"user\", \"content\": \"中国的首都是哪里?\"},\n {\"role\": \"assistant\", \"content\": \"中国的首都是北京。\"},\n {\"role\": \"user\", \"content\": \"美国的首都是哪里?\"}\n]\n\n在上例中,第二次请求可以完整复用第一次请求的缓存前缀单元,这部分会计入“缓存命中”。\n\n例二:长文本问答\n第一次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位资深的财报分析师...\"}\n {\"role\": \"user\", \"content\": \"<财报内容>\\n\\n请总结一下这份财报的关键信息。\"}\n]\n\n第二次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位资深的财报分析师...\"}\n {\"role\": \"user\", \"content\": \"<财报内容>\\n\\n请分析一下这份财报的盈利情况。\"}\n]\n\n第三次请求\n\nmessages: [\n {\"role\": \"system\", \"content\": \"你是一位资深的财报分析师...\"}\n {\"role\": \"user\", \"content\": \"<财报内容>\\n\\n请分析一下公司收入与支出占比。\"}\n]\n\n在上例中,前两次请求不会命中缓存。前两次请求完成后,系统会识别出 system 消息 + user 消息中的<财报内容>为缓存前缀单元,并进行落盘。在第三次请求中,由于完整匹配了前面落盘的缓存前缀单元,则可命中缓存。\n\n查看缓存命中情况\n在 DeepSeek API 的返回中,我们在 usage 字段中增加了两个字段,来反映请求的缓存命中情况:\n\nprompt_cache_hit_tokens:本次请求的输入中,缓存命中的 tokens 数\n\nprompt_cache_miss_tokens:本次请求的输入中,缓存未命中的 tokens 数\n\n硬盘缓存与输出随机性\n硬盘缓存只匹配到用户输入的前缀部分,输出仍然是通过计算推理得到的,仍然受到 temperature 等参数的影响,从而引入随机性。其输出效果与不使用硬盘缓存相同。\n\n其它说明\n缓存系统是“尽力而为”,不保证 100% 缓存命中\n\n缓存构建耗时为秒级。缓存不再使用后会自动被清空,时间一般为几个小时到几天\n\n上一页\nTool Calls\n下一页\nAnthropic API\n缓存落盘与命中规则\n缓存前缀落盘时机:\n例一:多轮对话\n例二:长文本问答\n查看缓存命中情况\n硬盘缓存与输出随机性\n其它说明\n微信公众号\nWeChat QRcode\n社区\n邮箱\nDiscord\nTwitter\n更多\nGitHub\nCopyright © 2025 DeepSeek, Inc.\n"}}}}