반응형

개인 프로젝트에 테스트용으로 LLM을 붙여야 할 일이 생겼다. 테스트용인데 크레딧 충전하기는 싫고, 예전에 오픈클로 가지고 놀 때가 생각이 나서 그거처럼 API 키 말고 ChatGPT 계정으로 LLM 연결하는 방법이 없나 찾아보니까 이미 관련 프로젝트가 있었다. (어차피 GPT 구독 중인데 절대로 돈을 안 내겠다는 의지;;)

구독에 포함된 Codex와 통신하는 OpenAI 호환 API를 제공하는 프로젝트이다. 코덱스 사용량을 소모하며 기존 openai api 주소만 이 서버로 바꾸기만 하면 바로 사용할 수 있다.

https://github.com/hotchpotch/openai-api-server-via-codex

~/.codex/auth.json 파일을 참고하기 때문에 코덱스에 로그인이 되어 있어야 한다. 아래 명령어로 로그인할 수 있다.

codex login

그리고 파이썬 패키지로 제공되기 때문에 ux를 사용 중이라면 아래 명령어로 서버를 바로 실행할 수 있다.

uvx openai-api-server-via-codex

이제 기존 OpenAI SDK는 그대로 사용하고 OPENAI_BASE_URL만 로컬 주소(http://127.0.0.1:18080/v1)로 바꾸면 된다. OPENAI_API_KEY는 호환 서버에서는 상관이 없으니 그냥 아무 값이나 넣으면 된다. 참고로 서버는 go로 만들어졌다고 한다.

이게 간단하게 로컬에서 서버를 띄워서 사용하는 방법이고, 나는 24시간 언제든지 사용할 수 있게끔 개인 서버에 도커로 올리려고 한다. 사실 테스트 용도기 때문에 굳이 새로 도커 이미지를 빌드하고 싶진 않아서 그냥 베이스 이미지 안에서 직접 서버를 설치하고 실행하는 방법을 택했다.

  1. 패키지 유지용 볼륨 생성
docker volume create codex-auth
docker volume create codex-local
  1. 최초 설치용 컨테이너 실행
docker run -d \
  --name codex-api \
  -p 18080:18080 \
  -v codex-auth:/root/.codex \
  -v codex-local:/root/.local \
  -v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro \
  -e npm_config_prefix=/root/.local \
  -e UV_TOOL_DIR=/root/.local/share/uv/tools \
  -e UV_TOOL_BIN_DIR=/root/.local/bin \
  -e UV_PYTHON_INSTALL_DIR=/root/.local/share/uv/python \
  -e PATH=/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
  node:22-bookworm-slim \
  sleep infinity
  1. 컨테이너 접속
docker exec -it codex-api bash
  1. 최초 설치
apt-get update
apt-get install -y curl

npm install -g @openai/codex

curl -LsSf https://astral.sh/uv/install.sh | sh

uv tool install openai-api-server-via-codex
  1. Codex 로그인
codex login --device-auth
  1. 컨테이너 삭제
docker rm -f codex-api
  1. 새 컨테이너 생성. OPENAI_VIA_CODEX_API_KEY 환경변수를 지정해서 OPENAI_API_KEY를 강제할 수 있다. 외부에 열리는 서버라 추가함.
docker run -d \
  --name codex-api \
  --restart unless-stopped \
  -p 18080:18080 \
  -v codex-auth:/root/.codex \
  -v codex-local:/root/.local \
  -v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro \
  -e npm_config_prefix=/root/.local \
  -e UV_TOOL_DIR=/root/.local/share/uv/tools \
  -e UV_TOOL_BIN_DIR=/root/.local/bin \
  -e UV_PYTHON_INSTALL_DIR=/root/.local/share/uv/python \
  -e PATH=/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
  -e OPENAI_VIA_CODEX_API_KEY='SECRET-KEY' \
  node:22-bookworm-slim \
  openai-api-server-via-codex \
    --host 0.0.0.0 \
    --port 18080

이제 OPENAI_BASE_URL을 해당 서버 주소로 사용하면 된다.

이런 식으로 코덱스를 사용하는 게 OpenAI에서 원하는 방식은 아니겠지만 일단 OpenAI는 이런 쪽으로 관대(?)한 편이니까..? 괜찮겠지..?

반응형

+ Recent posts