跳到主要内容

配置项

配置机制

Evatar 使用 pydantic-settings 管理配置,所有环境变量以 EVATAR_ 为前缀。配置优先级:

  1. 环境变量 EVATAR_*
  2. .env 文件
  3. 代码中的默认值
# config.py
class Settings(BaseSettings):
host: str = "0.0.0.0"
port: int = 8421
# ...

class Config:
env_prefix = "EVATAR_" # 所有字段自动加 EVATAR_ 前缀

settings = Settings() # 全局单例

环境变量完整参考

服务器

环境变量默认值说明
EVATAR_HOST0.0.0.0监听地址
EVATAR_PORT8421监听端口
EVATAR_DEV_MODEfalse开发模式(跳过认证,允许 HTTP)
EVATAR_CORS_ORIGINS""CORS 允许的源(逗号分隔,空则使用默认 localhost)

认证

环境变量默认值说明
EVATAR_API_KEY""API 认证密钥。为空且非 dev_mode 时所有端点公开访问

存储

环境变量默认值说明
EVATAR_DATA_DIR./data数据目录
EVATAR_PHOTOS_DIR./data/photos照片存储目录
EVATAR_DB_PATH./data/evatar.dbSQLite 数据库路径
EVATAR_MAX_UPLOAD_BYTES52428800 (50MB)单文件上传大小限制

LLM 配置

环境变量默认值说明
EVATAR_LLM_BASE_URL""LLM API 地址
EVATAR_LLM_API_KEY""LLM API Key(必填,否则 AI 功能不可用)
EVATAR_LLM_MODELmimo-v2.5模型名称
EVATAR_LLM_MAX_TOKENS4096最大生成 token 数
EVATAR_LLM_TEMPERATURE0.1生成温度

Agent

环境变量默认值说明
EVATAR_AGENT_MAX_ROUNDS3Agent 工具调用最大轮数
EVATAR_AGENT_HISTORY_LIMIT20加载的历史消息条数

网络搜索

环境变量默认值说明
EVATAR_TAVILY_API_KEY""Tavily 搜索 API Key(优先使用)
EVATAR_BRAVE_API_KEY""Brave Search API Key(备选)

加密

环境变量默认值说明
EVATAR_ENCRYPTION_KEY""Fernet 加密密钥。为空时自动生成并存储到 data/.encryption_key

数据保留

环境变量默认值说明
EVATAR_RETENTION_DAYS30数据保留天数,超期数据自动清理

推送通知

环境变量默认值说明
EVATAR_FCM_PROJECT_ID""Firebase 项目 ID
EVATAR_FCM_CREDENTIALS_JSON""FCM 服务账号 JSON(文件路径或内联 JSON)
EVATAR_PUSH_WEBHOOK_URL""推送 Webhook URL(FCM 未配置时的回退方案)

通过 Web UI 配置

LLM 配置

LLM 配置存储在数据库的 llm_config 表中(单行,id=1),可通过 Web 设置页面实时修改,无需重启服务。

配置优先级: 数据库配置 > 环境变量

数据库中的 LLM 配置有 60 秒缓存,修改后通过 invalidate_llm_config_cache() 立即生效。

预设方案

系统内置 7 种 LLM 预设方案,一键切换:

预设 ID服务商模型上下文窗口
mimo小米 MiMomimo-v2.51M tokens
qwen通义千问qwen-vl-max128K tokens
openaiOpenAIgpt-4o128K tokens
claudeAnthropicclaude-sonnet-4-20250514200K tokens
glm智谱 GLMglm-4v128K tokens
kimi月之暗面moonshot-v1-128k-vision-preview128K tokens
deepseekDeepSeekdeepseek-chat64K tokens

MCP 服务器

通过 POST /api/mcp-servers 添加外部 MCP 服务器,URL 需通过 SSRF 防护验证(仅允许 HTTPS,禁止私有地址)。

SSRF 防护

base_url 和 MCP 服务器 URL 配置包含多层 SSRF 防护:

def _validate_base_url(url: str):
# 1. 必须使用 https://(开发模式允许 http://localhost)
# 2. 正则检查私有 IPv4 地址(10.x, 192.168.x, 172.16-31.x)
# 3. 检查 IPv6 私有前缀(::1, fe80:, fc00:, fd)
# 4. ipaddress 模块检查 is_private/is_loopback/is_link_local
# 5. DNS rebinding 防护:解析域名后验证所有 IP

安全注意事项

项目现状建议
API Key 存储明文生产环境使用 EVATAR_API_KEY 环境变量
LLM API KeyDB 明文API 响应中不返回,仅返回 api_key_set 标志
加密密钥自动生成或环境变量生产环境务必设置 EVATAR_ENCRYPTION_KEY
CORS默认允许 localhost:3000/5173/8421生产环境通过 EVATAR_CORS_ORIGINS 限制
速率限制聊天/动态 10次/分钟/IP可根据需要调整
认证比较hmac.compare_digest 防时序攻击-

最小启动配置

# 最简启动(开发模式)
EVATAR_DEV_MODE=true python main.py

# 生产模式最小配置
EVATAR_API_KEY=your-secret-key \
EVATAR_LLM_API_KEY=your-llm-key \
python main.py

# 完整配置
EVATAR_API_KEY=your-secret-key \
EVATAR_LLM_API_KEY=your-llm-key \
EVATAR_LLM_BASE_URL=https://api.openai.com/v1 \
EVATAR_LLM_MODEL=gpt-4o \
EVATAR_TAVILY_API_KEY=tvly-xxx \
EVATAR_ENCRYPTION_KEY=$(python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())") \
EVATAR_RETENTION_DAYS=60 \
python main.py