Les LLM ne peuvent pas accéder directement aux données des pages web. L'extracteur web accède à une URL et extrait son contenu pour le modèle.
Utilisation
L'extracteur web s'utilise de quatre manières. Les paramètres requis diffèrent selon la méthode :
OpenAI-compatible - Responses API
Ajoutez web_search et web_extractor au paramètre tools.
Pour une meilleure précision avec les problèmes mathématiques ou d'analyse de données, activez également l'outil
code_interpreter.
# Import dependencies and create a client...
response = client.responses.create(
model="qwen3.8-max",
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
Définissez enable_search sur true et search_strategy sur agent_max. Définissez également enable_thinking sur true.
La sortie non continue n'est pas prise en charge.
# Import dependencies and create a client...
completion = client.chat.completions.create(
model="qwen-max",
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
Définissez enable_search sur true et search_strategy sur agent_max. Définissez également enable_thinking sur true.
La sortie non continue n'est pas prise en charge.
from dashscope import Generation
response = Generation.call(
model="qwen-max",
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
)
Compatible avec Anthropic
Ajoutez l'outil nommé web_fetch à tools et incluez l'outil nommé web_search dans la même requête. Le point de terminaison est https://{WorkspaceId}.{region}.maas.aliyuncs.com/apps/anthropic.
Avec les clients officiels Anthropic tels que Claude Code, une question en langage naturel déclenche l'extraction sans configuration supplémentaire. Pour un appel direct via le SDK Anthropic ou HTTP, vous devez transmettre l'identifiant client x-anthropic-billing-header: cc_entrypoint=cli; dans system. Sinon, l'extraction ne fonctionne pas.
Le suffixe de date de type dépend de la version du client. Le serveur identifie la catégorie de l'outil sans valider ce suffixe ; transmettez donc la valeur réellement envoyée par le client. Si vous ajoutez uniquement l'outil d'extraction sans l'outil de recherche, la requête renvoie l'erreur InvalidParameter : The web_extractor tool must be executed with web_search tool.
Le fragment suivant suppose que le client Anthropic a déjà été initialisé. Consultez Anthropic Messages API pour l'initialisation du client. Pour appeler l'instantané, définissez model sur deepseek-v4.1-flash-1017.
# Import dependencies and create the client...
message = client.messages.create(
model="qwen3.8-max",
max_tokens=4096,
# Pass the client identifier
system=[{"type": "text", "text": "x-anthropic-billing-header: cc_entrypoint=cli;"}],
messages=[{"role": "user", "content": "Read the Alibaba Cloud Model Studio code interpreter documentation and summarize the key points."}],
tools=[
# Enabling the web extractor requires the web search tool as well
# The date suffix in type depends on the client version. The values below are the ones current Claude Code sends.
{"type": "web_search_20250305", "name": "web_search", "max_uses": 5},
{"type": "web_fetch_20250910", "name": "web_fetch", "max_uses": 5}
]
)
Les requêtes et les résultats d'extraction sont renvoyés dans les blocs de contenu server_tool_use et web_fetch_tool_result, respectivement. Le nombre d'extractions est indiqué dans usage.server_tool_use.web_fetch_requests.
Modèles pris en charge
deepseek-v4.1-flash-1017 prend en charge l'outil intégré web_extractor dans l'API Responses et web_fetch dans l'API compatible Anthropic dans les six régions et les périmètres de déploiement correspondants indiqués sur la page du modèle.
Modèles recommandés
Responses API
Qwen-Max : séries Qwen3,8-Max, Qwen3,7-Max
Qwen-Plus : séries Qwen3,7-Plus, Qwen3,6-Plus, Qwen3,5-Plus
DeepSeek : deepseek-v4-flash-0731, deepseek-v4-pro
GLM : glm-5,2
Série open source Qwen3,8
Chat Completions API / DashScope
- Qwen-Max (mode réflexion) : série Qwen3-Max
- Qwen-Plus : série Qwen3,5-Plus
Autres modèles
Les modèles suivants prennent également en charge cet outil, mais leurs performances peuvent être inférieures à celles des modèles recommandés. Ils sont uniquement pris en charge via l'API Responses.
- Qwen-Flash : séries Qwen3,7-Flash, Qwen3,6-Flash, Qwen3,5-Flash
- Série open source Qwen3,6 (sauf qwen3,6-27b)
- Série open source Qwen3,5
Premiers pas
Cet exemple appelle l'extracteur web via l'API Responses pour résumer un document technique.
Vous devez obtenir une clé API et la configurer comme variable d'environnement .
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"),
# 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="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)}")
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,
// 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: "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();
# 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": "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
}'
Exemple de sortie :
====================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](https://www.alibabacloud.com/help/en/model-studio/qwen-code-interpreter) and [Assistant API Code Interpreter](https://www.alibabacloud.com/help/en/model-studio/code-interpreter) (Updated: December 2025)
====================Tool Call Count====================
Web extraction count: 1
Sortie en continu
L'extraction web peut prendre du temps. Activez la sortie en continu pour recevoir les résultats intermédiaires en temps réel.
Utilisez l'API Responses pour récupérer l'état d'exécution intermédiaire des outils.
OpenAI-compatible - Responses API
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"),
# 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"
)
stream = client.responses.create(
model="qwen3.8-max",
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)}")
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,
// 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 stream = await openai.responses.create({
model: "qwen3.8-max",
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();
# 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": "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
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"),
# 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"
)
stream = client.chat.completions.create(
model="qwen-max",
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)
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,
// 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 stream = await openai.chat.completions.create({
model: "qwen-max",
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();
# 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/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-max",
"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
Le SDK Java n'est pas pris en charge.
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")
# Singapore region. Replace {WorkspaceId} with your actual Workspace ID. URLs vary by region.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
response = Generation.call(
model="qwen-max",
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}")
break
# Singapore region. Replace {WorkspaceId} with your actual Workspace ID. URLs vary by region.
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.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": "qwen-max",
"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"
}
}'
Facturation
La facturation comprend :
-
Frais d'appel de modèle : le contenu extrait de la page web est ajouté à l'invite, ce qui augmente le nombre de jetons d'entrée. Ces jetons sont facturés au tarif standard du modèle. Pour plus de détails sur les tarifs, consultez la console Model Studio.
-
Frais d'appel d'outil : incluent l'extraction web et la recherche web.
-
Frais de recherche web pour 1 000 appels :
- Région Chine (Pékin) : 0,57341 USD.
- Région Singapour : 10,00 USD.
-
L'extracteur web est gratuit pour une durée limitée.
-