در Go رایجترین کتابخانهی جامعه برای API سازگار با OpenAI بستهی github.com/sashabaranov/go-openai است. این بسته یک ساختار پیکربندی دارد که فیلد BaseURL آن را میتوان تغییر داد، پس اتصال به پیکو هوش چند خط بیشتر نیست.
اگر نمیخواهید وابستگی اضافه کنید، net/http استاندارد هم کافی است؛ API فقط JSON روی HTTPS است.
پیشنیازها
- یک حساب پیکو هوش و یک کلید API از داشبورد (کلید فقط یکبار کامل نمایش داده میشود).
- شناسهی دقیق مدل از کاتالوگ؛ در مثالها از gpt-6-sol و claude-sonnet-5-5 استفاده شده است.
- کمی موجودی در کیف پول تومانی یا اعتبار؛ تعرفه را در صفحهی قیمتها ببینید.
راهاندازی گامبهگام
نصب ماژول
ماژول را در پروژهی Go اضافه کنید.
Terminal go get github.com/sashabaranov/go-openaiساخت کلاینت با BaseURL
ابتدا DefaultConfig بسازید و BaseURL را عوض کنید.
main.go package main import ( "context" "fmt" "os" openai "github.com/sashabaranov/go-openai" ) func main() { cfg := openai.DefaultConfig(os.Getenv("PICOAI_API_KEY")) cfg.BaseURL = "https://api.picoai.ir/v1" client := openai.NewClientWithConfig(cfg) resp, err := client.CreateChatCompletion(context.Background(), openai.ChatCompletionRequest{ Model: "gpt-6-sol", Messages: []openai.ChatCompletionMessage{ {Role: openai.ChatMessageRoleUser, Content: "سلام!"}, }, }) if err != nil { panic(err) } fmt.Println(resp.Choices[0].Message.Content) }بدون وابستگی با net/http
برای سرویسهای کوچک میتوانید ساختار JSON را خودتان بسازید.
http.go body := []byte(`{"model":"gpt-6-sol","messages":[{"role":"user","content":"سلام"}]}`) req, _ := http.NewRequest("POST", "https://api.picoai.ir/v1/chat/completions", bytes.NewReader(body)) req.Header.Set("Authorization", "Bearer "+os.Getenv("PICOAI_API_KEY")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req)استریم
متد CreateChatCompletionStream رویدادها را یکییکی میدهد؛ با Recv بخوانید تا io.EOF برسد.
stream.go stream, err := client.CreateChatCompletionStream(ctx, openai.ChatCompletionRequest{ Model: "gpt-6-sol", Stream: true, Messages: []openai.ChatCompletionMessage{{Role: "user", Content: "شمارش تا ۵"}}, }) if err != nil { panic(err) } defer stream.Close() for { r, err := stream.Recv() if errors.Is(err, io.EOF) { break } if err != nil { panic(err) } fmt.Print(r.Choices[0].Delta.Content) }
تست سریع اتصال
پیش از نوشتن منطق برنامه، یک بار فهرست مدلها را بگیرید. اگر پاسخ ۲۰۰ و فهرستی از شناسهها برگشت، کلید، شبکه و آدرس درست است و هر مشکل بعدی مربوط به تنظیمات Go خواهد بود.
curl https://api.picoai.ir/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"نکتههای کاربردی برای Go
- context با timeout بدهید (context.WithTimeout) تا درخواستهای گیرکرده منابع را اشغال نکنند.
- http.Client سفارشی را از طریق cfg.HTTPClient بدهید تا پراکسی و Transport را کنترل کنید.
- نام فیلدهای بسته ممکن است در نسخههای جدید تغییر کند؛ نسخه را در go.mod ثابت نگه دارید.
عیبیابی
خطای 404 page not found
BaseURL باید دقیقاً https://api.picoai.ir/v1 باشد؛ اسلش اضافه یا مسیر تکراری باعث 404 میشود.
خطای context deadline exceeded
timeout کوتاه است. برای مدلهای استدلالی یا پاسخهای طولانی مقدار را بالاتر ببرید یا استریم بگیرید.
خطای x509 در داکر
تصویر پایه گواهیهای CA ندارد. بستهی ca-certificates را نصب کنید یا از تصویر distroless با CA استفاده کنید.
خطای 401 (Unauthorized)
کلید اشتباه، غیرفعال یا همراه فاصلهی اضافه است. در داشبورد کلید را بررسی و در صورت نیاز یک کلید تازه بسازید.
خطای 429 (Rate limit)
تعداد درخواستهای شما در دقیقه از سقف کلید بیشتر شده است. چند ثانیه صبر و دوباره تلاش کنید یا سقف کلید را در داشبورد بررسی کنید.
هزینه و صورتحساب
هر درخواست قبل از اجرا مقداری از موجودی را رزرو میکند و پس از پاسخ موفق بر پایهی توکنهای واقعی تسویه میشود؛ مابهالتفاوت برمیگردد و درخواست ناموفق چیزی کم نمیکند. جدول قیمت هر مدل در صفحهی قیمتها منتشر شده و مصرف هر درخواست در داشبورد قابل مشاهده است. اگر قبلاً از سرویس دیگری استفاده میکردید، راهنمای مهاجرت و صفحهی مقایسه را ببینید.
پرسشهای متداول
آیا کتابخانهی رسمی OpenAI برای Go هم کار میکند؟
کتابخانهی رسمی گزینهی تغییر آدرس پایه دارد، اما چون API آن نسخهبهنسخه تغییر کرده، برای دقت به مستندات خودش مراجعه کنید. نمونهی این صفحه با go-openai است.
آیا خروجی ساختیافته (JSON mode) پشتیبانی میشود؟
قالب درخواست آن را میپذیرد، اما رفتار به مدل بستگی دارد. در صفحهی مدل ویژگیها را ببینید.
برای Gin یا Fiber توصیهای هست؟
کلاینت را یک بار در شروع برنامه بسازید و بین هندلرها به اشتراک بگذارید؛ کلاینت thread-safe است.
اگر درخواست ناموفق باشد هزینه کم میشود؟
خیر. در پیکو هوش هزینه ابتدا رزرو و پس از پاسخ موفق بر اساس مصرف واقعی تسویه میشود؛ درخواست ناموفق بدون کسر هزینه است.
Go را همین حالا وصل کنید
با ساخت حساب و یک کلید، در چند دقیقه اولین پاسخ را بگیرید. اگر ابزار دیگری دارید، فهرست کامل اتصالها را ببینید.
راهنمای ابزارهای مرتبط
- اتصال cURLفراخوانی مستقیم API پیکو هوش از ترمینال
- اتصال Javaفراخوانی API پیکو هوش از Java با HttpClient
- اتصال C# و .NETاتصال برنامههای .NET به API پیکو هوش
- اتصال OpenAI Python SDKکتابخانهی رسمی OpenAI برای پایتون با پیکو هوش
- اتصال OpenAI Node.js SDKکتابخانهی رسمی OpenAI برای Node.js و TypeScript
- اتصال PHPاتصال PHP و لاراول به API پیکو هوش
- مقایسهی پیکو هوش با سرویسهای مشابهمقایسهی بیطرفانه و مبتنی بر اطلاعات عمومی
- Base URL چیست؟تعریف و کاربرد آدرس پایه در APIهای سازگار