본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 20. 04:15

microsoft/Codex-CLI

요약

Microsoft의 Codex-CLI는 GPT-3 Codex를 활용하여 사용자의 자연어 명령을 PowerShell, Z shell, Bash 명령어로 변환해주는 도구입니다. 별도의 추가 학습 없이 프롬프트 엔지니어링을 통해 작동하며, 사용자가 셸 환경을 벗어나지 않고도 자연어로 명령어를 제안받을 수 있는 경험을 제공합니다.

핵심 포인트

  • GPT-3 Codex를 사용하여 자연어를 다양한 셸 명령어(PowerShell, Z shell, Bash)로 번역
  • 추가 학습 없이 프롬프트 엔지니어링 기법을 활용하여 모델의 성능을 이끌어냄
  • 단일 턴(single-turn) 및 이전 대화 맥락을 유지하는 멀티 턴(multi-turn) 모드 지원
  • 사용자가 셸 내에서 주석(#)을 작성하고 단축키(Ctrl + G)를 통해 즉시 명령어를 제안받는 워크플로우 제공

이 프로젝트는 GPT-3 Codex를 사용하여 자연어 (Natural Language, NL) 명령어를 PowerShell, Z shell 및 Bash 명령어로 변환합니다.

명령줄 인터페이스 (Command Line Interface, CLI)는 우리가 기계와 상호작용하기 위해 사용했던 첫 번째 주요 사용자 인터페이스 (User Interface, UI)였습니다. CLI는 믿을 수 없을 정도로 강력하며 거의 모든 것을 할 수 있지만, 사용자가 자신의 의도를 매우 정확하게 표현해야 합니다. 즉, 사용자가 컴퓨터의 언어를 알고 있어야 합니다.

대규모 언어 모델 (Large Language Models, LLMs), 특히 코드에 대해 학습된 모델의 등장으로 자연어 (NL)를 사용하여 CLI와 상호작용하는 것이 가능해졌습니다. 사실상, 이러한 모델들은 자연어와 코드를 서로 번역할 수 있을 만큼 충분히 잘 이해하고 있습니다.

이 프로젝트는 사용자가 선호하는 CLI를 자연어 (NL)로 사용할 수 있도록 셸을 가리지 않는 NL->Code 경험을 제공하는 것을 목표로 합니다. 사용자가 "내 IP 주소가 뭐야"와 같은 명령어를 입력하고 Ctrl + G를 누르면, 사용 중인 셸에 적합한(idiomatic) 명령어 제안을 받게 됩니다. 이 프로젝트는 GPT-3 Codex 모델을 별도의 추가 학습 없이 그대로 (off-the-shelf) 사용합니다. 즉, 모델이 이 작업을 위해 명시적으로 훈련된 것은 아닙니다. 대신 우리는 Codex로부터 올바른 명령어를 이끌어내기 위해 프롬프트 엔지니어링 (prompt engineering, 아래 섹션 참조)이라 불리는 기법에 의존합니다.

주의: 모델은 여전히 실수를 할 수 있습니다! 이해하지 못하는 명령어는 실행하지 마세요. 명령어가 무엇을 하는지 확실하지 않다면, Ctrl + C를 눌러 취소하세요.

이 프로젝트는 zsh_codex 프로젝트에서 기술적 영감을 얻었으며, 그 기능을 여러 셸로 확장하고 모델에 전달되는 프롬프트를 맞춤화(customize)했습니다 (아래 프롬프트 엔지니어링 섹션 참조).

이 저장소는 구현 사례를 제공하고 2022년 Microsoft Build 컨퍼런스를 지원하기 위한 참조 자료를 제공함으로써, 애플리케이션에서 Codex를 사용하는 것에 대한 이해를 높이는 것을 목표로 합니다. 이는 정식 출시 제품을 의도한 것이 아닙니다. 따라서 이 저장소는 OpenAI API에 대해 논의하거나 새로운 기능을 요청하기 위한 용도가 아닙니다.

  • Python 3.7.1+

  • [Windows]: Python이 PATH에 추가되어 있어야 합니다.

  • OpenAI 계정

  • OpenAI API Key

  • OpenAI Organization Id. 여러 조직을 보유하고 있는 경우, Organization Id를 확인하기 전에 Codex 엔진에 접근 권한이 있는 기본 조직(default organization)으로 업데이트하십시오.

  • OpenAI Engine Id. 모델에 대한 접근 권한을 제공합니다. 예를 들어,
    code-davinci-002

또는 code-cushman-001 등이 있습니다. 사용 가능한 엔진을 확인하려면 여기를 참조하십시오.

PowerShell, bash 또는 zsh에 대한 설치 지침은 여기를 따르십시오.

선호하는 셸(shell)에 대한 설정이 완료되면, 셸에 주석(#으로 시작)을 작성한 후 Ctrl + G를 눌러 Codex CLI를 사용할 수 있습니다.

Codex CLI는 단일 턴(single-turn)과 멀티 턴(multi-turn)의 두 가지 주요 모드를 지원합니다.

기본적으로 멀티 턴 모드는 꺼져 있습니다. # start multi-turn# stop multi-turn 명령어를 사용하여 켜거나 끌 수 있습니다.

멀티 턴 모드가 켜져 있으면 Codex CLI는 모델과의 이전 상호작용을 "기억"하여, 이전의 동작이나 엔티티(entity)를 다시 참조할 수 있게 해줍니다. 예를 들어, Codex CLI에 시간대를 산악 시간대(mountain)로 변경해 달라고 요청한 다음 "태평양 시간대(pacific)로 다시 변경해줘"라고 말하면, 모델은 이전 상호작용의 문맥(context)을 통해 "it"이 사용자의 시간대임을 알 수 있습니다:

# change my timezone to mountain
tzutil /s "Mountain Standard Time"
# change it back to pacific
...

이 도구는 과거의 상호작용을 추적하는 current_context.txt 파일을 생성하며, 이후 각 명령 시 이 파일을 모델에 전달합니다.

멀티턴 (multi-turn) 모드가 꺼져 있을 때, 이 도구는 상호작용 이력을 추적하지 않습니다. 멀티턴 모드 사용에는 트레이드오프 (tradeoffs)가 존재합니다. 멀티턴 모드는 강력한 문맥 해소 (context resolution)를 가능하게 하지만, 오버헤드 (overhead) 또한 증가시킵니다. 예를 들어, 모델이 작업에 잘못된 스크립트를 생성할 경우, 사용자는 이를 문맥 (context)에서 제거하고 싶어 할 것입니다. 그렇지 않으면 향후 대화 차례 (conversation turns)에서 잘못된 스크립트가 다시 생성될 가능성이 높기 때문입니다. 멀티턴 모드가 꺼져 있으면 모델은 완전히 결정론적 (deterministically)으로 동작하며, 동일한 명령은 항상 동일한 출력을 생성합니다.

모델이 지속적으로 잘못된 명령을 출력하는 것 같다면, # stop multi-turn 명령을 사용하여 모델이 과거의 상호작용을 기억하는 것을 중단하고 기본 문맥 (default context)을 불러올 수 있습니다. 또는, # default context 명령을 사용하면 멀티턴 모드를 켠 상태를 유지하면서 동일한 작업을 수행할 수 있습니다.

명령설명
start multi-turn멀티턴 경험을 시작합니다
stop multi-turn멀티턴 경험을 중단하고 기본 문맥을 불러옵니다
load context <filename>contexts 폴더에서 문맥 파일을 불러옵니다
default context기본 셸 문맥을 불러옵니다
view context텍스트 에디터에서 문맥 파일을 엽니다
save context <filename>문맥 파일을 contexts 폴더에 저장합니다. 이름을 지정하지 않으면 현재 날짜와 시간을 사용합니다
show config모델과의 상호작용에 대한 현재 설정을 보여줍니다
set <config-key> <config-value>모델과의 상호작용 설정을 설정합니다

set 명령을 사용하여 토큰 제한 (token limit), 엔진 ID (engine id), 온도 (temperature)를 변경함으로써 자유롭게 사용 경험을 개선할 수 있습니다. 예를 들어, # set engine cushman-codex, # set temperature 0.5, # set max_tokens 50 과 같이 사용할 수 있습니다.

이 프로젝트는 프롬프트 엔지니어링 (prompt engineering) 이라는 기법을 사용하여 GPT-3 Codex가 자연어로부터 명령어를 생성하도록 유도합니다. 구체적으로, 모델에게 NL(자연어) -> Commands(명령어)로 이어지는 일련의 예시들을 전달함으로써, 모델이 어떤 종류의 코드를 작성해야 하는지에 대한 감각을 제공하고, 사용 중인 셸 (shell)에 관용적인 명령어를 생성하도록 유도합니다. 이러한 예시들은 contexts 디렉토리에 저장되어 있습니다. 아래의 PowerShell 컨텍스트 (context) 스니펫을 참조하십시오:

# what's the weather in New York?
(Invoke-WebRequest -uri "wttr.in/NewYork").Content
# make a git ignore with node modules and src in it
...

이 프로젝트는 자연어 명령어를 주석 (comment) 으로 모델링하며, 모델이 작성하기를 기대하는 PowerShell 스크립트의 예시들을 제공한다는 점에 유의하십시오. 이러한 예시에는 단일 행 완성 (single line completions), 다중 행 완성 (multi-line completions), 그리고 다중 턴 완성 (multi-turn completions)이 포함됩니다 (여기서 "open it in notepad" 예시는 이전 턴에서 생성된 .gitignore 파일을 참조합니다).

사용자가 새로운 명령어(예: "what's my IP address")를 입력하면, 우리는 단순히 해당 명령어를 컨텍스트 (context) 에 (주석으로서) 추가하고 Codex에게 그 뒤에 이어질 코드를 생성하도록 요청합니다. 위의 예시들을 학습한 Codex는 해당 주석을 만족하는 짧은 PowerShell 스크립트를 작성해야 함을 알게 됩니다.

이 프로젝트에는 각 셸 (shell) 별 컨텍스트 (context) 가 사전 로드되어 있으며, 다른 기능들을 가진 보너스 컨텍스트들도 포함되어 있습니다. 이를 넘어, 여러분은 모델로부터 다른 동작을 이끌어내기 위해 자신만의 컨텍스트 (context) 를 구축할 수 있습니다. 예를 들어, Codex CLI가 Kubernetes 스크립트를 생성하기를 원한다면, 명령어와 모델이 생성할 수 있는 kubectl 스크립트의 예시를 담은 새로운 컨텍스트 (context) 를 만들 수 있습니다:

# make a K8s cluster IP called my-cs running on 5678:8080
kubectl create service clusterip my-cs --tcp=5678:8080

작성한 컨텍스트 (context) 를 contexts 폴더에 추가하고 load context <filename>을 실행하여 로드하십시오. 또한 src\prompt_file.py 파일 내부에서 기본 컨텍스트 (context) 를 여러분의 컨텍스트 (context) 파일로 변경할 수도 있습니다.

Codex는 예시가 없어도 올바른 스크립트를 생성하는 경우가 많다는 점에 유의하세요. 방대한 코드 코퍼스 (corpus)를 통해 학습되었기 때문에, 특정 명령어를 생성하는 방법을 빈번하게 알고 있습니다. 그렇기는 하지만, 여러분만의 컨텍스트 (context)를 구축하는 것은 여러분이 찾고 있는 특정한 종류의 스크립트(길이가 길든 짧든, 변수를 선언하든 안 하든, 이전 명령어를 참조하든 아니든 등)를 유도하는 데 도움이 됩니다. 또한 여러분만의 CLI 명령어와 스크립트 예시를 제공하여, Codex가 고려해야 할 다른 도구들을 보여줄 수도 있습니다.

한 가지 고려해야 할 중요한 사항은, 새로운 컨텍스트 (context)를 추가할 경우 자동 기본값 설정 (automatic defaulting, 잘못된 컨텍스트가 사용자 경험을 해치는 것을 방지하기 위해 추가됨)을 피하기 위해 멀티턴 모드 (multi-turn mode)를 켜두어야 한다는 것입니다.

저희는 예시로서 Cognitive Services API를 사용하여 텍스트 음성 변환 (text to speech) 유형의 응답을 제공하는 Cognitive Services 컨텍스트 (context)를 추가했습니다.

DEBUG_MODE를 사용하세요.

stdin 대신 터미널 입력을 사용하여 코드를 디버그 (debug)할 수 있습니다. 이는 새로운 명령어를 추가하거나 도구가 응답하지 않는 이유를 이해할 때 유용합니다.

때때로 openai 패키지가 도구에서 잡히지 않는 에러를 발생시킬 수 있습니다. 이 경우 codex_query.py 끝에 해당 예외 (exception)를 위한 catch 블록을 추가하고 사용자 정의 에러 메시지를 출력할 수 있습니다.

OpenAI 조직 (organization)마다 서로 다른 OpenAI 엔진 (engines)에 접근할 수 있을 수 있습니다. 사용 가능한 엔진을 확인하려면 List engines API를 쿼리하여 사용 가능한 엔진을 조회할 수 있습니다. 다음 명령어를 참조하세요:

Shell

curl https://api.openai.com/v1/engines \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'OpenAI-Organization: YOUR_ORG_ID'

PowerShell

PowerShell v5 (Windows에 기본 포함됨)

(Invoke-WebRequest -Uri https://api.openai.com/v1/engines -Headers @{"Authorization" = "Bearer YOUR_API_KEY"; "OpenAI-Organization" = "YOUR_ORG_ID"}).Content

PowerShell v7

(Invoke-WebRequest -Uri https://api.openai.com/v1/engines -Authentication Bearer -Token (ConvertTo-SecureString "YOUR_API_KEY" -AsPlainText -Force) -Headers @{"OpenAI-Organization" = "YOUR_ORG_ID"}).Content

이 샘플 코드는 현재 OpenAI의 API에서 Codex와 함께 사용할 수 있습니다. 향후 몇 달 내에, Azure OpenAI Service에서도 사용할 수 있도록 샘플이 업데이트될 예정입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0