配置
本项目的配置主要集中在 ai_service/utils/settings.py、根目录 config.toml 与 ai_service/utils/models.json。
敏感信息(如数据库密码)仅通过 .env 或环境变量配置,不写入 config.toml。
配置加载顺序
- 根目录
.env会被ai_service.utils.settings自动加载。 - 若存在
ai_service/.env,会被模型加载器读取(override=False,不会覆盖系统环境变量);容器部署建议优先使用平台环境变量或根目录.env注入。 - 根目录
config.toml用于非敏感配置(如数据库 host、port、dbname);可通过环境变量CONFIG_FILE指定其它路径。 ai_service/.env.example提供推荐字段模板。- 运行时传入的参数(例如 API 请求中的
model_name/model_provider)优先级最高。
config.toml(非敏感配置)
- 位置:项目根目录
config.toml(与pyproject.toml同级)。可复制config.toml.example为config.toml后修改。 - 用途:存放数据库等非敏感配置,例如
[database]下的backend、host、port、name、driver。不包含用户名、密码。 - 数据库密码:仅通过环境变量
POSTGRES_USER、POSTGRES_PASSWORD或完整连接串DATABASE_URL在.env或环境中设置。
数据库连接优先级
- 最高:若已设置环境变量
DATABASE_URL,直接使用,不再读取 TOML 的[database]。 - 其次:若
config.toml中存在[database]且backend = "postgresql",则用 TOML 中的 host/port/name/driver 与环境变量POSTGRES_USER、POSTGRES_PASSWORD拼装 PostgreSQL 连接串。 - 默认:无 TOML 时,使用默认 PostgreSQL 本地连接(
postgresql+psycopg2://localhost:5432/chameleon_meta)。
常用环境变量
以下配置项由 Config 读取(完整字段见 API 参考):
LOG_LEVEL:日志级别(默认INFO)。APP_NAME:日志器名称(默认app)。DATABASE_URL:数据库连接字符串。未设置时由config.toml的[database]与POSTGRES_USER/POSTGRES_PASSWORD拼装,或默认连接本地 PostgreSQL。POSTGRES_USER、POSTGRES_PASSWORD:与config.toml的[database]配合使用时的数据库凭据(仅 PostgreSQL)。CHAT_MODEL_NAME:默认聊天模型名称。CHAT_MODEL_PROVIDER:默认模型提供商。CHAT_MODEL_TEMPERATURE:默认温度。EMBEDDING_PROVIDER:Embedding 提供商(sentence_transformers或dashscope)。EMBEDDING_BACKEND_TYPE:Embedding 后端类型(api或local,默认api)。EMBEDDING_MODEL:Embedding 模型名称。EMBEDDING_DIM:Embedding 维度。RERANK_ENABLED:是否启用检索后重排。RERANK_MODEL:重排模型(默认qwen3-rerank)。
CI/CD 配置(GitHub Actions)
CI/CD 的运行配置主要来自 GitHub Secrets 与 Repository Variables,不应写入仓库文件。
必需 Secrets(发布链路)
REGISTRY_USERNAME:远程镜像仓库registry.zata.cafe登录用户名REGISTRY_PASSWORD:远程镜像仓库registry.zata.cafe登录密码DOKPLOY_PROD_DEPLOY_HOOK:生产发布触发 hookPROD_HEALTHCHECK_URL:生产发布后的健康检查地址
可选 Secrets
DOKPLOY_STAGING_DEPLOY_HOOK:staging 阶段自动触发 hook(未配置则跳过)
Repository Variable
IMAGE_NAMESPACE:镜像命名空间,默认aibot。
镜像命名规则
CD 工作流默认推送以下形式的镜像:
registry.zata.cafe/<IMAGE_NAMESPACE>/<service>:<GIT_SHA>
registry.zata.cafe/<IMAGE_NAMESPACE>/<service>:main-latest
其中 <service> 包含:
ai-servicedemo-backenddemo-frontendadmin-frontend
Bases: BaseSettings
应用主配置 - 聚合所有子配置。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
app_name |
str
|
应用名称。 |
log_level |
str
|
日志级别。 |
postgres_user |
str
|
PostgreSQL 用户名。 |
postgres_password |
SecretStr
|
PostgreSQL 密码。 |
database_url |
str
|
完整数据库 URL 覆盖。 |
minio_access_key |
str
|
MinIO 访问密钥。 |
minio_secret_key |
SecretStr
|
MinIO 密钥。 |
minio_root_user |
str
|
Docker MinIO root 用户。 |
minio_root_password |
SecretStr
|
Docker MinIO root 密码。 |
database |
DatabaseSettings
|
数据库子配置。 |
chat_model |
ChatModelSettings
|
聊天模型子配置。 |
minio |
MinioSettings
|
MinIO 子配置。 |
qdrant |
QdrantSettings
|
Qdrant 子配置。 |
embedding |
EmbeddingSettings
|
Embedding 子配置。 |
rerank |
RerankSettings
|
Rerank 子配置。 |
chunking |
ChunkingSettings
|
分块子配置。 |
timeouts |
TimeoutSettings
|
超时子配置。 |
mcp |
MCPSettings
|
MCP 出站能力配置。 |
agent_types |
AgentTypesSettings
|
智能体类型配置。 |
base_dir |
Path
|
项目根目录。 |
log_dir |
Path
|
日志目录。 |
log_file |
Path
|
日志文件路径。 |
resolved_database_url
property
resolved_database_url
解析最终 DATABASE_URL:env var > TOML + credentials > default。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
最终的数据库连接 URL。 |
resolved_minio_access_key
property
resolved_minio_access_key
MinIO access key: MINIO_ACCESS_KEY > MINIO_ROOT_USER > default。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
解析后的 MinIO access key。 |
resolved_minio_secret_key
property
resolved_minio_secret_key
MinIO secret key: MINIO_SECRET_KEY > MINIO_ROOT_PASSWORD > default。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
解析后的 MinIO secret key。 |
ensure_log_directory
ensure_log_directory()
确保日志目录存在。
引发:
| 类型 | 描述 |
|---|---|
OSError
|
当无法创建目录时抛出。 |
settings_customise_sources
classmethod
settings_customise_sources(settings_cls, **kwargs)
配置源优先级:env vars > .env > TOML [app] > defaults。
嵌套子模型各自读取 config.toml 对应 section。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
settings_cls
|
type[BaseSettings]
|
Settings 类。 |
必需 |
**kwargs
|
Any
|
默认源参数。 |
{}
|
返回:
| 类型 | 描述 |
|---|---|
tuple[Any, ...]
|
tuple[Any, ...]: 配置源元组,按优先级排列。 |
MCP 配置(出站能力)
可在 config.toml 中新增 [mcp],用于控制出站 MCP 能力:
[mcp]
enabled = true
max_tool_rounds = 3
default_timeout_ms = 10000
default_max_calls_per_turn = 3
default_encryption_key_id = "mcp-key-v1"
建议通过环境变量提供密钥:
MCP_SECRET_KEY:MCP 凭据加密主密钥(必填,生产环境必须覆盖默认值)MCP_DEFAULT_ENCRYPTION_KEY_ID:默认密钥版本标识MCP_REDACT_KEYS:审计脱敏关键字数组(JSON 格式)
说明:secret_key 不应写入 config.toml,应放在 .env 或部署环境密钥管理系统中。
模型配置(models.json)
- 路径:
ai_service/utils/models.json - 内容:提供商与模型列表、可选
api_key_env、base_url等信息。 - 当模型名称在多个提供商中重复时,建议显式传入
provider。
Embedding / Rerank 类别约束
- Embedding 模型必须属于
text_embeddings类别。 - Rerank 模型必须属于
rerank_models类别。 - 若误将
qwen3-rerank配置到[embedding].model,启动或首次加载时会抛出明确错误。
推荐配置模板
在线(DashScope)
[embedding]
backend_type = "api"
provider = "dashscope"
model = "text-embedding-v4"
dim = 1536
offline_mode = false
model_dir = "resources/models"
[rerank]
enabled = true
provider = "dashscope"
model = "qwen3-rerank"
top_k = 20
离线(SentenceTransformers)
[embedding]
backend_type = "local"
provider = "sentence_transformers"
model = "sentence-transformers/all-MiniLM-L6-v2"
dim = 384
offline_mode = true
model_dir = "resources/models"
[rerank]
enabled = false
Qdrant 安全迁移配置
为避免 embedding 维度切换时覆盖旧向量,建议开启指纹集合命名:
[qdrant]
collection_name = "document_vectors"
use_embedding_fingerprint_collection = true
dual_read_enabled = false
read_fallback_collection_names = []
切换阶段可启用灰度双读:
[qdrant]
dual_read_enabled = true
read_fallback_collection_names = [
"document_vectors__sentence-transformers-all-minilm-l6-v2__384"
]
当 [embedding] 中出现未知字段时,系统会输出 warning(包含 section 与字段名),避免静默失效。
如需自定义模型清单,可通过 config_path 参数覆盖默认路径。
日志与数据库
- 日志输出:控制台 +
logs/app.log。 - 数据库:通过
config.toml或DATABASE_URL配置 PostgreSQL 连接;未配置时默认连接本地 PostgreSQL。
如需覆盖连接,请在 .env 中设置 DATABASE_URL 或调整 config.toml 与 LOG_LEVEL 等配置项。