{"repo": "c-jcbest/agent", "files": {".env.example": {"dc8f9f6a3562bac2b5a062cbbdb92b45c10cc0fa": {"t": 1785746754.6372435, "n": 6395, "h": "5b4ed70007dc1e9a", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=0.2.0\nDEBUG=False\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"http://127.0.0.1:5174\",\"http://localhost:5174\",\"http://127.0.0.1:5176\",\"http://localhost:5176\",\"http://127.0.0.1:8080\",\"http://localhost:8080\"]\n\n# Docker Compose 生产部署变量。\n# AGENT_DATA_ROOT 必须改成服务器数据盘上的专用目录;Compose 会把 PostgreSQL 数据、\n# 后端日志、上传文件和 runtime debug 绑定到该目录下,避免默认落到系统盘 Docker data root。\n# 示例:/data/agent、/mnt/data/agent。Windows 本地 Docker 试跑可使用 C:/agent-data。\nAGENT_DATA_ROOT=/data/agent\nWEB_PORT=8080\nPOSTGRES_SUPERUSER=postgres\nPOSTGRES_SUPERUSER_PASSWORD=\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=\nAGENT_BUSINESS_DB=agent_demo\nAGENT_RUNTIME_DB=agent_runtime\n# 镜像构建依赖源。国内服务器建议保留默认值;内网或海外环境可替换为企业源/官方源。\nDEBIAN_MIRROR=https://mirrors.aliyun.com/debian\nPIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple\nNPM_REGISTRY=https://registry.npmmirror.com\nPNPM_VERSION=9.15.9\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\n# Docker Compose 部署时该容器内目录会绑定到 ${AGENT_DATA_ROOT}/backend/uploads。\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n# runtime long-term memory store 默认使用业务主库 DATABASE_URL。\n# 生产环境建议保持 postgres;严格模式开启后,store 初始化失败会阻止服务启动。\nAGENT_STORE_BACKEND=postgres\nAGENT_STORE_AUTO_SETUP=true\nAGENT_STORE_STRICT_STARTUP=false\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\n# Docker Compose 部署时该容器内目录会绑定到 ${AGENT_DATA_ROOT}/backend/logs。\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_CUSUM_DRIFT=true\nGNSS_ANOMALY_CUSUM_DRIFT_WINDOW=8\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_TOTAL_MM=8.0\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_SLOPE_MM_PER_POINT=0.5\nGNSS_ANOMALY_CUSUM_DRIFT_SCORE_THRESHOLD=1.5\nGNSS_ANOMALY_USE_ROLLING_NOISE_BURST=true\nGNSS_ANOMALY_ROLLING_NOISE_WINDOW=7\nGNSS_ANOMALY_ROLLING_NOISE_RATIO=4.0\nGNSS_ANOMALY_ROLLING_NOISE_MIN_MAD_MM=2.0\nGNSS_ANOMALY_USE_DATA_GAP_EVENTS=true\nGNSS_ANOMALY_DATA_GAP_MIN_MULTIPLIER=1.5\nGNSS_ANOMALY_DATA_GAP_MIN_MINUTES=0.0\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 本地非 Docker 开发时该目录已在 .gitignore 中忽略;Docker Compose 部署时会绑定到\n# ${AGENT_DATA_ROOT}/backend/runtime-debug/gnss-anomaly。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n\n# 邮件订阅调度与 SMTP。\n# 默认启动应用内调度器,但 SMTP 发送关闭;关闭 SMTP 时订阅 run 会记录为成功且 email_status=skipped。\nEMAIL_SUBSCRIPTION_SCHEDULER_ENABLED=true\nEMAIL_SUBSCRIPTION_SCHEDULER_INTERVAL_SECONDS=60\nEMAIL_SUBSCRIPTION_SCHEDULER_BATCH_SIZE=10\nEMAIL_SMTP_ENABLED=false\nEMAIL_SMTP_HOST=\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=\nEMAIL_SMTP_PASSWORD=\nEMAIL_SMTP_FROM_EMAIL=\nEMAIL_SMTP_FROM_NAME=智能监测助手\nEMAIL_SMTP_USE_TLS=true\nEMAIL_SMTP_USE_SSL=false\nEMAIL_SMTP_TIMEOUT_SECONDS=20\n"}, "6cdbd65197ed9cf8b91cc8bfec571787bdf06189": {"t": 1785767473.9553862, "n": 6395, "h": "5b4ed70007dc1e9a", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=0.2.0\nDEBUG=False\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"http://127.0.0.1:5174\",\"http://localhost:5174\",\"http://127.0.0.1:5176\",\"http://localhost:5176\",\"http://127.0.0.1:8080\",\"http://localhost:8080\"]\n\n# Docker Compose 生产部署变量。\n# AGENT_DATA_ROOT 必须改成服务器数据盘上的专用目录;Compose 会把 PostgreSQL 数据、\n# 后端日志、上传文件和 runtime debug 绑定到该目录下,避免默认落到系统盘 Docker data root。\n# 示例:/data/agent、/mnt/data/agent。Windows 本地 Docker 试跑可使用 C:/agent-data。\nAGENT_DATA_ROOT=/data/agent\nWEB_PORT=8080\nPOSTGRES_SUPERUSER=postgres\nPOSTGRES_SUPERUSER_PASSWORD=\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=\nAGENT_BUSINESS_DB=agent_demo\nAGENT_RUNTIME_DB=agent_runtime\n# 镜像构建依赖源。国内服务器建议保留默认值;内网或海外环境可替换为企业源/官方源。\nDEBIAN_MIRROR=https://mirrors.aliyun.com/debian\nPIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple\nNPM_REGISTRY=https://registry.npmmirror.com\nPNPM_VERSION=9.15.9\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\n# Docker Compose 部署时该容器内目录会绑定到 ${AGENT_DATA_ROOT}/backend/uploads。\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n# runtime long-term memory store 默认使用业务主库 DATABASE_URL。\n# 生产环境建议保持 postgres;严格模式开启后,store 初始化失败会阻止服务启动。\nAGENT_STORE_BACKEND=postgres\nAGENT_STORE_AUTO_SETUP=true\nAGENT_STORE_STRICT_STARTUP=false\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\n# Docker Compose 部署时该容器内目录会绑定到 ${AGENT_DATA_ROOT}/backend/logs。\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_CUSUM_DRIFT=true\nGNSS_ANOMALY_CUSUM_DRIFT_WINDOW=8\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_TOTAL_MM=8.0\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_SLOPE_MM_PER_POINT=0.5\nGNSS_ANOMALY_CUSUM_DRIFT_SCORE_THRESHOLD=1.5\nGNSS_ANOMALY_USE_ROLLING_NOISE_BURST=true\nGNSS_ANOMALY_ROLLING_NOISE_WINDOW=7\nGNSS_ANOMALY_ROLLING_NOISE_RATIO=4.0\nGNSS_ANOMALY_ROLLING_NOISE_MIN_MAD_MM=2.0\nGNSS_ANOMALY_USE_DATA_GAP_EVENTS=true\nGNSS_ANOMALY_DATA_GAP_MIN_MULTIPLIER=1.5\nGNSS_ANOMALY_DATA_GAP_MIN_MINUTES=0.0\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 本地非 Docker 开发时该目录已在 .gitignore 中忽略;Docker Compose 部署时会绑定到\n# ${AGENT_DATA_ROOT}/backend/runtime-debug/gnss-anomaly。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n\n# 邮件订阅调度与 SMTP。\n# 默认启动应用内调度器,但 SMTP 发送关闭;关闭 SMTP 时订阅 run 会记录为成功且 email_status=skipped。\nEMAIL_SUBSCRIPTION_SCHEDULER_ENABLED=true\nEMAIL_SUBSCRIPTION_SCHEDULER_INTERVAL_SECONDS=60\nEMAIL_SUBSCRIPTION_SCHEDULER_BATCH_SIZE=10\nEMAIL_SMTP_ENABLED=false\nEMAIL_SMTP_HOST=\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=\nEMAIL_SMTP_PASSWORD=\nEMAIL_SMTP_FROM_EMAIL=\nEMAIL_SMTP_FROM_NAME=智能监测助手\nEMAIL_SMTP_USE_TLS=true\nEMAIL_SMTP_USE_SSL=false\nEMAIL_SMTP_TIMEOUT_SECONDS=20\n"}, "faa030fc44eb434a3d7a88eccdb5f8bf4b91f99b": {"t": 1785767475.3741949, "n": 6395, "h": "629d90ce7cb588b8", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=False\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"http://127.0.0.1:5174\",\"http://localhost:5174\",\"http://127.0.0.1:5176\",\"http://localhost:5176\",\"http://127.0.0.1:8080\",\"http://localhost:8080\"]\n\n# Docker Compose 生产部署变量。\n# AGENT_DATA_ROOT 必须改成服务器数据盘上的专用目录;Compose 会把 PostgreSQL 数据、\n# 后端日志、上传文件和 runtime debug 绑定到该目录下,避免默认落到系统盘 Docker data root。\n# 示例:/data/agent、/mnt/data/agent。Windows 本地 Docker 试跑可使用 C:/agent-data。\nAGENT_DATA_ROOT=/data/agent\nWEB_PORT=8080\nPOSTGRES_SUPERUSER=postgres\nPOSTGRES_SUPERUSER_PASSWORD=\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=\nAGENT_BUSINESS_DB=agent_demo\nAGENT_RUNTIME_DB=agent_runtime\n# 镜像构建依赖源。国内服务器建议保留默认值;内网或海外环境可替换为企业源/官方源。\nDEBIAN_MIRROR=https://mirrors.aliyun.com/debian\nPIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple\nNPM_REGISTRY=https://registry.npmmirror.com\nPNPM_VERSION=9.15.9\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\n# Docker Compose 部署时该容器内目录会绑定到 ${AGENT_DATA_ROOT}/backend/uploads。\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n# runtime long-term memory store 默认使用业务主库 DATABASE_URL。\n# 生产环境建议保持 postgres;严格模式开启后,store 初始化失败会阻止服务启动。\nAGENT_STORE_BACKEND=postgres\nAGENT_STORE_AUTO_SETUP=true\nAGENT_STORE_STRICT_STARTUP=false\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\n# Docker Compose 部署时该容器内目录会绑定到 ${AGENT_DATA_ROOT}/backend/logs。\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_CUSUM_DRIFT=true\nGNSS_ANOMALY_CUSUM_DRIFT_WINDOW=8\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_TOTAL_MM=8.0\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_SLOPE_MM_PER_POINT=0.5\nGNSS_ANOMALY_CUSUM_DRIFT_SCORE_THRESHOLD=1.5\nGNSS_ANOMALY_USE_ROLLING_NOISE_BURST=true\nGNSS_ANOMALY_ROLLING_NOISE_WINDOW=7\nGNSS_ANOMALY_ROLLING_NOISE_RATIO=4.0\nGNSS_ANOMALY_ROLLING_NOISE_MIN_MAD_MM=2.0\nGNSS_ANOMALY_USE_DATA_GAP_EVENTS=true\nGNSS_ANOMALY_DATA_GAP_MIN_MULTIPLIER=1.5\nGNSS_ANOMALY_DATA_GAP_MIN_MINUTES=0.0\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 本地非 Docker 开发时该目录已在 .gitignore 中忽略;Docker Compose 部署时会绑定到\n# ${AGENT_DATA_ROOT}/backend/runtime-debug/gnss-anomaly。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n\n# 邮件订阅调度与 SMTP。\n# 默认启动应用内调度器,但 SMTP 发送关闭;关闭 SMTP 时订阅 run 会记录为成功且 email_status=skipped。\nEMAIL_SUBSCRIPTION_SCHEDULER_ENABLED=true\nEMAIL_SUBSCRIPTION_SCHEDULER_INTERVAL_SECONDS=60\nEMAIL_SUBSCRIPTION_SCHEDULER_BATCH_SIZE=10\nEMAIL_SMTP_ENABLED=false\nEMAIL_SMTP_HOST=\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=\nEMAIL_SMTP_PASSWORD=\nEMAIL_SMTP_FROM_EMAIL=\nEMAIL_SMTP_FROM_NAME=智能监测助手\nEMAIL_SMTP_USE_TLS=true\nEMAIL_SMTP_USE_SSL=false\nEMAIL_SMTP_TIMEOUT_SECONDS=20\n"}, "cc44459a0c90e62f3469defb7d73f57910e0cd7b": {"t": 1785767476.6952536, "n": 5772, "h": "3aa24076dec3c2ba", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=False\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"http://127.0.0.1:5174\",\"http://localhost:5174\",\"http://127.0.0.1:5176\",\"http://localhost:5176\",\"http://127.0.0.1:8080\",\"http://localhost:8080\"]\n\n# Docker Compose 覆盖变量(使用 Compose 部署时需填写密码/密钥占位符)。\nWEB_PORT=8080\nPOSTGRES_SUPERUSER=postgres\nPOSTGRES_SUPERUSER_PASSWORD=\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=\nAGENT_BUSINESS_DB=agent_demo\nAGENT_RUNTIME_DB=agent_runtime\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n# runtime long-term memory store 默认使用业务主库 DATABASE_URL。\n# 生产环境建议保持 postgres;严格模式开启后,store 初始化失败会阻止服务启动。\nAGENT_STORE_BACKEND=postgres\nAGENT_STORE_AUTO_SETUP=true\nAGENT_STORE_STRICT_STARTUP=false\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_CUSUM_DRIFT=true\nGNSS_ANOMALY_CUSUM_DRIFT_WINDOW=8\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_TOTAL_MM=8.0\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_SLOPE_MM_PER_POINT=0.5\nGNSS_ANOMALY_CUSUM_DRIFT_SCORE_THRESHOLD=1.5\nGNSS_ANOMALY_USE_ROLLING_NOISE_BURST=true\nGNSS_ANOMALY_ROLLING_NOISE_WINDOW=7\nGNSS_ANOMALY_ROLLING_NOISE_RATIO=4.0\nGNSS_ANOMALY_ROLLING_NOISE_MIN_MAD_MM=2.0\nGNSS_ANOMALY_USE_DATA_GAP_EVENTS=true\nGNSS_ANOMALY_DATA_GAP_MIN_MULTIPLIER=1.5\nGNSS_ANOMALY_DATA_GAP_MIN_MINUTES=0.0\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 该目录仅用于开发调试,已在 .gitignore 中忽略。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n\n# 邮件订阅调度与 SMTP。\n# 默认启动应用内调度器,但 SMTP 发送关闭;关闭 SMTP 时订阅 run 会记录为成功且 email_status=skipped。\nEMAIL_SUBSCRIPTION_SCHEDULER_ENABLED=true\nEMAIL_SUBSCRIPTION_SCHEDULER_INTERVAL_SECONDS=60\nEMAIL_SUBSCRIPTION_SCHEDULER_BATCH_SIZE=10\nEMAIL_SMTP_ENABLED=false\nEMAIL_SMTP_HOST=\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=\nEMAIL_SMTP_PASSWORD=\nEMAIL_SMTP_FROM_EMAIL=\nEMAIL_SMTP_FROM_NAME=智能监测助手\nEMAIL_SMTP_USE_TLS=true\nEMAIL_SMTP_USE_SSL=false\nEMAIL_SMTP_TIMEOUT_SECONDS=20\n"}, "6e932f2c10b41e3585b5696368634450757b23a5": {"t": 1785767478.052101, "n": 5161, "h": "669297f74db9006a", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_CUSUM_DRIFT=true\nGNSS_ANOMALY_CUSUM_DRIFT_WINDOW=8\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_TOTAL_MM=8.0\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_SLOPE_MM_PER_POINT=0.5\nGNSS_ANOMALY_CUSUM_DRIFT_SCORE_THRESHOLD=1.5\nGNSS_ANOMALY_USE_ROLLING_NOISE_BURST=true\nGNSS_ANOMALY_ROLLING_NOISE_WINDOW=7\nGNSS_ANOMALY_ROLLING_NOISE_RATIO=4.0\nGNSS_ANOMALY_ROLLING_NOISE_MIN_MAD_MM=2.0\nGNSS_ANOMALY_USE_DATA_GAP_EVENTS=true\nGNSS_ANOMALY_DATA_GAP_MIN_MULTIPLIER=1.5\nGNSS_ANOMALY_DATA_GAP_MIN_MINUTES=0.0\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 该目录仅用于开发调试,已在 .gitignore 中忽略。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n\n# 邮件订阅调度与 SMTP。\n# 默认启动应用内调度器,但 SMTP 发送关闭;关闭 SMTP 时订阅 run 会记录为成功且 email_status=skipped。\nEMAIL_SUBSCRIPTION_SCHEDULER_ENABLED=true\nEMAIL_SUBSCRIPTION_SCHEDULER_INTERVAL_SECONDS=60\nEMAIL_SUBSCRIPTION_SCHEDULER_BATCH_SIZE=10\nEMAIL_SMTP_ENABLED=true\nEMAIL_SMTP_HOST=smtp.163.com\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=caojiachenggy1@163.com\nEMAIL_SMTP_PASSWORD=TRdd972xSUtuURwc\nEMAIL_SMTP_FROM_EMAIL=caojiachenggy1@163.com\nEMAIL_SMTP_FROM_NAME=智能监测助手\nEMAIL_SMTP_USE_TLS=true\nEMAIL_SMTP_USE_SSL=false\nEMAIL_SMTP_TIMEOUT_SECONDS=20\n"}, "0f138b7fc106687330a94f712c4f5617fece8e3e": {"t": 1785767479.2677226, "n": 4634, "h": "58fe5934d2f31409", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_CUSUM_DRIFT=true\nGNSS_ANOMALY_CUSUM_DRIFT_WINDOW=8\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_TOTAL_MM=8.0\nGNSS_ANOMALY_CUSUM_DRIFT_MIN_SLOPE_MM_PER_POINT=0.5\nGNSS_ANOMALY_CUSUM_DRIFT_SCORE_THRESHOLD=1.5\nGNSS_ANOMALY_USE_ROLLING_NOISE_BURST=true\nGNSS_ANOMALY_ROLLING_NOISE_WINDOW=7\nGNSS_ANOMALY_ROLLING_NOISE_RATIO=4.0\nGNSS_ANOMALY_ROLLING_NOISE_MIN_MAD_MM=2.0\nGNSS_ANOMALY_USE_DATA_GAP_EVENTS=true\nGNSS_ANOMALY_DATA_GAP_MIN_MULTIPLIER=1.5\nGNSS_ANOMALY_DATA_GAP_MIN_MINUTES=0.0\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 该目录仅用于开发调试,已在 .gitignore 中忽略。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n"}, "41b5b4282a639b3e628aca3fcc1ce82dea60bf5b": {"t": 1785767480.6391385, "n": 4153, "h": "1d142015fc75ef8b", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=20\nGNSS_ANOMALY_MIN_EVIDENCE_SCORE=0.55\n# 事件簇去重:同类/同轴/同证据类型的邻近重复只保留局部峰值;\n# 明显不同且同为高分的事件达到最小间隔后可在同一天内共存,不再是窗口内只留一个事件。\nGNSS_ANOMALY_SUPPRESSION_WINDOW_POINTS=48\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_GAP_POINTS=3\nGNSS_ANOMALY_DISTINCT_EVENT_MIN_SCORE=0.75\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 该目录仅用于开发调试,已在 .gitignore 中忽略。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n"}, "325f71033cf09f2996c221e8c04bf1956fb16e36": {"t": 1785767481.8524206, "n": 3908, "h": "4910eacc3a6fb748", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=true\nGNSS_ANOMALY_DETECTION_MODE=assist\nGNSS_ANOMALY_DETECTION_METHOD=neu_robust_evidence_v1\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=5\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\nGNSS_ANOMALY_LOG_EVENT_LIMIT=20\n\n# 非机器学习 NEU 鲁棒异常证据检测。\nGNSS_ANOMALY_HAMPEL_SHORT_WINDOW=5\nGNSS_ANOMALY_HAMPEL_LONG_WINDOW=25\nGNSS_ANOMALY_HAMPEL_SHORT_K=3.0\nGNSS_ANOMALY_HAMPEL_LONG_K=4.0\nGNSS_ANOMALY_USE_HORIZONTAL_THREED=true\nGNSS_ANOMALY_HORIZONTAL_STEP_MM=5.0\nGNSS_ANOMALY_THREED_STEP_MM=8.0\nGNSS_ANOMALY_USE_MEDIAN_JUMP=true\nGNSS_ANOMALY_OFFSET_WINDOW=5\nGNSS_ANOMALY_OFFSET_MIN_MM=5.0\nGNSS_ANOMALY_OFFSET_PERSISTENCE_MIN=0.7\nGNSS_ANOMALY_USE_NEU_MULTIVARIATE=true\nGNSS_ANOMALY_MAHALANOBIS_THRESHOLD=11.345\nGNSS_ANOMALY_LOW_COMPLETENESS_RATIO=0.8\n\n# 真实 GNSS 样本抓取/评估本地 artifact。\n# 该目录仅用于开发调试,已在 .gitignore 中忽略。\nGNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly\nGNSS_ANOMALY_SAMPLE_STATIONS=ZJ-MS09,ZJ-MS10\nGNSS_ANOMALY_SAMPLE_MONTHS=2025-08,2025-09,2025-10,2025-11,2025-12\n"}, "2f7cecbcb874c667257d6a05f023ca064cbbdb70": {"t": 1785767483.1135452, "n": 3103, "h": "21f7e7997657aae7", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 当前仅支持 PostgreSQL runtime/checkpointer。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - 默认应保持关闭,先观察一段时间再考虑启用。\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=false\nGNSS_ANOMALY_DETECTION_MODE=shadow\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=5\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\n"}, "bf3e80d58487af0a68d92a5f16a9c1cd0fc72a82": {"t": 1785767484.3664708, "n": 3279, "h": "d7392e164510c35d", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 默认模型\nDEFAULT_MODEL=deepseek-chat\nDEFAULT_TEMPERATURE=0.7\nDEFAULT_MAX_TOKENS=2000\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 生产建议使用 PostgreSQL;SQLite 仅保留给本地开发。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\nAGENT_RUNTIME_SQLITE_ENABLED=false\nAGENT_RUNTIME_SQLITE_PATH=data/runtime/agent_runtime.sqlite3\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - 默认应保持关闭,先观察一段时间再考虑启用。\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=false\nGNSS_ANOMALY_DETECTION_MODE=shadow\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=5\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\n"}, "ba23c9a0ab75ddc2e8cfb19ee03a51752ab16e5d": {"t": 1785767485.8074448, "n": 3180, "h": "a81dfeb6a51f45f2", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://:@:5432/agent_demo\nDATABASE_POOL_SIZE=10\nDATABASE_MAX_OVERFLOW=20\nDATABASE_POOL_TIMEOUT=30\nDATABASE_POOL_RECYCLE=1800\nDB_INIT_MODE=validate\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 默认模型\nDEFAULT_MODEL=deepseek-chat\nDEFAULT_TEMPERATURE=0.7\nDEFAULT_MAX_TOKENS=2000\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 checkpointer 配置\n# 生产建议使用 PostgreSQL;SQLite 仅保留给本地开发。\nAGENT_RUNTIME_BACKEND=postgres\nAGENT_RUNTIME_POSTGRES_URL=postgresql+psycopg://:@:5432/agent_runtime\nAGENT_RUNTIME_SQLITE_ENABLED=false\nAGENT_RUNTIME_SQLITE_PATH=data/runtime/agent_runtime.sqlite3\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=exa,fetch,time-mcp\n\n# 如需启用 MCP,请显式填写对应环境变量;仓库中不再提供任何默认密钥或默认数据库凭据。\n# 如确需启用数据库类 MCP Server,请单独填写,避免误把数据库工具当作主业务主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\nMCP_EXA_KEY=\nMCP_EXA_PROFILE=\nMCP_FETCH_KEY=\nMCP_FETCH_PROFILE=\nMCP_TIME_KEY=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 趋势图工具是否对模型返回压缩版结果。\n# true -> 模型只拿摘要,完整图表走短时缓存供前端恢复。\n# false -> 回退到旧行为,工具直接返回完整图表和位移序列。\nGNSS_TREND_CHART_COMPACT_RESPONSE_ENABLED=true\n\n# 前端历史会话恢复时,中间 panel 是否只显示最近一条带 panel 的消息工作集。\n# true -> 新行为,只恢复最近工作集。\n# false -> 回退到旧行为,恢复当前历史页累计的全部 panel。\nVITE_HISTORY_PANELS_LATEST_MESSAGE_ONLY=true\n\n# 实验性异常候选检测配置\n# 说明:\n# - 默认应保持关闭,先观察一段时间再考虑启用。\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=false\nGNSS_ANOMALY_DETECTION_MODE=shadow\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=5\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\n"}, "4f3457362af7e5da40283c877902baba78cd3e4e": {"t": 1785767487.0484095, "n": 2433, "h": "b42b60b67b5d59a4", "c": "# 基础配置\nPROJECT_NAME=智能Agent聊天平台\nVERSION=2.0.0\nDEBUG=True\n\n# 服务配置\nHOST=0.0.0.0\nPORT=8000\nALLOWED_HOSTS=[\"*\"]\n\n# 数据库配置\n# 使用业务主库 MySQL。\nDATABASE_URL=mysql+aiomysql://:@:3306/agent_demo\n\n# JWT 配置\nSECRET_KEY=change-me-to-a-secure-random-value\nALGORITHM=HS256\nACCESS_TOKEN_EXPIRE_MINUTES=10080\nREFRESH_TOKEN_EXPIRE_MINUTES=43200\n\n# 文件上传\nMAX_FILE_SIZE=10485760\nUPLOAD_DIR=uploads\n\n# 默认模型\nDEFAULT_MODEL=llama3.1\nDEFAULT_TEMPERATURE=0.7\nDEFAULT_MAX_TOKENS=2000\n\n# 是否启用 Agent tools。\n# 某些不支持 tools 的模型建议保持 false。\nENABLE_AGENT_TOOLS=False\n\n# 本地时区\nLOCAL_TIMEZONE=Asia/Shanghai\n\n# 运行态 SQLite / checkpointer 配置\n# Agent runtime / checkpoint 使用 SQLite,与业务主库分离。\nAGENT_RUNTIME_SQLITE_ENABLED=true\nAGENT_RUNTIME_SQLITE_PATH=data/runtime/agent_runtime.sqlite3\n\n# 向量库 / 本地模型(按需启用)\nCHROMA_HOST=localhost\nCHROMA_PORT=8000\nCHROMA_PATH=./chroma_data\nOLLAMA_BASE_URL=http://localhost:11434\n\n# 外部模型密钥(按实际供应商填写)\nDEEPSEEK_API_KEY=\nDASHSCOPE_API_KEY=\n\n# 日志配置\nLOG_LEVEL=INFO\nLOG_FILE=logs/app.log\nLOG_DIR=logs\n\n# 异常检测专项日志\n# 开启后,app.services.anomaly.* 的日志会额外写入独立文件,\n# 便于长期观察误报率、命中情况和配置效果。\nANOMALY_LOG_ENABLED=true\nANOMALY_LOG_FILE=anomaly.log\nANOMALY_LOG_LEVEL=INFO\n\n# MCP 配置\nMCP_ENABLED=False\nMCP_ENABLED_SERVERS=mysql,exa,fetch,time-mcp\n\n# 如确需启用 MCP MySQL,请单独填写,避免误把旧 SQL 直连当作主链路。\nMCP_MYSQL_HOST=\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=\nMCP_MYSQL_PASSWORD=\nMCP_MYSQL_DATABASE=\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=\n\n# 北斗平台 HTTP API\n# 当前已验证可用的 API 基址为 /bdjc-api/v2/API\nBEIDOU_API_BASE_URL=http://39.96.80.62/bdjc-api/v2/API\nBEIDOU_API_USERNAME=\nBEIDOU_API_PASSWORD=\nBEIDOU_API_CONNECT_TIMEOUT=5.0\nBEIDOU_API_READ_TIMEOUT=30.0\n\n# 上下文窗口配置\n# 最近保留多少轮对话进入模型上下文。\nCHAT_CONTEXT_TURNS=6\n\n# 实验性异常候选检测配置\n# 说明:\n# - 默认应保持关闭,先观察一段时间再考虑启用。\n# - off -> 禁用;\n# - shadow -> 后台计算,仅输出结构化结果,不进入用户主结论;\n# - assist -> 可在报告中以“异常候选/建议复核”的保守措辞引用。\nGNSS_ANOMALY_DETECTION_ENABLED=false\nGNSS_ANOMALY_DETECTION_MODE=shadow\n\n# 最少数据点数。低于该值直接跳过检测,避免短序列误报。\nGNSS_ANOMALY_DETECTION_MIN_POINTS=24\n\n# 候选分级阈值。值越大越保守。\nGNSS_ANOMALY_MEDIUM_THRESHOLD=3.5\nGNSS_ANOMALY_HIGH_THRESHOLD=6.0\n\n# 最多输出的候选点 / 事件数量,避免数据面板膨胀。\nGNSS_ANOMALY_MAX_CANDIDATES=5\n\n# 是否记录异常候选与事件的详细日志。\n# 开启后会把时间、方向、分数、偏移量、前后差分、原因标签写入 anomaly.log,\n# 便于长期对比测试和人工复核。\nGNSS_ANOMALY_LOG_DETAILS=true\n"}}, "docs/deployment/docker-compose-data-disk.md": {"dc8f9f6a3562bac2b5a062cbbdb92b45c10cc0fa": {"t": 1785746976.8134434, "n": 7881, "h": "6293a6a00d70720a", "c": "# Docker Compose 数据盘部署指南\n\n本文档说明单机服务器使用 Docker Compose 部署时,如何把 PostgreSQL 数据、后端日志、上传文件和运行态调试目录绑定到服务器数据盘,避免持久化数据默认落到系统盘。\n\n## 目录约定\n\n仓库中的部署相关文件保持在以下位置:\n\n- `deploy/docker/docker-compose.yml`:生产 Compose 编排入口。\n- `apps/backend/Dockerfile`:后端镜像构建文件。\n- `deploy/nginx/`:用户前台、管理后台与 API 反向代理的 Nginx 镜像和配置。\n- `deploy/postgres/create-databases.sh`:创建/修复应用角色、业务库、runtime 库和 schema 权限的超级用户脚本。\n- `deploy/postgres/init-business-schema.sh`:使用应用数据库用户执行当前业务 schema 迁移和 seed 的脚本。\n- `deploy/postgres/init-runtime-schema.sh`:使用应用数据库用户执行 runtime/checkpointer schema 迁移的脚本。\n- `deploy/postgres/bootstrap.sh`:组合数据库创建、业务 schema 初始化和 runtime schema 初始化的一键入口。\n- `deploy/postgres/init/`:Docker 官方 PostgreSQL entrypoint wrapper,仅用于首次空数据目录初始化。\n- `deploy/postgres/migrations/`:当前业务 schema 迁移、runtime store 表和 seed SQL。\n- `deploy/postgres/runtime-migrations/`:当前 runtime/checkpointer schema 迁移 SQL。\n- `scripts/inspect_postgres_schema.py`:本地 schema 检查脚本,读取 `DATABASE_URL` 后输出真实 `public` 表、字段和索引。\n- `deploy/docker/.env.example`:可复制的 Docker Compose 环境变量模板。\n- `docs/deployment/docker-compose-data-disk.md`:数据盘部署、升级、备份和重置说明。\n\n## 数据盘绑定\n\nCompose 通过 `deploy/docker/.env` 中的 `AGENT_DATA_ROOT` 统一指定宿主机数据盘根目录。生产建议使用专用目录,例如:\n\n```bash\nAGENT_DATA_ROOT=/data/agent\n```\n\n容器目录与宿主机目录的绑定关系如下:\n\n| 容器目录 | 宿主机目录 |\n| --- | --- |\n| `/var/lib/postgresql/data` | `${AGENT_DATA_ROOT}/postgres/data` |\n| `/app/logs` | `${AGENT_DATA_ROOT}/backend/logs` |\n| `/app/uploads` | `${AGENT_DATA_ROOT}/backend/uploads` |\n| `/app/runtime/debug` | `${AGENT_DATA_ROOT}/backend/runtime-debug` |\n\n`AGENT_DATA_ROOT` 未设置时,`docker compose config` 和 `docker compose up` 会直接失败,防止误用 Docker named volume 或系统盘路径。\n\n## 首次部署\n\n1. 复制环境模板:\n\n```bash\ncp deploy/docker/.env.example deploy/docker/.env\n```\n\n2. 修改 `deploy/docker/.env` 中的生产必填项:\n\n| 配置项 | 说明 |\n| --- | --- |\n| `AGENT_DATA_ROOT` | 服务器数据盘上的专用目录,例如 `/data/agent`。 |\n| `WEB_PORT` | Nginx 对外端口,默认 `8080`。 |\n| `POSTGRES_SUPERUSER_PASSWORD` | PostgreSQL 超级用户密码,必须替换占位符。 |\n| `AGENT_DB_PASSWORD` | 应用数据库用户密码,必须替换占位符。 |\n| `SECRET_KEY` | JWT 签名密钥,必须替换为高强度随机值。 |\n| `ALLOWED_HOSTS` | 生产域名或反向代理访问地址。 |\n| `DEBIAN_MIRROR` | 后端镜像构建时安装系统依赖使用的 Debian 镜像源,国内服务器可保留默认阿里云源。 |\n| `PIP_INDEX_URL` | 后端镜像构建时使用的 Python 包索引,国内服务器可保留默认阿里云源。 |\n| `NPM_REGISTRY` | 前端镜像构建时使用的 npm/pnpm registry,国内服务器可保留默认 npmmirror。 |\n| `PNPM_VERSION` | 前端镜像构建时安装的 pnpm 版本,默认 `9.15.9`,与当前 lockfile 兼容。 |\n| `DEEPSEEK_API_KEY` / `DASHSCOPE_API_KEY` | 至少按实际使用的模型供应商填写一组。 |\n| `BEIDOU_API_USERNAME` / `BEIDOU_API_PASSWORD` | 北斗平台账号。 |\n| `EMAIL_SMTP_*` | 启用邮件发送时填写 SMTP 主机、账号、授权码、发件人。 |\n| `AGENT_STORE_STRICT_STARTUP` | 生产建议设为 `true`,runtime store 初始化失败时阻止启动。 |\n\n如果部署在云服务器上,还需要在云厂商安全组、防火墙或负载均衡规则中放行 `WEB_PORT` 对应端口;仅在服务器内 `ss -lntp` 看到 Docker 监听并不等于公网已可访问。\n\n`POSTGRES_SUPERUSER_PASSWORD`、`AGENT_DB_PASSWORD`、`AGENT_BUSINESS_DB` 和 `AGENT_RUNTIME_DB` 会在 PostgreSQL 数据目录首次初始化时生效。`${AGENT_DATA_ROOT}/postgres/data` 已存在后,PostgreSQL 官方镜像会跳过初始化脚本,也就是不会再次执行 `/docker-entrypoint-initdb.d` wrapper;不要只修改 `deploy/docker/.env` 中的数据库密码后直接重启,否则应用用户密码会与数据库内已保存的密码不一致。需要轮换密码时,应先在数据库内执行 `ALTER ROLE`,或显式用超级用户运行 `AGENT_DB_RESET_PASSWORD=true sh deploy/postgres/create-databases.sh`,再同步更新 `deploy/docker/.env`;测试环境重建时才删除数据目录重新初始化。\n\n3. 创建宿主机目录:\n\n```bash\nsudo mkdir -p \\\n /data/agent/postgres/data \\\n /data/agent/backend/logs \\\n /data/agent/backend/uploads \\\n /data/agent/backend/runtime-debug\n```\n\n如果 `AGENT_DATA_ROOT` 不是 `/data/agent`,把命令中的路径替换为实际值。\n\n4. 设置后端 bind mount 权限。后端镜像内 `appuser` 默认 UID/GID 为 `10001:10001`:\n\n```bash\nsudo chown -R 10001:10001 \\\n /data/agent/backend/logs \\\n /data/agent/backend/uploads \\\n /data/agent/backend/runtime-debug\n```\n\nPostgreSQL 官方镜像会在首次初始化时处理数据目录权限;确保数据盘路径存在且 Docker daemon 可访问即可。\n\n5. 校验 Compose 配置:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml config\n```\n\n6. 构建并启动:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml up --build -d\n```\n\n7. 查看状态和健康检查:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml ps\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml logs -f backend\ncurl http://127.0.0.1:8080/api/v1/health/\n```\n\n默认访问路径:\n\n- 用户前台:`http://127.0.0.1:8080/gdem/#/`\n- 管理后台:`http://127.0.0.1:8080/gdem-admin/#/`\n- 后端健康检查:`http://127.0.0.1:8080/api/v1/health/`\n\n## 升级\n\n升级代码或镜像时保留 `deploy/docker/.env` 和 `AGENT_DATA_ROOT` 目录:\n\n```bash\ngit pull\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml config\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml up --build -d\n```\n\n`migrate` 服务会在 `postgres` 健康后调用 `deploy/postgres/init-business-schema.sh` 和 `deploy/postgres/init-runtime-schema.sh`,按文件名顺序执行 `deploy/postgres/migrations/[0-9][0-9][0-9]_*.sql` 与 `deploy/postgres/runtime-migrations/[0-9][0-9][0-9]_*.sql`。种子脚本不会覆盖已有管理员密码或真实模型密钥。\n\n## PostgreSQL 脚本职责\n\n`deploy/postgres/create-databases.sh` 只做实例级准备工作:创建应用 role、业务库 `AGENT_BUSINESS_DB`、runtime/checkpointer 库 `AGENT_RUNTIME_DB`,并修复两个库的 `public` schema owner、usage/create 权限以及已有表/序列权限。该脚本使用 PostgreSQL 超级用户执行,重复运行不会重建数据库;默认也不会重置已有 role 密码,只有显式设置 `AGENT_DB_RESET_PASSWORD=true` 才会执行密码轮换。\n\n`deploy/postgres/init-business-schema.sh` 只做业务库 schema 初始化:使用应用数据库用户连接业务库,按文件名顺序执行 `001_init_business_schema.sql` 到 `006_init_runtime_store_schema.sql`。这些迁移保留当前实际业务内容:`users`、`agents`、`models`、`conversations`、`messages`、`panel_snapshots`、`message_panel_links`、`user_sessions`、`system_configs`、`mcp_tool_configs`、`agent_runs`、`agent_run_events`、`dataset_refs`、用户北斗凭证字段、`analysis_cache`、`email_subscriptions`、`email_subscription_runs`、LangGraph long-term store 表 `store` 和 `store_migrations`。\n\n`deploy/postgres/init-runtime-schema.sh` 只做 runtime/checkpointer 库 schema 初始化:使用应用数据库用户连接 `AGENT_RUNTIME_DB`,按文件名顺序执行 `deploy/postgres/runtime-migrations/001_init_checkpointer_schema.sql`,创建当前实际 runtime 表 `checkpoints`、`checkpoint_blobs`、`checkpoint_writes` 和 `checkpoint_migrations`。\n\n`deploy/postgres/bootstrap.sh` 只是组合入口,先调用创建脚本,再调用业务 schema 和 runtime schema 脚本。Docker 首次空数据目录初始化通过 `deploy/postgres/init/00-bootstrap-postgres.sh` 调用它;已有数据目录升级则由 Compose 的 `migrate` 服务单独调用 `init-business-schema.sh` 与 `init-runtime-schema.sh`。\n\n本地核对真实数据库结构时,不要在脚本或文档里打印连接串。提供有效连接后运行:\n\n```bash\npython scripts/inspect_postgres_schema.py --database-url \"$DATABASE_URL\"\n```\n\n不传 `--database-url` 时,脚本会依次读取环境变量 `DATABASE_URL` 和仓库根目录 `.env` 中的 `DATABASE_URL`,只输出 `public` schema 的表、字段和索引。\n\n## 备份\n\n建议至少备份 PostgreSQL 业务库、runtime 库和上传文件:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml exec postgres pg_dump -U postgres agent_demo > agent_demo.sql\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml exec postgres pg_dump -U postgres agent_runtime > agent_runtime.sql\ntar -czf uploads.tar.gz -C /data/agent/backend uploads\n```\n\n如果修改了 `POSTGRES_SUPERUSER`、`AGENT_BUSINESS_DB` 或 `AGENT_RUNTIME_DB`,请按 `deploy/docker/.env` 中的实际值替换命令。\n\n## 数据迁移\n\n从旧 Docker named volume 或旧服务器迁移时,先在旧环境导出数据库和上传目录,再在新服务器的数据盘目录恢复。不要直接复制运行中的 PostgreSQL 数据目录;需要文件级迁移时必须先停机并确保 PostgreSQL 已完全关闭。\n\n推荐流程:\n\n1. 旧环境执行 `pg_dump` 导出业务库和 runtime 库。\n2. 新环境创建 `deploy/docker/.env` 和 `AGENT_DATA_ROOT` 目录。\n3. 新环境启动 PostgreSQL 后导入 SQL。\n4. 恢复 `${AGENT_DATA_ROOT}/backend/uploads`。\n5. 启动完整服务并检查健康状态。\n\n## 重置注意事项\n\n`docker compose down -v` 只会删除 Compose 管理的 named volume;当前生产编排使用宿主机 bind mount,执行该命令不会删除 `${AGENT_DATA_ROOT}` 下的数据。\n\n如确需清空演示环境,必须先停止服务,再显式删除数据盘目录:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml down\nsudo rm -rf /data/agent/postgres/data /data/agent/backend/uploads /data/agent/backend/runtime-debug\n```\n\n删除前务必确认路径是当前环境的测试数据目录,并已完成备份。生产环境不要用重置命令替代迁移或回滚。\n\n## 本地非 Docker 开发\n\n本地直接运行后端、用户前端和管理后台的方式保持不变。`LOG_DIR=logs`、`UPLOAD_DIR=uploads`、`GNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly` 仍是仓库内相对路径,并已由 `.gitignore` 忽略。`AGENT_DATA_ROOT` 只被 Docker Compose 使用,不影响 `python apps/backend/main.py`、`pnpm --dir apps/web dev` 或 `pnpm --dir apps/admin dev`。\n"}, "6cdbd65197ed9cf8b91cc8bfec571787bdf06189": {"t": 1785767474.3745265, "n": 7881, "h": "6293a6a00d70720a", "c": "# Docker Compose 数据盘部署指南\n\n本文档说明单机服务器使用 Docker Compose 部署时,如何把 PostgreSQL 数据、后端日志、上传文件和运行态调试目录绑定到服务器数据盘,避免持久化数据默认落到系统盘。\n\n## 目录约定\n\n仓库中的部署相关文件保持在以下位置:\n\n- `deploy/docker/docker-compose.yml`:生产 Compose 编排入口。\n- `apps/backend/Dockerfile`:后端镜像构建文件。\n- `deploy/nginx/`:用户前台、管理后台与 API 反向代理的 Nginx 镜像和配置。\n- `deploy/postgres/create-databases.sh`:创建/修复应用角色、业务库、runtime 库和 schema 权限的超级用户脚本。\n- `deploy/postgres/init-business-schema.sh`:使用应用数据库用户执行当前业务 schema 迁移和 seed 的脚本。\n- `deploy/postgres/init-runtime-schema.sh`:使用应用数据库用户执行 runtime/checkpointer schema 迁移的脚本。\n- `deploy/postgres/bootstrap.sh`:组合数据库创建、业务 schema 初始化和 runtime schema 初始化的一键入口。\n- `deploy/postgres/init/`:Docker 官方 PostgreSQL entrypoint wrapper,仅用于首次空数据目录初始化。\n- `deploy/postgres/migrations/`:当前业务 schema 迁移、runtime store 表和 seed SQL。\n- `deploy/postgres/runtime-migrations/`:当前 runtime/checkpointer schema 迁移 SQL。\n- `scripts/inspect_postgres_schema.py`:本地 schema 检查脚本,读取 `DATABASE_URL` 后输出真实 `public` 表、字段和索引。\n- `deploy/docker/.env.example`:可复制的 Docker Compose 环境变量模板。\n- `docs/deployment/docker-compose-data-disk.md`:数据盘部署、升级、备份和重置说明。\n\n## 数据盘绑定\n\nCompose 通过 `deploy/docker/.env` 中的 `AGENT_DATA_ROOT` 统一指定宿主机数据盘根目录。生产建议使用专用目录,例如:\n\n```bash\nAGENT_DATA_ROOT=/data/agent\n```\n\n容器目录与宿主机目录的绑定关系如下:\n\n| 容器目录 | 宿主机目录 |\n| --- | --- |\n| `/var/lib/postgresql/data` | `${AGENT_DATA_ROOT}/postgres/data` |\n| `/app/logs` | `${AGENT_DATA_ROOT}/backend/logs` |\n| `/app/uploads` | `${AGENT_DATA_ROOT}/backend/uploads` |\n| `/app/runtime/debug` | `${AGENT_DATA_ROOT}/backend/runtime-debug` |\n\n`AGENT_DATA_ROOT` 未设置时,`docker compose config` 和 `docker compose up` 会直接失败,防止误用 Docker named volume 或系统盘路径。\n\n## 首次部署\n\n1. 复制环境模板:\n\n```bash\ncp deploy/docker/.env.example deploy/docker/.env\n```\n\n2. 修改 `deploy/docker/.env` 中的生产必填项:\n\n| 配置项 | 说明 |\n| --- | --- |\n| `AGENT_DATA_ROOT` | 服务器数据盘上的专用目录,例如 `/data/agent`。 |\n| `WEB_PORT` | Nginx 对外端口,默认 `8080`。 |\n| `POSTGRES_SUPERUSER_PASSWORD` | PostgreSQL 超级用户密码,必须替换占位符。 |\n| `AGENT_DB_PASSWORD` | 应用数据库用户密码,必须替换占位符。 |\n| `SECRET_KEY` | JWT 签名密钥,必须替换为高强度随机值。 |\n| `ALLOWED_HOSTS` | 生产域名或反向代理访问地址。 |\n| `DEBIAN_MIRROR` | 后端镜像构建时安装系统依赖使用的 Debian 镜像源,国内服务器可保留默认阿里云源。 |\n| `PIP_INDEX_URL` | 后端镜像构建时使用的 Python 包索引,国内服务器可保留默认阿里云源。 |\n| `NPM_REGISTRY` | 前端镜像构建时使用的 npm/pnpm registry,国内服务器可保留默认 npmmirror。 |\n| `PNPM_VERSION` | 前端镜像构建时安装的 pnpm 版本,默认 `9.15.9`,与当前 lockfile 兼容。 |\n| `DEEPSEEK_API_KEY` / `DASHSCOPE_API_KEY` | 至少按实际使用的模型供应商填写一组。 |\n| `BEIDOU_API_USERNAME` / `BEIDOU_API_PASSWORD` | 北斗平台账号。 |\n| `EMAIL_SMTP_*` | 启用邮件发送时填写 SMTP 主机、账号、授权码、发件人。 |\n| `AGENT_STORE_STRICT_STARTUP` | 生产建议设为 `true`,runtime store 初始化失败时阻止启动。 |\n\n如果部署在云服务器上,还需要在云厂商安全组、防火墙或负载均衡规则中放行 `WEB_PORT` 对应端口;仅在服务器内 `ss -lntp` 看到 Docker 监听并不等于公网已可访问。\n\n`POSTGRES_SUPERUSER_PASSWORD`、`AGENT_DB_PASSWORD`、`AGENT_BUSINESS_DB` 和 `AGENT_RUNTIME_DB` 会在 PostgreSQL 数据目录首次初始化时生效。`${AGENT_DATA_ROOT}/postgres/data` 已存在后,PostgreSQL 官方镜像会跳过初始化脚本,也就是不会再次执行 `/docker-entrypoint-initdb.d` wrapper;不要只修改 `deploy/docker/.env` 中的数据库密码后直接重启,否则应用用户密码会与数据库内已保存的密码不一致。需要轮换密码时,应先在数据库内执行 `ALTER ROLE`,或显式用超级用户运行 `AGENT_DB_RESET_PASSWORD=true sh deploy/postgres/create-databases.sh`,再同步更新 `deploy/docker/.env`;测试环境重建时才删除数据目录重新初始化。\n\n3. 创建宿主机目录:\n\n```bash\nsudo mkdir -p \\\n /data/agent/postgres/data \\\n /data/agent/backend/logs \\\n /data/agent/backend/uploads \\\n /data/agent/backend/runtime-debug\n```\n\n如果 `AGENT_DATA_ROOT` 不是 `/data/agent`,把命令中的路径替换为实际值。\n\n4. 设置后端 bind mount 权限。后端镜像内 `appuser` 默认 UID/GID 为 `10001:10001`:\n\n```bash\nsudo chown -R 10001:10001 \\\n /data/agent/backend/logs \\\n /data/agent/backend/uploads \\\n /data/agent/backend/runtime-debug\n```\n\nPostgreSQL 官方镜像会在首次初始化时处理数据目录权限;确保数据盘路径存在且 Docker daemon 可访问即可。\n\n5. 校验 Compose 配置:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml config\n```\n\n6. 构建并启动:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml up --build -d\n```\n\n7. 查看状态和健康检查:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml ps\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml logs -f backend\ncurl http://127.0.0.1:8080/api/v1/health/\n```\n\n默认访问路径:\n\n- 用户前台:`http://127.0.0.1:8080/gdem/#/`\n- 管理后台:`http://127.0.0.1:8080/gdem-admin/#/`\n- 后端健康检查:`http://127.0.0.1:8080/api/v1/health/`\n\n## 升级\n\n升级代码或镜像时保留 `deploy/docker/.env` 和 `AGENT_DATA_ROOT` 目录:\n\n```bash\ngit pull\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml config\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml up --build -d\n```\n\n`migrate` 服务会在 `postgres` 健康后调用 `deploy/postgres/init-business-schema.sh` 和 `deploy/postgres/init-runtime-schema.sh`,按文件名顺序执行 `deploy/postgres/migrations/[0-9][0-9][0-9]_*.sql` 与 `deploy/postgres/runtime-migrations/[0-9][0-9][0-9]_*.sql`。种子脚本不会覆盖已有管理员密码或真实模型密钥。\n\n## PostgreSQL 脚本职责\n\n`deploy/postgres/create-databases.sh` 只做实例级准备工作:创建应用 role、业务库 `AGENT_BUSINESS_DB`、runtime/checkpointer 库 `AGENT_RUNTIME_DB`,并修复两个库的 `public` schema owner、usage/create 权限以及已有表/序列权限。该脚本使用 PostgreSQL 超级用户执行,重复运行不会重建数据库;默认也不会重置已有 role 密码,只有显式设置 `AGENT_DB_RESET_PASSWORD=true` 才会执行密码轮换。\n\n`deploy/postgres/init-business-schema.sh` 只做业务库 schema 初始化:使用应用数据库用户连接业务库,按文件名顺序执行 `001_init_business_schema.sql` 到 `006_init_runtime_store_schema.sql`。这些迁移保留当前实际业务内容:`users`、`agents`、`models`、`conversations`、`messages`、`panel_snapshots`、`message_panel_links`、`user_sessions`、`system_configs`、`mcp_tool_configs`、`agent_runs`、`agent_run_events`、`dataset_refs`、用户北斗凭证字段、`analysis_cache`、`email_subscriptions`、`email_subscription_runs`、LangGraph long-term store 表 `store` 和 `store_migrations`。\n\n`deploy/postgres/init-runtime-schema.sh` 只做 runtime/checkpointer 库 schema 初始化:使用应用数据库用户连接 `AGENT_RUNTIME_DB`,按文件名顺序执行 `deploy/postgres/runtime-migrations/001_init_checkpointer_schema.sql`,创建当前实际 runtime 表 `checkpoints`、`checkpoint_blobs`、`checkpoint_writes` 和 `checkpoint_migrations`。\n\n`deploy/postgres/bootstrap.sh` 只是组合入口,先调用创建脚本,再调用业务 schema 和 runtime schema 脚本。Docker 首次空数据目录初始化通过 `deploy/postgres/init/00-bootstrap-postgres.sh` 调用它;已有数据目录升级则由 Compose 的 `migrate` 服务单独调用 `init-business-schema.sh` 与 `init-runtime-schema.sh`。\n\n本地核对真实数据库结构时,不要在脚本或文档里打印连接串。提供有效连接后运行:\n\n```bash\npython scripts/inspect_postgres_schema.py --database-url \"$DATABASE_URL\"\n```\n\n不传 `--database-url` 时,脚本会依次读取环境变量 `DATABASE_URL` 和仓库根目录 `.env` 中的 `DATABASE_URL`,只输出 `public` schema 的表、字段和索引。\n\n## 备份\n\n建议至少备份 PostgreSQL 业务库、runtime 库和上传文件:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml exec postgres pg_dump -U postgres agent_demo > agent_demo.sql\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml exec postgres pg_dump -U postgres agent_runtime > agent_runtime.sql\ntar -czf uploads.tar.gz -C /data/agent/backend uploads\n```\n\n如果修改了 `POSTGRES_SUPERUSER`、`AGENT_BUSINESS_DB` 或 `AGENT_RUNTIME_DB`,请按 `deploy/docker/.env` 中的实际值替换命令。\n\n## 数据迁移\n\n从旧 Docker named volume 或旧服务器迁移时,先在旧环境导出数据库和上传目录,再在新服务器的数据盘目录恢复。不要直接复制运行中的 PostgreSQL 数据目录;需要文件级迁移时必须先停机并确保 PostgreSQL 已完全关闭。\n\n推荐流程:\n\n1. 旧环境执行 `pg_dump` 导出业务库和 runtime 库。\n2. 新环境创建 `deploy/docker/.env` 和 `AGENT_DATA_ROOT` 目录。\n3. 新环境启动 PostgreSQL 后导入 SQL。\n4. 恢复 `${AGENT_DATA_ROOT}/backend/uploads`。\n5. 启动完整服务并检查健康状态。\n\n## 重置注意事项\n\n`docker compose down -v` 只会删除 Compose 管理的 named volume;当前生产编排使用宿主机 bind mount,执行该命令不会删除 `${AGENT_DATA_ROOT}` 下的数据。\n\n如确需清空演示环境,必须先停止服务,再显式删除数据盘目录:\n\n```bash\ndocker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml down\nsudo rm -rf /data/agent/postgres/data /data/agent/backend/uploads /data/agent/backend/runtime-debug\n```\n\n删除前务必确认路径是当前环境的测试数据目录,并已完成备份。生产环境不要用重置命令替代迁移或回滚。\n\n## 本地非 Docker 开发\n\n本地直接运行后端、用户前端和管理后台的方式保持不变。`LOG_DIR=logs`、`UPLOAD_DIR=uploads`、`GNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly` 仍是仓库内相对路径,并已由 `.gitignore` 忽略。`AGENT_DATA_ROOT` 只被 Docker Compose 使用,不影响 `python apps/backend/main.py`、`pnpm --dir apps/web dev` 或 `pnpm --dir apps/admin dev`。\n"}, "faa030fc44eb434a3d7a88eccdb5f8bf4b91f99b": {"t": 1785767475.657893, "n": 4742, "h": "f1513f8f485fd0a4", "c": "# Docker Compose 数据盘部署指南\n\n本文档说明单机服务器使用 Docker Compose 部署时,如何把 PostgreSQL 数据、后端日志、上传文件和运行态调试目录绑定到服务器数据盘,避免持久化数据默认落到系统盘。\n\n## 目录约定\n\n仓库中的部署相关文件保持在以下位置:\n\n- `docker-compose.yml`:生产 Compose 编排入口。\n- `Dockerfile`:后端镜像构建文件。\n- `docker/nginx/`:用户前台、管理后台与 API 反向代理的 Nginx 镜像和配置。\n- `docker/postgres/init/`:PostgreSQL 首次初始化脚本。\n- `docker/postgres/run-migrations.sh`:SQL 迁移执行脚本。\n- `.env.example`:可复制的环境变量模板。\n- `docs/deployment/docker-compose-data-disk.md`:数据盘部署、升级、备份和重置说明。\n\n## 数据盘绑定\n\nCompose 通过 `.env` 中的 `AGENT_DATA_ROOT` 统一指定宿主机数据盘根目录。生产建议使用专用目录,例如:\n\n```bash\nAGENT_DATA_ROOT=/data/agent\n```\n\n容器目录与宿主机目录的绑定关系如下:\n\n| 容器目录 | 宿主机目录 |\n| --- | --- |\n| `/var/lib/postgresql/data` | `${AGENT_DATA_ROOT}/postgres/data` |\n| `/app/logs` | `${AGENT_DATA_ROOT}/backend/logs` |\n| `/app/uploads` | `${AGENT_DATA_ROOT}/backend/uploads` |\n| `/app/runtime/debug` | `${AGENT_DATA_ROOT}/backend/runtime-debug` |\n\n`AGENT_DATA_ROOT` 未设置时,`docker compose config` 和 `docker compose up` 会直接失败,防止误用 Docker named volume 或系统盘路径。\n\n## 首次部署\n\n1. 复制环境模板:\n\n```bash\ncp .env.example .env\n```\n\n2. 修改 `.env` 中的生产必填项:\n\n| 配置项 | 说明 |\n| --- | --- |\n| `AGENT_DATA_ROOT` | 服务器数据盘上的专用目录,例如 `/data/agent`。 |\n| `WEB_PORT` | Nginx 对外端口,默认 `8080`。 |\n| `POSTGRES_SUPERUSER_PASSWORD` | PostgreSQL 超级用户密码,必须替换占位符。 |\n| `AGENT_DB_PASSWORD` | 应用数据库用户密码,必须替换占位符。 |\n| `SECRET_KEY` | JWT 签名密钥,必须替换为高强度随机值。 |\n| `ALLOWED_HOSTS` | 生产域名或反向代理访问地址。 |\n| `DEBIAN_MIRROR` | 后端镜像构建时安装系统依赖使用的 Debian 镜像源,国内服务器可保留默认阿里云源。 |\n| `PIP_INDEX_URL` | 后端镜像构建时使用的 Python 包索引,国内服务器可保留默认阿里云源。 |\n| `NPM_REGISTRY` | 前端镜像构建时使用的 npm/pnpm registry,国内服务器可保留默认 npmmirror。 |\n| `PNPM_VERSION` | 前端镜像构建时安装的 pnpm 版本,默认 `9.15.9`,与当前 lockfile 兼容。 |\n| `DEEPSEEK_API_KEY` / `DASHSCOPE_API_KEY` | 至少按实际使用的模型供应商填写一组。 |\n| `BEIDOU_API_USERNAME` / `BEIDOU_API_PASSWORD` | 北斗平台账号。 |\n| `EMAIL_SMTP_*` | 启用邮件发送时填写 SMTP 主机、账号、授权码、发件人。 |\n| `AGENT_STORE_STRICT_STARTUP` | 生产建议设为 `true`,runtime store 初始化失败时阻止启动。 |\n\n如果部署在云服务器上,还需要在云厂商安全组、防火墙或负载均衡规则中放行 `WEB_PORT` 对应端口;仅在服务器内 `ss -lntp` 看到 Docker 监听并不等于公网已可访问。\n\n`POSTGRES_SUPERUSER_PASSWORD`、`AGENT_DB_PASSWORD`、`AGENT_BUSINESS_DB` 和 `AGENT_RUNTIME_DB` 会在 PostgreSQL 数据目录首次初始化时生效。`${AGENT_DATA_ROOT}/postgres/data` 已存在后,PostgreSQL 官方镜像会跳过初始化脚本;不要只修改 `.env` 中的数据库密码后直接重启,否则应用用户密码会与数据库内已保存的密码不一致。需要轮换密码时,应先在数据库内执行 `ALTER ROLE`,再同步更新 `.env`;测试环境重建时才删除数据目录重新初始化。\n\n3. 创建宿主机目录:\n\n```bash\nsudo mkdir -p \\\n /data/agent/postgres/data \\\n /data/agent/backend/logs \\\n /data/agent/backend/uploads \\\n /data/agent/backend/runtime-debug\n```\n\n如果 `AGENT_DATA_ROOT` 不是 `/data/agent`,把命令中的路径替换为实际值。\n\n4. 设置后端 bind mount 权限。后端镜像内 `appuser` 默认 UID/GID 为 `10001:10001`:\n\n```bash\nsudo chown -R 10001:10001 \\\n /data/agent/backend/logs \\\n /data/agent/backend/uploads \\\n /data/agent/backend/runtime-debug\n```\n\nPostgreSQL 官方镜像会在首次初始化时处理数据目录权限;确保数据盘路径存在且 Docker daemon 可访问即可。\n\n5. 校验 Compose 配置:\n\n```bash\ndocker compose --env-file .env config\n```\n\n6. 构建并启动:\n\n```bash\ndocker compose --env-file .env up --build -d\n```\n\n7. 查看状态和健康检查:\n\n```bash\ndocker compose ps\ndocker compose logs -f backend\ncurl http://127.0.0.1:8080/api/v1/health/\n```\n\n默认访问路径:\n\n- 用户前台:`http://127.0.0.1:8080/gdem/#/`\n- 管理后台:`http://127.0.0.1:8080/gdem-admin/#/`\n- 后端健康检查:`http://127.0.0.1:8080/api/v1/health/`\n\n## 升级\n\n升级代码或镜像时保留 `.env` 和 `AGENT_DATA_ROOT` 目录:\n\n```bash\ngit pull\ndocker compose --env-file .env config\ndocker compose --env-file .env up --build -d\n```\n\n`migrate` 服务会在 `postgres` 健康后按文件名顺序执行 `migrations/postgres/[0-9][0-9][0-9]_*.sql`。种子脚本不会覆盖已有管理员密码或真实模型密钥。\n\n## 备份\n\n建议至少备份 PostgreSQL 业务库、runtime 库和上传文件:\n\n```bash\ndocker compose exec postgres pg_dump -U postgres agent_demo > agent_demo.sql\ndocker compose exec postgres pg_dump -U postgres agent_runtime > agent_runtime.sql\ntar -czf uploads.tar.gz -C /data/agent/backend uploads\n```\n\n如果修改了 `POSTGRES_SUPERUSER`、`AGENT_BUSINESS_DB` 或 `AGENT_RUNTIME_DB`,请按 `.env` 中的实际值替换命令。\n\n## 数据迁移\n\n从旧 Docker named volume 或旧服务器迁移时,先在旧环境导出数据库和上传目录,再在新服务器的数据盘目录恢复。不要直接复制运行中的 PostgreSQL 数据目录;需要文件级迁移时必须先停机并确保 PostgreSQL 已完全关闭。\n\n推荐流程:\n\n1. 旧环境执行 `pg_dump` 导出业务库和 runtime 库。\n2. 新环境创建 `.env` 和 `AGENT_DATA_ROOT` 目录。\n3. 新环境启动 PostgreSQL 后导入 SQL。\n4. 恢复 `${AGENT_DATA_ROOT}/backend/uploads`。\n5. 启动完整服务并检查健康状态。\n\n## 重置注意事项\n\n`docker compose down -v` 只会删除 Compose 管理的 named volume;当前生产编排使用宿主机 bind mount,执行该命令不会删除 `${AGENT_DATA_ROOT}` 下的数据。\n\n如确需清空演示环境,必须先停止服务,再显式删除数据盘目录:\n\n```bash\ndocker compose down\nsudo rm -rf /data/agent/postgres/data /data/agent/backend/uploads /data/agent/backend/runtime-debug\n```\n\n删除前务必确认路径是当前环境的测试数据目录,并已完成备份。生产环境不要用重置命令替代迁移或回滚。\n\n## 本地非 Docker 开发\n\n本地直接运行后端、用户前端和管理后台的方式保持不变。`LOG_DIR=logs`、`UPLOAD_DIR=uploads`、`GNSS_ANOMALY_ARTIFACT_DIR=runtime/debug/gnss-anomaly` 仍是仓库内相对路径,并已由 `.gitignore` 忽略。`AGENT_DATA_ROOT` 只被 Docker Compose 使用,不影响 `python main.py`、`pnpm --dir frontend dev` 或 `pnpm --dir admin-frontend dev`。\n"}}}}