از Java 11 به بعد کلاس java.net.http.HttpClient در خود JDK هست و برای صدا زدن APIهای JSON کاملاً کافی است. این روش وابستگی ندارد، با Spring Boot و Quarkus و برنامههای سادهی کنسولی کار میکند و رفتار آن کاملاً قابل پیشبینی است.
در پروژههای بزرگتر میتوانید بدنه را با Jackson بسازید و پاسخ را به کلاسهای خودتان تبدیل کنید. در نمونهی زیر برای کوتاه ماندن کد از text block (Java 15+) و پردازش سادهی رشته استفاده شده است.
پیشنیازها
- یک حساب پیکو هوش و یک کلید API از داشبورد (کلید فقط یکبار کامل نمایش داده میشود).
- شناسهی دقیق مدل از کاتالوگ؛ در مثالها از gpt-6-sol و claude-sonnet-5-5 استفاده شده است.
- کمی موجودی در کیف پول تومانی یا اعتبار؛ تعرفه را در صفحهی قیمتها ببینید.
راهاندازی گامبهگام
درخواست چت با HttpClient
کلید را از متغیر محیطی بخوانید.
Chat.java import java.net.URI; import java.net.http.*; import java.time.Duration; public class Chat { public static void main(String[] args) throws Exception { String key = System.getenv("PICOAI_API_KEY"); String body = """ {"model":"gpt-6-sol", "messages":[{"role":"user","content":"سلام!"}]} """; HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.picoai.ir/v1/chat/completions")) .timeout(Duration.ofSeconds(60)) .header("Authorization", "Bearer " + key) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> res = HttpClient.newHttpClient() .send(req, HttpResponse.BodyHandlers.ofString()); System.out.println(res.statusCode() + " " + res.body()); } }تجزیهی پاسخ با Jackson
برای استخراج متن پاسخ از ObjectMapper استفاده کنید.
Parse.java ObjectMapper om = new ObjectMapper(); JsonNode root = om.readTree(res.body()); String text = root.path("choices").path(0).path("message").path("content").asText();تنظیم در Spring Boot
یک RestClient یا WebClient با آدرس پایه بسازید و کلید را از application.properties بخوانید. آدرس پایه را با /v1 تنظیم کنید و مسیر نسبی chat/completions را بزنید.
Config.java @Bean RestClient picoClient(@Value("${picoai.key}") String key) { return RestClient.builder() .baseUrl("https://api.picoai.ir/v1") .defaultHeader("Authorization", "Bearer " + key) .build(); }
تست سریع اتصال
پیش از نوشتن منطق برنامه، یک بار فهرست مدلها را بگیرید. اگر پاسخ ۲۰۰ و فهرستی از شناسهها برگشت، کلید، شبکه و آدرس درست است و هر مشکل بعدی مربوط به تنظیمات Java خواهد بود.
curl https://api.picoai.ir/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"نکتههای کاربردی برای Java
- فقط یک نمونه HttpClient بسازید و دوباره استفاده کنید؛ ساختن آن برای هر درخواست هزینه دارد.
- برای استریم از BodyHandlers.ofLines استفاده کنید و خطوط data: را یکییکی پردازش کنید.
- کلید را در Vault یا متغیر محیطی نگه دارید، نه در application.properties داخل مخزن.
عیبیابی
فارسی در پاسخ خراب نمایش داده میشود
کنسول یا ترمینال را روی UTF-8 تنظیم کنید و با -Dfile.encoding=UTF-8 اجرا کنید.
خطای HTTP 400
بدنهی JSON نامعتبر است، معمولاً بهخاطر escape نشدن نقلقولها. بدنه را با Jackson بسازید نه با الحاق رشته.
Timeout در درخواستهای طولانی
مقدار timeout درخواست را بالا ببرید یا از استریم استفاده کنید تا اتصال زنده بماند.
خطای 401 (Unauthorized)
کلید اشتباه، غیرفعال یا همراه فاصلهی اضافه است. در داشبورد کلید را بررسی و در صورت نیاز یک کلید تازه بسازید.
خطای 429 (Rate limit)
تعداد درخواستهای شما در دقیقه از سقف کلید بیشتر شده است. چند ثانیه صبر و دوباره تلاش کنید یا سقف کلید را در داشبورد بررسی کنید.
هزینه و صورتحساب
هر درخواست قبل از اجرا مقداری از موجودی را رزرو میکند و پس از پاسخ موفق بر پایهی توکنهای واقعی تسویه میشود؛ مابهالتفاوت برمیگردد و درخواست ناموفق چیزی کم نمیکند. جدول قیمت هر مدل در صفحهی قیمتها منتشر شده و مصرف هر درخواست در داشبورد قابل مشاهده است. اگر قبلاً از سرویس دیگری استفاده میکردید، راهنمای مهاجرت و صفحهی مقایسه را ببینید.
پرسشهای متداول
آیا SDK رسمی Java هم میتواند وصل شود؟
SDK رسمی OpenAI برای Java گزینهی تنظیم آدرس پایه دارد. چون سازندهی آن در نسخههای مختلف تفاوت دارد، نام دقیق متد را از مستندات آن بردارید؛ نمونهی این صفحه عمداً بدون وابستگی است.
برای Kotlin هم کار میکند؟
بله، همان HttpClient یا Ktor Client با همین هدرها.
آیا Spring AI پشتیبانی میشود؟
Spring AI برای سازگار با OpenAI گزینهی base-url دارد؛ توجه کنید که برخی نسخهها مسیر /v1 را خودشان اضافه میکنند. مستندات نسخهی خودتان را ببینید.
اگر درخواست ناموفق باشد هزینه کم میشود؟
خیر. در پیکو هوش هزینه ابتدا رزرو و پس از پاسخ موفق بر اساس مصرف واقعی تسویه میشود؛ درخواست ناموفق بدون کسر هزینه است.
Java را همین حالا وصل کنید
با ساخت حساب و یک کلید، در چند دقیقه اولین پاسخ را بگیرید. اگر ابزار دیگری دارید، فهرست کامل اتصالها را ببینید.
راهنمای ابزارهای مرتبط
- اتصال C# و .NETاتصال برنامههای .NET به API پیکو هوش
- اتصال Goاستفاده از API پیکو هوش در Go با go-openai
- اتصال cURLفراخوانی مستقیم API پیکو هوش از ترمینال
- اتصال Postmanآزمایش API پیکو هوش با Postman و متغیرهای محیطی
- اتصال OpenAI Python SDKکتابخانهی رسمی OpenAI برای پایتون با پیکو هوش
- اتصال OpenAI Node.js SDKکتابخانهی رسمی OpenAI برای Node.js و TypeScript
- مقایسهی پیکو هوش با سرویسهای مشابهمقایسهی بیطرفانه و مبتنی بر اطلاعات عمومی
- Base URL چیست؟تعریف و کاربرد آدرس پایه در APIهای سازگار