ãã¯ããããããŸã.ãããã®AI EngineïŒAPIïŒãPHPèšèªã§å©ããŠã¿ãŠãªãã³ãŒãïŒãã¶ãåãïŒãèšäºã®æçµè¡ãããã«èšèŒããŠããŸã.䜿çšãããæ¹ã¯ãèªç±ã䜿ãäžãã.
ããŠãããŸèªåã¯PHPèšèªããPythonèšèªãTypeScriptèšèªã«èå³ããããŸã.TypeScriptèšèªã¯å®åã§ãèŠãæ©äŒã¯å¢ããŠããŸã.ã»ãŒçæAIã§åºåããã³ãŒããèŠãã®ã§ãããªãäžéå±€ãæžããã³ãŒããèŠãããšã«ãªããŸã.
ã³ãŒãã«ã¯ã¬ãã«ããããŸããåå¿è
ã®æ¹ããããªãäžéå±€ã®ã³ãŒããèŠããšäœãæžããŠããã®ããæããåãããªããšããåé¡ã«çŽé¢ããŸãããã£ãŠçæAIã§åºåãããã³ãŒããåªæã®ããã«èŠããã®ã§ã.
ã³ãŒããçè§£ããã«ã¯ã³ãŒããèªãåãã³ãŒããæžãåããã£ã±ä»ããªããšãããªããšæããŸã.ããããããã°ã©ããŒã«ãªãããšæã£ãŠããæ¹ã¯ããããªãäžéå±€ã®ã³ãŒããç®ã®åœãããããšæããŸã.ãªã®ã§ããã°ã©ããŒãšããè·ã¯éåžžã«çãéã«ãªã£ãŠããå¯èœæ§ããããŸã.
ãã®é ãèªåã¯å®åã§ããã°ã©ã ã³ãŒããã»ãŒæžããŠããªãæ¥ãç¶ããŠããŸã.ã³ãŒããæžããªã代ããã«CLI ïŒããã³ããæç€ºããŠïŒãã³ãŒããæžããŠããŸã.åºåãããã³ãŒãã確èªããŠãã¹ãããŠãã«ãªã¯ãšããæãã®æ¥ã
ã§ã.
ããããèš³ãªã®ã§ããšããšãšã³ãžãã¢ããããäžã
å³ããæä»£ã«ãªã£ãŠãããªãšæããŸã.
ã§ã¯ãAI EngineïŒAPIïŒãPHPèšèªã§å©ããŠã¿ãŠãªãã³ãŒãïŒãã¶ãåãïŒãäžèšã«æ·»ä»ããŸã.
<?php
/**
* Sakura AI Chat Completion APIãšé£æºããããã®ã¯ã©ã¹ïŒãããã®AI EngineïŒ
*/
class SakuraAiChatClient {
private string $apiBase = "https://api.ai.sakura.ad.jp/v1/chat/completions";
private string $token;
private string $defaultModel = "gpt-oss-120b";
/**
* ã³ã³ã¹ãã©ã¯ã¿
*
* @param string $token ãããã®AI Engineã®èªèšŒããŒã¯ã³
*/
public function __construct(string $token) {
$this->token = $token;
}
/**
* ãã£ããã³ã³ããªãŒã·ã§ã³APIãåŒã³åºã
*
* @param string $query LLMã«éãã¡ãã»ãŒãžïŒã¯ãšãªïŒ
* @param string|null $model 䜿çšããã¢ãã«åïŒnullã®å Žåã¯ããã©ã«ãã¢ãã«ã䜿çšïŒ
* @return string LLMããã®å¿çã¡ãã»ãŒãžã®å
容
* @throws Exception APIãªã¯ãšã¹ããŸãã¯JSONãã³ãŒãã«å€±æããå Žå
*/
public function getCompletion(string $query, ?string $model = null): string {
$model = $model ?? $this->defaultModel;
$headers = [
"Content-Type: application/json",
"Authorization: Bearer " . $this->token,
];
$messages = [
["role" => "user", "content" => $query]
];
$data = [
"model" => $model,
"messages" => $messages
];
// cURLã䜿çšããŠPOSTãªã¯ãšã¹ããéä¿¡
$ch = curl_init($this->apiBase);
if ($ch === false) {
throw new Exception("cURLã®åæåã«å€±æããŸããã");
}
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // å®è¡çµæãæååã§è¿ã
$response = curl_exec($ch);
if ($response === false) {
$error = curl_error($ch);
curl_close($ch);
throw new Exception("APIãªã¯ãšã¹ããšã©ãŒ: " . $error);
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
// ãšã©ãŒå¿çã®å Žå
throw new Exception("APIãšã©ãŒãçºçããŸãããHTTPã¹ããŒã¿ã¹ã³ãŒã: " . $httpCode . " å¿ç: " . $response);
}
// JSONå¿çããã³ãŒã
$responseData = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception("JSONãã³ãŒããšã©ãŒ: " . json_last_error_msg() . " å¿ç: " . $response);
}
// å¿çããã¡ãã»ãŒãžã®å
å®¹ãæœåº
if (isset($responseData["choices"][0]["message"]["content"])) {
return $responseData["choices"][0]["message"]["content"];
} else {
throw new Exception("APIå¿çããã¡ãã»ãŒãžã®å
容ãååŸã§ããŸããã§ãããå¿ç: " . $response);
}
}
}
ææ¥ãžç¶ã