راهنمای کامل کتابخانهی openai در پایتون با پیکو هوش؛ نصب، چت، استریم، async، مدیریت خطا، retry، timeout و خواندن usage؛ با کد قابل اجرا.
پیکو هوش·انتشار: ·بهروزرسانی: ·۶ دقیقه مطالعه
خلاصه: چون API پیکو هوش با OpenAI سازگار است، کتابخانهی رسمی openai پایتون بدون تغییر کار میکند؛ فقط base_url را روی https://api.picoai.ir/v1 و api_key را روی کلید خود بگذارید. این راهنما همهی الگوهای لازم برای تولید را پوشش میدهد: چت، استریم، async، خطاها، retry، timeout و مصرف توکن.
Claude Code را با متغیرهای ANTHROPIC_BASE_URL و کلید پیکو هوش روی اندپوینت سازگار با Anthropic (/v1/messages) اجرا کنید؛ مرحلهبهمرحله و با عیبیابی.
·
خبرنامه
آموزشها و تغییرات جدید را بهموقع بگیرید
فقط مطالب مفید دربارهی API هوش مصنوعی؛ بدون هرزنامه.
length
max_tokens
استریم
stream = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "یک مقدمهی کوتاه دربارهی Docker بنویس"}],
stream=True,
stream_options={"include_usage": True}, # برای گرفتن usage در رویداد آخر
)
for event in stream:
if event.choices and event.choices[0].delta.content:
print(event.choices[0].delta.content, end="", flush=True)
print()
با stream_options={"include_usage": True} (پارامتر استاندارد API چت) رویداد آخر شامل مصرف است؛ ممکن است رویدادی با choices خالی و فقط usage ببینید، به همین دلیل شرط event.choices لازم است. ساختار خام در راهنمای SSE.
نکته: خطای 402 (کمبود موجودی) کلاس اختصاصی ندارد و در APIStatusError میآید. بدنهی خطا شامل error.code (مثل insufficient_balance) و یک message_fa فارسی است. جدول کامل کدها و راهبرد تلاش مجدد در کدهای خطا و Retry.
Retry و Timeout
SDK بهصورت پیشفرض ۲ بار برای خطاهای اتصال و وضعیتهای 408، 409، 429 و 5xx تلاش مجدد میکند (timeout پیشفرض خود SDK ۱۰ دقیقه است؛ ما در نمونه ۶۰ ثانیه گذاشتهایم). تنظیم برای یک درخواست:
از آنجا که درخواست ناموفق هزینهای ندارد، تلاش مجدد از نظر مالی بیخطر است. اما اگر استریم وسط راه قطع شود، متن دریافتشده را نگه دارید و خودتان تصمیم بگیرید.
مسیرهای /v1/images/generations و /v1/audio/speech هم با همان کلاینت قابل استفادهاند (client.images.generate و client.audio.speech.create) با مدلهای مربوطه از کاتالوگ. فرمت دقیق پارامترها را در مستندات ببینید. اندپوینت embeddings موجود نیست، پس client.embeddings.create خطا میدهد.
نکات تولید
یک کلاینت را در کل برنامه به اشتراک بگذارید؛ ساخت مجدد در هر درخواست اتصال را هدر میدهد.
max_tokens را همیشه بگذارید.
مصرف usage را لاگ کنید و با فرمول هزینه مقایسه کنید.
برای هر محیط کلید جدا داشته باشید.
پیامهای بلند را کوتاه یا خلاصه کنید تا هزینهی ورودی کم شود.
عیبیابی
علامت
علت
راهحل
AuthenticationError
کلید
بررسی کلید و متغیر
NotFoundError
مدل یا مسیر
شناسهی کاتالوگ و /v1
RateLimitError
سقف نرخ
backoff؛ هدر Retry-After
APIConnectionError
شبکه/DNS/تحریم
VPN/پروکسی سرور خودتان
finish_reason=length
max_tokens کم
افزایش سقف
embeddings خطا
پشتیبانی نمیشود
مدل embedding دیگر
الگوی کلاس کلاینت برای پروژهها
در پروژههای واقعی بهتر است همهی تنظیمات یکجا باشد:
from functools import lru_cache
from openai import OpenAI
import os
@lru_cache(maxsize=1)
def get_client() -> OpenAI:
return OpenAI(
base_url=os.getenv("PICO_BASE_URL", "https://api.picoai.ir/v1"),
api_key=os.environ["PICO_API_KEY"],
timeout=60.0,
max_retries=3,
)
def summarize(text: str, model: str = "claude-haiku-5-5") -> str:
r = get_client().chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "متن را در سه بولت فارسی خلاصه کن."},
{"role": "user", "content": text[:6000]},
],
max_tokens=300,
temperature=0.2,
)
return r.choices[0].message.content
کوتاهکردن ورودی (text[:6000]) و max_tokens دو محافظ سادهی هزینهاند. برای تست واحد، تابع get_client را mock کنید تا آزمونها درخواست واقعی نفرستند.
خروجی JSON
برای دریافت JSON قابل پارس، در پرامپت قالب را دقیق بنویسید و پاسخ را با json.loads در try/except پارس کنید. اگر مدل از response_format={"type": "json_object"} پشتیبانی کند میتوانید آن را بفرستید؛ این پارامتر به مدل منتقل میشود و نتیجه به پشتیبانی مدل بستگی دارد، پس آن را با مدل انتخابی خود آزمایش کنید و پارس را همیشه محافظتشده نگه دارید.
ورودی تصویر (بینایی)
مدلهایی که بینایی دارند (در کاتالوگ مشخص شده) تصویر را در content بهصورت آرایه میپذیرند:
تصویر به توکن ورودی تبدیل میشود و هزینه دارد؛ ابعاد را در حد نیاز نگه دارید.
سوالات متداول
آیا باید نسخهی خاصی از openai نصب کنم؟
نسخهی ۱.x به بعد (با کلاس OpenAI()). README رسمی فعلی Python 3.10 یا بالاتر را لازم میداند. نمونهها برای همین سبکاند. توجه: OpenAI برای مدلهای خودش Responses API را API اصلی معرفی میکند و Chat Completions را «برای همیشه پشتیبانیشده» میداند؛ پیکو هوش مسیر /v1/chat/completions را ارائه میدهد، پس از client.chat.completions استفاده کنید نه client.responses.
آیا structured output (response_format) کار میکند؟
به مدل بستگی دارد؛ پارامتر را به مدل ارسال میکنیم اما پشتیبانی نهایی با مدل زیرین است. با مدل موردنظر تست کنید.
آیا میتوانم مدلهای Claude را با همین کلاینت صدا بزنم؟