반응형
pkg install python
pip install google-genai
cat << 'EOF' > autocoder.py
import os
import sys
import subprocess
import time
from google import genai
# --- [설정 및 환경 변수] ---
# 요청하신 API 키와 신규 라이브러리 규격을 적용했습니다.
API_KEY = ""
client = genai.Client(api_key=API_KEY)
# 모델명은 요청하신 gemini-3-flash-preview를 사용합니다.
MODEL_ID = "gemini-3-flash-preview"
TASK_FILE = "p1.txt"
TARGET_FILE = "generated_code.py"
MAX_RETRIES = 30
def read_task():
if not os.path.exists(TASK_FILE):
with open(TASK_FILE, "w", encoding="utf-8") as f:
f.write("print('Hello from Gemini!')")
print(f"'{TASK_FILE}'이 없어 샘플을 생성했습니다. 내용을 수정하고 다시 실행하세요.")
sys.exit(0)
with open(TASK_FILE, "r", encoding="utf-8") as f:
return f.read()
def ask_gemini(prompt):
try:
# 신규 google-genai 라이브러리 호출 방식
response = client.models.generate_content(
model=MODEL_ID,
contents=prompt
)
text = response.text
# 마크다운 코드 블록 제거 로직
if "```python" in text:
code = text.split("```python")[1].split("```")[0].strip()
elif "```" in text:
code = text.split("```")[1].split("```")[0].strip()
else:
code = text.strip()
return code
except Exception as e:
return f"API_ERROR: {str(e)}"
def run_code():
try:
result = subprocess.run(
[sys.executable, TARGET_FILE],
capture_output=True,
text=True,
timeout=300
)
return result.returncode, result.stdout, result.stderr
except subprocess.TimeoutExpired:
return -1, "", "Execution Timeout (Possible Infinite Loop)"
except Exception as e:
return -1, "", str(e)
def main():
print(f"--- 자동 개발 시스템 가동 (라이브러리: google-genai / 모델: {MODEL_ID}) ---")
task_description = read_task()
current_attempt = 1
last_error = ""
existing_code = ""
if os.path.exists(TARGET_FILE):
with open(TARGET_FILE, "r", encoding="utf-8") as f:
existing_code = f.read()
while current_attempt <= MAX_RETRIES:
print(f"\n[시도 {current_attempt}/{MAX_RETRIES}] 코드를 생성/수정 중...")
if not last_error and not existing_code:
prompt = f"다음 요구사항을 구현하는 파이썬 코드를 작성해줘:\n{task_description}\n코드만 출력해."
else:
prompt = (
f"요구사항: {task_description}\n\n"
f"이전 코드:\n{existing_code}\n\n"
f"에러 메시지:\n{last_error}\n\n"
"위 에러를 고쳐서 완성된 전체 코드를 다시 작성해줘. 코드만 출력해."
)
generated_code = ask_gemini(prompt)
if "API_ERROR" in generated_code:
print(f"❌ {generated_code}")
break
with open(TARGET_FILE, "w", encoding="utf-8") as f:
f.write(generated_code)
existing_code = generated_code
print(f"테스트 실행 중...")
return_code, stdout, stderr = run_code()
if return_code == 0:
print(f"\n✅ 성공! {current_attempt}번 만에 완성되었습니다.")
print(f"파일명: {TARGET_FILE}")
print(f"실행 결과:\n{stdout}")
break
else:
last_error = stderr if stderr else stdout
print(f"❌ 실패 (시도 {current_attempt}): {last_error[:50]}...")
current_attempt += 1
time.sleep(1)
if current_attempt > MAX_RETRIES:
print("\n최대 횟수 초과로 중단되었습니다.")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n사용자가 중단했습니다.")
EOF
python autocoder.py
"p1.txt" 파일에 요구사항 입력
추천 p1.txt 전략:
역할: 너는 홍콩 주식 시장 전문 퀀트(Quant) 개발자야.
상황: 현재 네트워크 환경이 불안정할 수 있어.
지시: 단순 크롤링이 안 되면, 제미니 너의 검색 기능을 사용해서라도 종목 번호와 이름을 정확히 알아내서 파일에 기록해.
금기: 절대 빈 칸으로 파일을 만들지 마. 데이터가 없으면 '데이터 수집 실패 이유'를 상세히 적어.
요구사항 : 필요한 프로그램 기능을 여기에 입력.
"generated_code.py" 파일로 만들어짐.
30회 동안 완성 못하면 다시 실행하면 이어서 개선함.
완성되면 위 파일 이름을 알아서 바꿔 줘야함.
반응형
'IT 전자기기' 카테고리의 다른 글
| PC 와 공유기 유선 인터넷 연결 속도 감시 및 경고 (0) | 2026.02.26 |
|---|---|
| wg tunnel 설정 (0) | 2026.02.23 |
| 삼바서버 구형 스마트폰에 Termux Samba(SMB) 서버 설정 가이드 삼 (0) | 2026.02.17 |
| TERMUX 에 ta-lib 설치하기 (0) | 2026.02.07 |
| 구형폰에 AI 설치하기 (0) | 2026.02.07 |
댓글