داشبورد توسعه‌دهنده
پرسش از هوش مصنوعی
پرسش از هوش مصنوعی

ابزار جستجوی وب

به مدل‌ها اجازه دهید قبل از تولید پاسخ، وب را برای آخرین اطلاعات جستجو کنند.

با استفاده از API پاسخ‌ها، می‌توانید با پیکربندی آن در آرایه tools در یک درخواست API برای تولید محتوا، جستجوی وب را فعال کنید. مانند هر ابزار دیگری، مدل می‌تواند بر اساس محتوای پرامپت ورودی، انتخاب کند که وب را جستجو کند یا نه.

انتخاب مسیر یکپارچه‌سازی

AvalAI دو مسیر مکمل برای جستجو ارائه می‌دهد:

مورد استفادهمسیر پیشنهادینکته
پاسخ‌های AI جدید همراه citation/v1/responses + tools: [{"type": "web_search"}]بهترین پیش‌فرض برای برنامه‌های Responses-first؛ مدل تصمیم می‌گیرد جستجو کند مگر اینکه tool_choice را اجباری کنید.
نتایج خام جستجو برای برنامه شما/v1/searchURL، snippet و متادیتای خاص ارائه‌دهنده را بدون synthesis توسط LLM برمی‌گرداند.
برنامه‌های search فعلی در Chat Completions/v1/chat/completions با مدل search پشتیبانی‌شده در AvalAIیکپارچه‌سازی‌های فعلی را نگه دارید، اما برای کار جدید Responses web_search را ترجیح دهید.

برای lookup سریع از search_context_size: "low"، برای حالت متعادل از "medium" و برای پاسخ‌هایی که به زمینه منبع غنی‌تر نیاز دارند از "high" استفاده کنید.

مثال ابزار جستجوی وب

javascript
import OpenAI from "openai";
const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
}); // استفاده از نقطه پایانی سفارشی

const response = await client.responses.create({
  model: "gpt-5.5",
  tools: [{ type: "web_search" }],
  input: "یک خبر مثبت از امروز چه بود؟",
});

console.log(response.output_text);
python
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه سفارشی
)  # استفاده از آدرس پایه سفارشی

response = client.responses.create(
    model="gpt-5.5",
    tools=[{"type": "web_search"}],
    input="یک خبر مثبت از امروز چه بود؟",
)

print(response.output_text)
bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '{
 "model": "gpt-5.5",
 "tools": [{"type": "web_search"}],
 "input": "یک خبر مثبت از امروز چه بود؟"
 }'
go
package main

import (
	"context"
	"fmt"
	"github.com/openai/openai-go" // کلاینت Go OpenAI
	"github.com/openai/openai-go/option"
	"os"
)

func main() {
	apiKey := os.Getenv("AVALAI_API_KEY")
	client := openai.NewClient(
		option.WithAPIKey(apiKey),
		option.WithBaseURL("https://api.avalai.ir/v1"), // استفاده از نقطه پایانی سفارشی
	)

	resp, err := client.Responses.Create(
		context.Background(),
		openai.ResponsesCreateParams{
			Model: "gpt-5.5",
			Tools: []openai.ToolParamUnion{
				openai.ToolParam{
					Type: openai.F("web_search"),
				},
			},
			Input: "یک خبر مثبت از امروز چه بود؟",
		},
	)

	if err != nil {
		fmt.Printf("خطای ایجاد پاسخ: %v\n", err)
		return
	}

	fmt.Println(resp.OutputText)
}
php
<?php
require_once(__DIR__ . '/vendor/autoload.php'); // با فرض بارگذاری خودکار Composer

$apiKey = getenv('AVALAI_API_KEY');
$client = OpenAI::client($apiKey, ["base_uri" => "https://api.avalai.ir/v1"]); // استفاده از کلاینت PHP OpenAI با آدرس پایه سفارشی

$response = $client->responses()->create([
'model' => 'gpt-5.5',
'tools' => [['type' => 'web_search']],
'input' => 'یک خبر مثبت از امروز چه بود؟',
]);

echo $response->output_text;
?>

نسخه‌های ابزار جستجوی وب

برای یکپارچه‌سازی‌های جدید Responses API از web_search استفاده کنید. ابزار قدیمی‌تر web_search_preview همچنان برای یکپارچه‌سازی‌های legacy در دسترس است، اما کنترل‌های جدیدتر مانند فیلترها، کنترل دسترسی زنده و بودجه توکن برگشتی را پشتیبانی نمی‌کند.

وقتی جستجو باید برای یک درخواست اجرا شود، می‌توانید با پارامتر tool_choice و مثلا { "type": "web_search" } اجرای جستجوی وب را اجباری کنید.

مسیر مهاجرت از مدل‌های جستجوی legacy

فقط به دلیل وجود ابزار جدیدتر Responses، یکپارچه‌سازی‌های فعلی Chat Completions را حذف نکنید. AvalAI هنوز gpt-4o-search-preview و gpt-4o-mini-search-preview را در data/models.json فهرست می‌کند، پس تا زمانی که فعال هستند در مستندات باقی می‌مانند. برای کار جدید، /v1/responses را با gpt-5.5 و tools: [{"type": "web_search"}] ترجیح دهید.

یکپارچه‌سازی فعلینگه داریم یا مهاجرت کنیم؟گام پیشنهادی
/v1/responses + web_search_previewمهاجرت کنیدابزار را با {"type": "web_search"} جایگزین کنید تا از فیلترها، متادیتای منابع، کنترل دسترسی زنده و کنترل بودجه توکن برگشتی استفاده کنید.
/v1/chat/completions + gpt-4o-search-previewفقط برای برنامه‌های legacy نگه داریدپیش از خاموشی برنامه‌ریزی‌شده در ۲۳ ژوئیه ۲۰۲۶ که در مدل‌های منسوخ‌شده آمده، مهاجرت را برنامه‌ریزی کنید؛ UX جستجوی جدید را به Responses web_search منتقل کنید.
/v1/chat/completions + gpt-4o-mini-search-previewفقط برای برنامه‌های legacy نگه داریدمسیر مهاجرت همان است؛ برای جستجوی اختیاری، فیلتر دامنه و متادیتای غنی‌تر web_search_call از Responses استفاده کنید.
endpoint خام /v1/searchوقتی نتیجه خام لازم دارید نگه داریدبرای بازیابی URL/snippet بدون synthesis توسط LLM استفاده کنید؛ وقتی مدل باید پاسخ citationدار بسازد، Responses را به کار ببرید.

سه حالت عملی جستجو را در طراحی در نظر بگیرید:

  • lookup سریع: search_context_size کم یا متوسط، جستجوی اختیاری و پاسخ کوتاه.
  • تحقیق agentic: مدل‌های reasoning می‌توانند جستجو کنند، نتایج را بررسی کنند و وقتی prompt شواهد بیشتری می‌خواهد دوباره جستجو کنند.
  • deep research: برای گزارش‌های طولانی که ممکن است چند دقیقه زمان ببرند، از reasoning effort بالاتر و پردازش پس‌زمینه استفاده کنید.

خروجی و استنادات

پاسخ‌های مدلی که از ابزار جستجوی وب استفاده می‌کنند شامل دو بخش خواهند بود:

  • یک آیتم خروجی web_search_call با شناسه تماس جستجو و فیلد action. بسته به مدل و مسیر جستجو، action می‌تواند search، open_page یا find_in_page باشد.
  • یک آیتم خروجی message شامل:
    • نتیجه متنی در message.content[0].text
    • حاشیه‌نویسی‌ها message.content[0].annotations برای URLهای استناد شده

به طور پیش‌فرض، پاسخ مدل شامل استنادات درون‌خطی برای URLهای یافت شده در نتایج جستجوی وب خواهد بود. علاوه بر این، شی حاشیه‌نویسی url_citation شامل URL، عنوان و مکان منبع استناد شده خواهد بود.

هنگام نمایش نتایج وب یا اطلاعات موجود در نتایج وب به کاربران نهایی، استنادات درون‌خطی باید به وضوح قابل مشاهده و قابل کلیک در رابط کاربری شما باشند.

json
[
  {
    "type": "web_search_call",
    "id": "ws_67c9fa0502748190b7dd390736892e100be649c1a5ff9609",
    "status": "completed",
    "action": {
      "type": "search",
      "query": "latest news about AI"
    }
  },
  {
    "id": "msg_67c9fa077e288190af08fdffda2e34f20be649c1a5ff9609",
    "type": "message",
    "status": "completed",
    "role": "assistant",
    "content": [
      {
        "type": "output_text",
        "text": "در تاریخ ۶ مارس ۲۰۲۵، چندین خبر...",
        "annotations": [
          {
            "type": "url_citation",
            "start_index": 2606,
            "end_index": 2758,
            "url": "https://...",

            "title": "عنوان..."
          }
        ]
      }
    ]
  }
]

چک‌لیست نمایش citation

وقتی خروجی web_search را به UI محصول تبدیل می‌کنید، این موارد را رعایت کنید:

  • حاشیه‌نویسی‌های url_citation را به لینک‌های منبع قابل مشاهده و قابل کلیک نزدیک همان ادعای تولیدشده تبدیل کنید.
  • مقدارهای url، title و span متن هر citation را حفظ کنید تا کاربر بتواند منبع اتکای مدل را بررسی کند.
  • وقتی برای audit به فهرست کامل منابع بررسی‌شده نیاز دارید، نه فقط citationهای انتخاب‌شده برای پاسخ نهایی، include: ["web_search_call.action.sources"] را درخواست کنید.
  • شی web_search_call.action را در trace logها نگه دارید تا بعدا مشخص باشد مدل فقط جستجو کرده، صفحه‌ای را باز کرده یا داخل صفحه جستجو کرده است.
  • اگر پاسخ برای یک پرسش حساس به تازگی، citation ندارد، آن را ungrounded بدانید و با tool_choice: "required" یا prompt دقیق‌تر دوباره تلاش کنید.

موقعیت مکانی کاربر

برای بهبود نتایج جستجو بر اساس جغرافیا، می‌توانید یک موقعیت مکانی تقریبی کاربر را با استفاده از کشور، شهر، منطقه و/یا منطقه زمانی مشخص کنید.

  • فیلدهای city و region رشته‌های متنی آزاد هستند، مانند Minneapolis و Minnesota به ترتیب.
  • فیلد country یک کد کشور ISO دو حرفی است، مانند US.
  • فیلد timezone یک منطقه زمانی IANA مانند America/Chicago است.

موقعیت مکانی کاربر فقط یک hint برای مرتبط‌تر شدن نتیجه‌های محلی است، نه اثبات موقعیت دقیق کاربر. از آن برای compliance، billing، کنترل دسترسی یا تصمیم‌های safety استفاده نکنید. این قابلیت برای اجرای web search در deep research پشتیبانی نمی‌شود؛ در آن حالت prompt را منبع‌محور نگه دارید، نه شخصی‌سازی‌شده با موقعیت.

سفارشی‌سازی موقعیت مکانی کاربر

python
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه سفارشی
)  # استفاده از آدرس پایه سفارشی

response = client.responses.create(
    model="gpt-5.5",
    tools=[
        {
            "type": "web_search",
            "user_location": {
                "type": "approximate",
                "country": "GB",
                "city": "London",
                "region": "London",
            },
        }
    ],
    input="بهترین رستوران‌های اطراف میدان گرنری کدامند؟",
)

print(response.output_text)
javascript
import OpenAI from "openai";
const openai = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,

  baseURL: "https://api.avalai.ir/v1",
}); // استفاده از نقطه پایانی سفارشی

const response = await openai.responses.create({
  model: "gpt-5.5",
  tools: [
    {
      type: "web_search",
      user_location: {
        type: "approximate",
        country: "GB",
        city: "London",
        region: "London",
      },
    },
  ],
  input: "بهترین رستوران‌های اطراف میدان گرنری کدامند؟",
});
console.log(response.output_text);
bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '{
 "model": "gpt-5.5",
 "tools": [{
 "type": "web_search",
 "user_location": {
 "type": "approximate",
 "country": "GB",
 "city": "London",
 "region": "London"
 }
 }],
 "input": "بهترین رستوران‌های اطراف میدان گرنری کدامند؟"
 }'
go
package main

import (
	"context"
	"fmt"
	"github.com/openai/openai-go" // کلاینت Go OpenAI
	"github.com/openai/openai-go/option"
	"os"
)

func main() {
	apiKey := os.Getenv("AVALAI_API_KEY")
	client := openai.NewClient(
		option.WithAPIKey(apiKey),
		option.WithBaseURL("https://api.avalai.ir/v1"), // استفاده از نقطه پایانی سفارشی
	)

	resp, err := client.Responses.Create(
		context.Background(),
		openai.ResponsesCreateParams{
			Model: "gpt-5.5",
			Tools: []openai.ToolParamUnion{
				openai.ToolParam{
					Type: openai.F("web_search"),
					UserLocation: &openai.UserLocation{
						Type:    openai.F("approximate"),
						Country: openai.F("GB"),
						City:    openai.F("London"),
						Region:  openai.F("London"),
					},
				},
			},
			Input: "بهترین رستوران‌های اطراف میدان گرنری کدامند؟",
		},
	)

	if err != nil {
		fmt.Printf("خطای ایجاد پاسخ: %v\n", err)
		return
	}

	fmt.Println(resp.OutputText)
}
php
<?php
require_once(__DIR__ . '/vendor/autoload.php'); // با فرض بارگذاری خودکار Composer

$apiKey = getenv('AVALAI_API_KEY');
$client = OpenAI::client($apiKey, ["base_uri" => "https://api.avalai.ir/v1"]); // استفاده از کلاینت PHP OpenAI با آدرس پایه سفارشی

$response = $client->responses()->create([
'model' => 'gpt-5.5',
'tools' => [[
'type' => 'web_search',
'user_location' => [
'type' => 'approximate',
'country' => 'GB',
'city' => 'London',
'region' => 'London',
]
]],
'input' => 'بهترین رستوران‌های اطراف میدان گرنری کدامند؟',
]);

echo $response->output_text;
?>

اندازه زمینه جستجو

هنگام استفاده از این ابزار، پارامتر search_context_size کنترل می‌کند چه مقدار زمینه از نتایج وب پیش از تولید پاسخ در اختیار مدل قرار گیرد. این پارامتر کنترل کیفیت/هزینه/تاخیر است، نه شمارنده دقیق توکن، تعداد قطعی منبع یا تضمین تعداد citation.

انتخاب اندازه زمینه بر موارد زیر تاثیر می‌گذارد:

  • هزینه: قیمت‌گذاری ابزار جستجوی ما بر اساس مقدار این پارامتر متفاوت است. اندازه‌های زمینه بالاتر گران‌تر هستند. قیمت‌گذاری ابزار را اینجا ببینید.
  • کیفیت: اندازه‌های زمینه جستجوی بالاتر به طور کلی زمینه غنی‌تری را فراهم می‌کنند که منجر به پاسخ‌های دقیق‌تر و جامع‌تر می‌شود.
  • تاخیر: اندازه‌های زمینه بالاتر نیاز به پردازش توکن‌های بیشتری دارند که می‌تواند زمان پاسخ ابزار را کندتر کند.

مقادیر موجود:

  • high: جامع‌ترین زمینه، بالاترین هزینه، پاسخ کندتر.
  • medium (پیش‌فرض): زمینه، هزینه و تاخیر متعادل.
  • low: کمترین زمینه، کمترین هزینه، سریع‌ترین پاسخ، اما کیفیت پاسخ بالقوه پایین‌تر.

برای جزئیات هزینه‌های مرتبط با هر اندازه زمینه، صفحه قیمت‌گذاری را بررسی کنید و این تنظیم را به‌عنوان کنترل عمق بازیابی ببینید، نه سازوکار حفظ خودکار زمینه در نوبت‌های بعدی.

سفارشی‌سازی اندازه زمینه جستجو

python
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه سفارشی
)  # استفاده از آدرس پایه سفارشی

response = client.responses.create(
    model="gpt-5.5",
    tools=[
        {
            "type": "web_search",
            "search_context_size": "low",
        }
    ],
    input="کدام فیلم در سال ۲۰۲۵ برنده بهترین فیلم شد؟",
)

print(response.output_text)
javascript
import OpenAI from "openai";
const openai = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,

  baseURL: "https://api.avalai.ir/v1",
}); // استفاده از نقطه پایانی سفارشی

const response = await openai.responses.create({
  model: "gpt-5.5",
  tools: [
    {
      type: "web_search",
      search_context_size: "low",
    },
  ],
  input: "کدام فیلم در سال ۲۰۲۵ برنده بهترین فیلم شد؟",
});
console.log(response.output_text);
bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '{
 "model": "gpt-5.5",
 "tools": [{
 "type": "web_search",
 "search_context_size": "low"
 }],
 "input": "کدام فیلم در سال ۲۰۲۵ برنده بهترین فیلم شد؟"
 }'
go
package main

import (
	"context"
	"fmt"
	"github.com/openai/openai-go" // کلاینت Go OpenAI
	"github.com/openai/openai-go/option"
	"os"
)

func main() {
	apiKey := os.Getenv("AVALAI_API_KEY")
	client := openai.NewClient(
		option.WithAPIKey(apiKey),
		option.WithBaseURL("https://api.avalai.ir/v1"), // استفاده از نقطه پایانی سفارشی
	)

	resp, err := client.Responses.Create(
		context.Background(),
		openai.ResponsesCreateParams{
			Model: "gpt-5.5",
			Tools: []openai.ToolParamUnion{
				openai.ToolParam{
					Type:              openai.F("web_search"),
					SearchContextSize: openai.F("low"),
				},
			},
			Input: "کدام فیلم در سال ۲۰۲۵ برنده بهترین فیلم شد؟",
		},
	)

	if err != nil {
		fmt.Printf("خطای ایجاد پاسخ: %v\n", err)
		return
	}

	fmt.Println(resp.OutputText)
}
php
<?php
require_once(__DIR__ . '/vendor/autoload.php'); // با فرض بارگذاری خودکار Composer

$apiKey = getenv('AVALAI_API_KEY');
$client = OpenAI::client($apiKey, ["base_uri" => "https://api.avalai.ir/v1"]); // استفاده از کلاینت PHP OpenAI با آدرس پایه سفارشی

$response = $client->responses()->create([
'model' => 'gpt-5.5',
'tools' => [[
'type' => 'web_search',
'search_context_size' => 'low',
]],
'input' => 'کدام فیلم در سال ۲۰۲۵ برنده بهترین فیلم شد؟',
]);

echo $response->output_text;
?>

کنترل‌های پیشرفته جستجو

وقتی مدل انتخابی و مسیر AvalAI پشتیبانی کنند، از این کنترل‌ها استفاده کنید:

  • فیلتر دامنه: filters.allowed_domains و filters.blocked_domains جستجو را به منابع قابل اعتماد محدود می‌کنند یا دامنه‌های کم‌کیفیت را حذف می‌کنند. پیشوند https:// را ننویسید؛ مثلا who.int.
  • متادیتای منابع: وقتی برنامه به فهرست کامل URLهای بررسی‌شده نیاز دارد، نه فقط citationهای درون متن، include: ["web_search_call.action.sources"] را اضافه کنید.
  • کنترل دسترسی زنده: با external_web_access: false می‌توانید برای اجراهای offline یا محدود، نتیجه‌های cached/indexed را ترجیح دهید. پیش‌فرض دسترسی زنده است.
  • تحقیق طولانی: return_token_budget: "unlimited" می‌تواند برای research با effort بالا زمینه جستجوی بیشتری برگرداند، اما ممکن است latency و هزینه را افزایش دهد.
  • جستجوی تصویر: search_content_types: ["image", "text"] همراه image_settings می‌تواند برای عکس محصول، مکان‌های دیدنی یا تصاویر رویدادها نتیجه تصویری وب برگرداند.

فیلتر دامنه تا ۱۰۰ دامنه مجاز یا تا ۱۰۰ دامنه مسدود را می‌پذیرد. دامنه را بدون https:// بنویسید، مثل who.int یا pubmed.ncbi.nlm.nih.gov، و انتظار داشته باشید subdomainها هم پوشش داده شوند. مقدار return_token_budget فقط default و unlimited است؛ unlimited را فقط برای جستجوی reasoning در خانواده GPT-5 و وقتی route پشتیبانی می‌کند استفاده کنید، و برای گزارش‌هایی که ممکن است چند دقیقه طول بکشند آن را با پردازش پس‌زمینه ترکیب کنید.

برای workflowهای حساس از نظر حریم خصوصی، جستجوی وب زنده را یک جریان داده خارجی بدانید. راهنمای data controls در OpenAI بین دسترسی زنده اینترنت و حالت‌های offline/cache-only تفاوت می‌گذارد؛ در AvalAI فقط وقتی از external_web_access: false استفاده کنید یا درباره HIPAA/BAA، ZDR یا residency ادعا کنید که route مدل انتخابی صریحا پشتیبانی را تأیید کرده باشد. داده خصوصی حساب، secret یا شناسه خام شخصی را در query جستجو نفرستید.

جستجو در منابع قابل اعتماد همراه متادیتای منبع

وقتی پاسخ باید از مجموعه دامنه‌های مشخص بیاید، از فیلتر دامنه استفاده کنید. وقتی برنامه شما باید همه URLهای بررسی‌شده را audit یا render کند، متادیتای منابع را با include بگیرید. اگر مدل و route انتخابی پشتیبانی کنند، external_web_access: false برای اجراهای محدود یا cache-only مفید است.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.5",
    input="آخرین راهنمای WHO درباره درمان دیابت را خلاصه کن و منبع بده.",
    tools=[
        {
            "type": "web_search",
            "search_context_size": "medium",
            "filters": {
                "allowed_domains": ["who.int", "cdc.gov", "fda.gov"],
                "blocked_domains": ["reddit.com", "quora.com"],
            },
        }
    ],
    include=["web_search_call.action.sources"],
    tool_choice="auto",
)

print(response.output_text)
for item in response.output:
    if item.type == "web_search_call":
        print(item.action)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const response = await client.responses.create({
  model: "gpt-5.5",
  input: "آخرین راهنمای WHO درباره درمان دیابت را خلاصه کن و منبع بده.",
  tools: [
    {
      type: "web_search",
      search_context_size: "medium",
      filters: {
        allowed_domains: ["who.int", "cdc.gov", "fda.gov"],
        blocked_domains: ["reddit.com", "quora.com"],
      },
    },
  ],
  include: ["web_search_call.action.sources"],
  tool_choice: "auto",
});

console.log(response.output_text);
console.log(response.output.filter((item) => item.type === "web_search_call"));
bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '{
    "model": "gpt-5.5",
    "input": "آخرین راهنمای WHO درباره درمان دیابت را خلاصه کن و منبع بده.",
    "tools": [
      {
        "type": "web_search",
        "search_context_size": "medium",
        "filters": {
          "allowed_domains": ["who.int", "cdc.gov", "fda.gov"],
          "blocked_domains": ["reddit.com", "quora.com"]
        }
      }
    ],
    "include": ["web_search_call.action.sources"],
    "tool_choice": "auto"
  }'

نتایج جستجوی تصویر

وقتی UI محصول یا تحقیق به مرجع تصویری نیاز دارد، نتیجه‌های تصویری را صریح درخواست کنید و به‌جای اتکا به output_text، آیتم‌های web_search_call.results را بررسی کنید.

هر نتیجه تصویری می‌تواند شامل image_url، source_website_url، thumbnail_url و caption باشد. پیش از نمایش یا proxy کردن asset در برنامه، دامنه منبع و URL تصویر را اعتبارسنجی کنید.

python
response = client.responses.create(
    model="gpt-5.5",
    input="تصاویر جدید دوچرخه‌های باری برقی را پیدا کن و روندهای طراحی را خلاصه کن.",
    tools=[
        {
            "type": "web_search",
            "search_content_types": ["image", "text"],
            "image_settings": {"max_results": 3, "caption": True},
        }
    ],
    include=["web_search_call.results"],
)

for item in response.output:
    if item.type == "web_search_call":
        print(item.results)
javascript
const imageResponse = await client.responses.create({
  model: "gpt-5.5",
  input: "تصاویر جدید دوچرخه‌های باری برقی را پیدا کن و روندهای طراحی را خلاصه کن.",
  tools: [
    {
      type: "web_search",
      search_content_types: ["image", "text"],
      image_settings: { max_results: 3, caption: true },
    },
  ],
  include: ["web_search_call.results"],
});

console.log(imageResponse.output);

محدودیت‌ها

در زیر چند ملاحظه پیاده‌سازی قابل توجه هنگام استفاده از جستجوی وب آورده شده است.

  • مدل‌های search در Chat Completions از مسیر مدل تخصصی استفاده می‌کنند و کنترل‌های جدید Responses web_search مانند فیلتر دامنه، فهرست کامل منابع، کنترل دسترسی زنده یا بودجه توکن برگشتی را پشتیبانی نمی‌کنند.
  • مستندات فعلی OpenAI برای مسیر Chat Completions مدل‌های search جدیدتری را پیشنهاد می‌کند؛ در مستندات AvalAI فقط از model IDهایی استفاده کنید که در data/models.json وجود دارند.
  • با tool_choice: "auto" جستجو اختیاری است. وقتی جستجو باید حتما اجرا شود، از tool_choice: "required" یا انتخاب صریح ابزار جستجوی وب استفاده کنید.
  • وقتی جستجوی وب به عنوان ابزار در API پاسخ‌ها استفاده می‌شود، محدودیت نرخ مدل انتخابی به‌همراه قیمت‌گذاری ابزار اعمال می‌شود.
  • برای انتظارات مربوط به مدیریت داده‌ها، اقامت داده، نگهداری و ایمنی، سیاست حریم خصوصی و سیاست محتوا را مرور کنید.

منابع مرتبط