macOS 단축어와 ChatGPT API로 나만의 AI 비서 만드는 실전 가이드

Alfred나 Raycast 같은 유료 앱 없이도 Python과 macOS 단축어만으로 더 똑똑한 AI 비서를 만들 수 있어요. 월 구독료 걱정 없이 ChatGPT의 강력한 기능을 내 맥북에서 자유롭게 활용하는 방법을 차근차근 알아볼게요.


파란 배경에 학사모 쓴 5개의 AI 로봇이 책과 돋보기를 들고 다양한 표정으로 서있음


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 코드 몇 줄만 수정하면 새로운 기능을 무한정 추가할 수 있으니까요.


Python 중첩 함수로 외부 API 응답을 내 앱 구조에 맞게 자동 변환하는 방법