Raycast를 쓰고 있다면 GPT를 단축키 하나로 바로 실행할 수 있어요. 매번 브라우저 열고 ChatGPT 접속하는 게 귀찮았다면 이 방법이 답이에요. OpenAI API 키만 있으면 지금 당장 만들 수 있어요.
GPT API 연동 스크립트 먼저 만들기
Python 스크립트부터 준비해요. 터미널을 열고 원하는 폴더에 gpt_runner.py 파일을 만들어요. API 키는 절대 코드에 직접 넣지 마세요. 환경변수로 관리하는 게 안전해요.
#!/usr/bin/env python3
import openai
import sys
import os
# 환경변수에서 API 키 가져오기 - 보안 필수!
openai.api_key = os.getenv("OPENAI_API_KEY")
# 명령줄 인자로 프롬프트 받기
if len(sys.argv) > 1:
prompt = " ".join(sys.argv[1:])
else:
prompt = "오늘 할 일 3가지를 추천해줘"
try:
# GPT-4 호출 (GPT-3.5를 쓰려면 model을 변경)
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "당신은 유용한 어시스턴트입니다."},
{"role": "user", "content": prompt}
],
max_tokens=500,
temperature=0.7 # 창의성 조절 (0~1)
)
# 결과 출력
result = response.choices[0].message.content
print(result)
except Exception as e:
print(f"오류 발생: {str(e)}")
print("API 키를 확인하세요!")
이 스크립트의 핵심은 sys.argv로 외부에서 프롬프트를 받는 거예요. Raycast에서 이 부분을 활용할 거예요.
환경변수에 OpenAI API 키 설정하기
터미널에서 환경변수를 설정해요. zsh를 쓴다면 .zshrc 파일을 편집해요.
# .zshrc 파일 열기
nano ~/.zshrc
# 이 줄을 추가 (본인의 API 키로 교체)
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxx"
# 저장 후 적용
source ~/.zshrc
환경변수 설정이 제대로 됐는지 확인하려면 echo $OPENAI_API_KEY 명령을 실행해보세요.
Raycast Script Command 만들기
이제 본격적으로 Raycast 버튼을 만들어요. Raycast Scripts 폴더가 없다면 먼저 만들어요.
mkdir -p ~/Raycast/Scripts
cd ~/Raycast/Scripts
여기에 gpt-quick-run.sh 파일을 생성해요. 이 파일이 실제 Raycast 명령이 돼요.
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Quick GPT
# @raycast.mode fullOutput
# @raycast.icon 🤖
# @raycast.packageName GPT Tools
# @raycast.author YourName
# @raycast.description 즉시 GPT 실행하기
# 실행 위치를 스크립트가 있는 디렉토리로 변경
SCRIPT_DIR="$HOME/Raycast/Scripts"
# 고정 프롬프트로 바로 실행
echo "🚀 GPT 실행 중..."
/usr/bin/python3 "$SCRIPT_DIR/gpt_runner.py" "오늘의 날씨를 기반으로 옷차림 추천해줘"
스크립트에 실행 권한을 주는 걸 잊으면 안 돼요.
chmod +x gpt-quick-run.sh
사용자 입력을 받는 대화형 버전 만들기
고정된 프롬프트만 쓰는 건 재미없어요. 사용자가 직접 입력할 수 있게 만들어봐요.
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title GPT Chat
# @raycast.mode fullOutput
# @raycast.icon 💬
# @raycast.packageName GPT Tools
# @raycast.argument1 { "type": "text", "placeholder": "무엇이든 물어보세요" }
SCRIPT_DIR="$HOME/Raycast/Scripts"
# 사용자가 입력한 텍스트를 그대로 전달
echo "🤔 생각 중..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━"
/usr/bin/python3 "$SCRIPT_DIR/gpt_runner.py" "$1"
이 버전은 Raycast에서 실행하면 입력창이 나타나요. 원하는 질문을 입력하면 바로 GPT가 답해요.
특수 용도별 전용 버튼 만들기
코드 리뷰, 번역, 요약 등 자주 쓰는 기능은 전용 버튼으로 만들면 편해요.
코드 리뷰 전용 버튼 (code-review.sh)
#!/bin/bash
# @raycast.schemaVersion 1
# @raycast.title Code Review
# @raycast.mode fullOutput
# @raycast.icon 🔍
# @raycast.argument1 { "type": "text", "placeholder": "코드를 붙여넣으세요" }
SCRIPT_DIR="$HOME/Raycast/Scripts"
# 코드 리뷰 전용 프롬프트 추가
PROMPT="다음 코드를 리뷰해주세요. 버그, 개선점, 최적화 방안을 알려주세요:\n\n$1"
echo "🔍 코드 분석 중..."
/usr/bin/python3 "$SCRIPT_DIR/gpt_runner.py" "$PROMPT"
한영 번역 버튼 (translate.sh)
#!/bin/bash
# @raycast.schemaVersion 1
# @raycast.title 한영 번역
# @raycast.mode fullOutput
# @raycast.icon 🌐
# @raycast.argument1 { "type": "text", "placeholder": "번역할 텍스트" }
SCRIPT_DIR="$HOME/Raycast/Scripts"
# 언어 자동 감지 후 번역
PROMPT="다음 텍스트를 한국어면 영어로, 영어면 한국어로 자연스럽게 번역해주세요:\n\n$1"
echo "🌐 번역 중..."
/usr/bin/python3 "$SCRIPT_DIR/gpt_runner.py" "$PROMPT"
클립보드 연동으로 더 편하게 만들기
결과를 자동으로 클립보드에 복사하면 바로 붙여넣기할 수 있어요.
#!/bin/bash
# @raycast.schemaVersion 1
# @raycast.title GPT to Clipboard
# @raycast.mode silent
# @raycast.icon 📋
# @raycast.argument1 { "type": "text", "placeholder": "프롬프트 입력" }
SCRIPT_DIR="$HOME/Raycast/Scripts"
# GPT 실행 후 결과를 클립보드로
RESULT=$(/usr/bin/python3 "$SCRIPT_DIR/gpt_runner.py" "$1")
# 클립보드에 복사
echo "$RESULT" | pbcopy
# 알림 표시 (Raycast가 자동으로 처리)
echo "✅ 클립보드에 복사됨"
고급 Python 스크립트로 업그레이드하기
기본 스크립트를 더 강력하게 만들어봐요. 대화 컨텍스트 유지, 스트리밍 응답, 에러 처리를 추가해요.
#!/usr/bin/env python3
import openai
import sys
import os
import json
from datetime import datetime
class GPTRunner:
def __init__(self):
self.api_key = os.getenv("OPENAI_API_KEY")
openai.api_key = self.api_key
# 대화 기록 파일 경로
self.history_file = os.path.expanduser("~/.gpt_history.json")
self.load_history()
def load_history(self):
"""이전 대화 불러오기"""
try:
with open(self.history_file, 'r') as f:
self.messages = json.load(f)
except:
# 시스템 메시지로 초기화
self.messages = [{
"role": "system",
"content": "당신은 도움이 되는 어시스턴트입니다. 간결하고 명확하게 답변합니다."
}]
def save_history(self):
"""대화 저장 (최근 10개만 유지)"""
# 시스템 메시지 + 최근 10개 메시지만 유지
self.messages = self.messages[:1] + self.messages[-10:]
with open(self.history_file, 'w') as f:
json.dump(self.messages, f, ensure_ascii=False, indent=2)
def run(self, prompt, reset=False):
"""GPT 실행"""
if reset:
# 대화 초기화 옵션
self.messages = self.messages[:1]
# 사용자 메시지 추가
self.messages.append({"role": "user", "content": prompt})
try:
# GPT 호출 (스트리밍 모드)
response = openai.ChatCompletion.create(
model="gpt-4",
messages=self.messages,
max_tokens=800,
temperature=0.7,
stream=True # 스트리밍 활성화
)
# 응답 수집
full_response = ""
for chunk in response:
if chunk.choices[0].delta.get('content'):
content = chunk.choices[0].delta.content
print(content, end='', flush=True)
full_response += content
# 응답 저장
self.messages.append({"role": "assistant", "content": full_response})
self.save_history()
except Exception as e:
print(f"\n❌ 오류: {str(e)}")
sys.exit(1)
if __name__ == "__main__":
runner = GPTRunner()
# 명령줄 인자 처리
if len(sys.argv) > 1:
prompt = " ".join(sys.argv[1:])
# --reset 옵션 확인
if prompt.startswith("--reset"):
runner.run("대화를 초기화했습니다. 무엇을 도와드릴까요?", reset=True)
else:
runner.run(prompt)
else:
print("프롬프트를 입력하세요")
이 스크립트는 대화 컨텍스트를 유지해요. 이전 대화를 기억하면서 연속적인 질문이 가능해요.
Raycast 단축키 설정하기
Raycast 설정에서 각 스크립트에 단축키를 할당할 수 있어요. Raycast를 열고 Settings로 가서 Extensions 탭에서 Script Commands를 찾아요.
각 스크립트 옆의 Record Hotkey를 클릭하고 원하는 단축키를 누르면 돼요. 추천하는 단축키 조합이에요.
- Quick GPT: ⌘ + Shift + G
- Code Review: ⌘ + Shift + R
- 번역: ⌘ + Shift + T
문제 해결 팁
스크립트가 안 될 때 확인할 사항들이에요.
Python 경로가 맞는지 확인해요. which python3 명령으로 정확한 경로를 찾아서 스크립트에 넣어요.
OpenAI 라이브러리가 설치됐는지 확인해요. pip3 install openai 명령으로 설치할 수 있어요.
Raycast가 스크립트를 인식 못 한다면 Raycast를 재시작하거나 Reload Script Commands 명령을 실행해요.
API 사용량이 걱정된다면 Python 스크립트에서 max_tokens를 줄이거나 GPT-3.5-turbo 모델을 써요. 가격이 훨씬 저렴해요.