ورودی‌ها (پرامپت‌ها) در هوش مصنوعی


پرامپت‌ها دستوراتی هستند که شما به یک مدل زبانی بزرگ (LLM) می‌دهید تا به آن بگویید چه کاری انجام دهد. این فرآیند شبیه زمانی است که از کسی سوالی می‌پرسید؛ هرچه سؤال شما واضح‌تر باشد، پاسخ دقیق‌تری دریافت خواهید کرد.

بسیاری از ارائه‌دهندگان مدل‌های هوش مصنوعی، از جمله OpenAI، یک‌سری راه‌‌حل برای تعریف پرامپت‌ها به شما ارائه می‌دهند. این واسط‌ها، شامل نقش‌های مختلف و پیام‌های متفاوت هستند. در ادامه، نحوه تعریف و کار با پرامپت‌ها در سرویس هوش مصنوعی لیارا، هم با OpenAI SDK و هم با AI SDK بررسی شده است.

پرامپت متنی (Text Prompt)

پرامپت‌های متنی، رشته‌های متنی هستند. این نوع پرامپت‌ها، برای تولید محتوای ساده، مورد استفاده قرار می‌گیرند.

برای استفاده از پرامپت‌های متنی با OpenAI SDK، می‌توانید از کدها و دستورات زیر استفاده کنید:
کپی
curl <baseUrl>/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <LIARA_API_KEY>" \
  -d '{
  "model": "<modelName>",
  "messages": [
    {"role": "user", "content": "Hello!"}
  ]
}'

در دستور فوق، مقدار فیلد content، پرامپت متنی شما است که می‌توانید بنا به نیاز خود، آن را تغییر دهید.

در قطعه کد‌های فوق، به‌جای <baseUrl>، آدرس سرویس هوش مصنوعی خود را قرار دهید و به‌جای <LIARA_API_KEY>، کلید API خود را وارد کنید. همچنین، به‌جای <model_name>، نام یکی از مدل‌های فوق را قرار دهید.

پرامپت سیستمی

پرامپت‌های سیستمی مجموعه‌ای از دستورالعمل‌های اولیه هستند که به مدل‌ها داده می‌شوند تا رفتارها و پاسخ‌های آن‌ها را هدایت و محدود کنند. این نوع از پرامپت‌ها به مدل کمک می‌کنند تا در یک چارچوب خاص عمل کند یا لحن و نقش مشخصی را ایفا نماید.

شما می‌توانید به شکل زیر، پرامپت‌های سیستمی را در برنامه خود تعریف کنید.
کپی
// npm i @ai-sdk/openai-compatible
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';

const destination = "Paris";
const lengthOfStay = 5;


const { text } = await generateText({
  model: createOpenAICompatible({
    baseURL: process.env.MY_BASE_URL,
    name: 'example',
    apiKey: process.env.MY_API_KEY,
  }).chatModel("openai/gpt-4o-mini"),

  system:
    `You help planning travel itineraries. ` +
    `Respond to the users' request with a list ` +
    `of the best stops to make in their destination.`,

  prompt: `I am planning a trip to ${destination} for ${lengthOfStay} days. ` +
    `Please suggest the best tourist activities for me to do.`,

});

console.log('Generated Text:', text);

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

پرامپت‌های پیام‌محور

پرامپت پیام‌محور، آرایه‌ای از پیام‌ها است که هر پیام دارای نقش مشخصی مانند user (کاربر)، assistant (دستیار)، یا tool (ابزار) است. این نوع پرامپت‌ها برای چت‌بات‌ها و پرامپت‌های پیچیده‌تر و چندوجهی (multi-modal) بسیار مناسب‌اند.

برای استفاده از پرامپت‌های پیام‌محور با OpenAI SDK، می‌توانید از کدها و دستورات زیر استفاده کنید:
کپی
curl <baseUrl>/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <LIARA_API_KEY>" \
  -d '{
  "model": "<modelName>",
  "messages": [
    {
            "role": "developer",
            "content": "Talk like a pirate."
    },
    {
            "role": "user",
            "content": "Are semicolons optional in JavaScript?"
    }

  ]
}'

در دستور فوق، مقدار فیلد role، می‌تواند یکی از مقادیر زیر باشد (به ترتیب اولویت، نقش‌ها قرار گرفته‌اند):

  • developer (توسعه‌دهنده): دستورالعمل‌هایی که توسط توسعه‌دهنده‌ی اپلیکیشن ارائه می‌شود.

  • system (سیستم): تنظیم کلی رفتار مدل. لحن، سبک، دستورالعمل‌های کلی و نقش‌آفرینی.

  • user (کاربر): ورودی که از سمت کاربر نهایی به مدل داده می‌شود.

  • assistant (دستیار): نقش پاسخ‌دهنده مدل را دارد؛ یعنی پیام‌هایی که مدل تولید کرده با این نقش ذخیره می‌شوند.

  • tool (ابزار): یک ابزار ثالت که باعث بهبود پاسخگویی مدل، می‌شود.

در نظر داشته باشید که در دستورات فوق، بیش از یک پیام در یک زمان، به مدل ارسال می‌شود و ممکن است که همه مدل‌های زبانی از roleهای مختلف و چند محتوایی، پشتیبانی نکنند.

انواع پرامپت‌ها با نقش کاربر (user)

در ادامه، تمامی پرامپت‌هایی که یک مدل با نقش user می‌تواند دریافت کند، توضیح داده شده است.

۱. پرامپت متنی ساده

رایج ترین پرامپت با نقش user که یک رشته متنی ساده است که در بخش پرامپت متنی توضیح داده شده است.

۲. پرامپت متنی به همراه عکس

شما می‌توانید در یک ورودی به مدل، همزمان از متن و عکس استفاده کنید. به عنوان مثال، می‌توانید از یک عکس به عنوان ورودی استفاده کنید و از مدل بخواهید که در مورد آن عکس توضیح دهد یا سوالاتی را پاسخ دهد.

برای استفاده از پرامپت‌های متنی همراه با عکس در OpenAI SDK، می‌توانید از کدها و دستورات زیر استفاده کنید:
کپی
curl <baseUrl>/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <LIARA_API_KEY>" \
  -d '{
  "model": "<modelName>",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Describe the image in detail."
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://media.liara.ir/ai/dog.png"
          }
        }
      ]
    }

  ]
}'

در قطعه کد فوق، فیلد image_url.url، آدرس عکس ورودی است که می‌خواهید به مدل ارسال کنید. این آدرس، می‌تواند یک لینک به عکس باشد یا می‌تواند بر پایه فرمت Base64 باشد.

یک عکس Base64، به جای فرمت‌های معمولی تصویری (مانند jpg یا png)، یک رشته متنی طولانی کدگذاری شده است که می‌تواند به عنوان ورودی به مدل ارسال شود. شما می‌توانید برای تبدیل عکس‌های خود به فرمت Base64، از وب‌سایت base64-image استفاده کنید.

انواع پرامپت‌ها با نقش دستیار (assistant) در AI SDK

پیام‌های Assistant معمولاً پاسخ‌های قبلی دستیار به کاربر هستند و می‌توانند شامل متن، استدلال یا بخش‌هایی مربوط به فراخوانی ابزار (tool call) باشند. در ادامه، تمامی پرامپت‌هایی که یک مدل با نقش assistant می‌تواند دریافت کند، توضیح داده شده است.

۱. پرامپت متنی

نحوه تعریف پرامپت متنی با نقش assistant، مشابه با پرامپت متنی با نقش user است که در بخش پرامپت‌های پیام‌محور توضیح داده شده است. مثال زیر، یک پرامپت متنی با نقش assistant با استفاده از AI SDK را، نشان می‌دهد:

کپی
// npm i @ai-sdk/openai-compatible

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';
import { config } from 'dotenv';

import 'dotenv/config';

config();


const { text } = await generateText({
  model: createOpenAICompatible({
    baseURL: process.env.MY_BASE_URL,
    name: 'example',
    apiKey: process.env.MY_API_KEY,
  }).chatModel("openai/gpt-4o-mini"),
  
  messages: [
    { role: 'user', content: 'Hi!' },
    { role: 'assistant', content: 'Hello, how can I help?' },
  ],
});

console.log('Generated Text:', text);

۲. پرامپت متنی به‌صورت آرایه‌ای از پیام‌ها

شما می‌توانید به جای یک پیام با نقش assistant، آرایه‌ای از پیام‌ها را به مدل، ارسال کنید:

کپی
// npm i @ai-sdk/openai-compatible

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';
import { config } from 'dotenv';

import 'dotenv/config';

config();


const { text } = await generateText({
  model: createOpenAICompatible({
    baseURL: process.env.MY_BASE_URL,
    name: 'example',
    apiKey: process.env.MY_API_KEY,
  }).chatModel("openai/gpt-4o-mini"),
  
  messages: [
    { role: 'user', content: 'Hi!' },
    {
      role: 'assistant',
      content: [
        { type: 'text', text: 'Hello, how can I help?' },
        { type: 'text', text: 'Hi, Good Morning' },
      ],
    },
  ],
});

console.log('Generated Text:', text);

مهندسی پرامپت (Prompt Engineering)

مهندسی پرامپت فرآیند نوشتن پرامپت‌های مؤثر برای یک مدل است؛ به گونه‌ای که مدل به‌طور پیوسته محتوایی تولید کند که با نیازهای شما مطابقت داشته باشد. از آنجا که محتوای تولیدشده توسط مدل‌ها غیر قطعی (non-deterministic) است، طراحی یک پرامپت که خروجی را در قالب و فرم مطلوب تولید کند، ترکیبی از هنر و علم محسوب می‌شود. با این حال، تکنیک‌ها و روش‌های اثبات‌شده‌ای وجود دارند که می‌توان از آن‌ها برای دستیابی مداوم به نتایج مطلوب استفاده کرد.

برخی تکنیک‌های مهندسی پرامپت برای همه‌ی مدل‌ها قابل استفاده‌اند، مانند استفاده از نقش‌ها (roleها). اما هر نوع مدل، برای بهینه‌سازی نتایج، نیاز به پرامپت نویسی متفاوتی دارد. حتی نسخه‌های مختلف از یک مدل (مانند openai/gpt-4o-mini و openai/gpt-4.1) ممکن است خروجی‌های متفاوتی تولید کنند.

بنابراین، اگر در حال ساخت برنامه‌های پیچیده هستید، اکیداً توصیه می‌شود که اقدامات زیر را انجام دهید:

استفاده از یک مدل مشخص

در برنامه‌های خود، فقط از یک مدل مشخص استفاده کنید تا رفتار مدل همواره ثابت باقی بماند.

ساخت ابزارهای ارزیابی (evals)

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

تعیین محدودیت در استفاده از Toolها

زمانی که پرامپت‌هایی طراحی می‌کنید که از Toolها استفاده می‌کنند، دستیابی به نتایج مطلوب می‌تواند با افزایش تعداد و پیچیدگی Toolها دشوارتر شود. در ادامه، چند نکته برای بهبود عملکرد مدل هنگام استفاده از Toolها ارائه شده است:

  • از مدلی استفاده کنید که توانایی بالایی در Tool Calling (فراخوانی یک Tool) دارد، مانند openai/gpt-4.1. مدل‌های ضعیف‌تر اغلب در این زمینه دچار مشکل می‌شوند.
  • تعداد Toolها را پایین نگه دارید؛ به‌طور کلی، بهتر است از پنج Tool یا کمتر استفاده کنید.
  • پارامترهای Tool را ساده نگه دارید و از المان‌های تو در تو، استفاده نکنید.
  • نام‌های با معنا برای ابزارها، پارامترها و ویژگی‌های پارامتر انتخاب کنید.
  • نمونه‌هایی از ورودی/خروجی ابزارها را در پرامپت بگنجانید تا مدل درک بهتری از نحوه‌ی استفاده داشته باشد.