跳转到主要内容

配置概览

Mirobody Health 使用基于 YAML 的配置文件来管理所有系统设置。本指南涵盖了所有配置选项以及如何正确设置它们。
配置更改需要重启应用程序才能生效。

配置文件结构

Mirobody Health 使用环境特定的配置文件:
  1. .env - 指定要使用的配置环境
  2. config.[env].yaml - 您特定环境的配置
  3. config.yaml - 基础配置(不可变,请勿编辑)

设置步骤

1

创建 .env 文件

echo "ENV=localdb" > .env
ENV 变量决定加载哪个配置文件:
  • ENV=localdb → 加载 config.localdb.yaml
  • ENV=production → 加载 config.production.yaml
  • ENV=staging → 加载 config.staging.yaml
2

创建您的配置文件

创建 config.localdb.yaml(或与您的 ENV 值匹配):
touch config.localdb.yaml
3

配置基本设置

添加至少一个 LLM API 密钥并配置 Agent:
config.localdb.yaml
# ============ 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 提供商,推荐用于复杂任务:
config.localdb.yaml
# 用于 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 针对轻量级操作进行了优化:
config.localdb.yaml
# 用于 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

1

注册为 Garmin 开发者

  1. 访问 Garmin Connect 开发者门户
  2. 使用您的 Garmin 账号登录
  3. 导航至 “Applications” 并创建一个新应用
  4. 填写应用详情并提交审核
Garmin 的审核过程可能需要几个工作日。
2

获取 OAuth 凭据

审核通过后,您将获得:
  • Consumer Key (Client ID)
  • Consumer Secret (Client Secret)
3

配置回调 URL

在 Garmin 开发者门户中设置您的回调 URL:
http://您的域名.com/api/v1/pulse/theta/theta_garmin/callback
对于本地开发:
http://localhost:18080/api/v1/pulse/theta/theta_garmin/callback
4

添加到您的配置文件

config.localdb.yaml
# 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

1

注册为 Whoop 开发者

  1. 访问 Whoop 开发者门户
  2. 创建开发者账号
  3. 创建一个新应用
  4. 设置所需的权限范围 (Scopes):
    • offline (用于刷新令牌)
    • read:recovery
    • read:sleep
    • read:cycles
    • read:profile
    • read:workout
    • read:body_measurement
2

获取 OAuth2 凭据

您将获得:
  • Client ID
  • Client Secret
3

配置重定向 URI

在 Whoop 开发者门户中设置您的重定向 URI:
http://您的域名.com/api/v1/pulse/theta/theta_whoop/callback
对于本地开发:
http://localhost:18080/api/v1/pulse/theta/theta_whoop/callback
4

添加到您的配置文件

config.localdb.yaml
# 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

config.yaml
# OpenAI 配置
OPENAI_API_KEY: 'sk-...'
OPENAI_API_KEY_RTC: 'sk-...'  # 用于实时 API (可选)
1

获取 API 密钥

  1. OpenAI 平台 注册
  2. 导航至 API Keys 部分
  3. 创建新的 API 密钥

Google AI (Gemini)

config.yaml
# Google AI 配置
GOOGLE_API_KEY: 'AIza...'
1

获取 API 密钥

  1. 访问 Google AI Studio
  2. 创建新的 API 密钥

OpenRouter

config.yaml
# OPENROUTER 配置
OPENROUTER_API_KEY: 'sk-or-...'  # 用于 AI 聊天和 Agent
1

获取 OpenRouter API 密钥

  1. OpenRouter 注册
  2. 导航至 Keys 部分
  3. 创建新的 API 密钥

Anthropic (Claude)

config.yaml
# Anthropic 配置
ANTHROPIC_API_KEY: 'sk-ant-...'
1

获取 API 密钥

  1. Anthropic Console 注册
  2. 导航至 API Keys
  3. 创建新的 API 密钥

数据库配置

PostgreSQL

config.yaml
# 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

config.yaml
# 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 服务器设置

config.yaml
# 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

config.yaml
# 公开 URL (根据您的域名调整)
MCP_FRONTEND_URL: 'http://localhost:18080'
MCP_PUBLIC_URL: 'http://localhost:18080'
DATA_PUBLIC_URL: 'http://localhost:18080'
QR_LOGIN_URL: ''                 # 可选的二维码登录 URL

安全配置

JWT 和加密

config.yaml
# 安全密钥
DATABASE_DECRYPTION_KEY: 'REPLACE_THIS_VALUE_IN_PRODUCTION'  # 至少 32 个字符
JWT_KEY: 'myjwtkey'                                 # 强密钥
JWT_PRIVATE_KEY: ''                                 # 可选的 RSA 私钥
重要安全实践:
  1. 使用强且随机生成的密钥
  2. 绝不将生产环境密钥提交到版本控制系统
  3. 定期更换密钥
  4. 为敏感值使用环境变量

生成安全密钥

# 生成随机 32 字符密钥
openssl rand -hex 32

# 生成 RSA 密钥对
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem

身份验证提供商

config.yaml
GOOGLE_CLIENT_ID: '您的_client_id.apps.googleusercontent.com'
FIREBASE_PROJECT_ID: '您的_project_id'
Google Cloud Console 获取凭据。

日志配置

config.yaml
# 日志配置
LOG_NAME: ''                     # 留空使用默认值
LOG_DIR: ''                      # 留空输出到标准输出 (stdout)
LOG_LEVEL: 'INFO'                # DEBUG, INFO, WARNING, ERROR, CRITICAL
级别描述使用场景
DEBUG详细信息开发、调试
INFO一般信息生产环境监控
WARNING警告信息生产环境警报
ERROR错误信息生产环境错误
CRITICAL严重故障系统崩溃

云存储 (可选)

配置 S3 兼容的存储用于备份和资产:
config.yaml
# 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 协议配置

config.yaml
# 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'              # 您的自定义提供商

电子邮件配置 (可选)

用于发送电子邮件通知和代码:
config.yaml
# 电子邮件配置
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 (网络搜索)

config.yaml
SERPER_API_KEY: ''               # 来自 serper.dev

E2B (代码执行)

config.yaml
E2B_API_KEY: ''                  # 来自 e2b.dev

FAL (AI 生成)

config.yaml
FAL_KEY: ''                      # 来自 fal.ai

OAuth 行为配置

config.yaml
# OAuth 临时状态 TTL (秒)
OAUTH_TEMP_TTL_SECONDS: 900      # 15 分钟

# 提供商特定设置
WHOOP_MAX_DETAIL_RECORDS: 50     # 获取详情的最大记录数
WHOOP_CONCURRENT_REQUESTS: 5     # 并发 API 请求数
WHOOP_REQUEST_TIMEOUT: 30        # 请求超时时间 (秒)

工具管理

config.yaml
# 允许/禁用的 MCP 工具
ALLOWED_TOOLS_SYNERGY:
  - tool_name_1
  - tool_name_2

DISALLOWED_TOOLS_SYNERGY:
  - dangerous_tool
默认情况下,将这些数组留空允许所有工具。

环境特定配置

config.yaml
# 开发环境设置
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: '*'

配置校验

更新 config.yaml 后,校验您的配置:
1

检查语法

python -c "import yaml; yaml.safe_load(open('config.yaml'))"
如果没有输出,表示 YAML 语法有效。
2

测试数据库连接

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())
"
3

测试 Redis 连接

docker-compose exec redis redis-cli ping
应该返回 PONG

配置最佳实践

对于敏感值,请使用环境变数:
config.yaml
OPENAI_API_KEY: ${OPENAI_API_KEY}
PG_PASSWORD: ${POSTGRES_PASSWORD}
然后在 .env 中设置:
.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 缓存设置
  • 监控并调整并发请求限制

下一步