메인 콘텐츠로 건너뛰기
모든 구성은 .env를 통해 수행됩니다. example.env를 복사하고 값을 입력하세요:
cp example.env .env

설정 수준

각 통합에는 중요도를 나타내는 설정 수준이 있습니다:
수준의미설정되지 않았을 때의 동작
필수핵심 시스템 종속성시스템 오류 발생 — 채팅 및 주요 기능이 작동하지 않음
권장중요한 기능 활성화우아한 성능 저하 — 기능이 명확하게 사용 불가능하지만 시스템은 실행됨
선택향상 기능투명한 성능 저하 — 시스템이 정상 작동하며, 기능만 없음
참고: 관리자가 설정한 모델(관리자 → 모델 페이지)은 LLM 환경 변수를 대체할 수 있습니다. 상태 확인은 두 소스를 모두 고려합니다.

프론트엔드 (로컬 개발 전용)

프론트엔드에는 로컬 개발 전용 별도의 env 파일이 있습니다: frontend/.env.local.
이 파일은 Docker에서 사용되지 않습니다. Docker 컨테이너 내에서 Next.js는 /api/*를 Python 백엔드로 내부적으로 프록시합니다 (포트 8000은 컨테이너 내부용이므로), 프론트엔드 env 파일이 필요하지 않습니다.
로컬 개발의 경우 기본값이 그대로 작동합니다 — 백엔드가 기본이 아닌 포트에서 실행되지 않는 한 frontend/.env.local을 생성할 필요가 없습니다. 필요한 경우 frontend/.env.local을 수동으로 생성하여 재정의할 수 있습니다:
echo 'NEXT_PUBLIC_API_URL=http://localhost:9000' > frontend/.env.local
변수기본값설명
NEXT_PUBLIC_API_URLhttp://localhost:8000 (자동)브라우저가 직접 API 호출(OAuth 리다이렉트, 스트리밍)에 사용하는 백엔드 URL입니다. 설정되지 않은 경우 window.location에서 자동 감지됩니다 — 백엔드가 로컬에서 비표준 포트에서 실행되는 경우에만 재정의하세요.
빌드 타임 참고: NEXT_PUBLIC_* 변수는 pnpm build 시점에 JS 번들에 포함됩니다. 런타임에 변경하는 것(예: 루트 .env를 통해)은 효과가 없습니다 — 이것이 로컬 개발 전용으로 frontend/.env.local에 있는 이유입니다.

LLM (필수)

변수필수기본값설명
LLM_API_KEYLLM 제공자의 API 키
LLM_BASE_URL아니오https://api.openai.com/v1OpenAI 호환 API의 기본 URL
LLM_MODEL아니오gpt-4o주 모델 — 계획, 분석 및 ReAct 에이전트에 사용됨
FAST_LLM_MODEL아니오(LLM_MODEL로 폴백)빠른 모델 — DAG 단계 실행에 사용됨 (더 저렴하고 빠름)
LLM_TEMPERATURE아니오0.7기본 샘플링 온도
LLM_CONTEXT_SIZE아니오128000주 LLM의 컨텍스트 윈도우 크기
LLM_MAX_OUTPUT_TOKENS아니오64000주 LLM의 호출당 최대 출력 토큰
FAST_LLM_API_KEY아니오(LLM_API_KEY로 폴백)빠른 모델 제공자의 API 키. 빠른 모델이 주 모델과 다른 제공자에서 호스팅될 때 사용
FAST_LLM_BASE_URL아니오(LLM_BASE_URL로 폴백)빠른 모델 제공자의 기본 URL
FAST_LLM_TEMPERATURE아니오(LLM_TEMPERATURE로 폴백)빠른 모델의 샘플링 온도
FAST_LLM_CONTEXT_SIZE아니오(LLM_CONTEXT_SIZE로 폴백)빠른 LLM의 컨텍스트 윈도우 크기
FAST_LLM_MAX_OUTPUT_TOKENS아니오(LLM_MAX_OUTPUT_TOKENS로 폴백)빠른 LLM의 호출당 최대 출력 토큰
LLM_REASONING_EFFORT아니오(비활성화)지원되는 모델의 확장 사고 수준 (OpenAI o-series, Gemini 2.5+, Claude). 값: low, medium, high. LiteLLM은 이를 각 제공자의 기본 형식으로 자동 변환합니다. 모델의 사고 과정은 UI의 “thinking” 단계에 표시됩니다.
LLM_REASONING_BUDGET_TOKENS아니오(노력에서 자동)Anthropic 사고를 위한 명시적 토큰 예산 (최소 1024). OpenAI/Gemini의 경우 노력 수준이 직접 사용됩니다. LLM_REASONING_EFFORT가 설정되었을 때만 유효합니다.
LLM_JSON_MODE_ENABLED아니오trueENV 구성 모델에 대해 response_format=json_object를 비활성화하려면 false로 설정합니다. AWS Bedrock으로 지원되는 제3자 릴레이를 사용할 때 필수 (최신 버전은 LiteLLM의 어시스턴트 프리필 주입을 거부하여 2번째 이상 에이전트 반복에서 ValidationException 발생). DB 구성 모델은 관리자 → 모델 → 고급 설정을 통해 모델별로 이를 재정의합니다.
REASONING_LLM_MODEL아니오(LLM_MODEL로 폴백)추론 계층의 모델 이름. 깊은 분석이 필요한 작업에 사용됨 (예: DAG 계획, 계획 분석)
REASONING_LLM_API_KEY아니오(LLM_API_KEY로 폴백)추론 모델 제공자의 API 키
REASONING_LLM_BASE_URL아니오(LLM_BASE_URL로 폴백)추론 모델 제공자의 기본 URL
REASONING_LLM_TEMPERATURE아니오(LLM_TEMPERATURE로 폴백)추론 모델의 샘플링 온도
REASONING_LLM_CONTEXT_SIZE아니오(LLM_CONTEXT_SIZE로 폴백)추론 모델의 컨텍스트 윈도우 크기
REASONING_LLM_MAX_OUTPUT_TOKENS아니오(LLM_MAX_OUTPUT_TOKENS로 폴백)추론 모델의 호출당 최대 출력 토큰
REASONING_LLM_EFFORT아니오(LLM_REASONING_EFFORT로 폴백)추론 모델 계층의 추론 노력 수준. 값: low, medium, high
REASONING_LLM_BUDGET아니오(LLM_REASONING_BUDGET_TOKENS로 폴백)추론을 위한 토큰 예산 (주로 Anthropic). 추론 계층의 자동 계산 예산을 재정의합니다.
해결 순서: 사용자 선호도 → 관리자 모델 (DB) → ENV 폴백. 관리자 → 모델에서 역할이 “General”인 관리자 모델이 구성된 경우, 이 ENV 변수는 폴백으로만 제공됩니다. 상태 확인은 두 소스를 모두 고려합니다.

확장 사고 (추론)

LLM_REASONING_EFFORT가 설정되면 FIM One은 모델의 확장 사고 기능을 활성화하여 내부 사고의 연쇄가 UI의 “thinking” 단계에 표시됩니다. FIM One은 LiteLLM을 사용하여 추론 노력 매개변수를 각 제공자의 기본 형식으로 자동으로 변환합니다.

지원되는 제공자

제공자LLM_BASE_URL작동 방식추론 콘텐츠 반환?
OpenAI (o1 / o3 / o4-mini)https://api.openai.com/v1reasoning_effort 기본적으로 전송됨
Anthropic (Claude 3.7+)https://api.anthropic.com/v1/LiteLLM이 기본 Anthropic API를 통해 thinking 매개변수로 라우팅
Google Gemini (2.5+)https://generativelanguage.googleapis.com/v1beta/openai/reasoning_effort를 호환성 엔드포인트로 전송
LiteLLM은 LLM_BASE_URL에서 제공자를 자동으로 감지하고 올바른 API 형식으로 매핑합니다. 알 수 없는 URL은 OpenAI 호환으로 처리됩니다.

중요한 주의사항

타사 프록시 / 사용자 정의 엔드포인트는 보장되지 않습니다. LLM_BASE_URL이 타사 API 프록시(예: OpenRouter, one-api, 사용자 정의 게이트웨이)를 가리키는 경우, LiteLLM은 URL을 기반으로 올바르게 라우팅하려고 시도합니다. 그러나 프록시가 비표준 형식을 예상하는 경우 추론이 예상대로 작동하지 않을 수 있습니다. 프록시의 예상 매개변수 형식에 대해서는 프록시의 설명서를 참조하세요.

추론 활성화 시 온도 제약

일부 제공자는 추론이 활성화되었을 때 온도 제약을 적용합니다:
  • Anthropic: 확장 사고가 활성화되면 temperature=1이 필수입니다. Anthropic에서 확장 사고를 사용하는 경우 LLM_TEMPERATURE=1반드시 설정해야 합니다 — Anthropic은 사고가 활성화되었을 때 다른 값을 거부합니다.
  • OpenAI GPT-5.x: 항상 temperature=1만 지원합니다. LiteLLM의 drop_params 필터링이 이를 자동으로 처리합니다 — 지원되지 않는 온도 값은 자동으로 삭제됩니다. GPT-5.x의 경우 사용자 조치가 필요하지 않습니다.

LLM_REASONING_BUDGET_TOKENS 작동 방식

이 변수는 주로 Anthropic 경로에서 의미가 있습니다. 설정되면 자동 계산된 예산을 재정의하고 LiteLLM을 통해 thinking 매개변수에서 budget_tokens로 전송됩니다. 설정되지 않으면 예산은 LLM_MAX_OUTPUT_TOKENS x 노력 비율에서 파생됩니다:
LLM_REASONING_EFFORT예산 비율예시 (max_tokens = 64000)
low20%12,800 tokens
medium50%32,000 tokens
high80%51,200 tokens
최소 예산은 1,024 tokens입니다(Anthropic의 하드 최소값). OpenAI 및 Gemini의 경우, 제공자가 reasoning_effort 수준에 따라 토큰 할당을 내부적으로 처리합니다 — LLM_REASONING_BUDGET_TOKENS는 영향을 미치지 않습니다.

에이전트 실행

변수필수기본값설명
REACT_MAX_ITERATIONS아니오20ReAct 요청당 최대 도구 호출 반복 횟수
MAX_CONCURRENCY아니오5DAG 실행기에서 최대 병렬 단계 수
DAG_STEP_MAX_ITERATIONS아니오15각 DAG 단계 내 최대 도구 호출 반복 횟수
DAG_MAX_REPLAN_ROUNDS아니오3목표 달성 실패 시 최대 자율 재계획 시도 횟수
DAG_REPLAN_STOP_CONFIDENCE아니오0.8에이전트가 목표 달성 불가능하다고 판단하는 신뢰도가 이 임계값을 초과할 때 재시도 중단 (0.0 = 조기 중단 안 함, 1.0 = 모든 실패 시 중단)
DAG_TOOL_CACHE아니오true단일 DAG 실행 내에서 동일한 도구 호출 캐싱. 키별 비동기 잠금으로 동시성 제어. 캐싱을 비활성화하려면 false로 설정
DAG_STEP_VERIFICATION아니오false각 DAG 단계 완료 후 LLM 기반 품질 검사 활성화. 실패 시 검증 피드백과 함께 단계가 한 번 재시도됨. 지연 시간이 증가하지만 결과 정확도 향상
AUTO_ROUTING아니오true자동 쿼리 분류 활성화. 빠른 LLM이 각 쿼리를 분석하여 ReAct(단일 단계) 또는 DAG(다중 단계) 실행 모드로 라우팅. /api/auto 엔드포인트가 이를 사용. 명시적 모드 선택을 요구하려면 false로 설정

웹 도구 (선택사항)

변수필수기본값설명
JINA_API_KEY아니오Jina API 키 — 임베딩 및 리랭커에도 사용됨; jina.ai에서 발급받기
TAVILY_API_KEY아니오Tavily Search API 키 (WEB_SEARCH_PROVIDER가 설정되지 않은 경우 자동 선택됨)
BRAVE_API_KEY아니오Brave Search API 키 (WEB_SEARCH_PROVIDER가 설정되지 않은 경우 자동 선택됨)
WEB_SEARCH_PROVIDER아니오jina검색 제공자 선택: jina / tavily / brave
WEB_FETCH_PROVIDER아니오jina (키가 설정된 경우, 그 외 httpx)페치 제공자: jina / httpx

RAG 및 지식 베이스 (권장)

변수필수기본값설명
EMBEDDING_MODEL아니오jina-embeddings-v3임베딩 모델 식별자
EMBEDDING_DIMENSION아니오1024임베딩 벡터 차원
EMBEDDING_API_KEY아니오(uses JINA_API_KEY)다른 임베딩 제공자를 위한 API 키 재정의
EMBEDDING_BASE_URL아니오https://api.jina.ai/v1다른 임베딩 제공자를 위한 기본 URL 재정의
RETRIEVAL_MODE아니오groundinggrounding (인용/충돌/신뢰도가 포함된 전체 파이프라인) 또는 simple (기본 RAG)
RERANKER_MODEL아니오jina-reranker-v2-base-multilingual리랭커 모델 식별자
RERANKER_PROVIDER아니오jina리랭커 제공자: jina / cohere / openai
COHERE_API_KEY아니오Cohere API 키 (설정 시 Cohere 리랭커 자동 선택)
COHERE_RERANKER_MODEL아니오rerank-multilingual-v3.0Cohere 리랭커 모델
VECTOR_STORE_DIR아니오./data/vector_storeLanceDB 벡터 저장소 데이터 디렉토리
임베딩은 지식 베이스 기능에 권장됩니다. 리랭커는 선택사항입니다 — 융합 스코어링을 사용하여 리랭커 없이도 검색이 작동합니다.

코드 실행

변수필수기본값설명
CODE_EXEC_BACKEND아니오locallocal (직접 호스트 실행) 또는 docker (격리된 컨테이너)
DOCKER_PYTHON_IMAGE아니오python:3.11-slimPython 실행용 Docker 이미지
DOCKER_NODE_IMAGE아니오node:20-slimNode.js 실행용 Docker 이미지
DOCKER_SHELL_IMAGE아니오python:3.11-slim셸 실행용 Docker 이미지
DOCKER_MEMORY아니오(Docker 기본값)컨테이너당 RAM 제한 (예: 256m, 512m, 1g)
DOCKER_CPUS아니오(Docker 기본값)컨테이너당 CPU 할당량 (예: 0.5, 1.0)
SANDBOX_TIMEOUT아니오120기본 실행 타임아웃(초)
DOCKER_HOST_DATA_DIR아니오(설정되지 않음)./data 볼륨 마운트의 호스트 측 절대 경로. DooD(Docker-outside-of-Docker) 배포에 필수이며, docker-compose.yml${PWD}/data를 통해 자동으로 설정합니다.
보안: local 모드는 AI가 생성한 코드를 호스트에서 직접 실행합니다. 인터넷 공개 또는 다중 사용자 배포의 경우, 항상 CODE_EXEC_BACKEND=docker로 설정하세요.

도구 아티팩트

도구 실행(코드 실행, 템플릿 렌더링, 이미지 생성)으로 생성된 파일의 크기 제한입니다.
변수필수기본값설명
MAX_ARTIFACT_SIZE아니오10485760 (10 MB)단일 아티팩트 파일의 최대 크기(바이트)
MAX_ARTIFACTS_TOTAL아니오52428800 (50 MB)세션당 총 아티팩트의 최대 크기(바이트)

이미지 생성 (선택사항)

변수필수기본값설명
IMAGE_GEN_PROVIDER아니오googlegoogle (Gemini 네이티브 API) 또는 openai (OpenAI 호환 /v1/images/generations)
IMAGE_GEN_API_KEY아니오Google AI Studio 키 (google) 또는 프록시/OpenAI API 키 (openai)
IMAGE_GEN_MODEL아니오gemini-3.1-flash-image-preview이미지 생성 모델 (예: dall-e-3, gemini-nano-banana-2)
IMAGE_GEN_BASE_URL아니오(공급자별)Google: https://generativelanguage.googleapis.com/v1beta; OpenAI: https://api.openai.com/v1

이메일 (SMTP) (권장)

SMTP_HOST, SMTP_USER, SMTP_PASS가 모두 설정되면 email_send 내장 도구를 자동으로 등록합니다.
변수필수기본값설명
SMTP_HOST조건부SMTP 서버 호스트명
SMTP_PORT아니오465SMTP 포트
SMTP_SSL아니오sslTLS 모드: ssl (포트 465) / tls (STARTTLS, 포트 587) / "" (평문)
SMTP_USER조건부SMTP 로그인 사용자명
SMTP_PASS조건부SMTP 로그인 비밀번호
SMTP_FROM아니오(uses SMTP_USER)From 헤더에 표시되는 발신자 주소
SMTP_FROM_NAME아니오From 헤더에 표시되는 표시 이름
SMTP_ALLOWED_DOMAINS아니오쉼표로 구분된 도메인 허용 목록 (예: example.com,corp.io); 나열된 도메인 외의 수신자 차단
SMTP_ALLOWED_ADDRESSES아니오쉼표로 구분된 정확한 주소 허용 목록; SMTP_ALLOWED_DOMAINS과 함께 사용; 모든 수신자를 허용하려면 둘 다 설정하지 않음 (공유 메일박스의 경우 권장하지 않음)

커넥터

변수필수기본값설명
CONNECTOR_RESPONSE_MAX_CHARS아니오50000비배열 JSON / 일반 텍스트 커넥터 응답의 최대 문자 수
CONNECTOR_RESPONSE_MAX_ITEMS아니오10커넥터 응답이 JSON 배열일 때 유지할 최대 배열 항목 수
CREDENTIAL_ENCRYPTION_KEY아니오(설정되지 않음)커넥터 자격증명 blob에 대한 Fernet 암호화 키. 설정되면 connector_credentials에 저장된 인증 토큰이 저장 시 암호화됩니다. 설정되지 않으면 자격증명이 일반 텍스트 JSON으로 저장됩니다(하위 호환성). 이 키를 변경하면 기존의 모든 암호화된 자격증명이 무효화됩니다.

플랫폼

변수필수기본값설명
DATABASE_URL아니오sqlite+aiosqlite:///./data/fim_one.db데이터베이스 연결 문자열. SQLite (설정 불필요): sqlite+aiosqlite:///./data/fim_one.db. PostgreSQL (프로덕션): postgresql+asyncpg://user:pass@localhost:5432/fim_one. Docker Compose는 PostgreSQL을 자동으로 설정합니다.
JWT_SECRET_KEY아니오CHANGE_MEJWT 토큰 서명용 비밀 키. 플레이스홀더 값 CHANGE_ME (또는 기타 레거시 기본값)는 첫 시작 시 안전한 256비트 난수 키를 자동 생성하도록 트리거하며, 이는 .env에 다시 작성됩니다. 프로덕션에서는 명시적으로 설정하여 재시작 및 복제본 전체에서 토큰이 유효하게 유지되도록 하세요.
CORS_ORIGINS아니오기본 localhost 항목 외에 허용되는 추가 CORS 원본의 쉼표로 구분된 목록. 프론트엔드가 비localhost 도메인에서 실행될 때 필수입니다 (예: https://app.example.com).
UPLOADS_DIR아니오./uploads업로드된 파일용 디렉토리
MAX_UPLOAD_SIZE_MB아니오50최대 파일 업로드 크기(메가바이트 단위, 백엔드 적용)
NEXT_PUBLIC_MAX_UPLOAD_SIZE_MB아니오50프론트엔드 UI에 표시되는 최대 파일 업로드 크기. 빌드 타임 변수MAX_UPLOAD_SIZE_MB와 일치해야 합니다.
MCP_SERVERS아니오MCP 서버 구성의 JSON 배열 (uv sync --extra mcp 필요)
ALLOW_STDIO_MCP아니오falsestdio MCP 서버 허용. 신뢰할 수 있는 로컬 배포에서만 true로 설정하세요
ALLOWED_STDIO_COMMANDS아니오npx,uvx,node,python,python3,deno,bunstdio MCP 서버에 허용되는 기본 명령의 쉼표로 구분된 목록. ALLOW_STDIO_MCP=true일 때만 적용됩니다
LOG_LEVEL아니오INFO로깅 수준: DEBUG / INFO / WARNING / ERROR / CRITICAL
REDIS_URL아니오워커 간 인터럽트 릴레이용 Redis 연결 URL. Docker Compose에서 자동 구성됩니다. 로컬 다중 워커 설정(WORKERS>1)에만 필요합니다.
WORKERS아니오1Uvicorn 워커 프로세스. 1은 안전하며 외부 서비스가 필요하지 않습니다. >1 PostgreSQL 필수 (SQLite는 단일 쓰기). 인증, OAuth 및 파일 작업은 완전히 다중 워커 안전입니다 (JWT 기반). 제한 사항: REDIS_URL 없이는 스트림 중 인터럽트/주입이 동일한 워커 프로세스 내에서만 작동합니다. Docker Compose는 Redis를 자동으로 구성합니다.

OAuth (선택 사항)

공급자에 대해 CLIENT_IDCLIENT_SECRET이 모두 설정되면 로그인 페이지에 해당 OAuth 버튼이 자동으로 표시됩니다.
변수필수기본값설명
GITHUB_CLIENT_ID아니오GitHub OAuth App 클라이언트 ID. github.com/settings/developers → OAuth Apps에서 생성
GITHUB_CLIENT_SECRET아니오GitHub OAuth App 클라이언트 시크릿
GOOGLE_CLIENT_ID아니오Google OAuth 클라이언트 ID. console.cloud.google.com/apis/credentials에서 생성
GOOGLE_CLIENT_SECRET아니오Google OAuth 클라이언트 시크릿
DISCORD_CLIENT_ID아니오Discord OAuth2 클라이언트 ID. discord.com/developers에서 생성
DISCORD_CLIENT_SECRET아니오Discord OAuth2 클라이언트 시크릿
FEISHU_APP_ID아니오Feishu (Lark) App ID. open.feishu.cn에서 생성. contact:user.email:readonly 권한 필요
FEISHU_APP_SECRET아니오Feishu (Lark) App Secret
FRONTEND_URL프로덕션http://localhost:3000OAuth 완료 후 브라우저가 이동할 위치. 프로덕션에서 설정 필수 (예: https://yourdomain.com)
API_BASE_URL프로덕션http://localhost:8000외부에서 접근 가능한 백엔드 URL, OAuth 콜백 URL 구성에 사용. 프로덕션에서 설정 필수
NEXT_PUBLIC_API_URL프로덕션(자동 감지: <hostname>:8000)OAuth 리다이렉트를 위한 브라우저 측 API 기본 URL. 이것은 프론트엔드 빌드 타임 변수입니다 — 로컬 개발의 경우 frontend/.env.local에서 설정하거나, 커스텀 프로덕션 배포의 경우 Docker 빌드 인자로 전달하세요. 자동 감지는 표준 리버스 프록시 설정(포트 80/443)에서 작동합니다.
프로덕션 = 로컬에서는 선택 사항(기본값 작동), 하지만 인터넷에 노출된 배포의 경우 필수입니다.

각 제공자에 등록할 OAuth 콜백 URL

백엔드는 콜백 URL을 다음과 같이 구성합니다: {API_BASE_URL}/api/auth/oauth/{provider}/callback
제공자등록할 콜백 URL
GitHubhttps://yourdomain.com/api/auth/oauth/github/callback
Googlehttps://yourdomain.com/api/auth/oauth/google/callback
Discordhttps://yourdomain.com/api/auth/oauth/discord/callback

분석 (선택사항)

모든 분석 제공자는 선택사항입니다. 원하는 조합으로 설정하면 모든 활성 제공자가 동시에 로드됩니다. 분석을 완전히 비활성화하려면 모두 비워두세요 (로컬 개발에 권장).
변수필수기본값설명
NEXT_PUBLIC_GA_MEASUREMENT_ID아니오Google Analytics 4 측정 ID (예: G-XXXXXXXXXX). analytics.google.com에서 발급받으세요
NEXT_PUBLIC_UMAMI_SCRIPT_URL아니오Umami 분석 스크립트 URL (예: https://your-umami.com/script.js). 자체 호스팅, 개인정보 보호 친화적 대안 — umami.is
NEXT_PUBLIC_UMAMI_WEBSITE_ID아니오Umami 웹사이트 ID. NEXT_PUBLIC_UMAMI_SCRIPT_URL이 설정되어 있을 때 필수
NEXT_PUBLIC_PLAUSIBLE_DOMAIN아니오Plausible 분석 도메인 (예: yourdomain.com). 경량, 개인정보 보호 친화적 — plausible.io
NEXT_PUBLIC_PLAUSIBLE_SCRIPT_URL아니오https://plausible.io/js/script.js자체 호스팅 인스턴스용 커스텀 Plausible 스크립트 URL
모든 NEXT_PUBLIC_* 분석 변수는 빌드 타임입니다 — 변경사항이 적용되려면 프론트엔드를 다시 빌드해야 합니다.