AbstractCore
PyPI version
CI
Tested Python
license
GitHub stars
통합 LLM 인터페이스 (Unified LLM Interface)
한 번 작성하고, 어디서든 실행하세요 (Write once, run everywhere)
AbstractCore는 Python 애플리케이션을 위한 오프라인 사용이 가능한 오픈 소스 우선(open-source-first) LLM 인프라 계층입니다. 이 라이브러리는 로컬 런타임, 자체 호스팅 서버, 클라우드 API, 그리고 OpenAI와 호환되는 게이트웨이를 아우르는 단 하나의 create_llm(...) API를 제공합니다.
Python에서 프로세스 내부(in-process)로 사용하거나, 이미 OpenAI API를 사용하는 애플리케이션을 위한 범용 /v1 엔드포인트로 실행할 수 있습니다. 로컬 모델 에셋이 설치되면 동일한 애플리케이션을 완전히 오프라인으로 실행하여 자체 추론 서버에서 프라이버시를 유지하거나, 관리형 용량이 필요할 때 호스팅된 제공업체로 라우팅할 수 있습니다.
목표는 간단합니다: 제품을 특정 벤더, 네트워크 연결 또는 모델 패밀리에 종속시키지 않으면서 손쉽게 LLM 기능을 사용할 수 있도록 하는 것입니다. AbstractCore는 애플리케이션 코드를 이식성 있게 유지하는 동안, 그 아래의 모델은 OpenAI, Anthropic, Ollama, LM Studio, MLX, HuggingFace/GGUF, vLLM, OpenRouter, Portkey 또는 모든 OpenAI 호환 백엔드 사이를 이동할 수 있습니다.
기본 설치(pip install abstractcore)는 추가 설정 없이 모든 원격 제공업체를 실행합니다. abstractcore[apple]과 abstractcore[gpu]는 Apple silicon 및 NVIDIA/AMD 장치용 로컬 엔진을 추가합니다. 로컬 런타임의 경우, AbstractCore는 캐시 우선(cache-first)이며 오프라인 우선(offline-first)입니다: 모델 가중치를 조용히 다운로드하지 않으며, 사용자가 원하는 모델을 직접 다운로드(abstractcore models download ...)한 후, 선택한 제공업체와 도구가 로컬일 때 인터넷 없이 실행할 수 있습니다.
다음 기능에 대한 1급 지원:
- 명시적인 모델 설정이 가능한 오프라인 로컬 작동 (사일런트 다운로드 없음)
- 로컬/오픈 가중치 모델 백엔드 (Ollama, LM Studio, MLX, HuggingFace/GGUF, vLLM)
- 클라우드, 호스팅 게이트웨이 및 일반 OpenAI 호환 제공업체
- 동기(sync) + 비동기(async)
- 스트리밍(streaming) + 비스트리밍(non-streaming)
- 범용 도구 호출 (native + 프롬프트 기반 도구 구문)
- 구조화된 출력 (Pydantic)
- 통합 생성 매개변수, 기능 감지 및 제공업체별 특이사항
- 세션 메모리, 프롬프트 캐싱, 영구 메모리 블록 캐시 아티팩트, 이벤트, 추적(tracing) 및 재시도 인식 신뢰성 후크
- 명시적이고 정책 기반의 폴백(*)을 갖춘 미디어 입력 (이미지/오디오/비디오 + 문서)
- 결정론적인 TTS/STT, 생성 비전, 음악, 3D 생성 및 실제 카메라 조종을 위한 선택적 기능 플러그인 (
core.voice/core.audio/core.vision/core.music/core.scene3d/core.camera) (예: abstractvoice, abstractvision, abstractmusic, abstract3d, 및 abstractcamera와 같은 패키지를 통해)
- 긴 문서를 위한 글리프 시각-텍스트 압축(**)
- 선택적 OpenAI 호환
/v1 게이트웨이 서버 (다중 제공업체, 스키마에 따라 검증된 response_format 구조화 출력 포함) 및 단일 모델 엔드포인트
(*)
미디어 입력은 정책 기반입니다(사일런트 의미론적 변경 없음). 만약 모델이 이미지를 지원하지 않으면, AbstractCore는 구성된 비전 모델을 사용하여 짧은 시각적 관찰 결과를 생성하고 이를 텍스트 전용 요청에 주입할 수 있습니다 (비전 폴백). 오디오/비디오 첨부 파일 역시 정책 기반이며 (audio_policy, video_policy), 폴백을 위해 기능 플러그인이 필요할 수 있습니다. 미디어 처리 및 중앙 집중식 구성을 참조하십시오.
(**)
선택적 시각-텍스트 압축: 긴 텍스트/PDF를 이미지로 렌더링하여 비전 모델로 처리하고 토큰 사용량을 줄입니다. 글리프 시각-텍스트 압축 (라이트 설치에 포함됨)을 참조하십시오.
생성형 비전(Generative vision)은 abstractvision을 사용합니다. 서버 모드에서는 서버에 구성된 기본값이 있는 경우에만 model을 생략하거나, diffusers/default, diffusers/<huggingface-repo>, mlx-gen/AbstractFramework/qwen-image-2512-4bit, mlx-gen/AbstractFramework/wan2.2-t2v-a14b-diffusers-8bit, sdcpp/default, 또는 openai-compatible/<model>과 같은 명시적인 provider/model id를 사용해야 합니다. 양자화된 MLX-Gen 모델은 게시된 repo id로 선택되며, Core는 별도의 양자화 오버라이드를 추가하지 않습니다.
문서(Docs): Getting Started · FAQ · Docs Index · https://lpalbou.github.io/AbstractCore
AI 어시스턴트 및 문서 인덱싱 도구를 위해, 이 저장소는 또한 llms.txt와 llms-full.txt를 게시합니다. Context7과 같은 MCP 클라이언트는 공개 문서를 직접 쿼리할 수도 있습니다.
AbstractCore가 필요한 이유
많은 라이브러리가 LLM을 호출할 수 있습니다. AbstractCore는 실제 애플리케이션의 복잡한 중간 단계에 사용되며, 여기서 다양한 모델 패밀리, 로컬 추론 서버, API 방언(dialects), 오프라인 배포, 그리고 기능 격차를 거쳐도 동일한 제품 코드를 유지해야 할 때 필요합니다.
오픈 소스 및 자체 호스팅 모델은 데모 경로가 아니라 일급 시민(first-class)입니다. AbstractCore는 단일 호스팅 API를 넘어설 때 종종 문제가 발생하는 것들, 즉 프롬프트 기반 대 네이티브 도구, 스키마 준수 차이, 구조화된 출력 재시도(structured-output retry), 추론 텍스트, 미디어 지원, 토큰 예산 어휘(token budget vocabulary), 로컬 서버 검색, 그리고 프롬프트/캐시 동작 등을 처리합니다.
이는 개인 정보 보호에 민감한 어시스턴트, 로컬 개발자 도구, 문서 워크플로우, 연구 장비, 엣지 배포, 그리고 클라우드 기반 프로덕션 서비스의 실용적인 기반이 됩니다. 비용, 개인 정보 보호, 지연 시간(latency), 하드웨어 제약 조건이 변함에 따라 원격 우선 제품, 완전히 로컬 제품, 또는 두 가지 사이를 이동하는 하이브리드 제품을 구축할 수 있습니다.
AbstractCore를 사용해야 하는 경우는 애플리케이션 코드와 가까운 집중적인 프로바이더 레이어가 필요할 때입니다. 만약 내구성 있는 런타임 실행(durable runtime execution), 에이전트, 플로우, 게이트웨이, 에이전틱 CLI 인터페이스, 메모리 또는 AbstractAssistant와 같은 어시스턴트 애플리케이션도 필요하다면 더 넓은 AbstractFramework 스택을 사용하세요.
AbstractFramework 생태계
AbstractCore는 AbstractFramework 생태계의 일부입니다:
기본적으로 AbstractCore는 도구에 대한 패스스루 방식(execute_tools=False)입니다. 이 경우 response.tool_calls에서 구조화된 도구 호출을 반환하며, 런타임이 이를 실행할지/어떻게 실행할지(정책, 샌드박싱, 재시도, 지속성)를 결정합니다. Tool Calling 및 Architecture를 참조하세요.
graph LR
APP["당신의 앱"] --> AC["AbstractCore"]
AF["AbstractFramework (선택 사항)"] --> AC
...
설치
AbstractCore에는 세 가지 설치 설정이 있습니다:
apple과 gpu는 각각 light에 포함된 모든 것을 포함합니다. 각 설정이 무엇을 포함하는지, 플랫폼 요구 사항, 선택적 헤드리스 브라우저에 대해서는 Installation를 참조하세요.
빠른 시작
브라우저에서 로컬 모델을 선택하고 다운로드하여 실행하세요:
pip install "abstractcore[apple]"
abstractcore serve
Models 탭에서는 해당 장치에 맞는 모델 목록을 보여주고 클릭 한 번으로 다운로드할 수 있으며, Engines 탭에서는 Ollama, LM Studio, MLX 또는 llama.cpp를 정확한 명령어를 보여주는 확인 절차만 거치면 설치합니다. 각 동작은 CLI(Command Line Interface) 쌍(abstractcore models download ..., abstractcore engines install ...)을 출력합니다. Local Models, Recommended Models, Local Engines 및 Web Console를 참조하세요.
로컬/오프라인 예시 (이미 ollama pull qwen3:4b가 완료된 Ollama 실행 필요):
from abstractcore import create_llm
llm = create_llm("ollama", model="qwen3:4b")
...
원격 API 예시 (경량 설치로 작동; OPENAI_API_KEY 설정 필요):
from abstractcore import create_llm
llm = create_llm("openai", model="gpt-4o-mini")
...
프롬프트 우선(prompt-first) API는 여전히 완벽하게 지원되지만, 더 낮은 수준의 멀티모달 형태는 이제 request=와 output= 키워드 쌍을 사용합니다:
from abstractcore import create_llm
llm = create_llm("openai", model="gpt-4o-mini")
...
레거시인 prompt, text, messages, 및 media 키워드 인수는 동일한 내부 요청 계약(internal request contract)으로 정규화됩니다. 수동으로 제공자/모델/기본 URL을 선택하는 것은 출력 사양과 제공자 구성에서 여전히 가능하며, 새로운 계약은 기존 API를 깨뜨리는 변경이 아닌 추가적인 것입니다. 디버깅을 위해 응답에는 경계가 지정된 _resolved_generate_route 메타데이터 요약도 노출될 수 있습니다.
대화 상태 (Conversation state) (BasicSession)
from abstractcore import create_llm, BasicSession
session = BasicSession(create_llm("anthropic", model="claude-haiku-4-5"))
...
스트리밍 (Streaming)
from abstractcore import create_llm
llm = create_llm("ollama", model="qwen3:4b")
...
비동기 (Async)
import asyncio
from abstractcore import create_llm
...
토큰 예산 (통합)
from abstractcore import create_llm
llm = create_llm(
...
제공자 (공통)
오픈소스 우선주의(Open-source-first) 관점에서, 로컬 제공자(Ollama, LMStudio, vLLM, openai-compatible, HuggingFace, MLX)가 1등급입니다. 클라우드 및 게이트웨이 제공자는 선택 사항입니다.
openai: OPENAI_API_KEY, 선택적 OPENAI_BASE_URL
anthropic: ANTHROPIC_API_KEY, 선택적 ANTHROPIC_BASE_URL
openrouter: OPENROUTER_API_KEY, 선택적 OPENROUTER_BASE_URL (기본값: https://openrouter.ai/api/v1)
portkey: PORTKEY_API_KEY, PORTKEY_CONFIG (설정 ID), 선택적 PORTKEY_BASE_URL (기본값: https://api.portkey.ai/v1)
ollama: OLLAMA_BASE_URL에서 로컬 서버 (또는 레거시 OLLAMA_HOST)
lmstudio: LMSTUDIO_BASE_URL에서 OpenAI 호환 로컬 서버 (기본값: http://localhost:1234/v1)
vllm: VLLM_BASE_URL에서 OpenAI 호환 서버 (기본값: http://localhost:8000/v1)
openai-compatible: OPENAI_BASE_URL을 통한 일반적인 OpenAI 호환 엔드포인트 (기본값: http://localhost:1234/v1)
huggingface: Transformers를 통한 로컬 모델 (게이티드 다운로드를 위한 선택적 HUGGINGFACE_TOKEN 필요)
mlx: Apple Silicon 로컬 모델 (게이티드 다운로드를 위한 선택적 HUGGINGFACE_TOKEN 필요)
설정(API 키 포함)은 config CLI를 통해 영구 저장할 수도 있습니다:
abstractcore --status
abstractcore --configure (별칭: --config)
abstractcore --set-api-key openai sk-...
abstractcore --set-server-auth-token acore-server-secret
내부 구성 요소 (빠른 둘러보기)