本地运行需先安装并启动 Ollama,文件和多模态适配器还要额外 ollama pull nomic-embed-text;Docker 镜像按模型供应商分 flavor,用 OpenAI/Gemini 等需先在 shell 导出对应 API key;管理后台密码是容器启动时生成的一次性密码,需从 docker logs 中查找,本地安装默认是 admin/ChangeMe!2026。
orbit
schmitechApache-2.0活跃维护自托管的 AI 网关,把私有 RAG、自然语言查数据库和工具调用智能体统一到一个入口,方便在内部环境安全接入大模型。
Self-hosted AI gateway for private RAG, natural-language data access, and tool-calling agents.
docker pull schmitech/orbit-ollama:latest
docker run -d --name orbit -p 127.0.0.1:5173:5173 -p 127.0.0.1:3000:3000 -v orbit-data:/orbit/data -v orbit-models:/orbit/models schmitech/orbit-ollama:latestREADME 未说明具体显存或 GPU 型号要求;本地运行需 Python 3.12+ 和已安装运行的 Ollama,默认使用 gemma4-e2b-cpu 预设,可纯 CPU 推理。
自托管 AI 网关,把私有数据、工具和本地或托管模型统一到一个 OpenAI 兼容 API
自托管的 AI 网关,把私有 RAG、自然语言查数据库和工具调用智能体统一到一个入口,方便在内部环境安全接入大模型。
核心能力
- 用 YAML 配置适配器连接文件、SQL、NoSQL、向量库和 API
- 提供混合检索与重排序,支持私有 RAG
- 统一 OpenAI 兼容 API,支持自动选模型与供应商回退
- 接入 MCP 工具,按技能路由请求并用 A2A 协调代理
- 内置 SSO、RBAC、PII 检测、配额、审计日志和管理后台
容易踩的坑
- v2.21.2最新正式版2026-11-09 · 2026-11-09 19:51 UTC
[2.21.2] - 2026-11-09
Maintenance
- Multimodal passthrough config cleanup: Simplified redundant config construction when initializing the file retriever in the multimodal conversational implementation, with no behavior change.
- Pipeline steps cleanup: Deduplicated adapter-type checks, provider/rewrite-provider resolution, and MCP manager/tool-skill-registry lookups that were copy-pasted across the generation steps and MCP agent step, and replaced several ad hoc adapter-type checks with new
AdapterCapabilitiesflags (calls_main_llm,needs_text_inference_provider,uses_native_chat_format,prompt_rewrite_enabled, the last also settable directly under an adapter'scapabilities:section). No behavior change for existing adapters. Full plan and details indocs/roadmap/complete/pipeline-steps-cleanup.md.
- v2.21.12026-11-04 · 2026-11-04 17:26 UTC
查看更新说明
[2.21.1] - 2026-11-04
Maintenance
- Chat response post-processing cleanup: Conversation and audit logging now happen concurrently instead of one after another, slightly reducing per-request latency. Minor cleanup of unused code paths in response handling, with no behavior change.
- Conversation threading permission now reads from one place: Whether an adapter can offer the "continue conversation" option was previously decided by two different mechanisms that could disagree. It now comes from a single, explicit setting per adapter, and every built-in adapter configuration declares it directly instead of relying on a guess based on the adapter's name.
- More reliable "did this query actually return data?" signal: SQL-based adapters now report explicitly whether a query returned data, rather than that being inferred indirectly, making the "continue conversation" option more consistently accurate for those adapters.
Bug Fixes
- Conversation threading could stay on for genuinely empty results: A source explicitly reporting zero matching rows was sometimes treated as if no row count had been reported at all, which could let the "continue" threading option appear even though the query returned nothing.
- Multilingual "no results" detection simplified and hardened: Consolidated three separately maintained lists of "no results" phrases (across 7 languages) into one, removing drift between them, and fixed a couple of related false positives/negatives along the way — including a reply that said data was unavailable not always correctly ending the conversation thread.
- v2.21.02026-10-28 · 2026-10-28 11:12 UTC
查看更新说明
[2.21.0] - 2026-10-28
Core Features
- Follow-up query rewriting: SQL/HTTP intent adapters can rewrite follow-up questions using the previous turn's query and parameters. Opt in with
supports_followup_rewrite: true; compatible with intent clarification. Enabled on seven example adapters. Seedocs/sql-retriever-architecture.md. - Cheaper Inference provider: Added the OpenAI-compatible
cheaperinferenceprovider, disabled by default. Configure it inconfig/inference.yamlwithCHEAPERINFERENCE_API_KEY.
Maintenance
- Shared prompt parsing: Consolidated message parsing across 11 OpenAI-compatible inference providers into a shared helper, with no behavior change.
- API-key admin panel reads
idonly: The admin panel's API-key tab now reads the canonicalidfield exclusively instead of the legacy_idfield the list/detail endpoints also send, normalizing it once where responses are loaded. - Dropped the legacy
_idfield from API-key list/detail responses:GET /admin/api-keysandGET /admin/api-keys/{id}/detailnow returnidonly, completingdocs/roadmap/api-keys-drop-legacy-id-field.md. The admin panel already readsidexclusively (previous entry); itsnormalizeKeyRecord()still tolerates a legacy_idfrom an older server as a transition fallback, with no functional effect now that the backend no longer sends it.
Bug Fixes
- New API-key controls: Create responses now include the record ID, fixing Test Key, Rename, quota, renew, and deactivate/delete actions immediately after creation.
- API-key prompt validation: Key creation now returns 404 when the supplied system prompt does not exist.
- Dark-mode toast: Fixed the unreadable icon background in the Test Key success toast.
- Follow-up query rewriting: SQL/HTTP intent adapters can rewrite follow-up questions using the previous turn's query and parameters. Opt in with
- v2.20.32026-10-25 · 2026-10-25 15:52 UTC
查看更新说明
[2.20.3] - 2026-10-25
Maintenance
- AI service reliability: Improved concurrent batching for Gemini embeddings and OpenAI reranking, and moved blocking translation, image, and video work off the event loop.
- Provider cleanup: Consolidated common error logging, connection checks, reasoning settings, audio configuration lookup, and other duplicated code without changing provider-specific behavior. Provider errors containing braces no longer disrupt error handling.
- Gemini client sharing: Gemini services using the same API key now share a client, with safe concurrent creation and cleanup when services close.
- Shared temperature/token-parameter capability hooks: The OpenAI and Azure vision providers' duplicated logic for picking the right token-count parameter (
max_tokens/max_completion_tokens/max_output_tokens) and for deciding whether a model accepts a customtemperaturenow lives onOpenAIBaseService/AzureBaseServiceinstead of being copied per service. No behavior change;azure_openai_inference_service.py's own hardcoded parameters are intentionally left as-is pending a separate decision.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
ORBIT
Open Retrieval-Based Inference Toolkit
Connect your data and tools to local or hosted models through one API. Deploy on your own infrastructure.
Why ORBIT
An AI gateway, retrieval engine, and agent host in one Apache 2.0 project, with no gated features.
| What you get | |
|---|---|
| Your data, connected | Query files, SQL, NoSQL, vector stores, and APIs through YAML-configured adapters, with hybrid retrieval and reranking. |
| Your choice of models | Use local or hosted models through one OpenAI-compatible API, with automatic model selection and provider fallbacks. |
| Agents that take action | Connect MCP tools, route requests to specialized skills, and coordinate agents through A2A or async messaging. |
| Beyond text chat | Process documents and images, build voice experiences, and generate images, audio, and video. |
| Real-time decisions | Get structured choices, yes/no answers, and scores with probabilities for routing, triage, and moderation. |
| Your infrastructure | Self-host on-premises or in a private cloud, including air-gapped deployments with local models. |
| Security and operations built in | SSO, role-based access, PII detection, moderation, quotas, audit logs, and cost estimates, plus an admin UI for day-to-day management. |
Explore the capability matrix for a detailed comparison with Open WebUI and LiteLLM.
See who ORBIT is for for organization types, needs, relevant features, and pilot ideas.
Explore what you can build with ORBIT, from conversations over private data to voice assistants and tool-using agents.
- Talk to a municipal assistant in real time
- Choose AI models and configure model availability per agent
- Render music and play MIDI
- Query SQL data through a real-time voice conversation
- Render Mermaid diagrams in OrbitChat
- Chat with Elasticsearch data using an intent retriever
- Render charts in OrbitChat
Quick start
With Docker installed and running, use a prebuilt flavor image to try ORBIT without downloading a tarball or cloning the repo. Each image bundles the ORBIT server, OrbitChat web UI, and document chat for PDFs, Word, Excel, images, and Markdown.
Choose one flavor:
| Flavor | Image | What you need |
|---|---|---|
| Ollama | schmitech/orbit-ollama:latest | Local inference; no API key. Ollama is bundled. |
| OpenAI | schmitech/orbit-openai:latest | OPENAI_API_KEY exported in your shell. |
| Gemini | schmitech/orbit-gemini:latest | GOOGLE_API_KEY exported in your shell. |
| OpenRouter | schmitech/orbit-openrouter:latest | OPENROUTER_API_KEY exported in your shell. Free models. |
| Cohere | schmitech/orbit-cohere:latest | COHERE_API_KEY exported in your shell. |
Each image is also published with a version tag (e.g. schmitech/orbit-ollama:2.21.1) if you want to pin to a specific release instead of :latest.
Ollama
docker pull schmitech/orbit-ollama:latest
docker run -d --name orbit \
-p 127.0.0.1:5173:5173 -p 127.0.0.1:3000:3000 \
-v orbit-data:/orbit/data \
-v orbit-models:/orbit/models \
schmitech/orbit-ollama:latest
OpenAI
docker pull schmitech/orbit-openai:latest
docker run -d --name orbit \
-p 127.0.0.1:5173:5173 -p 127.0.0.1:3000:3000 \
-e OPENAI_API_KEY \
-v orbit-data:/orbit/data \
schmitech/orbit-openai:latest
Gemini
docker pull schmitech/orbit-gemini:latest
docker run -d --name orbit \
-p 127.0.0.1:5173:5173 -p 127.0.0.1:3000:3000 \
-e GOOGLE_API_KEY \
-v orbit-data:/orbit/data \
schmitech/orbit-gemini:latest
OpenRouter
docker pull schmitech/orbit-openrouter:latest
docker run -d --name orbit \
-p 127.0.0.1:5173:5173 -p 127.0.0.1:3000:3000 \
-e OPENROUTER_API_KEY \
-v orbit-data:/orbit/data \
schmitech/orbit-openrouter:latest
Cohere
docker pull schmitech/orbit-cohere:latest
docker run -d --name orbit \
-p 127.0.0.1:5173:5173 -p 127.0.0.1:3000:3000 \
-e COHERE_API_KEY \
-v orbit-data:/orbit/data \
schmitech/orbit-cohere:latest
Once startup completes, open OrbitChat to chat or upload a document. The API is available at http://localhost:3000, with the bundled multimodal API key for the document-chat adapter.
View startup progress with docker logs -f orbit. Data persists in orbit-data; the Ollama flavor also stores downloaded models in orbit-models.
To sign in to the admin dashboard, grab the one-time generated admin password from the container log (it's not baked into the image):
docker logs orbit | grep -A3 "one-time admin password"
Log in with admin and that password.
See the Docker guide for more details.
Prerequisites: Python 3.12+, an internet connection for downloads, and Ollama installed and running. If needed, run ollama serve in a separate terminal. On Windows, follow the installation guide.
curl -LO https://github.com/schmitech/orbit/releases/download/v2.21.1/orbit-2.21.1.tar.gz
tar -xzf orbit-2.21.1.tar.gz && cd orbit-2.21.1
./install/setup.sh --profile default
ollama pull gemma4:e2b
# Required for file/multimodal adapters:
ollama pull nomic-embed-text
./bin/orbit.sh start
./bin/orbit.sh status
Open the admin dashboard and sign in with admin / ChangeMe!2026.
Send your first message
For a quick smoke test, the release seed includes default-key mapped to the
simple-chat adapter:
curl -X POST http://localhost:3000/v1/chat \
-H 'Content-Type: application/json' \
-H 'X-API-Key: default-key' \
-H 'X-Session-ID: readme-smoke-test' \
-d '{
"messages": [
{"role": "user", "content": "Say hello in one sentence"}
],
"stream": false
}'
Continue with your first chat to create an API key, or use the Docker quick start for containers.
The default setup uses Ollama with the gemma4-e2b-cpu preset, which resolves to gemma4:e2b.
- Server settings:
config/config.yaml. - Providers: Enable a provider in
config/inference.yaml, set its credential in.env, and select it globally or per adapter. - Ollama presets:
config/ollama.yaml. - Data and tools: Configure adapters in
config/adapters.yamlandconfig/adapters/. Start with the adapter guide or intent templates.
See Before you start for installation checks, file retrieval setup, and API-key management.
Use orbit-cli from a terminal (Node.js 20+):
npm install -g @schmitech/orbit-cli@latest
orbit-chat --url http://localhost:3000 --key default-key
Or launch OrbitChat in your browser:
npm install -g orbitchat@latest
cat > orbitchat.yaml <<'EOF'
agentMode:
mode: "single"
defaultAdapterId: "simple-chat"
adapters:
- id: "simple-chat"
EOF
ORBIT_ADAPTER_KEYS='{"simple-chat":"default-key"}' orbitchat --config orbitchat.yaml --open
OrbitChat opens at http://localhost:5173. See the example configuration for more options.
Explore more
| I want to… | Start here |
|---|---|
| Learn ORBIT | Tutorial · First chat · HTTP APIs |
| Connect private data | Files · Vector stores · SQL · Intent templates · Adapter system overview |
| Build agents | MCP tools · Automatic skill routing · A2A · Adapter creation |
| Make real-time decisions | Decision models · Automatic model selection · Triage Rush demo · Sentiment Pulse |
| Run in production | Authentication · Cost tracking · Rate limiting · Fault tolerance |
| Use a client | OrbitChat · Realtime Voice · Node.js SDK · Python API example |
See the documentation index for every guide and architecture deep dive.
Contributing
Contributions are welcome: new retrievers and provider integrations, deployment guides, tests, fixes, and documentation. Read CONTRIBUTING.md, pick an open issue, or start a discussion.
Maintained by Remsy Schmilinsky.
License
ORBIT is licensed under the Apache License 2.0.