Habilite el Code Interpreter de Python integrado al llamar a un modelo. El modelo escribe y ejecuta código Python en un entorno aislado para resolver problemas complejos, como cálculos matemáticos y análisis de datos.
Cómo usar
Code Interpreter admite tres métodos de invocación. Los parámetros difieren para cada método:
Compatible con OpenAI - Responses API
Para habilitar Code Interpreter, añada la herramienta code_interpreter al parámetro tools.
Para obtener los mejores resultados, habilite las herramientas
code_interpreter,web_searchyweb_extractoral mismo tiempo.
# Import dependencies and create the client...
response = client.responses.create(
model="qwen3.8-max",
input="What is 123 to the power of 21?",
tools=[
{"type": "code_interpreter"},
{"type": "web_search"},
{"type": "web_extractor"},
],
extra_body={
"enable_thinking": True
}
)
print(response.output_text)
Compatible con OpenAI - Chat Completions API
Para habilitar Code Interpreter, pase enable_code_interpreter: true en la solicitud de API.
# Import dependencies and create the client...
completion = client.chat.completions.create(
# Use a model that supports Code Interpreter
model="qwen3.8-max",
messages=[{"role": "user", "content": "What is 123 to the power of 21?"}],
# Because enable_code_interpreter is not a standard OpenAI parameter, you must pass it through extra_body when using the Python SDK. When using the Node.js SDK, pass it as a top-level parameter.
extra_body={
"enable_code_interpreter": True,
# The Code Interpreter feature only supports calls in thinking mode
"enable_thinking": True,
},
# Only streaming output calls are supported
stream=True
)
El protocolo compatible con OpenAI no devuelve detalles de la ejecución del código.
DashScope
Para habilitar Code Interpreter, establezca enable_code_interpreter en true en la solicitud de API.
# Import dependencies...
response = dashscope.MultiModalConversation.call(
# If the environment variable is not configured, replace the next line with: api_key="sk-xxx", using your Model Studio API key.
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.5-plus",
messages=[{"role": "user", "content": "What is 123 to the power of 21?"}],
# Enable Code Interpreter using the enable_code_interpreter parameter
enable_code_interpreter=True,
# The Code Interpreter feature only supports thinking mode
enable_thinking=True,
result_format="message",
# Only streaming output calls are supported
stream=True
)
El código ejecutado se devuelve en el campo tool_info.
Una vez habilitado Code Interpreter, el modelo procesa las solicitudes en estas etapas:
- Pensamiento: El modelo analiza la solicitud del usuario y genera ideas y pasos para resolver el problema.
- Ejecución de código: El modelo genera y ejecuta código Python.
- Integración de resultados: El modelo recibe el resultado de la ejecución del código y planifica los siguientes pasos.
- Respuesta: El modelo genera una respuesta en lenguaje natural.
Los pasos 2 y 3 pueden repetirse varias veces.
Los campos devueltos por las diferentes API varían:
- Responses API: El contenido de pensamiento se devuelve en un objeto con
type="reasoning"en la salida. La ejecución de código se devuelve contype="code_interpreter_call". La respuesta se devuelve contype="message". - Chat Completions API / DashScope: El contenido de pensamiento se devuelve en el campo
reasoning_content. La respuesta se devuelve en el campocontent. DashScope también admite la devolución de contenido de código en el campotool_info.
Ámbito
deepseek-v4.1-flash-1017 admite la herramienta integrada code_interpreter en la Responses API en las seis regiones y los alcances de implementación correspondientes indicados en la página del modelo.
Modelos recomendados
API de respuestas
Qwen-Max: serie Qwen3.8-Max, serie Qwen3.7-Max
Qwen-Plus: serie Qwen3.7-Plus, serie Qwen3.6-Plus, serie Qwen3.5-Plus
DeepSeek: deepseek-v4-flash-0731, deepseek-v4-pro
GLM: glm-5.2
Serie de código abierto Qwen3.8
Chat Completions API / DashScope
- Qwen-Max (modo de pensamiento): serie Qwen3-Max
- Qwen-Plus: serie Qwen3.5-Plus
Otros modelos
Estos modelos también admiten Code Interpreter, pero es posible que no tengan un rendimiento tan óptimo. Solo se admiten a través de la Responses API.
- Qwen-Flash: serie Qwen3.7-Flash, serie Qwen3.6-Flash, serie Qwen3.5-Flash
- Serie de código abierto Qwen3.6 (excepto qwen3.6-27b)
- Serie de código abierto Qwen3.5
Introducción
Estos ejemplos muestran cómo Code Interpreter resuelve problemas matemáticos.
Compatible con OpenAI - Responses API
Para obtener los mejores resultados, habilite las herramientas
code_interpreter,web_searchyweb_extractoral mismo tiempo.
import os
from openai import OpenAI
client = OpenAI(
# If the environment variable is not configured, replace the next line with: api_key="sk-xxx", using your Model Studio API key.
api_key=os.getenv("DASHSCOPE_API_KEY"),
# The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)
response = client.responses.create(
model="qwen3.8-max",
input="12 to the power of 3",
tools=[
{
"type": "code_interpreter"
},
{
"type": "web_search"
},
{
"type": "web_extractor"
}
],
extra_body = {
"enable_thinking": True
}
)
# Uncomment the following line to view the intermediate process output
# print(response.output)
print("="*20+"Response Content"+"="*20)
print(response.output_text)
print("="*20+"Token Consumption and Tool Calls"+"="*20)
print(response.usage)
import OpenAI from "openai";
import process from 'process';
const openai = new OpenAI({
// If the environment variable is not configured, replace the next line with: apiKey: "sk-xxx", using your Model Studio API key.
apiKey: process.env.DASHSCOPE_API_KEY,
// The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen3.8-max",
input: "Calculate 12 to the power of 3",
tools: [
{ type: "code_interpreter" },
{ type: "web_search" },
{ type: "web_extractor" }
],
enable_thinking: true
});
console.log("====================Response Content====================");
console.log(response.output_text);
// Print the number of tool calls
console.log("====================Token Consumption and Tool Calls====================");
if (response.usage && response.usage.x_tools) {
console.log(`Code Interpreter runs: ${response.usage.x_tools.code_interpreter?.count || 0}`);
}
// Uncomment the following line to view the intermediate process output
// console.log(JSON.stringify(response.output[0], null, 2));
}
main();
# The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"input": "Calculate 12 to the power of 3",
"tools": [
{"type": "code_interpreter"},
{"type": "web_search"},
{"type": "web_extractor"}
],
"enable_thinking": true
}'
Respuesta de ejemplo
====================Response Content====================
12 to the power of 3 is **1728**.
Calculation process:
12³ = 12 × 12 × 12 = 144 × 12 = 1728
====================Token Consumption and Tool Calls====================
ResponseUsage(input_tokens=1160, input_tokens_details=InputTokensDetails(cached_tokens=0), output_tokens=195, output_tokens_details=OutputTokensDetails(reasoning_tokens=105), total_tokens=1355, x_tools={'code_interpreter': {'count': 1}})
Compatible con OpenAI - Chat Completions API
Python
from openai import OpenAI
import os
# Initialize the OpenAI client
client = OpenAI(
# If the environment variable is not configured, replace with your Alibaba Cloud Model Studio API key: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
# The following URL is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
messages = [{"role": "user", "content": "What is 123 to the power of 21?"}]
completion = client.chat.completions.create(
model="qwen3.5-plus",
messages=messages,
extra_body={"enable_thinking": True, "enable_code_interpreter": True},
stream=True,
stream_options={
"include_usage": True
},
)
reasoning_content = "" # Complete thinking process
answer_content = "" # Complete response
is_answering = False # Flag to check if the response phase has started
print("\n" + "=" * 20 + "Thinking Process" + "=" * 20 + "\n")
for chunk in completion:
if not chunk.choices:
print("\nUsage:")
print(chunk.usage)
continue
delta = chunk.choices[0].delta
# Collect only the thinking content
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
# When content is received, start the response
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "Complete Response" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
Respuesta de ejemplo
====================Thinking Process====================
The user is asking for the value of 123 to the power of 21. This is a mathematical calculation problem. I need to calculate 123^21.
I can use the code calculator to compute this value. I need to call the code_interpreter function and pass the Python code to calculate 123**21.
Let me construct this function call.
The user asked for 123 to the power of 21, and I calculated the result using Python code. The calculation shows that 123 to the power of 21 equals 77269364466549865653073473388030061522211723. This is a very large number, and I should provide it directly.
====================Complete Response====================
123 to the power of 21 is: 77269364466549865653073473388030061522211723
Usage:
CompletionUsage(completion_tokens=245, prompt_tokens=719, total_tokens=964, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=None, reasoning_tokens=153, rejected_prediction_tokens=None), prompt_tokens_details=None)
Node.js
import OpenAI from "openai";
import process from 'process';
// Initialize the OpenAI client
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY, // Read from environment variables
// The following URL is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
baseURL: 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
async function main() {
try {
const messages = [{ role: 'user', content: 'What is 123 to the power of 21?' }];
const stream = await openai.chat.completions.create({
model: 'qwen3.5-plus',
messages,
stream: true,
enable_thinking: true,
enable_code_interpreter: true
});
console.log('\n' + '='.repeat(20) + 'Thinking Process' + '='.repeat(20) + '\n');
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\nUsage:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// Collect only the thinking content
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
if (!isAnswering) {
process.stdout.write(delta.reasoning_content);
}
reasoningContent += delta.reasoning_content;
}
// When content is received, start the response
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + 'Complete Response' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('Error:', error);
}
}
main();
Respuesta de ejemplo
====================Thinking Process====================
The user is asking for the value of 123 raised to the power of 21. This is a mathematical calculation that I can perform using Python's code interpreter. I'll use the exponentiation operator ** to calculate this.
Let me write the code to compute 123**21.The calculation has been completed successfully. The result of 123 raised to the power of 21 is a very large number: 77269364466549865653073473388030061522211723.
I should present this result clearly to the user.
====================Complete Response====================
123 to the power of 21 is: 77269364466549865653073473388030061522211723
curl
# The following URL is for the China (Beijing) region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
curl -X POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.5-plus",
"messages": [
{
"role": "user",
"content": "What is 123 to the power of 21?"
}
],
"enable_code_interpreter": true,
"enable_thinking": true,
"stream": true
}'
Respuesta de ejemplo
data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: {"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":null,"reasoning_content":"The user"},"index":0}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: {"choices":[{"delta":{"content":null,"reasoning_content":" is asking"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: {"choices":[{"delta":{"content":null,"reasoning_content":" for"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
...
data: {"choices":[{"delta":{"content":"is a very large number, with a total","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: {"choices":[{"delta":{"content":"of 43 digits","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: {"choices":[{"delta":{"content":".","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1761899724,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-2f96ef0b-5924-4dfc-b768-4d53ec538b4e"}
data: [DONE]
DashScope
El SDK de Java no es compatible.
Python
import os
import dashscope
# China (Beijing) region. Replace {WorkspaceId} with your actual Workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1'
messages = [
{"role": "user", "content": "What is 123 to the power of 21?"},
]
response = dashscope.MultiModalConversation.call(
# If the environment variable is not configured, replace the next line with: api_key="sk-xxx", using your Model Studio API key.
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.5-plus",
messages=messages,
enable_code_interpreter=True,
enable_thinking=True,
result_format="message",
# Only streaming output is supported
stream=True
)
for chunk in response:
output = chunk["output"]
print(output)
Respuesta de ejemplo
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": "The"}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " user is asking"}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " me"}}]}
...
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " I'll write a"}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " simple Python program to calculate"}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": "The"}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " user"}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " asked"}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
...
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " I should present this result"}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " to the user in"}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "", "reasoning_content": " a clear format."}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "123 to the power of ", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "21 is:\n\n", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "772693", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "644665", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "498656", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "530734", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "733880", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "300615", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "222117", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "null", "message": {"role": "assistant", "content": "23", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
{"text": null, "finish_reason": null, "choices": [{"finish_reason": "stop", "message": {"role": "assistant", "content": "", "reasoning_content": ""}}], "tool_info": [{"code_interpreter": {"code": "123**21"}, "type": "code_interpreter"}]}
curl
curl -X POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen3.5-plus",
"input":{
"messages":[
{
"role": "user",
"content": "What is 123 to the power of 21?"
}
]
},
"parameters": {
"enable_code_interpreter": true,
"enable_thinking": true,
"result_format": "message"
}
}'
Respuesta de ejemplo
El texto
<...text content...>es un comentario explicativo y no forma parte de la respuesta real de la API. Este comentario se utiliza para identificar las diferentes etapas de procesamiento.
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"The","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":290,"output_tokens":3,"input_tokens":287,"output_tokens_details":{"reasoning_tokens":1}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":" user is asking","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":293,"output_tokens":6,"input_tokens":287,"output_tokens_details":{"reasoning_tokens":4}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
...Thinking stage...
id:21
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":388,"output_tokens":101,"input_tokens":287,"output_tokens_details":{"reasoning_tokens":68}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
...Thinking ends, starting Code Interpreter...
id:22
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"null"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":388,"output_tokens":101,"input_tokens":287,"output_tokens_details":{"reasoning_tokens":68},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
...Thinking starts after running Code Interpreter...
id:23
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"The","role":"assistant"},"finish_reason":"null"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":838,"output_tokens":104,"input_tokens":734,"output_tokens_details":{"reasoning_tokens":69},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
id:24
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":" user","role":"assistant"},"finish_reason":"null"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":839,"output_tokens":105,"input_tokens":734,"output_tokens_details":{"reasoning_tokens":70},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
...Thinking stage...
id:43
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":" a clear format.","role":"assistant"},"finish_reason":"null"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":942,"output_tokens":208,"input_tokens":734,"output_tokens_details":{"reasoning_tokens":171},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
...Thinking ends, starting response...
id:44
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"123 to the power of","reasoning_content":"","role":"assistant"},"finish_reason":"null"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":947,"output_tokens":213,"input_tokens":734,"output_tokens_details":{"reasoning_tokens":171},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
...
id:53
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"23","reasoning_content":"","role":"assistant"},"finish_reason":"null"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":997,"output_tokens":263,"input_tokens":734,"output_tokens_details":{"reasoning_tokens":171},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
id:54
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"stop"}],"tool_info":[{"code_interpreter":{"code":"123**21"},"type":"code_interpreter"}]},"usage":{"total_tokens":997,"output_tokens":263,"input_tokens":734,"output_tokens_details":{"reasoning_tokens":171},"plugins":{"code_interpreter":{"count":1}}},"request_id":"a1959ad1-2637-4672-a21f-4d351371d254"}
Análisis de respuestas
Compatible con OpenAI - Responses API
El siguiente ejemplo del SDK de Python de OpenAI muestra cómo analizar una respuesta en streaming.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)
response = client.responses.create(
model="qwen3.8-max",
input="12 to the power of 3",
tools=[
{"type": "code_interpreter"}
],
extra_body={
"enable_thinking": True
},
stream=True
)
def print_section(title):
print(f"\n{'=' * 20}{title}{'=' * 20}")
current_section = None
final_response = None
for event in response:
# Incremental output of the thinking process
if event.type == "response.reasoning_text.delta":
if current_section != "reasoning":
print_section("Thinking Process")
current_section = "reasoning"
print(event.delta, end="", flush=True)
# Code Interpreter call completed
elif event.type == "response.output_item.done" and hasattr(event.item, "code"):
print_section("Code Execution")
print(f"Code:\n{event.item.code}")
if event.item.outputs:
print(f"Result: {event.item.outputs[0].logs}")
current_section = "code"
# Incremental output of the final response
elif event.type == "response.output_text.delta":
if current_section != "answer":
print_section("Complete Response")
current_section = "answer"
print(event.delta, end="", flush=True)
# Response completed, save the final result to get usage
elif event.type == "response.completed":
final_response = event.response
# Output token consumption and number of tool calls
if final_response and final_response.usage:
print_section("Token Consumption and Tool Calls")
usage = final_response.usage
print(f"Input Tokens: {usage.input_tokens}")
print(f"Output Tokens: {usage.output_tokens}")
print(f"Thinking Tokens: {usage.output_tokens_details.reasoning_tokens}")
# If the model does not actually invoke the code interpreter (e.g., simple questions answered directly), the response has no x_tools field
if hasattr(usage, 'x_tools'):
print(f"Code Interpreter calls: {usage.x_tools.get('code_interpreter', {}).get('count', 0)}")
else:
print("Code Interpreter calls: 0")
DashScope
El siguiente ejemplo del SDK de Python de DashScope realiza dos cálculos en una sola solicitud y analiza el código devuelto y el recuento de llamadas.
La Chat Completions API de OpenAI no devuelve datos durante la etapa de ejecución de código, por lo que no se envía ninguna respuesta entre las etapas de pensamiento e integración de resultados. Ambas etapas devuelven contenido a través del campo
reasoning_content, por lo que puede procesarlas conjuntamente como la etapa de pensamiento. Para ver un ejemplo de análisis de respuesta, consulte el código en la sección Primeros pasos.
import os
from dashscope import MultiModalConversation
# China (Beijing) region. Replace {WorkspaceId} with your actual Workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1'
messages = [{"role": "user", "content": "Run Code Interpreter twice: first, calculate the value of 123 to the power of 23. Second, divide the result by 5."}]
response = MultiModalConversation.call(
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.5-plus",
messages=messages,
result_format="message",
enable_thinking=True,
enable_code_interpreter=True,
stream=True,
incremental_output=True,
)
# Status flags: track if tool info is printed, if the answering phase has started, and if in the reasoning section
is_answering = False
in_reasoning_section = False
cur_tools = []
# Print a section with a title
def print_section(title):
print(f"\n{'=' * 20}{title}{'=' * 20}")
# Initially print the "Thinking Process" title
print_section("Thinking Process")
in_reasoning_section = True
# Process each block returned by the model in a stream
for chunk in response:
try:
# Extract key fields from the response: content, reasoning text, tool call info
choice = chunk.output.choices[0]
msg = choice.message
content = msg.get("content", "") # Final answer content
reasoning = msg.get("reasoning_content", "") # Reasoning process text
tools = chunk.output.get("tool_info", None) # Tool call information
except (IndexError, AttributeError, KeyError):
# Skip blocks with abnormal structure
continue
# If there is no valid content, skip the current block
if not content and not reasoning and tools is None:
continue
# Output the reasoning process
if reasoning and not is_answering:
if not in_reasoning_section:
print_section("Thinking Process")
in_reasoning_section = True
print(reasoning, end="", flush=True)
if tools is not None and tools != cur_tools:
print_section("Tool Information")
print(tools)
in_reasoning_section = False
cur_tools = tools
# Output the final answer content
if content:
if not is_answering:
print_section("Complete Response")
is_answering = True
in_reasoning_section = False
print(content, end="", flush=True)
# Print the number of Code Interpreter calls
print_section("Code Interpreter Runs")
print(chunk.usage.plugins)
Respuesta de ejemplo
====================Thinking Process====================
The user wants to run Code Interpreter twice:
1. First run: Calculate the value of 123 to the power of 23.
2. Second run: Divide the result of the first run by 5.
I need to first call Code Interpreter to calculate 123**23, then use this result to call Code Interpreter again to divide by 5.
Let me do the first calculation.
====================Tool Information====================
[{'code_interpreter': {'code': '123**23'}, 'type': 'code_interpreter'}]
====================Thinking Process====================
The first calculation yielded the value of 123 to the power of 23: 1169008215014432917465348578887506800769541157267
Now for the second run, I need to divide this result by 5. I need to use this exact value for the division.
====================Tool Information====================
[{'code_interpreter': {'code': '123**23'}, 'type': 'code_interpreter'}, {'code_interpreter': {'code': ''}, 'type': 'code_interpreter'}]
====================Tool Information====================
[{'code_interpreter': {'code': '123**23'}, 'type': 'code_interpreter'}, {'code_interpreter': {'code': '1169008215014432917465348578887506800769541157267 / 5'}, 'type': 'code_interpreter'}]
====================Thinking Process====================
The user requested to run Code Interpreter twice:
1. First, calculate 123 to the power of 23. The result is: 1169008215014432917465348578887506800769541157267
2. Second, divide this result by 5. The result is: 2.338016430028866e+47
Now I need to report these two results to the user.
====================Complete Response====================
First run result: 123 to the power of 23 = 1169008215014432917465348578887506800769541157267
Second run result: The above result divided by 5 = 2.338016430028866e+47
====================Code Interpreter Runs====================
{'code_interpreter': {'count': 2}}
Notas
-
Code Interpreter y Function calling son mutuamente excluyentes.
Habilitar ambas opciones en la misma solicitud provoca un error.
-
Cuando Code Interpreter está habilitado, una sola solicitud puede desencadenar múltiples inferencias del modelo. El campo
usageresume el consumo total de tokens para todas las llamadas en esa solicitud.
Facturación
Code Interpreter es gratuito por tiempo limitado, pero aumenta el consumo de tokens.