groq api 용량 부족할 때
계정을 여러개 파서 api 여러개를 돌려가면서 사용할 수 있도록 했습니다. (클로드의 작품)
api들을 전송해주는 파일:
[code]
<?php
class APIKeyProvider {
private $config = [
'access_key' => '원하는액세스키입력',
'api_keys' => [
'계정1의groq_api키',
'계정2의groq_api키',
'계정3의groq_api키'
]
];
private $state_dir;
private $state_file;
public function __construct() {
$this->state_dir = dirname(__FILE__) . '/cache';
$this->state_file = $this->state_dir . '/api_key_state.json';
$this->initStateFile();
}
private function initStateFile() {
if (!file_exists($this->state_dir)) {
mkdir($this->state_dir, 0755, true);
}
if (!file_exists($this->state_file)) {
$this->saveState(0);
}
}
private function loadState() {
if (!is_readable($this->state_file)) {
return 0;
}
$content = file_get_contents($this->state_file);
return $content === false ? 0 : (int)$content;
}
private function saveState($current_index) {
if (!is_writable($this->state_dir)) {
error_log("Cache directory is not writable: " . $this->state_dir);
return false;
}
return file_put_contents($this->state_file, $current_index);
}
private function validateAccessKey($provided_key) {
return hash_equals($this->config['access_key'], $provided_key);
}
private function getNextKey() {
$current_index = $this->loadState();
$next_index = ($current_index + 1) % count($this->config['api_keys']);
$this->saveState($next_index);
return $this->config['api_keys'][$next_index];
}
public function handleRequest() {
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit;
}
try {
$access_key = $_GET['access_key'] ?? '';
if (!$this->validateAccessKey($access_key)) {
throw new Exception('Invalid access key');
}
$api_key = $this->getNextKey();
if (!$api_key) {
throw new Exception('Failed to get next API key');
}
$this->sendResponse(true, 'Success', ['api_key' => $api_key]);
} catch (Exception $e) {
$this->sendResponse(false, $e->getMessage());
}
}
private function sendResponse($success, $message, $data = []) {
echo json_encode([
'success' => $success,
'message' => $message,
'data' => $data,
'timestamp' => time()
]);
exit;
}
}
if ($_SERVER['REQUEST_METHOD'] === 'GET' || $_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
$provider = new APIKeyProvider();
$provider->handleRequest();
}
?>
[/code]
설명서:
API 키 로테이션 시스템 사용 가이드입니다.
- 설치 및 초기 설정 [code] // api_provider.php 파일을 웹 서버에 업로드 // cache 디렉토리 권한 설정: chmod 755 cache [/code]
- API 키 설정 [code] private $config = [ 'access_key' => '원하는액세스키입력', // 이 값을 안전한 키로 변경 'api_keys' => [ '계정1의groq_api키', '계정2의groq_api키', '계정3의groq_api키' ] ]; [/code]
- 기존 코드 수정 방법 [code] // 1. API 키 가져오기 $api_key_url = "http://your-domain.com/api_provider.php?access_key=원하는액세스키입력"; $response = file_get_contents($api_key_url); $result = json_decode($response, true);
if (!$result['success']) { die('API 키 획득 실패: ' . $result['message']); }
// 2. 획득한 API 키로 Groq API 호출 $url = 'https://api.groq.com/openai/v1/chat/completions'; $api_key = $result['data']['api_key'];
$data = array( 'model' => 'whisper-large-v3-turbo', 'messages' => array( array( 'role' => 'user', 'content' => "다음 게시글의 내용을 핵심적인 내용만 간단히 요약해주세요:\n\n제목: {$title}\n내용: {$content}" ) ), 'max_tokens' => 500, 'temperature' => 0.3 ); [/code]
- cURL 구현 예시 [code] function getGroqResponse($title, $content) { // API 키 획득 $api_key_url = "http://your-domain.com/api_provider.php?access_key=원하는액세스키입력"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_key_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $result = json_decode($response, true); if (!$result['success']) { throw new Exception('API 키 획득 실패: ' . $result['message']); } // Groq API 호출 $api_key = $result['data']['api_key']; $url = 'https://api.groq.com/openai/v1/chat/completions'; $data = array( 'model' => 'whisper-large-v3-turbo', 'messages' => array( array( 'role' => 'user', 'content' => "다음 게시글의 내용을 핵심적인 내용만 간단히 요약해주세요:\n\n제목: {$title}\n내용: {$content}" ) ), 'max_tokens' => 500, 'temperature' => 0.3 ); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Authorization: Bearer ' . $api_key )); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); }
// 사용 예시 try { $result = getGroqResponse("제목", "내용"); print_r($result); } catch (Exception $e) { echo "에러: " . $e->getMessage(); } [/code]
댓글 5개
3개 정도 개정을 파서 테스트 해봤는데 잘 작동하네요
*!*!!!** 이 코드는 참고용으로만 보시는게 좋을 듯 합니다. 이용약관 위반으로 차단당했거든요. ^^
좋은 레퍼런스 감사합니다 :)
@박긍정 사용한 지 5분만에 모든 계정 차단당했었어요. 꼼수가 안통하는 것 같습니다.
@Tak2 헐 ㅜㅜ 정보 감사합니다.. 좋은하루되세요~!
게시판 목록
개발자팁
질문은 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 5096 | PHP | 3년 전 | 1498 | ||
| 5095 | JavaScript | 3년 전 | 2126 | ||
| 5094 | JavaScript | 3년 전 | 2045 | ||
| 5093 | 기타 | 3년 전 | 1415 | ||
| 5092 | JavaScript | 3년 전 | 1962 | ||
| 5091 | 기타 |
|
3년 전 | 1317 | |
| 5090 | 기타 |
|
3년 전 | 2255 | |
| 5089 | 웹서버 |
|
3년 전 | 3330 | |
| 5088 | JavaScript | 3년 전 | 2059 | ||
| 5087 | 기타 | 3년 전 | 1656 | ||
| 5086 | 웹서버 |
|
3년 전 | 1701 | |
| 5085 | node.js | 3년 전 | 1646 | ||
| 5084 | JavaScript |
DogFoot개발
|
3년 전 | 1452 | |
| 5083 | 웹서버 |
DogFoot개발
|
3년 전 | 2987 | |
| 5082 | JavaScript |
DogFoot개발
|
3년 전 | 4026 | |
| 5081 | JavaScript |
DogFoot개발
|
3년 전 | 2099 | |
| 5080 | JavaScript |
DogFoot개발
|
3년 전 | 2438 | |
| 5079 | 기타 |
DogFoot개발
|
3년 전 | 2492 | |
| 5078 | OS | 3년 전 | 1648 | ||
| 5077 | 웹서버 |
DogFoot개발
|
3년 전 | 1723 | |
| 5076 | 기타 |
DogFoot개발
|
3년 전 | 1535 | |
| 5075 | 기타 |
DogFoot개발
|
3년 전 | 1674 | |
| 5074 | 기타 | 3년 전 | 2282 | ||
| 5073 | 기타 | 3년 전 | 2553 | ||
| 5072 | 웹서버 |
|
4년 전 | 2234 | |
| 5071 | 웹서버 | 4년 전 | 3236 | ||
| 5070 | PHP | 4년 전 | 3197 | ||
| 5069 | 웹서버 | 4년 전 | 2433 | ||
| 5068 | 기타 |
|
4년 전 | 3013 | |
| 5067 | 기타 |
DogFoot개발
|
4년 전 | 2684 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기