Appearance
Web extractor
LLMs cannot directly access web page data. The web extractor accesses a URL and extracts its content for the model.
Usage
The web extractor can be called in three ways. The required parameters differ for each method:
OpenAI-compatible - Responses API
Add web_search and web_extractor to the tools parameter.
When using
qwen3-max-2026-01-23, setenable_thinkingtotrue. For better accuracy with mathematical or data analytics problems, also enable thecode_interpretertool.
HELPCODEESCAPE-python
response = client.responses.create(
model="qwen3-max-2026-01-23",
input="Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
tools=[
# To enable web extraction, also enable the web search tool
{"type": "web_search"},
{"type": "web_extractor"},
{"type": "code_interpreter"}
],
extra_body={
# Thinking mode must be enabled
"enable_thinking": True
}
)
print(response.output_text)OpenAI-compatible - Chat Completions API
Set enable_search to true and search_strategy to agent_max. Also set enable_thinking to true.
Non-streaming output is not supported.
HELPCODEESCAPE-python
# Import dependencies and create a client...
completion = client.chat.completions.create(
model="qwen3-max-2026-01-23",
messages=[{"role": "user", "content": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content"}],
extra_body={
"enable_thinking": True,
"enable_search": True,
"search_options": {"search_strategy": "agent_max"}
},
stream=True
)DashScope
Set enable_search to true and search_strategy to agent_max. Also set enable_thinking to true.
Non-streaming output is not supported.
HELPCODEESCAPE-python
from dashscope import Generation
response = Generation.call(
model="qwen3-max-2026-01-23",
messages=[{"role": "user", "content": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content"}],
enable_search=True,
search_options={"search_strategy": "agent_max"},
enable_thinking=True,
result_format="message",
stream=True,
incremental_output=True
)Supported models
Recommended models
Responses API
Qwen-Plus: Qwen3.6-Plus series, Qwen3.5-Plus series
Chat Completions API / DashScope
Qwen-Max (thinking mode): Qwen3-Max series
Qwen-Plus: Qwen3.6-Plus series, Qwen3.5-Plus series
Other models
The following models also support this tool but may not perform as well as the recommended models.
Qwen-Flash: Qwen3.6-Flash series, Qwen3.5-Flash series
Qwen3.6 open-source series (except qwen3.6-27b)
Qwen3.5 open-source series
Getting started
This example calls the web extractor through the Responses API to summarize a technical document. You must get an API key and configure it as an environment variable. Python
HELPCODEESCAPE-python
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"),
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
response = client.responses.create(
model="qwen3-max-2026-01-23",
input="Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
tools=[
{
"type": "web_search"
},
{
"type": "web_extractor"
},
{
"type": "code_interpreter"
}
],
extra_body = {
"enable_thinking": True
}
)
# Uncomment the following line to view intermediate process outputs
# print(response.output)
print("="*20+"Response Content"+"="*20)
print(response.output_text)
# Print the number of tool calls
usage = response.usage
print("="*20+"Tool Call Count"+"="*20)
if hasattr(usage, 'x_tools') and usage.x_tools:
print(f"\nWeb extraction count: {usage.x_tools.get('web_extractor', {}).get('count', 0)}")Node.js
HELPCODEESCAPE-nodejs
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,
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen3-max-2026-01-23",
input: "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
tools: [
{ type: "web_search" },
{ type: "web_extractor" },
{ type: "code_interpreter" }
],
enable_thinking: true
});
console.log("====================Response Content====================");
console.log(response.output_text);
// Print the number of tool calls
console.log("====================Tool Call Count====================");
if (response.usage && response.usage.x_tools) {
console.log(`Web extraction count: ${response.usage.x_tools.web_extractor?.count || 0}`);
console.log(`Web search count: ${response.usage.x_tools.web_search?.count || 0}`);
}
// Uncomment the following line to view intermediate process outputs
// console.log(JSON.stringify(response.output[0], null, 2));
}
main();curl
HELPCODEESCAPE-curl
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
"tools": [
{"type": "web_search"},
{"type": "web_extractor"},
{"type": "code_interpreter"}
],
"enable_thinking": true
}'Sample output:
HELPCODEESCAPE-plaintext
====================Response Content====================
Based on the official Alibaba Cloud Model Studio documentation, I have summarized the core content of the **code interpreter** feature for you:
## 1. Feature Positioning
...
> **Document Source**: Alibaba Cloud Model Studio official documentation - Qwen Code Interpreter and Assistant API Code Interpreter (Updated: December 2025)
====================Tool Call Count====================
Web extraction count: 1Streaming output
Web extraction can be time-consuming. Enable streaming output to receive intermediate results in real time.
Use the Responses API to retrieve intermediate tool execution status.
OpenAI-compatible - Responses API
Python
HELPCODEESCAPE-python
import os
from openai import OpenAI
client = OpenAI(
# If the environment variable is not configured, replace the next line with api_key="sk-xxx" (not recommended), using your Model Studio API key.
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
stream = client.responses.create(
model="qwen3-max-2026-01-23",
input="Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
tools=[
{"type": "web_search"},
{"type": "web_extractor"},
{"type": "code_interpreter"}
],
stream=True,
extra_body={"enable_thinking": True}
)
reasoning_started = False
output_started = False
for chunk in stream:
# Print the thinking process
if chunk.type == 'response.reasoning_summary_text.delta':
if not reasoning_started:
print("="*20 + "Thinking Process" + "="*20)
reasoning_started = True
print(chunk.delta, end='', flush=True)
# Print when tool call is complete
elif chunk.type == 'response.output_item.done':
if hasattr(chunk, 'item') and hasattr(chunk.item, 'type'):
if chunk.item.type == 'web_extractor_call':
print("\n" + "="*20 + "Tool Call" + "="*20)
print(chunk.item.goal)
print(chunk.item.output)
elif chunk.item.type == 'reasoning':
reasoning_started = False
# Print the response content
elif chunk.type == 'response.output_text.delta':
if not output_started:
print("\n" + "="*20 + "Response Content" + "="*20)
output_started = True
print(chunk.delta, end='', flush=True)
# When the response is complete, print the number of tool calls
elif chunk.type == 'response.completed':
print("\n" + "="*20 + "Tool Call Count" + "="*20)
usage = chunk.response.usage
if hasattr(usage, 'x_tools') and usage.x_tools:
print(f"Web extraction count: {usage.x_tools.get('web_extractor', {}).get('count', 0)}")
print(f"Web search count: {usage.x_tools.get('web_search', {}).get('count', 0)}")Node.js
HELPCODEESCAPE-nodejs
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,
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const stream = await openai.responses.create({
model: "qwen3-max-2026-01-23",
input: "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
tools: [
{ type: "web_search" },
{ type: "web_extractor" },
{ type: "code_interpreter" }
],
stream: true,
enable_thinking: true
});
let reasoningStarted = false;
let outputStarted = false;
for await (const chunk of stream) {
// Print the thinking process
if (chunk.type === 'response.reasoning_summary_text.delta') {
if (!reasoningStarted) {
console.log("====================Thinking Process====================");
reasoningStarted = true;
}
process.stdout.write(chunk.delta);
}
// Print when tool call is complete
else if (chunk.type === 'response.output_item.done') {
if (chunk.item && chunk.item.type === 'web_extractor_call') {
console.log("\n" + "====================Tool Call====================");
console.log(chunk.item.goal);
console.log(chunk.item.output);
} else if (chunk.item && chunk.item.type === 'reasoning') {
reasoningStarted = false;
}
}
// Print the response content
else if (chunk.type === 'response.output_text.delta') {
if (!outputStarted) {
console.log("\n" + "====================Response Content====================");
outputStarted = true;
}
process.stdout.write(chunk.delta);
}
// When the response is complete, print the number of tool calls
else if (chunk.type === 'response.completed') {
console.log("\n" + "====================Tool Call Count====================");
const usage = chunk.response.usage;
if (usage && usage.x_tools) {
console.log(`Web extraction count: ${usage.x_tools.web_extractor?.count || 0}`);
console.log(`Web search count: ${usage.x_tools.web_search?.count || 0}`);
}
}
}
}
main();curl
HELPCODEESCAPE-curl
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content",
"tools": [
{"type": "web_search"},
{"type": "web_extractor"},
{"type": "code_interpreter"}
],
"enable_thinking": true,
"stream": true
}'OpenAI-compatible - Chat Completions API
Python
HELPCODEESCAPE-python
import os
from openai import OpenAI
client = OpenAI(
# If the environment variable is not configured, replace the next line with api_key="sk-xxx" (not recommended), using your Model Studio API key.
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
stream = client.chat.completions.create(
model="qwen3-max-2026-01-23",
messages=[
{"role": "user", "content": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content"}
],
extra_body={
"enable_thinking": True,
"enable_search": True,
"search_options": {"search_strategy": "agent_max"}
},
stream=True
)
reasoning_started = False
output_started = False
for chunk in stream:
if chunk.choices:
delta = chunk.choices[0].delta
# Print the thinking process
if hasattr(delta, 'reasoning_content') and delta.reasoning_content:
if not reasoning_started:
print("="*20 + "Thinking Process" + "="*20)
reasoning_started = True
print(delta.reasoning_content, end='', flush=True)
# Print the response content
if delta.content:
if not output_started:
print("\n" + "="*20 + "Response Content" + "="*20)
output_started = True
print(delta.content, end='', flush=True)Node.js
HELPCODEESCAPE-nodejs
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,
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const stream = await openai.chat.completions.create({
model: "qwen3-max-2026-01-23",
messages: [
{ role: "user", content: "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content" }
],
enable_thinking: true,
enable_search: true,
search_options: { search_strategy: "agent_max" },
stream: true
});
let reasoningStarted = false;
let outputStarted = false;
for await (const chunk of stream) {
if (chunk.choices && chunk.choices.length > 0) {
const delta = chunk.choices[0].delta;
// Print the thinking process
if (delta.reasoning_content) {
if (!reasoningStarted) {
console.log("====================Thinking Process====================");
reasoningStarted = true;
}
process.stdout.write(delta.reasoning_content);
}
// Print the response content
if (delta.content) {
if (!outputStarted) {
console.log("\n" + "====================Response Content====================");
outputStarted = true;
}
process.stdout.write(delta.content);
}
}
}
}
main();curl
HELPCODEESCAPE-curl
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"messages": [
{"role": "user", "content": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content"}
],
"enable_thinking": true,
"enable_search": true,
"search_options": {"search_strategy": "agent_max"},
"stream": true
}'DashScope
The Java SDK is not supported. Python
HELPCODEESCAPE-python
import os
import dashscope
from dashscope import Generation
# If the environment variable is not configured, replace the next line with dashscope.api_key = "sk-xxx", using your Model Studio API key.
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
response = Generation.call(
model="qwen3-max-2026-01-23",
messages=[
{"role": "user", "content": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content"}
],
enable_search=True,
search_options={"search_strategy": "agent_max"},
enable_thinking=True,
result_format="message",
stream=True,
incremental_output=True
)
reasoning_started = False
output_started = False
for chunk in response:
if chunk.status_code == 200:
message = chunk.output.choices[0].message
# Print the thinking process
if hasattr(message, 'reasoning_content') and message.reasoning_content:
if not reasoning_started:
print("="*20 + "Thinking Process" + "="*20)
reasoning_started = True
print(message.reasoning_content, end='', flush=True)
# Print the response content
if hasattr(message, 'content') and message.content:
if not output_started:
print("\n" + "="*20 + "Response Content" + "="*20)
output_started = True
print(message.content, end='', flush=True)
else:
print(f"\nRequest failed: code={chunk.code}, message={chunk.message}")
breakcurl
HELPCODEESCAPE-curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "X-DashScope-SSE: enable" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": {
"messages": [
{
"role": "user",
"content": "Please visit the official Alibaba Cloud Model Studio documentation for the code interpreter and summarize its main content"
}
]
},
"parameters": {
"enable_thinking": true,
"enable_search": true,
"search_options": {
"search_strategy": "agent_max"
},
"result_format": "message"
}
}'Billing
Billing includes:
Model call fees: Content extracted from the web page is added to the prompt, increasing input token count. These tokens are billed at the model's standard rate. For pricing details, see the Model Studio console.
Tool call fees: Includes web extraction and web search.
Web search fees per 1,000 calls:
Chinese mainland and Global deployment scopes: $0.57341.
International deployment scope: $10.00.
The web extractor is free for a limited time.