Fitur Pencarian berdasarkan gambar memungkinkan model mencari di Internet gambar yang secara visual mirip dengan gambar input, lalu menganalisis hasil pencarian dan melakukan inferensi. Fitur ini berguna dalam skenario seperti menemukan produk serupa atau melacak asal konten visual.
Cara menggunakan
Anda dapat memanggil fitur Pencarian berdasarkan gambar melalui Responses API dengan menambahkan alat image_search ke parameter tools, serta mengirimkan gambar dalam parameter input dalam format multimodal.
inputharus berisi konten gambar. Kirimkan URL gambar menggunakan tipeinput_image. Anda juga dapat mengirimkan teks menggunakan tipeinput_textuntuk memberikan informasi tambahan bagi pencarian.
# Impor dependensi dan buat klien...
input_content = [
{"type": "input_text", "text": "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini"},
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
response = client.responses.create(
model="qwen3.7-plus",
input=[{"role": "user", "content": input_content}],
tools=[{"type": "image_search"}]
)
print(response.output_text)
Model yang didukung
Model yang direkomendasikan
Untuk performa pemanggilan alat yang optimal, gunakan model berikut:
Qwen-Plus: seri Qwen3.7-Plus, seri Qwen3.6-Plus, seri Qwen3.5-Plus
Qwen-Max: qwen3.7-max-2026-06-08
Model lainnya
Model berikut juga mendukung alat ini, tetapi performanya tidak sebaik model yang direkomendasikan.
-
Qwen-Flash: seri Qwen3.6-Flash, seri Qwen3.5-Flash
-
seri open-source Qwen3.6 (kecuali qwen3.6-27b)
-
seri open source Qwen3.5
Fitur ini hanya dapat dipanggil melalui Responses API.
Mulai
Anda dapat menjalankan kode berikut untuk memanggil alat Pencarian berdasarkan gambar melalui Responses API dan mencari gambar serupa atau terkait berdasarkan gambar input.
Sebelum memulai, dapatkan Kunci API dan konfigurasikan Kunci API sebagai variabel lingkungan.
Ganti image_url dalam kode contoh dengan URL gambar yang dapat diakses publik.
import os
import json
from openai import OpenAI
client = OpenAI(
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)
input_content = [
{"type": "input_text", "text": "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini"},
# Ganti image_url dengan URL publik aktual gambar
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
response = client.responses.create(
model="qwen3.7-plus",
input=[{"role": "user", "content": input_content}],
tools=[
{
"type": "image_search"
}
]
)
# Telusuri output untuk menampilkan setiap langkah
for item in response.output:
if item.type == "image_search_call":
print(f"[Tool Call] Pencarian berdasarkan gambar (status: {item.status})")
# Urai dan tampilkan daftar gambar yang ditemukan
if item.output:
images = json.loads(item.output)
print(f" Ditemukan {len(images)} gambar:")
for img in images[:5]: # Tampilkan 5 gambar pertama
print(f" [{img['index']}] {img['title']}")
print(f" {img['url']}")
if len(images) > 5:
print(f" ... total {len(images)} gambar")
elif item.type == "message":
print(f"\n[Model Response]")
print(response.output_text)
# Tampilkan penggunaan token dan statistik pemanggilan alat
print(f"\n[Token Usage] Input: {response.usage.input_tokens}, Output: {response.usage.output_tokens}, Total: {response.usage.total_tokens}")
if hasattr(response.usage, 'x_tools') and response.usage.x_tools:
for tool_name, info in response.usage.x_tools.items():
print(f"[Tool Statistics] jumlah pemanggilan {tool_name}: {info.get('count', 0)}")import OpenAI from "openai";
import process from 'process';
const openai = new OpenAI({
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen3.7-plus",
input: [
{
role: "user",
content: [
{ type: "input_text", text: "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini" },
// Ganti image_url dengan URL publik aktual gambar
{ type: "input_image", image_url: "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png" }
]
}
],
tools: [
{ type: "image_search" }
]
});
// Telusuri output untuk menampilkan setiap langkah
for (const item of response.output) {
if (item.type === "image_search_call") {
console.log(`[Tool Call] Pencarian berdasarkan gambar (status: ${item.status})`);
// Urai dan tampilkan daftar gambar yang ditemukan
if (item.output) {
const images = JSON.parse(item.output);
console.log(` Ditemukan ${images.length} gambar:`);
images.slice(0, 5).forEach(img => {
console.log(` [${img.index}] ${img.title}`);
console.log(` ${img.url}`);
});
if (images.length > 5) {
console.log(` ... total ${images.length} gambar`);
}
}
} else if (item.type === "message") {
console.log(`\n[Model Response]`);
console.log(response.output_text);
}
}
// Tampilkan penggunaan token dan statistik pemanggilan alat
console.log(`\n[Token Usage] Input: ${response.usage.input_tokens}, Output: ${response.usage.output_tokens}, Total: ${response.usage.total_tokens}`);
if (response.usage && response.usage.x_tools) {
for (const [toolName, info] of Object.entries(response.usage.x_tools)) {
console.log(`[Tool Statistics] jumlah pemanggilan ${toolName}: ${info.count || 0}`);
}
}
}
main();# URL berikut untuk wilayah Singapura. Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
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.7-plus",
"input": [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini"},
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
}
],
"tools": [
{"type": "image_search"}
]
}'Setelah menjalankan kode, Anda akan menerima respons yang mirip dengan contoh berikut:
[Tool Call] Pencarian berdasarkan gambar (status: completed)
Ditemukan 2 gambar:
[1] QingMing Festival Holiday Notice 2024
https://www.healthcabin.net/blog/wp-content/uploads/2024/04/QingMing-Festival-Holiday-Notice-2024.jpg
[2] Serene Asian Landscape Stone Bridge Reflecting in Misty Water
https://thumbs.dreamstime.com/b/serene-asian-landscape-stone-bridge-reflecting-misty-water-tranquil-illustration-traditional-arch-spanning-lake-style-376972039.jpg
[Model Response]
OK. Saya telah menemukan beberapa gambar lanskap dengan gaya serupa.
Gambar-gambar ini semuanya menampilkan konsep artistik lukisan tinta Tiongkok klasik atau lukisan lanskap tradisional, serta memiliki kesamaan berikut:
* **Arsitektur tradisional**: seperti paviliun, menara, dan jembatan lengkung.
* **Elemen alam**: seperti pegunungan jauh, danau, pohon willow, dan bunga teratai.
* **Gaya artistik**: menggunakan warna elegan dan garis lembut untuk menciptakan suasana tenang dan damai.
...
[Token Usage] Input: 2753, Output: 181, Total: 2934
[Tool Statistics] jumlah pemanggilan image_search: 1
Keluaran streaming
Alat Pencarian berdasarkan gambar memiliki waktu pemrosesan yang lama. Anda dapat mengaktifkan keluaran streaming untuk mengambil hasil antara secara real time.
import os
import json
from openai import OpenAI
client = OpenAI(
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)
input_content = [
{"type": "input_text", "text": "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini"},
# Ganti image_url dengan URL publik aktual gambar
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
stream = client.responses.create(
model="qwen3.7-plus",
input=[{"role": "user", "content": input_content}],
tools=[{"type": "image_search"}],
stream=True
)
for event in stream:
# Pemanggilan alat dimulai
if event.type == "response.output_item.added":
if event.item.type == "image_search_call":
print("[Tool Call] Sedang mencari berdasarkan gambar...")
# Pemanggilan alat selesai. Urai dan tampilkan daftar gambar yang ditemukan.
elif event.type == "response.output_item.done":
if event.item.type == "image_search_call":
print(f"[Tool Call] Pencarian berdasarkan gambar selesai (status: {event.item.status})")
if event.item.output:
images = json.loads(event.item.output)
print(f" Ditemukan {len(images)} gambar:")
for img in images[:5]: # Tampilkan 5 gambar pertama
print(f" [{img['index']}] {img['title']}")
print(f" {img['url']}")
if len(images) > 5:
print(f" ... total {len(images)} gambar")
# Respons model dimulai
elif event.type == "response.content_part.added":
print(f"\n[Model Response]")
# Keluaran teks streaming
elif event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
# Respons selesai. Tampilkan penggunaan.
elif event.type == "response.completed":
usage = event.response.usage
print(f"\n\n[Token Usage] Input: {usage.input_tokens}, Output: {usage.output_tokens}, Total: {usage.total_tokens}")
if hasattr(usage, 'x_tools') and usage.x_tools:
for tool_name, info in usage.x_tools.items():
print(f"[Tool Statistics] jumlah pemanggilan {tool_name}: {info.get('count', 0)}")import OpenAI from "openai";
import process from 'process';
const openai = new OpenAI({
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const stream = await openai.responses.create({
model: "qwen3.7-plus",
input: [
{
role: "user",
content: [
{ type: "input_text", text: "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini" },
// Ganti image_url dengan URL publik aktual gambar
{ type: "input_image", image_url: "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png" }
]
}
],
tools: [{ type: "image_search" }],
stream: true
});
for await (const event of stream) {
// Pemanggilan alat dimulai
if (event.type === "response.output_item.added") {
if (event.item.type === "image_search_call") {
console.log("[Tool Call] Sedang mencari berdasarkan gambar...");
}
}
// Pemanggilan alat selesai. Urai dan tampilkan daftar gambar yang ditemukan.
else if (event.type === "response.output_item.done") {
if (event.item && event.item.type === "image_search_call") {
console.log(`[Tool Call] Pencarian berdasarkan gambar selesai (status: ${event.item.status})`);
if (event.item.output) {
const images = JSON.parse(event.item.output);
console.log(` Ditemukan ${images.length} gambar:`);
images.slice(0, 5).forEach(img => {
console.log(` [${img.index}] ${img.title}`);
console.log(` ${img.url}`);
});
if (images.length > 5) {
console.log(` ... total ${images.length} gambar`);
}
}
}
}
// Respons model dimulai
else if (event.type === "response.content_part.added") {
console.log(`\n[Model Response]`);
}
// Keluaran teks streaming
else if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
// Respons selesai. Tampilkan penggunaan.
else if (event.type === "response.completed") {
const usage = event.response.usage;
console.log(`\n\n[Token Usage] Input: ${usage.input_tokens}, Output: ${usage.output_tokens}, Total: ${usage.total_tokens}`);
if (usage && usage.x_tools) {
for (const [toolName, info] of Object.entries(usage.x_tools)) {
console.log(`[Tool Statistics] jumlah pemanggilan ${toolName}: ${info.count || 0}`);
}
}
}
}
}
main();# URL berikut untuk wilayah Singapura. Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
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.7-plus",
"input": [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Temukan gambar lanskap dengan gaya yang mirip dengan gambar ini"},
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
}
],
"tools": [
{"type": "image_search"}
],
"stream": true
}'Setelah menjalankan kode, Anda akan menerima respons yang mirip dengan contoh berikut:
[Tool Call] Sedang mencari berdasarkan gambar...
[Tool Call] Pencarian berdasarkan gambar selesai (status: completed)
Ditemukan 3 gambar:
[1] QingMing Festival Holiday Notice 2024
https://www.healthcabin.net/blog/wp-content/uploads/2024/04/QingMing-Festival-Holiday-Notice-2024.jpg
[2] Serene Asian Landscape Stone Bridge Reflecting in Misty Water
https://thumbs.dreamstime.com/b/serene-asian-landscape-stone-bridge-reflecting-misty-water-...
[3] ...
[Model Response]
OK. Saya telah menemukan beberapa gambar lanskap dengan gaya serupa. Gambar-gambar ini semuanya menampilkan gaya lukisan tinta Tiongkok klasik atau lukisan kuas halus...
[Token Usage] Input: 5339, Output: 164, Total: 5503
[Tool Statistics] jumlah pemanggilan image_search: 1
Penagihan
Penagihan mencakup aspek-aspek berikut:
-
Biaya pemanggilan model: Hasil dari pencarian gambar ditambahkan ke prompt, sehingga meningkatkan jumlah token input untuk model. Anda dikenai biaya berdasarkan tarif standar model. Untuk detail harga, lihat Konsol Model Studio.
-
Biaya pemanggilan alat: Anda dikenai biaya per 1.000 kali pemanggilan. Biayanya adalah $8,00 untuk penerapan internasional, sedangkan biaya untuk penerapan di Tiongkok daratan dan global adalah $6,881.
FAQ
T: Format gambar dan metode input apa saja yang didukung?
J: Untuk informasi lebih lanjut, lihat Batasan gambar dan Metode input file.
SDK OpenAI tidak mendukung pengiriman path file lokal.
T: Berapa banyak gambar yang dapat dikirim?
J: Jumlah gambar yang dapat dikirim dibatasi oleh panjang input maksimum model. Jumlah total token untuk gambar dan teks tidak boleh melebihi nilai maksimum yang didukung model. Model hanya mencari satu gambar per pemanggilan, tetapi Anda dapat melakukan beberapa pemanggilan untuk memproses beberapa gambar.
Model yang menentukan jumlah gambar yang akan dicari.
T: Berapa banyak gambar hasil pencarian yang dikembalikan?
J: Model yang menentukan jumlah gambar yang dikembalikan. Jumlahnya tidak tetap, tetapi maksimal 100 gambar.