AI Skill Hub 强烈推荐:DEEIX聊天 是一款优质的AI工具。AI 综合评分 8.0 分,在同类工具中表现稳健。如果你正在寻找可靠的AI工具解决方案,这是一个值得深入了解的选择。
企业级AI工作空间,支持多模态聊天、文件、工具等
DEEIX聊天 是一款基于 Go 开发的开源工具,专注于 AI、聊天、企业级 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
企业级AI工作空间,支持多模态聊天、文件、工具等
DEEIX聊天 是一款基于 Go 开发的开源工具,专注于 AI、聊天、企业级 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
# 方式一:go install(推荐) go install github.com/DEEIX-AI/DEEIX-Chat@latest # 方式二:从源码编译 git clone https://github.com/DEEIX-AI/DEEIX-Chat cd DEEIX-Chat go build -o deeix-chat . # 方式三:下载预编译二进制 # 访问 Releases 页面下载对应平台二进制文件 # https://github.com/DEEIX-AI/DEEIX-Chat/releases
# 查看帮助 deeix-chat --help # 基本运行 deeix-chat [options] <input> # 详细使用说明请查阅文档 # https://github.com/DEEIX-AI/DEEIX-Chat
# deeix-chat 配置说明 # 查看配置选项 deeix-chat --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export DEEIX_CHAT_CONFIG="/path/to/config.yml"
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="./apps/web/public/logo-white.svg" /> <img src="./apps/web/public/logo-black.svg" alt="DEEIX Chat" width="160" /> </picture> </p>
<p align="center"> An integrated AI platform for enterprise model routing, chat, files, tools, billing, identity, and operations. </p>
<p align="center"> English | <a href="./README.zh-CN.md">简体中文</a> </p>
<p align="center"> <a href="https://deeix.com"><img alt="Website" src="https://img.shields.io/badge/Website-deeix.com-black" /></a> <a href="https://deeix.com/docs/deeix-chat/quickstart"><img alt="Guide" src="https://img.shields.io/badge/Guide-Quickstart-0f766e" /></a> <a href="https://t.me/deeix_chat"><img alt="Telegram" src="https://img.shields.io/badge/Telegram-deeix_chat-26A5E4?logo=telegram&logoColor=white" /></a> <a href="https://x.com/DEEIX_AI"><img alt="X" src="https://img.shields.io/badge/X-%40DEEIX_AI-black?logo=x&logoColor=white" /></a> <a href="https://www.apache.org/licenses/LICENSE-2.0"><img alt="License" src="https://img.shields.io/badge/License-Apache%202.0-blue" /></a> <img alt="Next.js" src="https://img.shields.io/badge/Next.js-16-black" /> <img alt="React" src="https://img.shields.io/badge/React-19-149eca" /> <img alt="Go" src="https://img.shields.io/badge/Go-1.26-00add8" /> </p>
DEEIX Chat is an open-source, deployable AI platform for individuals, teams, and enterprises that need long-term, stable, and unified access to multiple model providers. It provides one clear entry point for multiple upstream models and providers, integrating multimodal chat, model routing, files and RAG, MCP tools, usage billing, identity, audit logs, and operational controls into one product.
The system is designed around simple deployment, efficient static delivery, and a low runtime resource footprint: lightweight without feeling limited, restrained without losing capability, and open without becoming disorderly.

| Area | Capabilities |
|---|---|
| Conversations | A multimodal chat interface for daily use, with streaming, branches, retries, edits, feedback, sharing, rich rendering, and traceable model execution metadata. |
| Models and routing | A platform-model layer for upstream channels, real models, route bindings, priority, weights, circuit breaking, vendor mapping, and capability configuration, reducing the cost of multi-provider operations. |
| Protocols and adaptation | Unified support for OpenAI, Anthropic, Google/Gemini, xAI, OpenRouter, and OpenAI-compatible protocols across text, image, tools, and provider-native capability differences. |
| Files and retrieval | File upload, preview, extraction, OCR, storage quota, full-context injection, chunking, embeddings, and semantic retrieval so file content can naturally enter the conversation context. |
| Tool ecosystem | MCP servers and provider-native official tools with discovery, enablement, user selection, execution limits, result rendering, and tool-call traceability. |
| Context and memory | Message windows, token budgets, summary compression, conversation memory, long-term memory, and RAG evidence records for controlled-cost continuity. |
| Billing and payments | Model pricing, per-call tool pricing, subscriptions, top-ups, balances, usage ledgers, billing snapshots, Stripe Checkout, EPay, and webhook validation. |
| Identity and security | Local accounts, session management, HttpOnly refresh cookies, 2FA/TOTP, trusted devices, SSO/OIDC/OAuth, contact verification, and encrypted sensitive data. |
| Administration and audit | Centralized management for users, roles, upstreams, models, routes, pricing, subscriptions, balances, usage logs, audit logs, auth events, and system events. |
| Deployment and operations | Single-runtime frontend/API serving, Docker deployment, SQLite or PostgreSQL, in-memory cache or Redis, S3-compatible storage, Swagger, structured logs, version endpoint, GeoIP, and OpenTelemetry. |
<p align="center"> <img src="./docs/assets/screenshots/DEEIX-Chat-Image.png" alt="DEEIX Chat image generation" width="49.45%" /> <img src="./docs/assets/screenshots/DEEIX-Chat-Dark.png" alt="DEEIX Chat dark mode" width="49.45%" /> </p>
<p align="center"> <img src="./docs/assets/screenshots/DEEIX-Chat-Usage.png" alt="DEEIX Chat usage and billing" width="32.3%" /> <img src="./docs/assets/screenshots/DEEIX-Chat-Artifacts.png" alt="DEEIX Chat artifacts" width="32.3%" /> <img src="./docs/assets/screenshots/DEEIX-Chat-Html.png" alt="DEEIX Chat HTML rendering" width="32.3%" /> </p>
engines allows all three; Node 20 and older are end-of-life). .nvmrc, CI and the Docker image all use 26.12.1.npm install -g pnpm@10.17.0; Node 26 no longer bundles Corepack).The SQLite profile does not require a separately managed database or cache. The default development configuration uses PostgreSQL and Redis; the full Compose profile starts both services for you.
All Docker assets live in deploy/; copy that directory to your server, the application source is not needed. Run the following commands from inside deploy/. Choose one installation profile first, then copy the matching config template to deploy/config.yaml. All profiles expose the app at http://localhost:8080 by default and mount ./config.yaml (relative to deploy/) to /app/config.yaml inside the container.
| Profile | Use case | Config file | Compose file | Built-in dependencies |
|---|---|---|---|---|
| Lightweight | Local evaluation, personal use, small single-node deployments | config.sqlite.example.yaml | docker-compose.sqlite.yml | App only, SQLite + sqlite-vec + in-memory cache |
| Default | External PostgreSQL and Redis already exist | config.example.yaml | docker-compose.yml | App only |
| Full | Single-machine stack with app, PostgreSQL, and Redis | config.full.example.yaml | docker-compose.full.yml | App, PostgreSQL, Redis |
This is the lowest-dependency deployment. It starts only the app container, stores data and local vector indexes in SQLite, and uses the in-process memory cache. Use it for local evaluation, personal deployments, and small single-node setups.
cd deploy
cp config.sqlite.example.yaml config.yaml
docker compose -f docker-compose.sqlite.yml up -d
SQLite + memory cache is single-process only. It is good for local use, evaluation, and small single-node deployments. Use PostgreSQL + Redis for multi-node or high-concurrency production deployments.
Use this when PostgreSQL and Redis are already managed outside this compose stack. Before starting, set database and Redis addresses to values reachable from inside the container; if the services run on the Docker host, host.docker.internal is usually the right hostname.
```bash cd deploy cp config.example.yaml config.yaml
Use this mode when the frontend and backend are served from different public origins, for example https://chat.example.com and https://api.example.com.
NEXT_PUBLIC_API_BASE_URL=https://api.example.comserver.public_api_base_url=https://api.example.comserver.public_web_base_url=https://chat.example.comserver.cors_allow_origin=https://chat.example.comFor Docker image builds, pass the frontend API URL at build time:
docker build --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.example.com -t deeix-chat .
pnpm install
NEXT_PUBLIC_API_BASE_URL=https://api.example.com pnpm --filter @deeix/web build
The static output is apps/web/out. Serve it with Nginx, CDN, object storage, or any static web server. To let the Go backend serve the frontend, place apps/web/out under server.frontend_dist_dir; the Docker image defaults to /app/frontend/out.
| Path | Rule | | --- | --- | | /_next/static/* | Cache for 1 year with immutable assets enabled. | | /logo*.svg, /*.ico, /*.png, /*.jpg, /*.webp, /*.woff2 | Cache for 1 day to 30 days. | | /, /*.html, /login*, /auth*, /chat*, /recent*, /files*, /knowledge-bases*, /library*, /settings*, /admin*, /share*, /preview* | Do not long-cache. Use no-cache or a short TTL. | | /api/*, /healthz, /readyz, /swagger/* | Bypass CDN cache and forward all request headers, methods, query strings, and request bodies. |
If the CDN serves apps/web/out from object storage, enable route fallback so clean URLs resolve to their exported index.html files, for example /chat -> /chat/index.html.
Quick installation guide: Quick Start.
Full configuration guide: Configuration.
Backend configuration is split into static runtime configuration and runtime business settings. Static runtime configuration describes branding and the infrastructure, security, and storage parameters required to start the service, and is provided through config.yaml and environment variables. Runtime business settings cover product capabilities such as authentication, conversations, models, files, and billing; they are stored in system_settings and maintained from the admin console. Environment variables override matching config-file values, which is useful for containerized deployments, separated deployments, and secret injection.
At startup, the backend resolves the default config file from the working directory: starting from the repository root reads config.yaml, while starting from backend/ reads ../config.yaml. Docker deployments mount deploy/config.yaml as read-only /app/config.yaml inside the container. If the config file is stored elsewhere, set CONFIG_FILE to a path accessible from the running process or container. The effective priority is environment variables > config.yaml > built-in defaults.
Frontend branding is also runtime configuration. Set the branding section in config.yaml, then restart the application; rebuilding the frontend or Docker image is not required. See Custom branding.
Static configuration environment variables:
| Area | Environment variable | Purpose |
|---|---|---|
| Frontend build | NEXT_PUBLIC_API_BASE_URL | Browser API base URL; set in apps/web/.env.local for local dev or at build time for separated deployment. |
| Config file | CONFIG_FILE | Optional config file path; Docker values should use the container path. |
| Application | APP_NAME | Application name. |
| Application | APP_ENV | Runtime environment: dev/development or prod/production; omitted values default to prod. |
| HTTP service | HTTP_PORT | API/runtime port. |
| HTTP service | CORS_ALLOW_ORIGIN | Allowed CORS origins, comma-separated. |
| HTTP service | TRUSTED_PROXIES | Trusted proxy CIDR list. |
| HTTP service | PUBLIC_API_BASE_URL | Public API URL for links, callbacks, and public URL generation. Required for third-party sign-in. |
| HTTP service | PUBLIC_WEB_BASE_URL | Public Web URL for links, callbacks, and public URL generation. |
| HTTP service | FRONTEND_DIST_DIR | Frontend static output directory. |
| HTTP service | HTTP_READ_HEADER_TIMEOUT_SECONDS | HTTP read-header timeout. |
| HTTP service | HTTP_READ_TIMEOUT_SECONDS | HTTP request read timeout. |
| HTTP service | HTTP_IDLE_TIMEOUT_SECONDS | HTTP keep-alive idle timeout. |
| HTTP service | HTTP_MAX_HEADER_BYTES | Maximum HTTP request header size. |
| Security | JWT_SECRET | JWT signing secret. |
| Security | DATA_ENCRYPTION_KEY | Key material for upstream API keys, users' own provider keys, SSO secrets, MCP tokens, sensitive settings, and TOTP secrets. Do not replace it in place; see DATA_ENCRYPTION_KEYS_PREVIOUS. |
| Security | DATA_ENCRYPTION_KEYS_PREVIOUS | Comma-separated keys used before the current DATA_ENCRYPTION_KEY. Data encrypted with them stays readable, and while this is set the server re-encrypts that data with the current key in the background after each startup. Remove it once the log reports data_encryption_key_rotation_completed. |
| Security | SSRF_PROTECTION_ENABLED | Enables outbound SSRF protection. |
| Security | SSRF_ALLOWED_HOSTS | Exact hostnames for deployment-level integrations or trusted private redirect targets, comma-separated. |
| Security | SSRF_ALLOWED_CIDRS | Trusted deployment-level integration or private redirect CIDRs, comma-separated. |
| Network | HTTP_PROXY / HTTPS_PROXY / NO_PROXY | Standard outbound proxy variables, honored with or without SSRF protection. ALL_PROXY is not supported. The startup log reports the active proxy (outbound_proxy_enabled). Changes require a restart. |
| Security | TURNSTILE_SITEVERIFY_URL | Cloudflare Turnstile siteverify endpoint. |
| Database | DATABASE_DRIVER | postgres or sqlite. |
| PostgreSQL | POSTGRES_DSN | PostgreSQL DSN. |
| PostgreSQL | POSTGRES_MAX_OPEN_CONNS | Maximum open connections. |
| PostgreSQL | POSTGRES_MAX_IDLE_CONNS | Maximum idle connections. |
| PostgreSQL | POSTGRES_CONN_MAX_LIFETIME_MINUTES | Maximum connection lifetime. |
| PostgreSQL | POSTGRES_CONN_MAX_IDLE_TIME_MINUTES | Maximum idle connection time. |
| SQLite | SQLITE_PATH | Database file path. |
| SQLite | SQLITE_DSN | Full DSN; takes priority over path-based DSN construction. |
| SQLite | SQLITE_MAX_OPEN_CONNS | Maximum open connections, default 1. |
| SQLite | SQLITE_BUSY_TIMEOUT_MS | Busy timeout. |
| SQLite | SQLITE_CACHE_SIZE_KB | Page cache size. |
| SQLite | SQLITE_MMAP_SIZE_BYTES | Mmap size. |
| SQLite | SQLITE_SYNCHRONOUS | Synchronous mode: OFF, NORMAL, FULL, or EXTRA. |
| SQLite | SQLITE_TEMP_STORE | Temporary storage: DEFAULT, FILE, or MEMORY. |
| Cache | CACHE_DRIVER | redis or memory; memory is single-process only. |
| Redis | REDIS_ADDR | Redis address. |
| Redis | REDIS_USERNAME | Redis ACL username; leave empty for password-only/default-user Redis. |
| Redis | REDIS_PASSWORD | Redis password. |
| Redis | REDIS_DB | Redis DB number. |
| Redis | REDIS_TLS_ENABLED | Enable TLS for Redis connections, for example Upstash Redis. |
| Redis | REDIS_TLS_INSECURE_SKIP_VERIFY | Skip Redis TLS certificate verification; keep false unless required by a nonstandard endpoint. |
| Storage | STORAGE_BACKEND | local or s3. |
| Local storage | STORAGE_ROOT_DIR | Local file storage directory. |
| S3 storage | STORAGE_S3_ENDPOINT | S3-compatible endpoint. |
| S3 storage | STORAGE_S3_REGION | S3 region; required when S3 storage is enabled. |
| S3 storage | STORAGE_S3_BUCKET | S3 bucket; required when S3 storage is enabled. |
| S3 storage | STORAGE_S3_PREFIX | S3 object prefix. |
| S3 storage | STORAGE_S3_ACCESS_KEY_ID | S3 Access Key ID. |
| S3 storage | STORAGE_S3_SECRET_ACCESS_KEY | S3 Secret Access Key. |
| S3 storage | STORAGE_S3_FORCE_PATH_STYLE | Whether to use path-style access. |
| GeoIP | GEOIP_PROVIDER | none, ipwhois, ipinfo, or mmdb. |
| GeoIP | GEOIP_BASE_URL | GeoIP HTTP service URL, default https://ipwho.is. |
| GeoIP | GEOIP_TOKEN | GeoIP service token. |
| GeoIP | GEOIP_TIMEOUT_MS | GeoIP request timeout. |
| GeoIP | GEOIP_DATABASE_URL | MMDB download URL. |
| GeoIP | GEOIP_DATABASE_PATH | Local MMDB path. |
| GeoIP | GEOIP_DATABASE_MAX_BYTES | Maximum MMDB download size. |
| GeoIP | GEOIP_REFRESH_INTERVAL_HOURS | MMDB refresh interval. |
| OpenTelemetry | OTEL_ENABLED | Enables tracing; when omitted, a configured endpoint enables tracing automatically. |
| OpenTelemetry | OTEL_EXPORTER_OTLP_ENDPOINT | OTLP collector endpoint. |
| OpenTelemetry | OTEL_EXPORTER_OTLP_HEADERS | OTLP headers in key=value,key2=value2 format. |
| OpenTelemetry | OTEL_EXPORTER_OTLP_INSECURE | Whether to use plaintext transport. |
| OpenTelemetry | OTEL_EXPORTER_OTLP_PROTOCOL | OTLP exporter protocol: grpc, http, or http/protobuf; defaults to grpc. |
| OpenTelemetry | OTEL_TRACES_SAMPLER_ARG / OTEL_SAMPLING_RATE | Trace sampling rate from 0 to 1; OTEL_TRACES_SAMPLER_ARG takes priority. |
Authentication, registration, conversation settings, model option policies, file processing, RAG, embedding, MCP, billing, payments, and announcements are runtime business settings, not static YAML configuration. Their defaults are seeded by the backend and maintained in the admin console.
When SSRF protection is enabled in production, administrator-saved model, MCP, Embedding, OIDC/OAuth2, and custom Turnstile endpoints are authorized locally by exact origin (scheme + host + port) and do not require entries in the global allowlist. Model, MCP, and Embedding redirects retain standard compatibility: public cross-origin targets are allowed, while private cross-origin targets must match SSRF_ALLOWED_HOSTS or SSRF_ALLOWED_CIDRS; OIDC/OAuth2 and Turnstile keep their stricter identity boundary. Generated media is downloaded, validated, and stored by the backend: a private artifact URL inherits trust only when it has the same origin as the selected model endpoint; public cross-origin artifact URLs remain subject to the strict public-network policy, and private cross-origin artifact URLs are blocked. The global allowlist also remains available for deployment-level integrations that cannot be tied to an administrator-saved endpoint, such as selected GeoIP or extraction deployments. Link-local, multicast, unspecified, and known metadata targets always remain blocked. Invalid allowlist entries stop backend startup, and global allowlist changes require a restart.
Outbound requests honor the standard HTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables, including when SSRF protection is enabled. The proxy address itself is treated as deployment-authorized; target URLs are still validated against the SSRF policy before a proxy is selected, so metadata and other blocked targets remain rejected, and requests that bypass the proxy (via NO_PROXY or loopback) keep the full DNS-validated dial path. When a request is sent through the proxy, the proxy resolves the target hostname. Before handing it over, the backend rejects numeric hostnames such as 127.1 or 2130706433 and resolves the hostname locally once, rejecting it if any resolved address is blocked by the policy; if local resolution fails, the request is left to the proxy. This does not protect against DNS rebinding at the proxy, so DNS-level egress control remains the responsibility of your proxy. There is no proxy setting in config.yaml: proxy addresses and credentials stay in the deployment environment. Go does not read ALL_PROXY, so for a SOCKS proxy set HTTP_PROXY and HTTPS_PROXY to a socks5:// URL; if only ALL_PROXY is set, the backend logs outbound_proxy_ignored at startup and connects directly. Proxy environment changes require a restart. In the desktop app's local mode the app sets these variables for its bundled server from the proxy chosen in Settings › Network (by default the system proxy); see apps/desktop/README.md.
高质量的企业级AI工作空间
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。
总体来看,DEEIX聊天 是一款质量优秀的AI工具,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。
| 原始名称 | DEEIX-Chat |
| 原始描述 | 开源AI工具:An enterprise AI workspace for model routing, multimodal chat, files, tools, bil。⭐614 · Go |
| Topics | AI聊天企业级 |
| GitHub | https://github.com/DEEIX-AI/DEEIX-Chat |
| License | Apache-2.0 |
| 语言 | Go |
收录时间:2026-06-28 · 更新时间:2026-07-03 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。