یادگیری تقویتی چیست؟ آموزش Reinforcement Learning، الگوریتم Q-Learning و RLHF

یادگیری تقویتی روشی در هوش مصنوعی است که در آن یک عامل با آزمون‌وخطا، دریافت پاداش و تعامل با محیط یاد می‌گیرد چه تصمیمی بگیرد. در این راهنمای جامع با مفاهیم Agent، State، Action، Reward، الگوریتم Q-Learning، یادگیری تقویتی عمیق، PPO، RLHF و یک پروژه عملی Python آشنا می‌شوید.

Share
چرخه عامل، محیط، اقدام و پاداش در یادگیری تقویتی


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

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

این روش در حوزه‌های مختلفی استفاده می‌شود:

  • بازی‌های رایانه‌ای
  • رباتیک
  • کنترل صنعتی
  • مدیریت انرژی
  • زمان‌بندی منابع
  • مسیریابی
  • سیستم‌های پیشنهاددهنده
  • بهینه‌سازی تبلیغات
  • تصمیم‌گیری خودکار
  • آموزش مدل‌های زبانی
  • بهبود رفتار AI Agentها

در این مقاله، یادگیری تقویتی را از مفاهیم پایه تا الگوریتم Q-Learning، Deep Q-Network، Policy Gradient، PPO و RLHF بررسی می‌کنیم. سپس یک عامل واقعی را با Python آموزش می‌دهیم و نشان می‌دهیم API مدل‌های زبانی چگونه می‌تواند در ساخت Reward Model و ارزیابی Agent استفاده شود.

یادگیری تقویتی چیست؟

یادگیری تقویتی روشی برای یادگیری تصمیم‌گیری متوالی است. در این روش یک Agent با Environment تعامل می‌کند.

چرخه اصلی چنین است:

  1. عامل وضعیت فعلی محیط را مشاهده می‌کند.
  2. یک اقدام انتخاب می‌کند.
  3. محیط بر اساس آن اقدام تغییر می‌کند.
  4. عامل یک پاداش دریافت می‌کند.
  5. عامل از نتیجه تجربه قبلی یاد می‌گیرد.
  6. این فرایند تا پایان Episode ادامه پیدا می‌کند.

هدف عامل فقط دریافت بیشترین پاداش فوری نیست؛ بلکه باید مجموع پاداش‌های آینده را نیز در نظر بگیرد.

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

تفاوت یادگیری تقویتی با یادگیری نظارت‌شده

ویژگییادگیری نظارت‌شدهیادگیری تقویتی
نوع دادهورودی همراه با پاسخ صحیحتجربه تعامل با محیط
بازخوردLabel مستقیمReward یا Penalty
نوع مسئلهپیش‌بینی و طبقه‌بندیتصمیم‌گیری متوالی
ترتیب اقداماتمعمولاً مستقلاقدامات روی آینده اثر دارند
جمع‌آوری دادهدیتاست از قبل آمادهعامل هنگام تعامل تجربه تولید می‌کند
چالش اصلیتعمیم به داده جدیداکتشاف، پاداش تأخیری و پایداری
نمونهتشخیص نوع تصویرکنترل ربات یا انجام بازی

در یادگیری نظارت‌شده ممکن است مدل برای هر تصویر برچسب «گربه» یا «سگ» دریافت کند. در یادگیری تقویتی، عامل فقط نتیجه اقدام خود را می‌بیند و باید رفتار مناسب را کشف کند.

اجزای اصلی یادگیری تقویتی

عامل یا Agent

عامل موجودیتی است که تصمیم می‌گیرد. عامل می‌تواند یک الگوریتم، ربات، نرم‌افزار، مدل زبانی یا سیستم کنترل باشد.

محیط یا Environment

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

وضعیت یا State

State نمایش اطلاعات فعلی محیط است.

در یک بازی، وضعیت می‌تواند شامل موقعیت بازیکن، دشمنان، امتیاز و منابع باقی‌مانده باشد.

در یک سامانه پشتیبانی، وضعیت ممکن است شامل این موارد باشد:

  • موضوع درخواست
  • وضعیت احراز هویت
  • اقدامات قبلی
  • نتیجه فراخوانی ابزارها
  • میزان اطمینان پاسخ
  • مرحله فعلی پرونده

مشاهده یا Observation

در بعضی محیط‌ها عامل به وضعیت کامل دسترسی ندارد و فقط بخشی از آن را مشاهده می‌کند. این اطلاعات Observation نام دارد.

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

اقدام یا Action

Action تصمیمی است که عامل در هر مرحله می‌گیرد.

فضای اقدام ممکن است گسسته باشد:

  • حرکت به چپ
  • حرکت به راست
  • توقف

یا پیوسته باشد:

  • زاویه فرمان
  • میزان گاز
  • قدرت موتور

پاداش یا Reward

Reward عددی است که مطلوب یا نامطلوب‌بودن نتیجه اقدام را نشان می‌دهد.

نمونه:

  • رسیدن به هدف: +100
  • برخورد با مانع: -50
  • هر مرحله اضافی: -1
  • انجام موفق عملیات: +20
  • فراخوانی ابزار غیرضروری: -2

سیاست یا Policy

Policy مشخص می‌کند عامل در هر وضعیت چه اقدامی انجام دهد.

به‌صورت ریاضی:

π(a∣s)\pi(a \mid s)

یعنی احتمال انتخاب اقدام aa در وضعیت ss.

سیاست می‌تواند قطعی باشد یا برای هر اقدام یک احتمال تعریف کند.

Episode

یک Episode توالی کامل تعامل از نقطه شروع تا پایان است.

برای مثال:

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

Return

Return مجموع پاداش‌های آینده است:

Gt=Rt+1+γRt+2+γ2Rt+3+…G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots

در این رابطه، γ\gamma ضریب تنزیل است.

ضریب تنزیل یا Discount Factor چیست؟

ضریب تنزیل که با γ\gamma نمایش داده می‌شود، مشخص می‌کند عامل تا چه اندازه به پاداش‌های آینده اهمیت دهد.

مقدار آن معمولاً میان صفر و یک است.

اگر Gamma نزدیک صفر باشد

عامل بیشتر به پاداش فوری اهمیت می‌دهد.

اگر Gamma نزدیک یک باشد

عامل پاداش‌های بلندمدت را جدی‌تر در نظر می‌گیرد.

برای مثال، اگر عامل میان دریافت یک پاداش کوچک در همین لحظه و پاداش بزرگ‌تری در آینده انتخاب کند، مقدار Gamma بر تصمیم آن اثر دارد.

Gamma بسیار بالا همیشه بهتر نیست. افق زمانی مسئله، پایداری محاسبات و نوع محیط باید در انتخاب آن در نظر گرفته شوند.

فرایند تصمیم‌گیری مارکوف چیست؟

بسیاری از مسائل یادگیری تقویتی با چارچوب Markov Decision Process یا MDP مدل‌سازی می‌شوند.

یک MDP معمولاً شامل این اجزاست:

(S,A,P,R,γ)(S, A, P, R, \gamma)

که در آن:

  • SS: مجموعه وضعیت‌ها
  • AA: مجموعه اقدام‌ها
  • PP: احتمال انتقال میان وضعیت‌ها
  • RR: تابع پاداش
  • γ\gamma: ضریب تنزیل

خاصیت مارکوف به این معناست که اگر State به‌درستی تعریف شده باشد، وضعیت آینده با دانستن وضعیت فعلی و اقدام قابل مدل‌سازی است و به کل تاریخچه وابسته نیست.

در مسائل واقعی، ساخت State مناسب یکی از دشوارترین بخش‌های طراحی سیستم است.

تابع ارزش چیست؟

تابع ارزش نشان می‌دهد قرارگرفتن در یک وضعیت، با فرض ادامه یک سیاست مشخص، در بلندمدت چقدر ارزش دارد.

State Value

Vπ(s)=Eπ[Gt∣St=s]V^\pi(s) = \mathbb{E}_\pi \left[ G_t \mid S_t=s \right]

این تابع Return موردانتظار از وضعیت ss را تحت سیاست π\pi نشان می‌دهد.

Action Value

Qπ(s,a)=Eπ[Gt∣St=s,At=a]Q^\pi(s,a) = \mathbb{E}_\pi \left[ G_t \mid S_t=s, A_t=a \right]

تابع Q نشان می‌دهد انجام اقدام aa در وضعیت ss و ادامه سیاست چقدر ارزش دارد.

معادله بلمن چیست؟

معادله Bellman ارزش یک وضعیت را به پاداش فوری و ارزش وضعیت بعدی مرتبط می‌کند.

برای تابع Q بهینه می‌توان نوشت:

Q∗(s,a)=E[r+γmax⁡a′Q∗(s′,a′)]Q^*(s,a) = \mathbb{E} \left[ r + \gamma \max_{a'} Q^*(s',a') \right]

مفهوم آن ساده است:

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

بسیاری از الگوریتم‌های یادگیری تقویتی بر اساس همین رابطه یا شکل‌های دیگر آن ساخته شده‌اند.

Exploration و Exploitation چیست؟

عامل با یک مسئله اساسی روبه‌رو است:

  • آیا از بهترین اقدام شناخته‌شده استفاده کند؟
  • یا اقدام دیگری را آزمایش کند که شاید نتیجه بهتری داشته باشد؟

Exploitation

استفاده از دانشی که عامل تا این لحظه یاد گرفته است.

Exploration

آزمایش اقدامات جدید برای کشف فرصت‌های بهتر.

اگر عامل فقط Exploitation انجام دهد، ممکن است خیلی زود در یک سیاست ضعیف گیر کند. اگر فقط Exploration انجام دهد، از آموخته‌های خود استفاده نمی‌کند.

روش Epsilon-Greedy

یکی از روش‌های ساده ایجاد تعادل میان اکتشاف و بهره‌برداری، Epsilon-Greedy است.

در هر مرحله:

  • با احتمال ϵ\epsilon، یک اقدام تصادفی انتخاب می‌شود.
  • با احتمال 1−ϵ1-\epsilon، بهترین اقدام فعلی انتخاب می‌شود.

معمولاً Epsilon در ابتدای آموزش مقدار بیشتری دارد و به‌تدریج کاهش پیدا می‌کند.

import random
import numpy as np


def choose_action(
    q_table: np.ndarray,
    state: int,
    epsilon: float,
) -> int:
    if random.random() < epsilon:
        return random.randrange(
            q_table.shape[1]
        )

    return int(
        np.argmax(q_table[state])
    )

Q-Learning چیست؟

Q-Learning یک الگوریتم Model-free و Off-policy برای یادگیری ارزش اقدام‌هاست.

Model-free یعنی عامل برای یادگیری به مدل صریحی از قوانین انتقال محیط نیاز ندارد. عامل با مشاهده تجربه‌ها مقدارهای Q را به‌روزرسانی می‌کند.

قانون به‌روزرسانی Q-Learning:

Q(s,a)←Q(s,a)+α[r+γmax⁡a′Q(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha \left[ r + \gamma \max_{a'} Q(s',a') - Q(s,a) \right]

اجزای این رابطه:

  • Q(s,a)Q(s,a): مقدار فعلی
  • α\alpha: نرخ یادگیری
  • rr: پاداش
  • γ\gamma: ضریب تنزیل
  • s′s': وضعیت بعدی
  • max⁡Q(s′,a′)\max Q(s',a'): بهترین ارزش تخمینی در وضعیت بعدی

عبارت داخل براکت TD Error نام دارد:

δ=r+γmax⁡a′Q(s′,a′)−Q(s,a)\delta = r + \gamma \max_{a'} Q(s',a') - Q(s,a)

عامل مقدار قبلی را به‌اندازه‌ای متناسب با این خطا اصلاح می‌کند.

چرا Q-Learning را Off-policy می‌نامند؟

رفتار عامل هنگام جمع‌آوری تجربه ممکن است Epsilon-Greedy باشد، اما در هدف به‌روزرسانی از بهترین اقدام احتمالی وضعیت بعدی استفاده می‌شود:

max⁡a′Q(s′,a′)\max_{a'} Q(s',a')

یعنی سیاست رفتاری و سیاست هدف می‌توانند متفاوت باشند.

در مقابل، الگوریتم SARSA مقدار اقدامی را استفاده می‌کند که سیاست واقعاً در مرحله بعد انتخاب کرده است.

تفاوت Q-Learning و SARSA

ویژگیQ-LearningSARSA
نوعOff-policyOn-policy
هدف به‌روزرسانیبهترین اقدام احتمالیاقدام انتخاب‌شده توسط سیاست
رفتارممکن است خوش‌بینانه‌تر باشدرفتار واقعی سیاست را یاد می‌گیرد
رابطهmax Q(s', a')Q(s', a')
حساسیت به Explorationکمتر در هدفExploration بخشی از هدف است

رابطه SARSA:

Q(s,a)←Q(s,a)+α[r+γQ(s′,a′)−Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha \left[ r + \gamma Q(s',a') - Q(s,a) \right]

نام SARSA از توالی زیر ساخته شده است:

State,Action,Reward,State,ActionState, Action, Reward, State, Action

مثال عملی: آموزش عامل در FrozenLake

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

این محیط دارای فضای وضعیت و اقدام گسسته است و برای آموزش Q-Learning جدولی مناسب است. مستندات Gymnasium محیط استاندارد FrozenLake و آموزش Tabular Q-Learning را ارائه می‌کند.

نصب کتابخانه‌ها

pip install gymnasium numpy

ساخت محیط

import gymnasium as gym


env = gym.make(
    "FrozenLake-v1",
    map_name="4x4",
    is_slippery=True,
)

print(
    "States:",
    env.observation_space.n,
)

print(
    "Actions:",
    env.action_space.n,
)

در نسخه استاندارد ۴×۴:

  • فضای مشاهده ۱۶ وضعیت دارد.
  • فضای اقدام شامل چهار جهت است.
  • لغزنده‌بودن محیط باعث می‌شود نتیجه اقدام همیشه قطعی نباشد.

مستندات رسمی Gymnasium فضای اقدام این محیط را Discrete(4) و فضای مشاهده را Discrete(16) تعریف می‌کند.

پیاده‌سازی کامل Q-Learning با Python

import random

import gymnasium as gym
import numpy as np


SEED = 42
EPISODES = 20_000
MAX_STEPS = 100

LEARNING_RATE = 0.8
DISCOUNT_FACTOR = 0.95

EPSILON_START = 1.0
EPSILON_MIN = 0.05
EPSILON_DECAY = 0.9997


random.seed(SEED)
np.random.seed(SEED)

env = gym.make(
    "FrozenLake-v1",
    map_name="4x4",
    is_slippery=True,
)

state_count = env.observation_space.n
action_count = env.action_space.n

q_table = np.zeros(
    (state_count, action_count),
    dtype=np.float32,
)

epsilon = EPSILON_START
episode_rewards = []


for episode in range(EPISODES):
    state, info = env.reset(
        seed=SEED + episode
    )

    total_reward = 0.0

    for step in range(MAX_STEPS):
        if random.random() < epsilon:
            action = env.action_space.sample()
        else:
            action = int(
                np.argmax(q_table[state])
            )

        (
            next_state,
            reward,
            terminated,
            truncated,
            info,
        ) = env.step(action)

        done = terminated or truncated

        next_best_q = 0.0

        if not done:
            next_best_q = float(
                np.max(q_table[next_state])
            )

        td_target = (
            reward
            + DISCOUNT_FACTOR * next_best_q
        )

        td_error = (
            td_target
            - q_table[state, action]
        )

        q_table[state, action] += (
            LEARNING_RATE * td_error
        )

        state = next_state
        total_reward += reward

        if done:
            break

    epsilon = max(
        EPSILON_MIN,
        epsilon * EPSILON_DECAY,
    )

    episode_rewards.append(total_reward)


env.close()

print("Q-table:")
print(q_table)

print(
    "Success rate in last 1000 episodes:",
    np.mean(episode_rewards[-1000:]),
)

این کد یک Q-Table با ابعاد تعداد وضعیت‌ها در تعداد اقدام‌ها می‌سازد. عامل پس از هر تجربه مقدار مربوط به وضعیت و اقدام را اصلاح می‌کند.

ارزیابی عامل آموزش‌دیده

برای ارزیابی، Exploration را غیرفعال می‌کنیم و همیشه بهترین اقدام شناخته‌شده را انتخاب می‌کنیم:

import gymnasium as gym
import numpy as np


evaluation_env = gym.make(
    "FrozenLake-v1",
    map_name="4x4",
    is_slippery=True,
)

EVALUATION_EPISODES = 1000
successes = 0


for episode in range(EVALUATION_EPISODES):
    state, info = evaluation_env.reset(
        seed=100_000 + episode
    )

    for step in range(100):
        action = int(
            np.argmax(q_table[state])
        )

        (
            state,
            reward,
            terminated,
            truncated,
            info,
        ) = evaluation_env.step(action)

        if terminated or truncated:
            successes += int(reward > 0)
            break


evaluation_env.close()

success_rate = (
    successes / EVALUATION_EPISODES
)

print(
    f"Success rate: {success_rate:.2%}"
)

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

راهنمای Stable-Baselines3 نیز تأکید می‌کند که نتیجه یادگیری تقویتی می‌تواند با تغییر Seed متفاوت باشد و ارزیابی کمی باید بر اساس چند اجرا انجام شود.

محدودیت Q-Table

Q-Learning جدولی زمانی مناسب است که تعداد وضعیت‌ها و اقدام‌ها محدود باشد.

فرض کنید محیط دارای:

  • یک میلیون وضعیت
  • هزار اقدام

باشد. Q-Table به یک میلیارد مقدار نیاز خواهد داشت.

در مسائلی مانند پردازش تصویر، وضعیت می‌تواند شامل میلیون‌ها ترکیب ممکن باشد. ذخیره مقدار جداگانه برای تمام Stateها عملی نیست.

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

یادگیری تقویتی عمیق چیست؟

Deep Reinforcement Learning ترکیبی از یادگیری تقویتی و شبکه‌های عصبی عمیق است.

در این روش، شبکه عصبی می‌تواند یکی از موارد زیر را تقریب بزند:

  • تابع ارزش
  • تابع Q
  • Policy
  • مدل محیط
  • Reward Model

این روش برای ورودی‌های پیچیده مانند تصویر، صوت یا Stateهای بزرگ مناسب‌تر است.

DQN چیست؟

Deep Q-Network یا DQN از یک شبکه عصبی برای تخمین مقدار Q استفاده می‌کند.

ورودی شبکه:

ss

خروجی شبکه:

Q(s,a1),Q(s,a2),…,Q(s,an)Q(s,a_1), Q(s,a_2), \dots, Q(s,a_n)

DQN معمولاً از دو تکنیک مهم استفاده می‌کند:

Experience Replay

تجربه‌ها در یک Replay Buffer ذخیره می‌شوند:

(s,a,r,s′,done)(s, a, r, s', done)

سپس Batchهای تصادفی از این حافظه برای آموزش شبکه انتخاب می‌شوند. این کار وابستگی شدید نمونه‌های متوالی را کاهش می‌دهد.

Target Network

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

پژوهش اولیه DQN نشان داد یک شبکه کانولوشنی می‌تواند با استفاده از نسخه‌ای از Q-Learning، سیاست کنترل را مستقیماً از پیکسل بازی‌های Atari یاد بگیرد.

الگوریتم‌های مهم یادگیری تقویتی

Value-based

این روش‌ها ارزش اقدام‌ها یا وضعیت‌ها را یاد می‌گیرند.

نمونه‌ها:

  • Q-Learning
  • SARSA
  • DQN
  • Double DQN
  • Dueling DQN

Policy-based

در این روش‌ها Policy مستقیماً بهینه می‌شود.

نمونه‌ها:

  • REINFORCE
  • Policy Gradient

Actor-Critic

این معماری دو بخش دارد:

  • Actor اقدام را انتخاب می‌کند.
  • Critic ارزش یا کیفیت تصمیم را ارزیابی می‌کند.

نمونه‌ها:

  • A2C
  • A3C
  • PPO
  • DDPG
  • TD3
  • SAC

Model-based

عامل مدلی از محیط یاد می‌گیرد یا از مدل محیط برای برنامه‌ریزی استفاده می‌کند.

Offline Reinforcement Learning

عامل از مجموعه تجربه‌های از قبل جمع‌آوری‌شده یاد می‌گیرد و هنگام آموزش مستقیماً با محیط تعامل نمی‌کند.

انتخاب الگوریتم بر اساس فضای اقدام

نوع مسئلهالگوریتم‌های قابل بررسی
وضعیت و اقدام کوچک و گسستهQ-Learning، SARSA
مشاهده بزرگ و اقدام گسستهDQN و انواع آن
اقدام پیوستهSAC، TD3، PPO
سیاست تصادفیPolicy Gradient، Actor-Critic
داده از قبل جمع‌آوری‌شدهOffline RL
کنترل نسبتاً عمومیPPO
محیط چندعاملیMulti-Agent RL

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

مستندات Stable-Baselines3 جدولی از الگوریتم‌ها و پشتیبانی آن‌ها از فضاهای اقدام گسسته، پیوسته و پردازش موازی ارائه می‌کند.

PPO چیست؟

PPO مخفف Proximal Policy Optimization است. این الگوریتم از خانواده Policy Gradient و Actor-Critic محسوب می‌شود.

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

PPO از یک هدف Clipped استفاده می‌کند:

LCLIP(θ)=E[min⁡(rt(θ)A^t,clip⁡(rt(θ),1−ϵ,1+ϵ)A^t)]L^{CLIP}(\theta) = \mathbb{E} \left[ \min \left( r_t(\theta)\hat{A}_t, \operatorname{clip} (r_t(\theta),1-\epsilon,1+\epsilon) \hat{A}_t \right) \right]

که در آن:

  • rt(θ)r_t(\theta) نسبت احتمال Policy جدید به قدیم است.
  • A^t\hat{A}_t تخمین Advantage است.
  • ϵ\epsilon محدوده تغییر را کنترل می‌کند.

مستندات Stable-Baselines3 توضیح می‌دهد که PPO از Clipping برای جلوگیری از به‌روزرسانی بسیار بزرگ Policy استفاده می‌کند.

آموزش عامل با Stable-Baselines3

نصب:

pip install "stable-baselines3[extra]" gymnasium

نمونه آموزش PPO روی CartPole:

import gymnasium as gym
from stable_baselines3 import PPO
from stable_baselines3.common.evaluation import (
    evaluate_policy,
)
from stable_baselines3.common.monitor import Monitor


train_env = Monitor(
    gym.make("CartPole-v1")
)

model = PPO(
    policy="MlpPolicy",
    env=train_env,
    learning_rate=3e-4,
    n_steps=2048,
    batch_size=64,
    gamma=0.99,
    verbose=1,
    seed=42,
)

model.learn(
    total_timesteps=100_000
)

model.save("ppo_cartpole")

evaluation_env = Monitor(
    gym.make("CartPole-v1")
)

mean_reward, std_reward = evaluate_policy(
    model,
    evaluation_env,
    n_eval_episodes=20,
    deterministic=True,
)

print(
    f"Mean reward: {mean_reward:.2f}"
)

print(
    f"Reward std: {std_reward:.2f}"
)

train_env.close()
evaluation_env.close()

پارامترهای پیش‌فرض برای تمام محیط‌ها مناسب نیستند. تعداد Step، نرخ یادگیری، ساختار شبکه و Reward باید بر اساس مسئله ارزیابی شوند.

Reward Shaping چیست؟

Reward Shaping به معنای طراحی پاداش‌های میانی برای هدایت بهتر عامل است.

فرض کنید ربات فقط هنگام رسیدن به مقصد پاداش +100 دریافت کند. اگر محیط بزرگ باشد، ممکن است مدت زیادی هیچ پاداشی نبیند.

می‌توان پاداش‌های کمکی تعریف کرد:

  • نزدیک‌شدن به مقصد: پاداش مثبت
  • دورشدن: پاداش منفی
  • برخورد: جریمه
  • هر قدم اضافی: جریمه کوچک

اما Reward Shaping خطرناک است. عامل ممکن است راهی برای بیشینه‌کردن عدد پاداش پیدا کند که با هدف واقعی سیستم یکسان نباشد.

Reward Hacking چیست؟

Reward Hacking زمانی رخ می‌دهد که عامل از نقص تابع پاداش استفاده می‌کند.

برای مثال، اگر به یک ربات نظافت‌گر بابت تعداد دفعات جمع‌آوری زباله پاداش دهیم، ممکن است زباله را رها و دوباره جمع کند تا پاداش بیشتری بگیرد.

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

راهکارهای کاهش این مشکل:

  • تعریف چند معیار
  • استفاده از قیدهای سخت
  • بررسی نتیجه واقعی
  • ارزیابی انسانی
  • تست رفتارهای مرزی
  • ثبت اقدامات
  • محدودکردن فضای Action
  • جداکردن معیار موفقیت از معیار ظاهری

Sparse Reward چیست؟

در محیط Sparse Reward، عامل به‌ندرت پاداش دریافت می‌کند.

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

راهکارهای قابل بررسی:

  • Reward Shaping
  • Curriculum Learning
  • Demonstration
  • Imitation Learning
  • Hierarchical RL
  • Intrinsic Motivation
  • تجربه‌های انسانی
  • برنامه‌ریزی مبتنی بر مدل

تفاوت Reinforcement Learning و Imitation Learning

در Imitation Learning، عامل رفتار متخصص را از نمونه اقدامات او یاد می‌گیرد.

در Reinforcement Learning، عامل رفتار را بر اساس Reward کشف می‌کند.

این دو روش قابل ترکیب‌اند:

  1. عامل ابتدا از Demonstration انسانی یاد می‌گیرد.
  2. سپس با Reinforcement Learning رفتار خود را بهبود می‌دهد.

یادگیری تقویتی در مدل‌های زبانی

مدل زبانی در مرحله Pretraining معمولاً با پیش‌بینی توکن بعدی آموزش داده می‌شود. اما پیش‌بینی توکن به‌تنهایی تضمین نمی‌کند مدل:

  • دستور کاربر را دقیق دنبال کند.
  • پاسخ مفید تولید کند.
  • قالب موردنظر را رعایت کند.
  • پاسخ‌های ترجیح‌داده‌شده توسط انسان را انتخاب کند.

برای بهبود رفتار مدل از روش‌های Post-training استفاده می‌شود. یکی از این روش‌ها RLHF است.

RLHF چیست؟

RLHF مخفف Reinforcement Learning from Human Feedback و به معنای یادگیری تقویتی از بازخورد انسانی است.

یک Pipeline متداول RLHF شامل مراحل زیر است:

مرحله اول: Supervised Fine-tuning

مدل پایه با نمونه‌های پاسخ مطلوب Fine-tune می‌شود.

مرحله دوم: جمع‌آوری Preference

برای هر Prompt چند پاسخ تولید می‌شود و ارزیاب انسانی آن‌ها را رتبه‌بندی می‌کند.

مرحله سوم: آموزش Reward Model

Reward Model یاد می‌گیرد کدام پاسخ ترجیح داده می‌شود.

مرحله چهارم: بهینه‌سازی Policy

مدل با الگوریتمی مانند PPO برای افزایش امتیاز Reward Model بهینه می‌شود، درحالی‌که معمولاً از فاصله‌گرفتن بیش‌ازحد از مدل مرجع جلوگیری می‌شود.

پژوهش InstructGPT از Demonstrationهای انسانی برای Supervised Fine-tuning، رتبه‌بندی خروجی‌ها برای ساخت مدل ترجیح و سپس یادگیری تقویتی از بازخورد انسانی استفاده کرد.

آیا تمام مدل‌های زبانی با RLHF آموزش می‌بینند؟

خیر. Post-training مدل‌های زبانی می‌تواند از روش‌های مختلف استفاده کند:

  • Supervised Fine-tuning
  • RLHF
  • RLAIF
  • PPO
  • DPO
  • GRPO
  • Reward Modeling
  • Rejection Sampling
  • Constitutional Approaches
  • ترکیبی از چند روش

جزئیات دقیق آموزش بسیاری از مدل‌ها نیز عمومی نیست. بنابراین نباید بدون منبع رسمی فرض کرد هر مدل مشخص حتماً از RLHF یا الگوریتم خاصی استفاده کرده است.

RLAIF چیست؟

RLAIF مخفف Reinforcement Learning from AI Feedback است.

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

مزیت احتمالی:

  • مقیاس‌پذیری بیشتر
  • هزینه کمتر ارزیابی
  • امکان اعمال معیارهای ساختاریافته
  • سرعت بیشتر تولید Preference

محدودیت‌ها:

  • انتقال خطا و سوگیری مدل ارزیاب
  • ترجیح پاسخ‌های شبیه به سبک Judge
  • امکان بازی‌دادن Reward Model
  • نیاز به نمونه‌های مرجع انسانی
  • وابستگی نتیجه به Prompt ارزیابی

DPO چیست؟

Direct Preference Optimization روشی برای آموزش مستقیم مدل روی جفت پاسخ ترجیح‌داده‌شده و ردشده است.

در DPO الزاماً یک Reward Model جداگانه و حلقه PPO مشابه Pipeline کلاسیک RLHF ساخته نمی‌شود. به همین دلیل پیاده‌سازی آن می‌تواند ساده‌تر باشد.

بااین‌حال، DPO همچنان به دیتاست Preference باکیفیت نیاز دارد و جایگزین عمومی تمام روش‌های RL نیست.

استفاده از API درواره برای ساخت سیستم ارزیابی

API مدل زبانی می‌تواند به‌عنوان یکی از اجزای Pipeline آزمایش یا تولید Preference استفاده شود.

برای مثال، دو پاسخ توسط دو مدل تولید می‌شوند و یک مدل Judge آن‌ها را با معیار مشخص مقایسه می‌کند.

آدرس پایه API درواره:

https://api.darvareh.ir/v1

نصب کتابخانه:

pip install openai pydantic

تنظیم متغیرها:

export DARVAREH_API_KEY="YOUR_API_KEY"
export DARVAREH_JUDGE_MODEL="YOUR_MODEL_ID"

کد ارزیابی:

import os
from typing import Literal

from openai import OpenAI
from pydantic import BaseModel, Field


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

JUDGE_MODEL = os.environ[
    "DARVAREH_JUDGE_MODEL"
]


class ComparisonResult(BaseModel):
    winner: Literal["A", "B", "tie"]
    score_a: float = Field(ge=0, le=10)
    score_b: float = Field(ge=0, le=10)
    reason: str


def compare_answers(
    question: str,
    answer_a: str,
    answer_b: str,
) -> ComparisonResult:
    prompt = f"""
دو پاسخ را برای سؤال زیر ارزیابی کن.

معیارها:
- صحت
- ارتباط با سؤال
- کامل‌بودن
- وضوح
- رعایت دستور کاربر

قواعد:
- ترتیب پاسخ‌ها نباید بر تصمیم اثر بگذارد.
- اگر تفاوت معناداری نیست، winner را tie قرار بده.
- فقط JSON معتبر برگردان.
- score_a و score_b بین صفر تا ده باشند.

ساختار خروجی:
{{
  "winner": "A | B | tie",
  "score_a": 0,
  "score_b": 0,
  "reason": "دلیل کوتاه"
}}

سؤال:
{question}

پاسخ A:
{answer_a}

پاسخ B:
{answer_b}
"""

    response = client.chat.completions.create(
        model=JUDGE_MODEL,
        temperature=0,
        messages=[
            {
                "role": "system",
                "content": (
                    "شما ارزیاب بی‌طرف پاسخ‌های "
                    "مدل‌های هوش مصنوعی هستید."
                ),
            },
            {
                "role": "user",
                "content": prompt,
            },
        ],
    )

    content = response.choices[0].message.content

    if not content:
        raise ValueError(
            "مدل ارزیاب پاسخی برنگرداند."
        )

    return ComparisonResult.model_validate_json(
        content
    )


result = compare_answers(
    question="Q-Learning چیست؟",
    answer_a=(
        "Q-Learning الگوریتمی برای یادگیری "
        "ارزش اقدام‌ها از طریق تعامل با محیط است."
    ),
    answer_b=(
        "Q-Learning یک الگوریتم مرتب‌سازی است."
    ),
)

print(
    result.model_dump_json(indent=2)
)

این مثال یک سیستم RL کامل نیست. خروجی مدل می‌تواند برای ساخت داده Preference، ارزیابی اولیه یا یکی از سیگنال‌های Reward استفاده شود.

چگونه سوگیری LLM-as-a-Judge را کاهش دهیم؟

مدل Judge ممکن است تحت تأثیر ترتیب، طول یا سبک پاسخ قرار گیرد.

راهکارهای مناسب:

  • جابه‌جاکردن تصادفی پاسخ A و B
  • اجرای ارزیابی در هر دو ترتیب
  • استفاده از Rubric دقیق
  • جداکردن معیارها
  • استفاده از چند Judge
  • کالیبراسیون با داده انسانی
  • عدم نمایش نام مدل تولیدکننده
  • اعتبارسنجی ساختار خروجی
  • نگهداری Test Set انسانی
  • بررسی نرخ توافق مدل و انسان

نمونه ارزیابی دوطرفه:

  1. بار اول پاسخ اول به‌عنوان A ارسال شود.
  2. بار دوم همان پاسخ به‌عنوان B ارسال شود.
  3. اگر نتیجه با تغییر ترتیب عوض شد، نمونه برای بازبینی علامت‌گذاری شود.

کاربرد یادگیری تقویتی در AI Agentها

یک AI Agent می‌تواند کارهای چندمرحله‌ای انجام دهد:

  • انتخاب ابزار
  • جست‌وجوی اطلاعات
  • اجرای عملیات
  • بررسی نتیجه
  • اصلاح برنامه
  • توقف یا ارجاع

می‌توان این فرایند را به شکل RL مدل کرد:

مفهوم RLنمونه در AI Agent
Stateوضعیت کار، تاریخچه و نتایج ابزارها
Actionپاسخ، فراخوانی ابزار، سؤال یا ارجاع
Rewardحل موفق، صحت، هزینه و رضایت
Episodeیک پرونده کامل
Policyمدل تصمیم‌گیر Agent
Environmentنرم‌افزارها، کاربر و ابزارهای سازمان

اما آموزش مستقیم Agent با RL ساده نیست. Reward باید نتیجه واقعی را نشان دهد، فضای اقدام کنترل شود و عملیات غیرقابل‌بازگشت تحت قواعد قطعی باقی بمانند.

نمونه طراحی Reward برای Agent پشتیبانی

فرض کنید Agent باید درخواست مشتری را حل کند.

یک Reward فرضی:

R=5C+3V−2T−4E−10UR = 5C + 3V - 2T - 4E - 10U

که در آن:

  • CC: پرونده واقعاً حل شده است.
  • VV: پاسخ با منبع معتبر تأیید شده است.
  • TT: تعداد ابزارهای غیرضروری
  • EE: ارجاع نادرست
  • UU: اقدام غیرمجاز

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

بهتر است موفقیت بر اساس نتیجه تأییدشده سنجیده شود، نه صرفاً اعلام خود Agent.

کاربردهای یادگیری تقویتی

بازی

عامل با تجربه بازی و دریافت امتیاز، سیاست مناسب را یاد می‌گیرد.

رباتیک

برای کنترل حرکت، گرفتن اشیا، مسیریابی و هماهنگی مفاصل استفاده می‌شود.

کنترل صنعتی

تنظیم پارامترهای یک فرایند با توجه به وضعیت تجهیزات و هدف بهره‌وری.

مدیریت انرژی

تنظیم مصرف، ذخیره‌سازی و توزیع انرژی بر اساس تقاضا و هزینه.

پیشنهاد محتوا

تصمیم فعلی روی رفتار و تعامل آینده کاربر اثر دارد؛ بنابراین مسئله می‌تواند فراتر از پیش‌بینی کلیک فوری تعریف شود.

تبلیغات

انتخاب تبلیغ با درنظرگرفتن نتیجه بلندمدت، بودجه و تجربه کاربر.

لجستیک

مسیریابی، زمان‌بندی و تخصیص منابع در محیط متغیر.

مدل‌های زبانی

استفاده از Preference یا Reward برای بهبود رفتار و دنبال‌کردن دستور.

Agentهای نرم‌افزاری

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

چالش‌های یادگیری تقویتی

نیاز به تجربه زیاد

عامل ممکن است برای یادگیری به تعداد بسیار زیادی تعامل نیاز داشته باشد.

هزینه محیط

اجرای ربات واقعی، عملیات صنعتی یا تعامل انسانی می‌تواند پرهزینه باشد.

پاداش تأخیری

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

پاداش پراکنده

عامل ممکن است مدت زیادی هیچ سیگنال مفیدی دریافت نکند.

ناپایداری آموزش

نتیجه می‌تواند به Seed، Hyperparameter و جزئیات محیط حساس باشد.

Sim-to-Real Gap

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

توزیع متغیر

رفتار کاربران، محیط یا ابزارها ممکن است با زمان تغییر کند.

Reward Hacking

عامل می‌تواند تابع پاداش ناقص را به روشی غیرمنتظره بیشینه کند.

ارزیابی دشوار

یک میانگین Reward بالا الزاماً به معنای رفتار مناسب در تمام شرایط نیست.

چگونه یک پروژه RL را درست ارزیابی کنیم؟

محیط آموزش و ارزیابی را جدا کنید

Agent نباید فقط محیط‌ها یا Seedهای آموزش را حفظ کند.

چند Seed اجرا کنید

میانگین، انحراف معیار و بدترین اجرا را گزارش کنید.

Baseline داشته باشید

عامل را با این گزینه‌ها مقایسه کنید:

  • سیاست تصادفی
  • قانون دستی
  • الگوریتم ساده‌تر
  • نسخه قبلی سیستم

Reward و معیار واقعی را جدا کنید

Reward آموزشی ممکن است جانشین هدف واقعی باشد. هر دو را گزارش کنید.

رفتارهای شکست را بررسی کنید

فقط میانگین موفقیت کافی نیست. سناریوهای ناموفق را دسته‌بندی کنید.

هزینه را محاسبه کنید

تعداد Step، زمان آموزش، مصرف GPU، فراخوانی محیط و هزینه API را ثبت کنید.

سیاست قطعی و تصادفی را جداگانه بسنجید

رفتار Evaluation باید دقیقاً مستند شود.

اشتباهات رایج در یادگیری تقویتی

شروع با الگوریتم پیچیده

ابتدا یک محیط ساده، سیاست تصادفی و Baseline بسازید.

طراحی Reward مبهم

اگر Reward هدف واقعی را نمایش ندهد، Agent رفتار نامطلوب یاد می‌گیرد.

ارزیابی با یک Seed

نتیجه یک اجرا ممکن است تصادفی باشد.

استفاده از Test برای تنظیم Hyperparameter

یک مجموعه یا سناریوی مستقل برای ارزیابی نهایی نگه دارید.

نادیده‌گرفتن مقیاس Observation و Action

در الگوریتم‌های مبتنی بر شبکه عصبی، نرمال‌سازی می‌تواند اهمیت زیادی داشته باشد.

تغییر هم‌زمان چند عامل

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

مقایسه ناعادلانه الگوریتم‌ها

بودجه تعامل، زمان آموزش و تعداد اجرای الگوریتم‌ها باید قابل‌مقایسه باشد.

فرض‌کردن اینکه RL برای هر مسئله لازم است

بسیاری از مسائل با قانون، یادگیری نظارت‌شده، بهینه‌سازی یا Contextual Bandit ساده‌تر حل می‌شوند.

چه زمانی از Reinforcement Learning استفاده کنیم؟

یادگیری تقویتی زمانی گزینه قابل‌بررسی است که:

  • تصمیم‌ها متوالی باشند.
  • اقدام فعلی بر وضعیت آینده اثر بگذارد.
  • هدف را بتوان با Reward یا معیار نتیجه تعریف کرد.
  • امکان تعامل یا شبیه‌سازی وجود داشته باشد.
  • سیاست ثابت دستی کافی نباشد.
  • هزینه Exploration قابل‌کنترل باشد.
  • مسئله فقط یک پیش‌بینی مستقل نباشد.

اگر برای هر ورودی یک پاسخ صحیح دارید و اقدامات روی آینده اثر ندارند، یادگیری نظارت‌شده معمولاً ساده‌تر است.

مسیر یادگیری Reinforcement Learning

مرحله اول: Python و NumPy

آرایه، تابع، کلاس و محاسبات عددی را یاد بگیرید.

مرحله دوم: احتمال و آمار

امید ریاضی، توزیع احتمال، نمونه‌گیری و واریانس اهمیت دارند.

مرحله سوم: جبر خطی و حسابان

بردار، ماتریس، گرادیان و بهینه‌سازی را مطالعه کنید.

مرحله چهارم: یادگیری ماشین

مفاهیم Training، Validation، Overfitting و Gradient Descent را یاد بگیرید.

مرحله پنجم: MDP و Bellman Equation

State، Action، Reward، Policy و Value Function را درک کنید.

مرحله ششم: روش‌های جدولی

Multi-Armed Bandit، Dynamic Programming، Monte Carlo، SARSA و Q-Learning.

مرحله هفتم: Deep RL

DQN، Policy Gradient، Actor-Critic و PPO.

مرحله هشتم: پروژه عملی

یک محیط استاندارد را با چند Seed آموزش و ارزیابی کنید.

مرحله نهم: حوزه تخصصی

رباتیک، سیستم پیشنهاددهنده، مدل زبانی، Multi-Agent RL یا Offline RL را انتخاب کنید.

پرسش‌های متداول

یادگیری تقویتی چیست؟

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

Reinforcement Learning چه تفاوتی با Machine Learning دارد؟

Reinforcement Learning یکی از شاخه‌های Machine Learning است که بر تصمیم‌گیری متوالی و یادگیری از Reward تمرکز دارد.

Agent در یادگیری تقویتی چیست؟

Agent سیستم تصمیم‌گیری است که وضعیت را مشاهده و اقدام مناسب را انتخاب می‌کند.

Reward چیست؟

Reward سیگنالی عددی برای نشان‌دادن مطلوب یا نامطلوب‌بودن نتیجه اقدام است.

Q-Learning چیست؟

Q-Learning الگوریتمی Model-free و Off-policy است که ارزش انجام هر اقدام در هر وضعیت را یاد می‌گیرد.

Q-Table چیست؟

جدولی است که برای هر ترکیب State و Action یک مقدار Q نگهداری می‌کند.

Deep Reinforcement Learning چیست؟

ترکیب یادگیری تقویتی با شبکه‌های عصبی برای حل مسائل دارای فضای وضعیت یا مشاهده بزرگ است.

PPO چیست؟

PPO الگوریتمی از خانواده Policy Optimization است که با محدودکردن اندازه تغییر Policy به پایداری آموزش کمک می‌کند.

RLHF چیست؟

RLHF روشی برای بهبود رفتار مدل با استفاده از Preference و بازخورد انسانی است.

آیا RLHF همان Fine-tuning است؟

RLHF یکی از روش‌های Post-training است و معمولاً شامل اجزایی فراتر از Supervised Fine-tuning، مانند Preference Data و بهینه‌سازی بر اساس Reward، می‌شود.

آیا ChatGPT از یادگیری تقویتی استفاده می‌کند؟

مقاله InstructGPT استفاده از Supervised Fine-tuning و RLHF را برای مدل‌های آن پژوهش توضیح داده است. درباره هر مدل یا نسخه باید به مستندات رسمی همان مدل مراجعه کرد.

آیا برای یادگیری تقویتی به GPU نیاز داریم؟

برای Q-Learning جدولی و محیط‌های کوچک معمولاً CPU کافی است. Deep RL با شبکه‌های بزرگ یا ورودی تصویری ممکن است از GPU سود ببرد.

آیا می‌توان با API درواره RLHF انجام داد؟

API مدل‌های درواره می‌تواند در تولید پاسخ، ساخت Preference، ارزیابی و اجرای مدل Judge استفاده شود. آموزش کامل وزن‌های یک مدل با PPO به Pipeline آموزشی و دسترسی به مدل قابل‌آموزش نیاز دارد و صرفاً با فراخوانی Chat API انجام نمی‌شود.

جمع‌بندی

یادگیری تقویتی روشی برای آموزش تصمیم‌گیری متوالی از طریق تعامل، اقدام و دریافت پاداش است.

اجزای اصلی آن عبارت‌اند از:

  1. Agent
  2. Environment
  3. State یا Observation
  4. Action
  5. Reward
  6. Policy
  7. Value Function
  8. Episode

Q-Learning برای محیط‌های کوچک و گسسته نقطه شروع مناسبی است. وقتی فضای وضعیت بزرگ باشد، می‌توان از شبکه‌های عصبی و روش‌هایی مانند DQN، PPO و سایر الگوریتم‌های Deep Reinforcement Learning استفاده کرد.

در مدل‌های زبانی نیز مفاهیم Preference، Reward Model، RLHF و RLAIF برای بهبود رفتار مدل‌ها به کار می‌روند. بااین‌حال، طراحی پاداش، ارزیابی چندمرحله‌ای و جلوگیری از Reward Hacking همچنان چالش‌های مهمی هستند.

اگر می‌خواهید چند مدل زبانی را برای تولید پاسخ، ساخت داده Preference یا ارزیابی Agentهای خود آزمایش کنید، می‌توانید از مستندات API درواره شروع کنید.

درواره با یک API سازگار با OpenAI، پرداخت ریالی و دسترسی یکپارچه به مدل‌های مختلف، امکان مقایسه مدل‌ها و ساخت Pipelineهای ارزیابی هوش مصنوعی را برای توسعه‌دهندگان فراهم می‌کند.

مقالات مرتبط

منابع

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