Alfred나 Raycast 같은 유료 앱 없이도 Python과 macOS 단축어만으로 더 똑똑한 AI 비서를 만들 수 있어요. 월 구독료 걱정 없이 ChatGPT의 강력한 기능을 내 맥북에서 자유롭게 활용하는 방법을 차근차근 알아볼게요.
OpenAI API 키 발급받기
먼저 OpenAI 플랫폼에서 API 키를 발급받아야 해요. platform.openai.com에 접속해서 계정을 만들고 API 섹션에서 새 키를 생성하면 돼요. 이 키는 나중에 Python 스크립트에서 사용할 거예요.
API 키를 발급받았다면 터미널을 열고 openai 라이브러리를 설치해요:
pip install openai
Python 스크립트 작성하기
이제 ChatGPT와 대화할 Python 스크립트를 만들어볼게요. 데스크톱에 chatgpt_assistant.py 파일을 생성하고 다음 코드를 입력해요:
#!/usr/bin/env python3
import sys
import openai
import json
# API 키 설정 (본인의 키로 교체)
openai.api_key = 'YOUR_OPENAI_API_KEY'
def ask_chatgpt(prompt):
"""ChatGPT에게 질문하고 답변받기"""
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # gpt-4도 사용 가능
messages=[
{"role": "system", "content": "너는 macOS 전문 비서야"},
{"role": "user", "content": prompt}
],
temperature=0.7, # 창의성 조절 (0~1)
max_tokens=500 # 응답 길이 제한
)
return response.choices[0].message["content"]
except Exception as e:
return f"오류 발생: {str(e)}"
# 단축어에서 전달받은 입력 처리
if __name__ == "__main__":
if len(sys.argv) > 1:
user_input = " ".join(sys.argv[1:])
result = ask_chatgpt(user_input)
print(result)
else:
print("질문을 입력해주세요")
이 스크립트는 단축어 앱에서 전달받은 질문을 ChatGPT에게 보내고 답변을 반환해요.
temperature 값을 조절하면 답변의 창의성을 조절할 수 있고, max_tokens로 답변 길이를 제한할 수 있어요.
macOS 단축어 앱에서 연동하기
단축어 앱을 열고 새 단축어를 만들어요. 여기서 중요한 건 Python 스크립트를 실행하고 결과를 받아오는 흐름을 구성하는 거예요.
첫 번째로 입력 요청 액션을 추가해요. 프롬프트에는 "무엇을 도와드릴까요?"라고 입력하면 사용자가 질문을 입력할 수 있어요.
두 번째로 스크립트 실행 액션을 추가해요. Shell Script 실행을 선택하고 다음 명령어를 입력해요:
/usr/bin/python3 ~/Desktop/chatgpt_assistant.py "$@"
여기서 $@는 사용자가 입력한 텍스트를 Python 스크립트에 전달하는 변수예요.
세 번째로 결과 표시 액션을 추가해서 ChatGPT의 답변을 화면에 보여주도록 설정해요. 음성으로 듣고 싶다면 Speak Text 액션을 대신 사용할 수도 있어요.
실전 활용 예제 만들기
단순한 질문-답변을 넘어서 실용적인 기능을 추가해볼게요. 예를 들어 이메일 작성 도우미를 만들어보면:
def email_assistant(prompt):
"""이메일 작성 전문 함수"""
system_prompt = """
당신은 비즈니스 이메일 작성 전문가입니다.
간결하고 프로페셔널한 이메일을 작성해주세요.
한국어로 작성하되 존댓말을 사용하세요.
"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": f"다음 내용으로 이메일 작성: {prompt}"}
],
temperature=0.3 # 정확성 높이기
)
return response.choices[0].message["content"]
# 사용자 입력에 따라 기능 분기
if "이메일" in user_input:
result = email_assistant(user_input)
elif "요약" in user_input:
result = summarize_text(user_input)
else:
result = ask_chatgpt(user_input)
이렇게 하면 "프로젝트 진행 상황 이메일 작성해줘"라고 입력하면 자동으로 이메일 형식으로 답변을 만들어줘요.
캘린더 연동과 일정 관리
macOS 캘린더와 연동하면 더 강력한 비서가 돼요. AppleScript를 Python과 함께 사용하면 캘린더 일정을 자동으로 추가할 수 있어요:
import subprocess
def add_calendar_event(title, date, time):
"""캘린더에 일정 추가하기"""
applescript = f'''
tell application "Calendar"
tell calendar "Home"
make new event with properties {{summary:"{title}", start date:date "{date} {time}"}}
end tell
end tell
'''
subprocess.run(['osascript', '-e', applescript])
return f"'{title}' 일정이 {date} {time}에 추가되었어요"
# ChatGPT로 일정 파싱하기
def parse_schedule(user_input):
"""자연어를 일정 정보로 변환"""
prompt = f"다음 문장에서 일정 제목, 날짜, 시간을 추출해줘: {user_input}"
# ChatGPT가 JSON 형식으로 반환하도록 요청
response = ask_chatgpt(prompt + " JSON 형식으로 반환")
return json.loads(response)
파일 정리와 문서 요약 기능
ChatGPT를 활용해서 파일명을 자동으로 정리하거나 긴 문서를 요약하는 기능도 만들 수 있어요:
import os
from pathlib import Path
def organize_files(folder_path):
"""폴더 내 파일들을 AI가 분류"""
files = os.listdir(folder_path)
for file in files:
# ChatGPT에게 파일 카테고리 물어보기
category = ask_chatgpt(f"파일명 '{file}'의 카테고리를 한 단어로: ")
# 카테고리별 폴더 생성 및 이동
category_path = Path(folder_path) / category
category_path.mkdir(exist_ok=True)
# 파일 이동
old_path = Path(folder_path) / file
new_path = category_path / file
old_path.rename(new_path)
웹 검색 기능 추가하기
ChatGPT의 한계인 실시간 정보를 보완하려면 웹 검색 API를 함께 사용하면 좋아요. requests 라이브러리로 간단히 구현할 수 있어요:
import requests
def search_and_summarize(query):
"""웹 검색 후 ChatGPT로 요약"""
# 검색 API 호출 (예: DuckDuckGo)
search_results = perform_web_search(query)
# ChatGPT로 검색 결과 요약
summary_prompt = f"다음 검색 결과를 한국어로 요약: {search_results}"
summary = ask_chatgpt(summary_prompt)
return summary
단축키로 빠르게 실행하기
만든 단축어를 키보드 단축키로 실행하려면 시스템 환경설정의 키보드 섹션에서 설정할 수 있어요. Option+Space 같은 조합을 설정하면 Alfred처럼 빠르게 호출할 수 있어요.
더 나아가서 특정 앱에서만 작동하는 단축어를 만들고 싶다면 단축어 앱의 '앱과 함께 작업하기' 기능을 활용해보세요. Xcode나 VSCode에서 코드를 선택하고 단축키를 누르면 자동으로 코드 리뷰를 받을 수도 있어요.
성능 최적화 팁
API 호출 비용을 줄이려면 자주 사용하는 응답을 캐싱하는 게 좋아요:
import json
import hashlib
cache = {}
def cached_ask(prompt):
"""캐시를 활용한 API 호출"""
# 프롬프트를 해시로 변환
prompt_hash = hashlib.md5(prompt.encode()).hexdigest()
if prompt_hash in cache:
return cache[prompt_hash]
# 캐시에 없으면 API 호출
result = ask_chatgpt(prompt)
cache[prompt_hash] = result
# 캐시를 파일로 저장
with open('cache.json', 'w') as f:
json.dump(cache, f)
return result
이렇게 구성하면 Alfred보다 훨씬 유연하고 강력한 AI 비서를 만들 수 있어요. 무엇보다 내 필요에 맞게 계속 커스터마이징할 수 있다는 게 가장 큰 장점이에요. Python 코드 몇 줄만 수정하면 새로운 기능을 무한정 추가할 수 있으니까요.