Files

1 line
104 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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=<postgres_superuser_password>\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=<agent_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://<db_user>:<db_password>@<db_host>: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=<generate_a_secure_random_secret_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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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=<smtp_host>\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=<smtp_username>\nEMAIL_SMTP_PASSWORD=<smtp_password_or_app_token>\nEMAIL_SMTP_FROM_EMAIL=<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=<postgres_superuser_password>\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=<agent_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://<db_user>:<db_password>@<db_host>: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=<generate_a_secure_random_secret_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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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=<smtp_host>\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=<smtp_username>\nEMAIL_SMTP_PASSWORD=<smtp_password_or_app_token>\nEMAIL_SMTP_FROM_EMAIL=<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=<postgres_superuser_password>\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=<agent_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://<db_user>:<db_password>@<db_host>: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=<generate_a_secure_random_secret_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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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=<smtp_host>\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=<smtp_username>\nEMAIL_SMTP_PASSWORD=<smtp_password_or_app_token>\nEMAIL_SMTP_FROM_EMAIL=<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=<postgres_superuser_password>\nAGENT_DB_USER=agent_app\nAGENT_DB_PASSWORD=<agent_db_password>\nAGENT_BUSINESS_DB=agent_demo\nAGENT_RUNTIME_DB=agent_runtime\n\n# 数据库配置\n# 生产建议使用 PostgreSQL 业务主库。\nDATABASE_URL=postgresql+psycopg://<db_user>:<db_password>@<db_host>: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=<generate_a_secure_random_secret_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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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=<smtp_host>\nEMAIL_SMTP_PORT=587\nEMAIL_SMTP_USERNAME=<smtp_username>\nEMAIL_SMTP_PASSWORD=<smtp_password_or_app_token>\nEMAIL_SMTP_FROM_EMAIL=<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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_api_key>\nLANGSMITH_ENDPOINT=https://api.smith.langchain.com\nLANGSMITH_WORKSPACE_ID=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\nMCP_EXA_KEY=<mcp_exa_key>\nMCP_EXA_PROFILE=<mcp_exa_profile>\nMCP_FETCH_KEY=<mcp_fetch_key>\nMCP_FETCH_PROFILE=<mcp_fetch_profile>\nMCP_TIME_KEY=<mcp_time_key>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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://<db_user>:<db_password>@<db_host>: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=<deepseek_api_key>\nDASHSCOPE_API_KEY=<dashscope_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=<mcp_mysql_host>\nMCP_MYSQL_PORT=3306\nMCP_MYSQL_USER=<mcp_mysql_user>\nMCP_MYSQL_PASSWORD=<mcp_mysql_password>\nMCP_MYSQL_DATABASE=<mcp_mysql_database>\n\n# LangSmith(按需启用)\nLANGSMITH_PROJECT=agent-dev\nLANGSMITH_TRACING=false\nLANGSMITH_API_KEY=<langsmith_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=<beidou_api_username>\nBEIDOU_API_PASSWORD=<beidou_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"}}}}