配置概览
Mirobody Health 使用基于 YAML 的配置文件来管理所有系统设置。本指南涵盖了所有配置选项以及如何正确设置它们。
配置文件结构
Mirobody Health 使用环境特定的配置文件:
.env - 指定要使用的配置环境
config.[env].yaml - 您特定环境的配置
config.yaml - 基础配置(不可变,请勿编辑)
设置步骤
创建 .env 文件
echo "ENV=localdb" > .env
ENV 变量决定加载哪个配置文件:
ENV=localdb → 加载 config.localdb.yaml
ENV=production → 加载 config.production.yaml
ENV=staging → 加载 config.staging.yaml
创建您的配置文件
创建 config.localdb.yaml(或与您的 ENV 值匹配):touch config.localdb.yaml
配置基本设置
添加至少一个 LLM API 密钥并配置 Agent:# ============ LLM API 密钥 (至少需要一个) ============
GOOGLE_API_KEY: '' # 用于 Gemini 模型
OPENAI_API_KEY: '' # 用于 GPT 模型
OPENROUTER_API_KEY: '' # 用于 Claude, DeepSeek 等模型
# ============ Agent 配置 ============
MCP_TOOL_DIRS:
- mirobody/pub/tools
- mirobody/pub/tools_health
MCP_RESOURCE_DIRS:
- mirobody/pub/resources
AGENT_DIRS:
- mirobody/pub/agents
请勿编辑 config.yaml - 这是基础配置文件,应保持不变。所有自定义设置都应放在您的环境特定文件中(例如 config.localdb.yaml)。
Agent 配置
Mirobody Health 包含两种 Agent 类型:DeepAgent(基于 LangChain)和 BaselineAgent(原生 Gemini/MiroThinker)。
DeepAgent 配置
DeepAgent 支持多个 LLM 提供商,推荐用于复杂任务:
# 用于 DeepAgent 的 API 密钥
GOOGLE_API_KEY: '您的_google_api_key' # 用于 Gemini 模型
OPENAI_API_KEY: '您的_openai_api_key' # 用于 GPT 模型
OPENROUTER_API_KEY: '您的_openrouter_key' # 用于 Claude, DeepSeek 等模型
# 用于 DeepAgent 的提供商配置
PROVIDERS_DEEP:
gemini-3-flash:
llm_type: google-genai
api_key: GOOGLE_API_KEY
model: gemini-3-flash-preview
temperature: 1.0
gpt-5.1:
llm_type: openai
api_key: OPENAI_API_KEY
base_url: https://api.openai.com/v1/
model: gpt-5.1
temperature: 0.1
claude-sonnet:
llm_type: openai
api_key: OPENROUTER_API_KEY
base_url: https://openrouter.ai/api/v1
model: anthropic/claude-sonnet-4.5
temperature: 0.1
# 可选:自定义提示词
PROMPTS_DEEP:
- mirobody/pub/agents/deep/prompts/theta_health.jinja
# 可选:工具过滤
ALLOWED_TOOLS_DEEP: [] # 留空允许所有工具
DISALLOWED_TOOLS_DEEP: [] # 指定要禁用的工具
BaselineAgent 配置
BaselineAgent 针对轻量级操作进行了优化:
# 用于 BaselineAgent 的 API 密钥
GOOGLE_API_KEY: '您的_google_api_key' # 用于 Gemini 模型
MIROTHINKER_API_KEY: '您的_mirothinker_key' # 用于 MiroThinker
# 用于 BaselineAgent 的提供商配置
PROVIDERS_BASELINE:
gemini-3-flash:
api_key: GOOGLE_API_KEY
model: gemini-3-flash-preview
gemini-2.5-flash:
api_key: GOOGLE_API_KEY
model: gemini-2.5-flash
miro-thinker:
api_key: MIROTHINKER_API_KEY
model: miro-thinker
有关 Agent 能力的详细比较,请参阅 工具概览。
OAuth 提供商配置
要集成健康设备提供商,您需要从各提供商的开发者门户获取 OAuth 凭据。
Garmin Connect
获取 OAuth 凭据
审核通过后,您将获得:
- Consumer Key (Client ID)
- Consumer Secret (Client Secret)
配置回调 URL
在 Garmin 开发者门户中设置您的回调 URL:http://您的域名.com/api/v1/pulse/theta/theta_garmin/callback
对于本地开发:http://localhost:18080/api/v1/pulse/theta/theta_garmin/callback
添加到您的配置文件
# Garmin OAuth1 配置
GARMIN_CLIENT_ID: '您的_consumer_key'
GARMIN_CLIENT_SECRET: '您的_consumer_secret'
GARMIN_REDIRECT_URI: 'http://localhost:18080/api/v1/pulse/theta/theta_garmin/callback'
# API 端点 (通常无需更改)
GARMIN_AUTH_URL: 'https://connect.garmin.com/oauthConfirm/'
GARMIN_TOKEN_URL: 'https://connectapi.garmin.com/oauth-service/oauth/request_token'
GARMIN_ACCESS_TOKEN_URL: 'https://connectapi.garmin.com/oauth-service/oauth/access_token'
GARMIN_API_BASE_URL: 'https://apis.garmin.com/wellness-api/rest'
Whoop
注册为 Whoop 开发者
- 访问 Whoop 开发者门户
- 创建开发者账号
- 创建一个新应用
- 设置所需的权限范围 (Scopes):
offline (用于刷新令牌)
read:recovery
read:sleep
read:cycles
read:profile
read:workout
read:body_measurement
配置重定向 URI
在 Whoop 开发者门户中设置您的重定向 URI:http://您的域名.com/api/v1/pulse/theta/theta_whoop/callback
对于本地开发:http://localhost:18080/api/v1/pulse/theta/theta_whoop/callback
添加到您的配置文件
# Whoop OAuth2 配置
WHOOP_CLIENT_ID: '您的_client_id'
WHOOP_CLIENT_SECRET: '您的_client_secret'
WHOOP_REDIRECT_URI: 'http://localhost:18080/api/v1/pulse/theta/theta_whoop/callback'
# 权限范围 (以空格分隔)
WHOOP_SCOPES: 'offline read:recovery read:sleep read:cycles read:profile read:workout read:body_measurement'
# API 端点 (通常无需更改)
WHOOP_AUTH_URL: 'https://api.prod.whoop.com/oauth/oauth2/auth'
WHOOP_TOKEN_URL: 'https://api.prod.whoop.com/oauth/oauth2/token'
WHOOP_API_BASE_URL: 'https://api.prod.whoop.com/developer/v2'
将客户端 ID 和密钥留空 ('') 即可禁用该提供商。系统将自动跳过已禁用的提供商。
AI 提供商配置
Mirobody Health 支持多个 AI 提供商以实现聊天功能。
OpenAI
# OpenAI 配置
OPENAI_API_KEY: 'sk-...'
OPENAI_API_KEY_RTC: 'sk-...' # 用于实时 API (可选)
Google AI (Gemini)
# Google AI 配置
GOOGLE_API_KEY: 'AIza...'
OpenRouter
# OPENROUTER 配置
OPENROUTER_API_KEY: 'sk-or-...' # 用于 AI 聊天和 Agent
Anthropic (Claude)
# Anthropic 配置
ANTHROPIC_API_KEY: 'sk-ant-...'
数据库配置
PostgreSQL
# PostgreSQL 配置
PG_HOST: 'db' # 非 Docker 设置使用 'localhost'
PG_PORT: 5432
PG_USER: 'holistic_user'
PG_DBNAME: 'holistic_db'
PG_PASSWORD: 'REPLACE_THIS_VALUE_IN_PRODUCTION' # 在生产环境中更改!
PG_SCHEMA: 'theta_ai'
PG_MIN_CONNECTION: 5
PG_MAX_CONNECTION: 20
PG_ENCRYPTION_KEY: 'REPLACE_THIS_VALUE_IN_PRODUCTION' # 在生产环境中更改!
对于生产环境,请始终使用强且唯一的密码和加密密钥。
Redis
# Redis 配置
REDIS_HOST: 'redis' # 非 Docker 设置使用 'localhost'
REDIS_PORT: 6379
REDIS_DB: 0
REDIS_PASSWORD: 'your_secure_password_here' # 在生产环境中更改!
REDIS_SSL: false
REDIS_SSL_CHECK_HOSTNAME: false
REDIS_SSL_CERT_REQS: 'none'
服务器配置
HTTP 服务器设置
# HTTP 服务器配置
HTTP_SERVER_NAME: 'mirobody'
HTTP_SERVER_VERSION: '1.0.1'
HTTP_HOST: '0.0.0.0' # 监听所有接口
HTTP_PORT: 18080 # 如果端口被占用请更改
HTTP_URI_PREFIX: '' # 可选的 URL 前缀
# CORS 配置
HTTP_HEADERS:
Access-Control-Allow-Origin: '*'
Access-Control-Allow-Credentials: 'true'
Access-Control-Allow-Methods: '*'
Access-Control-Allow-Headers: '*'
Access-Control-Max-Age: '86400'
对于生产环境,请将 Access-Control-Allow-Origin 限制为特定域名,而不是使用 '*'。
公开 URL
# 公开 URL (根据您的域名调整)
MCP_FRONTEND_URL: 'http://localhost:18080'
MCP_PUBLIC_URL: 'http://localhost:18080'
DATA_PUBLIC_URL: 'http://localhost:18080'
QR_LOGIN_URL: '' # 可选的二维码登录 URL
安全配置
JWT 和加密
# 安全密钥
DATABASE_DECRYPTION_KEY: 'REPLACE_THIS_VALUE_IN_PRODUCTION' # 至少 32 个字符
JWT_KEY: 'myjwtkey' # 强密钥
JWT_PRIVATE_KEY: '' # 可选的 RSA 私钥
重要安全实践:
- 使用强且随机生成的密钥
- 绝不将生产环境密钥提交到版本控制系统
- 定期更换密钥
- 为敏感值使用环境变量
生成安全密钥
# 生成随机 32 字符密钥
openssl rand -hex 32
# 生成 RSA 密钥对
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem
身份验证提供商
GOOGLE_CLIENT_ID: '您的_client_id.apps.googleusercontent.com'
FIREBASE_PROJECT_ID: '您的_project_id'
从 Google Cloud Console 获取凭据。APPLE_TEAM_ID: '您的_team_id'
APPLE_KEY_ID: '您的_key_id'
APPLE_PRIVATE_KEY: '您的_private_key'
APPLE_CLIENT_ID: 'com.yourapp.service'
APPLE_AUTH_CLIENT_ID: 'com.yourapp.client'
从 Apple 开发者门户 获取凭据。
日志配置
# 日志配置
LOG_NAME: '' # 留空使用默认值
LOG_DIR: '' # 留空输出到标准输出 (stdout)
LOG_LEVEL: 'INFO' # DEBUG, INFO, WARNING, ERROR, CRITICAL
| 级别 | 描述 | 使用场景 |
|---|
| DEBUG | 详细信息 | 开发、调试 |
| INFO | 一般信息 | 生产环境监控 |
| WARNING | 警告信息 | 生产环境警报 |
| ERROR | 错误信息 | 生产环境错误 |
| CRITICAL | 严重故障 | 系统崩溃 |
用于开发:LOG_LEVEL: 'DEBUG'
LOG_DIR: './logs'
用于生产:LOG_LEVEL: 'INFO'
LOG_DIR: '/var/log/mirobody'
云存储 (可选)
配置 S3 兼容的存储用于备份和资产:
# S3 配置
S3_KEY: '您的_access_key'
S3_TOKEN: '您的_secret_key'
S3_REGION: 'us-east-1'
S3_BUCKET: '您的_bucket_name'
S3_PREFIX: 'mirobody/'
S3_CDN: 'https://cdn.您的域名.com'
S3 配置是可选的。系统在没有云存储的情况下也可以运行。
MCP 协议配置
# MCP 工具和资源目录
MCP_TOOL_DIRS:
- 'mirobody/pub/tools'
- 'tools' # 可选的自定义工具目录
MCP_RESOURCE_DIRS:
- 'mirobody/pub/resources'
# Agent 目录
AGENT_DIRS:
- 'mirobody/pub/agents'
# 提供商目录
THETA_PROVIDER_DIRS:
- 'connect/theta' # 您的自定义提供商
电子邮件配置 (可选)
用于发送电子邮件通知和代码:
# 电子邮件配置
EMAIL_FROM: 'noreply@您的域名.com'
EMAIL_FROM_NAME: 'Mirobody Health'
EMAIL_TEMPLATE: '' # 电子邮件模板路径
EMAIL_SMTP_PASS: '您的_smtp_password'
# 预定义的验证码 (仅限开发)
EMAIL_PREDEFINE_CODES:
demo1@mirobody.ai: '777777'
其他 API 服务
Serper (网络搜索)
SERPER_API_KEY: '' # 来自 serper.dev
E2B (代码执行)
E2B_API_KEY: '' # 来自 e2b.dev
FAL (AI 生成)
OAuth 行为配置
# OAuth 临时状态 TTL (秒)
OAUTH_TEMP_TTL_SECONDS: 900 # 15 分钟
# 提供商特定设置
WHOOP_MAX_DETAIL_RECORDS: 50 # 获取详情的最大记录数
WHOOP_CONCURRENT_REQUESTS: 5 # 并发 API 请求数
WHOOP_REQUEST_TIMEOUT: 30 # 请求超时时间 (秒)
工具管理
# 允许/禁用的 MCP 工具
ALLOWED_TOOLS_SYNERGY:
- tool_name_1
- tool_name_2
DISALLOWED_TOOLS_SYNERGY:
- dangerous_tool
环境特定配置
# 开发环境设置
LOG_LEVEL: 'DEBUG'
HTTP_HOST: '0.0.0.0'
HTTP_PORT: 18080
# 使用本地服务
PG_HOST: 'localhost'
REDIS_HOST: 'localhost'
# 宽松的 CORS
HTTP_HEADERS:
Access-Control-Allow-Origin: '*'
# 生产环境设置
LOG_LEVEL: 'INFO'
HTTP_HOST: '0.0.0.0'
HTTP_PORT: 443
# 使用生产环境服务
PG_HOST: '您的-db-host.rds.amazonaws.com'
REDIS_HOST: '您的-redis.cache.amazonaws.com'
# 严格的 CORS
HTTP_HEADERS:
Access-Control-Allow-Origin: 'https://您的域名.com'
# 强安全性
DATABASE_DECRYPTION_KEY: '[生成的安全密钥]'
JWT_KEY: '[生成的安全密钥]'
REDIS_PASSWORD: '[强密码]'
PG_PASSWORD: '[强密码]'
# SSL/TLS
REDIS_SSL: true
配置校验
更新 config.yaml 后,校验您的配置:
检查语法
python -c "import yaml; yaml.safe_load(open('config.yaml'))"
如果没有输出,表示 YAML 语法有效。测试数据库连接
docker-compose exec backend python -c "
from mirobody.utils.config import global_config
import asyncio
async def test():
cfg = global_config()
db = await cfg.get_db()
print('数据库连接: OK')
asyncio.run(test())
"
测试 Redis 连接
docker-compose exec redis redis-cli ping
应该返回 PONG。
配置最佳实践
对于敏感值,请使用环境变数:OPENAI_API_KEY: ${OPENAI_API_KEY}
PG_PASSWORD: ${POSTGRES_PASSWORD}
然后在 .env 中设置:OPENAI_API_KEY=sk-...
POSTGRES_PASSWORD=secure_password
- ✅ 提交
config.example.yaml
- ❌ 绝不提交带有真实凭据的
config.yaml
- ✅ 将
config.yaml 添加到 .gitignore
- ✅ 记录所有必需的配置键
- 使用强且随机生成的密钥
- 定期更换凭据
- 在生产环境中限制 CORS 来源
- 为外部连接启用 SSL/TLS
- 使用机密管理工具 (AWS Secrets Manager, HashiCorp Vault 等)
- 根据负载调整数据库连接池大小
- 配置合适的超时时间
- 调优 Redis 缓存设置
- 监控并调整并发请求限制
下一步