配置、端口、配额与存储参考
本文集中列出本地模式和 Docker 的环境变量、默认端口、工作区相关配额及存储布局。实际部署步骤见部署指南。
环境变量(本地模式)
cp .env.example .env
set -a && source .env && set +a
./scripts/run-local.sh
| 变量 | 默认值 | 用途 |
|---|---|---|
SCIENCE_AGENT_HOST |
127.0.0.1 |
HTTP 绑定地址;监听其他网卡必须显式配置 |
SCIENCE_AGENT_PORT |
4310 |
HTTP 端口 |
SCIENCE_AGENT_AUTH_TOKEN |
首次启动生成 | 浏览器/API bearer token;不设置时使用 <数据目录>/secrets/auth-token 中保存的值 |
SCIENCE_DISCOVERY_DATA_DIR |
均为 .sciencediscovery-data:仓库启动器相对仓库根目录解析,单文件 launcher 相对当前工作目录解析 |
项目、会话、工作区、密钥、服务环境。原 SCIENCE_AGENT_DATA_DIR 保留为带日志的兼容回退。 |
SCIENCE_AGENT_LOG_LEVEL |
INFO |
运行日志级别阈值(DEBUG / INFO / WARNING / ERROR) |
SCIENCE_AGENT_LOG_DIR |
<数据目录>/logs |
可选日志目录覆盖;通常保持默认以随数据目录持久化 |
SCIENCE_AGENT_LOG_MAX_BYTES |
10485760 |
单个类别日志滚动前的最大字节数 |
SCIENCE_AGENT_LOG_BACKUP_COUNT |
5 |
每个类别保留的滚动历史文件数 |
SCIENCE_AGENT_EXECUTOR |
启动器默认为 jiuwenswarm |
可选 jiuwenswarm 或 native;绕过启动器直接启动 API 且未设置时默认 native。详见 Agent 后端。 |
SCIENCE_AGENT_JIUWENSWARM_PROMPT |
prepend |
JiuwenSwarm 提示词模式;replace 改用产品提示词。 |
SCIENCE_AGENT_JIUWENSWARM_TOOLS |
jiuwenswarm |
JiuwenSwarm 工具与产品工具;ours 改用产品工具集。 |
SCIENCE_AGENT_JIUWENSWARM_PLANNING |
todo |
JiuwenSwarm todo;update_plan 改用产品规划工具。 |
SCIENCE_AGENT_JIUWENSWARM_SUBAGENTS |
task |
平台 task 桥接(子运行仍使用 Swarm);jiuwenswarm 改用 Swarm 原生子代理。 |
SCIENCE_AGENT_JIUWENSWARM_SKILLS |
jiuwenswarm |
默认提示词与工具模式下将选中技能安装给 Swarm;ours 改用产品加载方式。 |
SCIENCE_AGENT_GATEWAY_IDLE_TIMEOUT_MS |
240000 |
初始 Agent 无响应上限:无流式输出或进度(0 = 无限) |
SCIENCE_AGENT_GATEWAY_TURN_TIMEOUT_MS |
0 |
初始 Agent 单轮总时长上限(0 = 无限) |
SCIENCE_AGENT_MAX_PARALLEL_TOOL_CALLS |
10 |
单个 Agent Step 中显式声明为并发安全的工具最大并发数;必须为正整数,1 表示工具串行执行 |
SCIENCE_AGENT_RUNNER_HOST |
127.0.0.1 |
Runner 监听地址 |
SCIENCE_AGENT_RUNNER_PORT |
4311 |
Runner 监听端口 |
SCIENCE_AGENT_RUNNER_URL |
http://127.0.0.1:4311 |
Runner 端点(API 客户端) |
SCIENCE_AGENT_RUNNER_TOKEN |
sciencediscovery-runner-local |
API→runner token |
SCIENCE_AGENT_BWRAP_PATH |
bwrap(通过 PATH 解析) |
bubblewrap 可执行文件;Runner 启动时校验所需沙箱参数 |
SCIENCE_AGENT_NPU_BROKER |
0 |
是否启用宿主 Ascend NPU Broker。默认关闭;只有 1 / true / yes 会让 Agent 看到 run_npu_job |
SCIENCE_AGENT_NPU_WORKLOAD_CONFIG |
空 | NPU workload 白名单 JSON;留空时使用 services/runner/workloads/npu-workloads.default.json |
SCIENCE_AGENT_NPU_PYTHON |
python3 |
仅供自定义白名单中显式使用 ${python} 的兼容 workload;仓内默认 NPU workload 使用 Agent 选定的 scientific environment revision,不读取此值 |
SCIENCE_AGENT_NPU_SMOKE_SCRIPT |
空 | 可选管理员自定义 Ascend smoke probe;留空时使用仓内 services/runner/workloads/npu-smoke-test.py |
SCIENCE_AGENT_NPU_PROTENIX_SCRIPT |
空 | Protenix 抗体 pipeline 的宿主 manager 入口;通常指向已部署 skill 的 scripts/antibody_pipeline_manager.py。该 manager 由 ScienceDiscovery scientific environment revision 解析出的 Python 启动 |
SCIENCE_AGENT_NPM_REGISTRY |
空(官方 registry) | 构建步骤的 npm 镜像,仅作用于 start-stack.sh 内的 pnpm install --registry,不改用户/全局 npm 配置;如华为云 https://mirrors.huaweicloud.com/repository/npm/ |
SCIENCE_AGENT_PYPI_INDEX |
空(PyPI 官方) | 构建步骤的 PyPI 镜像,仅作用于 start-stack.sh 内 uv sync 的 UV_DEFAULT_INDEX,不改用户/全局 uv 配置;如华为云 https://mirrors.huaweicloud.com/repository/pypi/simple。注意:uv.lock 记录 index 来源,设置镜像后 uv 会按镜像重新 resolve(版本仍受 pyproject.toml 约束但可能偏离 lock),脚本会自动备份并恢复 lockfile,工作区不会被改动 |
SCIENCE_AGENT_MEMORY_GRAPH_HOST |
127.0.0.1 |
memory-graph 监听地址(服务进程使用) |
SCIENCE_AGENT_MEMORY_GRAPH_AVAILABLE |
自带服务时为 1;不含服务的旧单文件 payload 为 0 |
API 是否在新数据目录开放 ScienceMemory;0 跳过内置 sidecar,单文件 sidecar 启动失败时本次运行设为 0。 |
SCIENCE_AGENT_MEMORY_GRAPH_PORT |
17674 |
memory-graph 监听端口(服务进程使用) |
SCIENCE_AGENT_MEMORY_GRAPH_URL |
http://127.0.0.1:17674 |
memory-graph 端点(API 客户端) |
SCIENCE_AGENT_MEMORY_GRAPH_INTERNAL_TOKEN |
sciencediscovery-memory-graph-local |
API→memory-graph token |
SCIENCE_AGENT_MEMORY_GRAPH_LOG_LEVEL |
INFO |
memory-graph 日志级别 |
SCIENCE_AGENT_MEMORY_GRAPH_BACKEND |
local |
memory-graph 启动时的存储后端(local 或 neo4j);API 会按“系统配置 → 记忆”里的设置覆盖它 |
SCIENCE_AGENT_MEMORY_GRAPH_DATA_DIR |
~/.science-agent/memory-graph |
本地后端存放 nodes.jsonl 和 edges.jsonl 的目录 |
SCIENCE_AGENT_EXEC_TIMEOUT_MS |
0 |
初始单次沙箱执行墙钟上限(0 = 无限) |
SCIENCE_AGENT_MAX_WORKSPACE_BYTES |
10737418240(10 GiB) |
Runner 工作区总量上限(0 = 无限);亦播种系统设置 |
SCIENCE_AGENT_MAX_OUTPUT_BYTES |
1073741824(1 GiB) |
单次执行 stdout+stderr 保留上限(超限截断;0 = 不截断) |
SCIENCE_AGENT_WORKSPACE_MAX_BYTES |
10737418240(10 GiB) |
API 上传累计工作区上限(0 = 无限) |
SCIENCE_AGENT_WORKSPACE_UPLOAD_MAX_FILE_BYTES |
1073741824(1 GiB) |
API 上传单文件上限(与 runner 无关;0 = 无限) |
SCIENCE_AGENT_WORKSPACE_UPLOAD_MAX_REQUEST_BYTES |
10737418240(10 GiB) |
单个 multipart 请求体上限(0 = 无限) |
SCIENCE_AGENT_PERMISSION_WAIT_TIMEOUT_MS |
0 |
初始权限决策等待上限(0 = 无限) |
SCIENTIFIC_ENVS |
1 |
暴露托管 Python/R 与持久内核;完成 setup 前 runner 也可安全启动 |
SCIENCE_AGENT_PROVISIONER_PATH |
— | 可选管理员提供的 provisioner 覆盖;正常 setup 安装应用自有固定二进制 |
SCIENCE_AGENT_MICROMAMBA_BASE_URL |
— | 可选镜像目录 URL,托管 micromamba 固定版本的同名发布件;留空使用上游发布地址。无论从哪里下载,固定的 SHA-256 校验都不放宽 |
SCIENCE_AGENT_NPU_PYTHON_PATH |
自动探测 | 读取 NPU 状态时调用驱动 DCMI 接口所用的宿主 Python;留空按 /usr/bin/python3、/usr/local/bin/python3 顺序探测,都没有则回退到 npu-smi |
SCIENCE_AGENT_PACKAGE_CACHE_DIR |
— | 可选预置缓存;设置后 provision 离线运行,不再拉取允许渠道。pip indexUrl 与 conda channel 仍执行安全校验,但安装时不访问这些网络源(见 sandbox-execution.md §6 受控软件源) |
SCIENCE_AGENT_SCIENTIFIC_CHANNELS |
conda-forge |
逗号分隔的包渠道白名单;内置镜像预设(TUNA/USTC)对应的频道 URL 始终被 Runner 接受,自定义频道仍须显式列入 |
SCIENCE_AGENT_KERNEL_IDLE_MS |
0 |
初始持久内核空闲超时(0 = 无限) |
SCIENCE_AGENT_WEB_DIR |
apps/web/dist |
静态 UI 资源 |
SCIENCE_AGENT_PAPER_PYTHON_PATH |
<data dir>/envs/paper/bin/python |
PDF worker Python |
SCIENCE_AGENT_PAPER_WORKER_PATH |
services/paper/paper_worker.py |
PDF worker 入口 |
Ascend NPU Broker 面向需要访问宿主 Ascend 设备的部署,且需要管理员明确开启。没有 Ascend NPU、未安装 CANN/MindSpore,或不希望 Agent 调用宿主 NPU 时,请保持 SCIENCE_AGENT_NPU_BROKER=0;此时工具表不会包含 run_npu_job。本地模式启用后仍使用正常启动入口。启用 Broker 前,应先创建并验证至少一个可导入所需 CANN/MindSpore 栈的 ScienceDiscovery 包含 Python 的托管科学环境。内置 NPU workload(包括 npu.smoke_test)用 environment_list 返回的 environment_id 选择环境;省略时由 API 解析 Session 所选环境。API 选择该环境最新版 Revision,供 Broker 内部执行与审计;Agent 不能选择历史版本,environment_revision_id 会被拒绝。SCIENCE_AGENT_NPU_WORKLOAD_CONFIG 留空时使用仓内默认白名单,当前包含 npu.smoke_test 与 antibody.protenix.v1;如需新增模型,提供自定义 JSON 白名单并固定 entrypoint,而不是让 Agent 传任意命令。SCIENCE_AGENT_NPU_PYTHON 仅保留给显式使用 ${python} 的自定义白名单;仓内默认白名单使用 ${managedPython},不会读取它。修改白名单 JSON 等价于修改可执行代码入口,应作为部署变更审查;模型权重、数据库、HMMER、CANN、MindScience checkout 等站点资产不进入仓库,通常通过上面的环境变量或 workload 配置引用。
浏览器仅将本地服务访问令牌保存在 local storage。模型凭证只存在于后端存储。
配额层级
这些默认值来自 services/api/src/workspace-upload.ts、services/runner/src/executor.ts 和 .env.example,含义不同,不能互相替代:
| 层级 | 默认值 | 作用 |
|---|---|---|
| API 上传单文件 | 1 GiB | 每个 multipart 文件的接收上限;只约束上传入口 |
| API 单次上传请求 | 10 GiB | 一次 multipart 请求体的累计接收上限 |
| API 上传累计工作区 | 10 GiB | 上传新文件前检查会话工作区累计大小 |
| Runner 工作区 | 10 GiB | 执行前后的工作区配额;适用于上传文件和执行生成文件 |
| Runner stdout + stderr | 1 GiB | 一次执行保留的合并输出上限,超出后截断 |
| Runner 单个执行文件 | 不单独限制 | 当前 MAX_RUNNER_FILE_BYTES=0;仍受 Runner 工作区总量约束 |
GET /health 的 workspace.maxFileBytes、maxRequestBytes、maxWorkspaceBytes 分别报告 API 上传单文件、上传请求和 Runner 工作区上限。它不报告 stdout/stderr 上限。
Docker 环境变量
Compose 读取仓库根目录 .env(模板为 .env.docker.example),把下面的键插值到 docker-compose.yml。它们分两层:编排层只影响 Compose 如何启动容器;容器层由服务的 environment 块逐个转发进容器,留空等于使用内置默认值。操作步骤与分层说明见Docker 部署。
编排层
| 变量 | 默认值 | 作用 |
|---|---|---|
COMPOSE_PROJECT_NAME |
当前目录名 | 容器名与默认网络名的前缀;同机多实例靠它隔离,与 docker compose -p 等价 |
SCIENCE_AGENT_IMAGE |
sciencediscovery:local |
构建并运行的镜像 tag |
SCIENCE_AGENT_DATA_HOST_DIR |
./data |
bind mount 到容器 /app/data 的宿主目录,须先创建 |
SCIENCE_AGENT_UID / SCIENCE_AGENT_GID |
1000 |
容器 uid/gid;必须能写宿主数据目录 |
SCIENCE_AGENT_PUBLISH_HOST |
127.0.0.1 |
UI/API 在宿主上发布到的网卡 |
SCIENCE_AGENT_PUBLISH_PORT |
4310 |
映射到容器 4310 的宿主端口 |
容器层
| 变量 | 默认值 | 作用 |
|---|---|---|
SCIENCE_AGENT_AUTH_TOKEN |
首次启动生成 | 浏览器/API bearer token;不设置时使用 /app/data/secrets/auth-token(宿主 ./data/secrets/auth-token)中保存的值 |
SCIENCE_AGENT_LOG_LEVEL |
INFO |
运行日志级别阈值(DEBUG / INFO / WARNING / ERROR) |
SCIENCE_AGENT_LOG_DIR |
/app/data/logs |
日志目录;保持默认即随数据目录持久化 |
SCIENCE_AGENT_LOG_MAX_BYTES |
10485760 |
单个类别日志滚动前的最大字节数 |
SCIENCE_AGENT_LOG_BACKUP_COUNT |
5 |
每个类别保留的滚动历史文件数 |
SCIENCE_AGENT_EXECUTOR |
jiuwenswarm |
启动器选择的后端;native 可切回原生循环。 |
SCIENCE_AGENT_JIUWENSWARM_PROMPT / SCIENCE_AGENT_JIUWENSWARM_TOOLS / SCIENCE_AGENT_JIUWENSWARM_PLANNING / SCIENCE_AGENT_JIUWENSWARM_SUBAGENTS / SCIENCE_AGENT_JIUWENSWARM_SKILLS |
prepend / jiuwenswarm / todo / task / jiuwenswarm |
JiuwenSwarm 专属行为;详见 Agent 后端。Compose 会从 .env 转发这些变量。 |
SCIENCE_AGENT_CONTEXT_MODE |
dynamic |
仅 native loop 的上下文装配模式;legacy 与 shadow 仅用于调试和回归对比。JiuwenSwarm 自行管理模型上下文。 |
SCIENCE_AGENT_CONTEXT_PROMPT_BUDGET_CHARS、…_SECTION_MAX_CHARS、…_DATA_BUDGET_CHARS、…_ATTACHMENT_MAX_CHARS、…_CONTRIBUTED_MESSAGE_BUDGET_CHARS、…_MAX_CONTRIBUTED_MESSAGES、…_WINDOW_MESSAGES、…_WINDOW_ROUNDS、…_WINDOW_TOKENS |
见 .env.docker.example |
仅 native loop 的上下文装配预算与窗口,含义见上下文装配 |
SCIENCE_AGENT_CONTEXT_TRACE / SCIENCE_AGENT_CONTEXT_TRACE_DIR |
0 / /app/data/context-traces |
上下文装配追踪开关与输出目录 |
SCIENCE_AGENT_RUNNER_TOKEN |
sciencediscovery-runner-local |
API→runner token(仅容器回环) |
SCIENTIFIC_ENVS |
1 |
托管 Python/R 环境与持久内核;首次启动自动创建 starter Python |
SCIENCE_AGENT_EXEC_TIMEOUT_MS |
7200000 |
单次沙箱执行的墙钟上限 |
SCIENCE_AGENT_KERNEL_IDLE_MS |
1800000 |
持久内核空闲超时(最小 1000 ms) |
SCIENCE_AGENT_SCIENTIFIC_CHANNELS |
conda-forge |
逗号分隔的包渠道白名单 |
SCIENCE_AGENT_PROVISIONER_PATH |
— | 可选管理员 micromamba 路径;留空使用镜像内已校验、并播种到数据目录的副本 |
SCIENCE_AGENT_PACKAGE_CACHE_DIR |
— | 可选预置缓存路径;离线 provision 前需填充内容 |
SCIENCE_AGENT_BWRAP_PATH |
/usr/bin/bwrap |
镜像内 bubblewrap 可执行文件 |
SCIENCE_AGENT_SSH_CONFIG_PATH |
— | 远程 runner 的 SSH 配置文件(容器内路径);放在宿主 ./data/ssh 下即已在 /app/data/ssh 可见 |
SCIENCE_AGENT_USAGE_EXCHANGE_RATES_ENABLED |
true |
用量看板展示币种换算开关;关闭后费用只显示各模型原始币种 |
SCIENCE_AGENT_USAGE_EXCHANGE_RATE_URL |
https://api.frankfurter.dev/v2/rate/USD/CNY |
用量看板 USD/CNY 汇率源,默认使用无需 API key 的 Frankfurter;自定义 URL 时汇率来源按 URL host 标注 |
SCIENCE_AGENT_USAGE_EXCHANGE_RATE_TTL_MS |
21600000 |
用量看板汇率缓存 TTL,默认 6 小时 |
SCIENCE_AGENT_USAGE_EXCHANGE_RATE_TIMEOUT_MS |
2500 |
用量看板汇率请求超时 |
镜像内固定的值不经 .env 修改:SCIENCE_AGENT_DATA_DIR=/app/data、SCIENCE_AGENT_HOST=0.0.0.0、SCIENCE_AGENT_PORT=4310、SCIENCE_AGENT_RUNNER_HOST=127.0.0.1、SCIENCE_AGENT_RUNNER_PORT=4311、SCIENCE_AGENT_RUNNER_URL,以及镜像内 Python 环境、模型目录快照与 micromamba 种子的路径。默认 JiuwenSwarm 模式下,adapter 在容器内监听 0.0.0.0:4310,API 移至容器内 :4410;native 模式下 API 直接监听 :4310。Runner 4311 保持在容器回环,对外只发布 4310。本地模式的 SCIENCE_AGENT_MICROMAMBA_BASE_URL 在 Docker 中不需要:镜像已内置并播种固定版本的 micromamba,运行时不再下载。其余本地模式变量(如 HTTP_PROXY)未被转发,需要时通过 docker-compose.override.yml 追加到服务的 environment 块。
存储布局
应用持久化数据默认都在仓库内(除非覆盖):
| 位置 | 内容 |
|---|---|
.sciencediscovery-data/(SCIENCE_DISCOVERY_DATA_DIR) |
全部运行时状态。请将该目录作为整体备份。 |
.sciencediscovery-data/catalog.sqlite |
目录库:项目、会话、设置、模型配置、权限、specialists(遗留 catalog.json 会自动导入) |
.sciencediscovery-data/mcp-result-cache.sqlite |
MCP 连接器结果缓存 |
.sciencediscovery-data/web-cache.sqlite、.sciencediscovery-data/web-audit.sqlite |
Web Search/Fetch 缓存与 WebInvocation 审计 |
.sciencediscovery-data/model-secrets.key |
提供方 token 的 AES-256-GCM 密钥(仅属主可读;无密钥则 token 无用) |
.sciencediscovery-data/exchange-rates/usage-display-rates.json |
用量看板展示币种汇率缓存;刷新失败时可回退为陈旧缓存,页面会标注陈旧缓存状态 |
.sciencediscovery-data/projects/<project-id>/sessions/<session-id>/workspace/ |
每会话工作区:上传/生成文件、papers/<paper-id>/ 抽取结果 |
.sciencediscovery-data/cas/、.sciencediscovery-data/execution-runs/、.sciencediscovery-data/prompt-manifests/、.sciencediscovery-data/reviews/、.sciencediscovery-data/messages/ |
内容寻址 blob、执行记录、prompt manifest、聊天、评审 |
.sciencediscovery-data/claims/、.sciencediscovery-data/evidence-items/、.sciencediscovery-data/evidence-links/、.sciencediscovery-data/mcp-invocations/、.sciencediscovery-data/artifact-derivations/ |
claim/证据溯源与 MCP 审计 |
.sciencediscovery-data/session-runs/、.sciencediscovery-data/run-events/<session>/<run>/main.jsonl(及 tool-<id>/subagent-<id> 子流)、.sciencediscovery-data/model-usage/、.sciencediscovery-data/connector-invocations/ |
会话运行记录、运行时间线(无损 append-only JSONL;遗留扁平 <run>.json 只读兼容)、模型用量与连接器调用审计 |
.sciencediscovery-data/artifact-plans/、.sciencediscovery-data/artifact-jobs/、.sciencediscovery-data/artifact-extraction-jobs/ |
下载与 PDF 抽取任务状态 |
.sciencediscovery-data/scientific-envs/、.sciencediscovery-data/runner-runtime/ |
托管 Python/R 环境与 runner 临时状态 |
.sciencediscovery-data/skills/ |
本地托管技能包与 revision |
.sciencediscovery-data/envs/{paper,gateway,adapter,memory-graph,evolve}/ |
源码模式下可重建的 uv 服务环境;Docker 镜像将这些环境放在 /opt/sciencediscovery/envs/ |
.sciencediscovery-data/logs/{api,run,gateway,runner,memory-graph}.log |
分级、按类别和大小滚动的运行日志;memory-graph 文件仅在功能启用时使用 |
| 浏览器 local storage | 仅本地服务访问令牌——模型凭证从不离开后端 |
数据目录是唯一运行时根:通过设置 SCIENCE_DISCOVERY_DATA_DIR 可同时迁移状态与服务环境(例如 SCIENCE_DISCOVERY_DATA_DIR=/srv/science-discovery ./scripts/run-local.sh)。原 SCIENCE_AGENT_DATA_DIR 仍作为兼容回退读取并打印日志;新旧同时设置时 SCIENCE_DISCOVERY_DATA_DIR 优先,且会记录该选择。对于仓库启动器,已有默认 data 目录会一次性移动到 .sciencediscovery-data。对于单文件 launcher,已有默认 ./science-discovery-data 或更早的 ./science-agent-data 会按由新到旧的顺序一次性导入 ./.sciencediscovery-data;目标已存在时绝不覆盖并打印跳过原因。删除当前生效的数据目录会清除所有项目、会话、凭证与审计记录。在 Docker 部署中,同一目录就是宿主上的 bind mount ./data,区别只在于 envs/ 位于镜像内。services/paper/.venv 与 services/gateway/.venv 仅在独立开发或 smoke 命令中出现;应用本身使用 .sciencediscovery-data/envs/ 下的环境。
单文件 payload 覆盖变量遵循同一命名和优先级:用 SCIENCE_DISCOVERY_PAYLOAD_CACHE_DIR 指定解包缓存,或用 SCIENCE_DISCOVERY_PAYLOAD_DIR 指定已解包 payload;对应的 SCIENCE_AGENT_* 名称继续作为带日志的兼容回退。