فاز 0 · درس 4

کار با API و کلیدها در هوش مصنوعی

نوع
ساختنی
زمان
حدود 30 دقیقه
زبان‌ها
Python, TypeScript
یک کلید فلزی در کنار یک کابل شبکه و نشانه‌های تبادل داده دیجیتال روی میز
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفهوم اصلی
  4. پیاده‌سازی
  5. گام 1: ذخیره‌ی امن کلیدهای API
  6. گام 2: نخستین فراخوانی API (پایتون)
  7. گام 3: نخستین فراخوانی API (تایپ‌اسکریپت)
  8. گام 4: HTTP خام (بدون SDK)
  9. استفاده از ابزارها
  10. تحویل پروژه
  11. تمرین‌ها
  12. راهنمایی‌ها
  13. اصطلاحات کلیدی

بیشتر ابزارها و ایجنت‌های هوش مصنوعی امروزی بر پایه‌ی ارسال درخواست به رابط‌های برنامه‌نویسی کاربردی (API) و دریافت پاسخ کار می‌کنند. تسلط بر نحوه‌ی کارکرد این سرویس‌ها، شناخت ساختار درخواست‌ها و روش‌های ایمن نگه داشتن کلیدهای دسترسی، اولین گام ضروری برای توسعه‌ی نرم‌افزارهای مبتنی بر مدل‌های زبانی بزرگ است.

در کار با سرویس‌دهندگانی مانند OpenAI یا Anthropic، پرداخت مستقیم با کارت‌های بانکی ایرانی امکان‌پذیر نیست و برخی سرویس‌ها نیز دسترسی از IP ایران را محدود کرده‌اند؛ بنابراین شناخت ساختار خام فراخوانی‌های HTTP اهمیت دوچندان پیدا می‌کند. شما می‌توانید با درک عمیق این الگوها، بدون وابستگی کامل به یک SDK خاص، درخواست‌های خود را در صورت نیاز به سمت گیت‌وی‌های واسط یا سازگار بازنویسی کنید.

سازوکار همه‌ی APIهای هوش مصنوعی یکسان است: درخواستی می‌فرستید، پاسخی می‌گیرید. جزئیات تغییر می‌کنند، اما الگو ثابت است.

اهداف یادگیری

  • ذخیره‌ی امن کلیدهای API با استفاده از متغیرهای محیطی (environment variables) و فایل‌های .env
  • فراخوانی API یک LLM هم با SDK پایتونِ Anthropic و هم با HTTP خام
  • مقایسه‌ی ساختار درخواست و پاسخ در روش مبتنی بر SDK و HTTP خام برای خطایابی بهتر
  • شناسایی و مدیریت خطاهای رایج API از جمله خطاهای احراز هویت و محدودیت نرخ درخواست (rate limit)

صورت مسئله

از فاز 11 به بعد، APIهای مدل‌های زبانی (Anthropic، OpenAI و Google) را فراخوانی خواهید کرد. در فازهای 13 تا 16 هم ایجنت‌هایی می‌سازید که این APIها را درون حلقه به کار می‌گیرند. باید بدانید کلیدهای API چطور کار می‌کنند، چگونه آن‌ها را امن نگه دارید و چطور نخستین فراخوانی API خود را انجام دهید.

مفهوم اصلی

سرور APIکد شماسرور APIکد شمادرخواست HTTP (با کلید API)پاسخ HTTP (JSON)

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

  1. یک اندپوینت (URL)
  2. یک کلید API (برای احراز هویت)
  3. بدنه‌ی درخواست (Request body): آنچه می‌خواهید
  4. بدنه‌ی پاسخ (Response body): آنچه در جواب می‌گیرید
تزریق کلید امنیتی (Secret Injection)کلید در محیط اجرا از env. بارگذاری می‌شود و هرگز در کد نوشته نمی‌شود
SECRET INJECTIONThe code that gets committed only names the variable; the value lives in a gitignored .env file and is injected into the process environment at runtime, then sent as an Authorization header. If the key ever appears in the source, it ships with every clone of the repo, and a leaked key bills to your account.app.py (در گیت)key = os.environ[...].env (در gitignore)ANTHROPIC_API_KEY=sk-...پروسه پایتونapi.anthropic.comskAuthorization: Bearer sk-...200 · jsonکلید تنها درون env. و هدر در محیط اجرا وجود دارد
کدی که commit می‌شود فقط نام متغیر را در بر دارد؛ مقدار کلید درون یک فایل env. (موجود در gitignore.) ذخیره می‌شود و در محیط اجرا به پروسه تزریق شده، سپس در هدر Authorization ارسال می‌گردد. اگر کلید در سورس‌کد قرار گیرد، با هر کلون مخزن منتقل شده و نشت آن به پای حساب شما فاکتور خواهد شد.

پیاده‌سازی

گام 1: ذخیره‌ی امن کلیدهای API

هرگز کلیدهای API را داخل کد نگذارید؛ همیشه از متغیرهای محیطی استفاده کنید.

export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."

یا از یک فایل .env کمک بگیرید (و حتماً آن را به .gitignore اضافه کنید):

ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...

گام 2: نخستین فراخوانی API (پایتون)

import os

import anthropic

client = anthropic.Anthropic()

MODEL = os.environ.get("LLM_MODEL", "claude-sonnet-5")

response = client.messages.create(
    model=MODEL,
    max_tokens=256,
    messages=[{"role": "user", "content": "What is a neural network in one sentence?"}]
)

print(response.content[0].text)

متغیر LLM_MODEL شناسه‌ی مدل Anthropic را مشخص می‌کند و مقدار پیش‌فرض آن، نام مستعار بدون تاریخ Sonnet است. سایر ارائه‌دهندگان (OpenAI، Google و دیگران) هم از همین الگوی «کلید به‌اضافه‌ی شناسه‌ی مدل» پیروی می‌کنند؛ اما هرکدام SDK، اندپوینت و اسکیما یا ساختار درخواست و پاسخ مخصوص خود را دارند.

گام 3: نخستین فراخوانی API (تایپ‌اسکریپت)

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const MODEL = process.env.LLM_MODEL ?? "claude-sonnet-5";

const response = await client.messages.create({
  model: MODEL,
  max_tokens: 256,
  messages: [{ role: "user", content: "What is a neural network in one sentence?" }],
});

console.log(response.content[0].text);

گام 4: HTTP خام (بدون SDK)

import os
import urllib.request
import json

url = "https://api.anthropic.com/v1/messages"
headers = {
    "Content-Type": "application/json",
    "x-api-key": os.environ["ANTHROPIC_API_KEY"],
    "anthropic-version": "2023-06-01",
}
body = json.dumps({
    "model": os.environ.get("LLM_MODEL", "claude-sonnet-5"),
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "What is a neural network in one sentence?"}],
}).encode()

req = urllib.request.Request(url, data=body, headers=headers, method="POST")
with urllib.request.urlopen(req) as resp:
    result = json.loads(resp.read())
    print(result["content"][0]["text"])

این در واقع همان کاری است که SDKها در پسِ صحنه انجام می‌دهند. درک نحوه‌ی ارسال درخواست خام HTTP هنگام خطایابی حسابی به کارتان می‌آید.

استفاده از ابزارها

برای این دوره:

API زمان نیاز سطح رایگان
Anthropic (Claude) فازهای 11 تا 16 (ایجنت‌ها، ابزارها) 5 دلار اعتبار موقع ثبت‌نام
OpenAI فاز 11 (مقایسه) 5 دلار اعتبار موقع ثبت‌نام
Hugging Face فازهای 4 تا 10 (مدل‌ها، مجموعه‌داده‌ها) رایگان

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

تحویل پروژه

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

  • outputs/prompt-api-troubleshooter.md - عیب‌یابی خطاهای رایج API

تمرین‌ها

  1. یک کلید API از Anthropic بگیرید و نخستین فراخوانی API خود را انجام دهید.
  2. نسخه‌ی خام HTTP را امتحان کنید و فرمت پاسخ آن را با نسخه‌ی SDK مقایسه کنید.
  3. عمداً از یک کلید API اشتباه استفاده کنید و پیام خطا را بخوانید.

راهنمایی‌ها

تمرین 1. داخل کنسول Anthropic یک کلید بسازید، آن را مطابق آموزش در ANTHROPIC_API_KEY قرار دهید و فایل code/first_api_call.py را اجرا کنید. فراخوانی زمانی درست کار کرده است که اسکریپت پاسخ مدل را بدون هیچ خطایی چاپ کند.

تمرین 2. هر دو تابع در code/first_api_call.py فقط متن و تعداد توکن‌ها را چاپ می‌کنند. دستور print(response) را در call_with_sdk() و print(result) را در call_raw_http() بگذارید، سپس اسکریپت را اجرا کنید تا کل هر دو پاسخ را ببینید. نام فیلدها را مقایسه کنید: JSON خام همان فیلدهای content، usage و stop_reason را دارد که SDK آن‌ها را به ویژگی‌های شیء (object attributes) تبدیل می‌کند.

تمرین 3. مقدار ANTHROPIC_API_KEY را فقط در یک ترمینال روی یک مقدار ساختگی تنظیم کنید و اسکریپت را دوباره اجرا کنید. کد وضعیت HTTP و نوع خطا را در خروجی پیدا کنید؛ شکست در احراز هویت کد وضعیت 401 برمی‌گرداند.

اصطلاحات کلیدی

اصطلاح چیزی که می‌گویند معنای واقعی آن
کلید API (API key) «رمز عبور API» رشته‌ای منحصربه‌فرد که حساب شما را مشخص و درخواست‌ها را مجاز می‌کند
محدودیت نرخ (Rate limit) «دارند سرعتم را محدود می‌کنند» حداکثر تعداد درخواست در دقیقه/ساعت برای جلوگیری از سوءاستفاده و تضمین استفاده‌ی عادلانه
توکن (Token) «یک کلمه» (در بحث API) یک واحد صورت‌حساب: توکن‌های ورودی و خروجی جداگانه شمرده می‌شوند و هزینه‌شان هم جدا حساب می‌شود
استریمینگ (Streaming) «پاسخ‌های آنی» دریافت کلمه‌به‌کلمه‌ی پاسخ به جای منتظر ماندن برای آماده شدن کل متن پاسخ

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسهنگام فراخوانی سرویس یک LLM، کاربرد API key چیست؟
  2. پیش از درسچرا هرگز نباید API keyها را مستقیماً درون سورس‌کد هاردکد کرد؟
  3. پس از درسروش توصیه‌شده برای ذخیره‌سازی API keyها در توسعه محلی چیست؟
  4. پس از درسدر فراخوانی خام HTTP به Anthropic API، کدام هدر حامل API key است؟
  5. پس از درسوقتی از محدودیت نرخ فراخوانی (Rate Limit) یک API عبور کنید چه اتفاقی می‌افتد؟

سؤالات متداول

چرا نباید کلیدهای API را مستقیماً داخل کدهای برنامه بنویسیم؟

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

تفاوت فراخوانی با SDK پایتون و ارسال درخواست با HTTP خام چیست؟

کتابخانه‌های SDK در پشت صحنه همان درخواست خام HTTP را ارسال می‌کنند، اما خروجی JSON را به اشیاء راحت‌تر تبدیل می‌کنند. درک درخواست خام به خطایابی دقیق‌تر کمک می‌کند.

خطای 401 در فراخوانی مدل‌های هوش مصنوعی چه معنایی دارد؟

کد وضعیت 401 نشان‌دهنده‌ی خطای احراز هویت است که معمولاً به دلیل معتبر نبودن، منقضی شدن یا ارسال نادرست کلید API رخ می‌دهد.

ما رو توی گوگل بیشتر ببین

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