Alat Pencarian berdasarkan gambar ke gambar memungkinkan model mencari gambar di internet yang secara visual mirip dengan input Anda, lalu menganalisis dan memberikan penalaran terhadap hasilnya. Gunakan fitur ini untuk menemukan produk serupa atau melacak asal konten visual.
Cara menggunakan
Fitur pencarian berdasarkan gambar ke gambar dipanggil melalui Responses API. Anda harus menambahkan parameter tools, menyertakan alat image_search, dan meneruskan gambar dalam format multimodal pada input.
inputharus berisi konten gambar. Teruskan URL gambar menggunakan tipeinput_image. Anda juga dapat menyertakan teks dengan tipeinput_textuntuk memberikan konteks pencarian tambahan.
# Impor dependensi dan buat klien...
input_content = [
{"type": "input_text", "text": "Temukan gambar pemandangan 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="qwen-plus",
input=[{"role": "user", "content": input_content}],
tools=[{"type": "image_search"}]
)
print(response.output_text)Model yang didukung
Internasional
Qwen-Plus:
qwen3.5-plus,qwen3.5-plus-2026-02-15Qwen-Flash:
qwen3.5-flash,qwen3.5-flash-2026-02-23Open source Qwen:
qwen3.5-397b-a17b,qwen3.5-122b-a10b,qwen3.5-27b, danqwen3.5-35b-a3b
Global
Qwen-Plus:
qwen3.5-plus,qwen3.5-plus-2026-02-15Qwen-Flash:
qwen3.5-flash,qwen3.5-flash-2026-02-23Open source Qwen:
qwen3.5-397b-a17b,qwen3.5-122b-a10b,qwen3.5-27b,qwen3.5-35b-a3b
China daratan
Qwen-Plus:
qwen3.5-plus,qwen3.5-plus-2026-02-15Qwen-Flash:
qwen3.5-flash,qwen3.5-flash-2026-02-23Open source Qwen:
qwen3.5-397b-a17b,qwen3.5-122b-a10b,qwen3.5-27b,qwen3.5-35b-a3b
Fitur ini hanya tersedia melalui Responses API.
Mulai cepat
Jalankan kode berikut untuk memanggil alat Pencarian berdasarkan gambar ke gambar melalui Responses API. Alat ini mencari gambar yang secara visual mirip atau terkait dengan gambar input Anda.
Sebelum memulai, Anda perlu mendapatkan API Key dan mengonfigurasikannya sebagai Environment Variable.
Catatan: Ganti image_url dalam contoh kode dengan URL gambar yang dapat diakses publik.import os
import json
from openai import OpenAI
client = OpenAI(
# Jika Environment Variable belum diatur, inisialisasi klien langsung dengan API Key Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
)
input_content = [
{"type": "input_text", "text": "Temukan gambar pemandangan dengan gaya yang mirip dengan gambar ini."},
# Ganti image_url dengan URL gambar Anda yang dapat diakses publik.
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
response = client.responses.create(
model="qwen-plus",
input=[{"role": "user", "content": input_content}],
tools=[
{
"type": "image_search"
}
]
)
# Iterasi melalui output untuk menampilkan setiap langkah.
for item in response.output:
if item.type == "image_search_call":
print(f"[Tool Call] Pencarian berdasarkan gambar ke 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 Tool Call.
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] {tool_name} Call Count: {info.get('count', 0)}")import OpenAI from "openai";
import process from 'process';
const openai = new OpenAI({
// Jika Environment Variable belum diatur, inisialisasi klien langsung dengan API Key Anda: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen-plus",
input: [
{
role: "user",
content: [
{ type: "input_text", text: "Temukan gambar pemandangan dengan gaya yang mirip dengan gambar ini." },
// Ganti image_url dengan URL gambar Anda yang dapat diakses publik.
{ type: "input_image", image_url: "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png" }
]
}
],
tools: [
{ type: "image_search" }
]
});
// Iterasi melalui output untuk menampilkan setiap langkah.
for (const item of response.output) {
if (item.type === "image_search_call") {
console.log(`[Tool Call] Pencarian berdasarkan gambar ke 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 Tool Call.
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] ${toolName} Call Count: ${info.count || 0}`);
}
}
}
main();curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"input": [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Temukan gambar pemandangan 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 berikut:
[Tool Call] Pencarian berdasarkan gambar ke 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]
Baik, saya telah menemukan beberapa gambar pemandangan dengan gaya serupa untuk Anda.
Gambar-gambar ini semuanya menampilkan suasana lukisan tinta Cina atau lukisan lanskap tradisional dan memiliki ciri-ciri umum berikut:
* **Arsitektur tradisional**: seperti paviliun, menara, dan jembatan melengkung.
* **Elemen alam**: seperti pegunungan jauh, danau, pohon willow, dan bunga teratai.
* **Gaya artistik**: menggunakan warna elegan dan garis lembut untuk menciptakan suasana tenang dan mendalam.
...
[Token Usage] Input: 2753, Output: 181, Total: 2934
[Tool Statistics] image_search Call Count: 1Respons streaming
Alat Pencarian berdasarkan gambar ke gambar memerlukan waktu untuk memproses. Aktifkan Streaming Output untuk menerima hasil antara secara real time.
import os
import json
from openai import OpenAI
client = OpenAI(
# Jika Environment Variable belum diatur, inisialisasi klien langsung dengan API Key Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
)
input_content = [
{"type": "input_text", "text": "Temukan gambar pemandangan dengan gaya yang mirip dengan gambar ini."},
# Ganti image_url dengan URL gambar Anda yang dapat diakses publik.
{"type": "input_image", "image_url": "https://img.alicdn.com/imgextra/i4/O1CN01YbrnSS1qtmsAkw0Ud_!!6000000005554-2-tps-788-450.png"}
]
stream = client.responses.create(
model="qwen-plus",
input=[{"role": "user", "content": input_content}],
tools=[{"type": "image_search"}],
stream=True
)
for event in stream:
# Tool Call dimulai.
if event.type == "response.output_item.added":
if event.item.type == "image_search_call":
print("[Tool Call] Pencarian berdasarkan gambar ke gambar sedang berlangsung...")
# Tool Call 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 ke 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.")
# Model Response dimulai.
elif event.type == "response.content_part.added":
print(f"\n[Model Response]")
# Streaming output teks.
elif event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
# Respons selesai. Cetak statistik 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] {tool_name} Call Count: {info.get('count', 0)}")import OpenAI from "openai";
import process from 'process';
const openai = new OpenAI({
// Jika Environment Variable belum diatur, inisialisasi klien langsung dengan API Key Anda: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
});
async function main() {
const stream = await openai.responses.create({
model: "qwen-plus",
input: [
{
role: "user",
content: [
{ type: "input_text", text: "Temukan gambar pemandangan dengan gaya yang mirip dengan gambar ini." },
// Ganti image_url dengan URL gambar Anda yang dapat diakses publik.
{ 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) {
// Tool Call dimulai.
if (event.type === "response.output_item.added") {
if (event.item.type === "image_search_call") {
console.log("[Tool Call] Pencarian berdasarkan gambar ke gambar sedang berlangsung...");
}
}
// Tool Call 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 ke 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.`);
}
}
}
}
// Model Response dimulai.
else if (event.type === "response.content_part.added") {
console.log(`\n[Model Response]`);
}
// Streaming output teks.
else if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
// Respons selesai. Cetak statistik 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] ${toolName} Call Count: ${info.count || 0}`);
}
}
}
}
}
main();curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen-plus",
"input": [
{
"role": "user",
"content": [
{"type": "input_text", "text": "Temukan gambar pemandangan 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
}'Menjalankan kode menghasilkan respons streaming yang mirip dengan berikut:
[Tool Call] Pencarian berdasarkan gambar ke gambar sedang berlangsung...
[Tool Call] Pencarian berdasarkan gambar ke 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]
Baik, saya telah menemukan beberapa gambar dengan gaya serupa untuk Anda. Gambar-gambar ini semuanya menampilkan gaya lukisan tinta Cina atau lukisan kuas halus...
[Token Usage] Input: 5339, Output: 164, Total: 5503
[Tool Statistics] image_search Call Count: 1Penagihan
Penagihan untuk fitur ini mencakup komponen berikut:
Biaya pemanggilan model: Alat ini menambahkan informasi dari hasil pencarian gambar ke prompt, yang meningkatkan Penggunaan Token input. Anda dikenai biaya berdasarkan harga standar untuk model yang digunakan. Untuk detail harga, lihat Daftar model.
Biaya pemanggilan alat: Anda dikenai biaya per 1.000 kali panggilan. Tarifnya adalah $0,40 untuk penerapan di Internasional, Global, dan China daratan.
FAQ
T: Format gambar dan metode input apa saja yang didukung?
J: Lihat Batasan gambar dan Metode input file.
SDK OpenAI tidak mendukung penerusan path file lokal.
T: Berapa banyak gambar yang dapat dikirim dalam satu permintaan?
J: Panjang input maksimum model membatasi jumlah gambar. Jumlah total token untuk gambar dan teks tidak boleh melebihi batas yang didukung model. Model mencari satu gambar per Tool Call, tetapi Anda dapat memanggil alat ini beberapa kali untuk memproses beberapa gambar.
Model menentukan jumlah gambar yang akan dicari.
T: Berapa banyak gambar yang dikembalikan dalam hasil pencarian?
J: Model menentukan jumlah gambar yang dikembalikan, hingga maksimal 10. Jumlah pastinya tidak tetap.