Skip to content

配置说明 ​

Go server(server/server_config.json) ​

路径相对于进程工作目录解析。

本地配置文件不入库。 server/server_config.json 在 .gitignore 里,因为含有 LLM key、数据库 DSN 这类敏感项。首次使用先复制模板再改:

bash
cp server/server_config.example.json server/server_config.json

直接改被跟踪的模板文件,git reset --hard 时会被覆盖。

key默认env 覆盖说明
host / port127.0.0.1 / 8090—监听地址
dataDir../data—数据目录,必须和编辑服务的 VIEWER_DATA_DIR 是同一个目录
nodeBin / converterScriptnode / ../converter/convert.js—转换器调用
maxUploadMB200—上传上限
webDist../web/distVIEWER_WEB_DIST前端构建产物目录。存在就由 server 托管,缺失时静态路径 503、API 照常
pgDSN""VIEWER_PG_DSN配置即启用 PostgreSQL,空则用文件存储
editServiceURLhttp://127.0.0.1:8100VIEWER_EDIT_SERVICE_URLIFC 编辑服务地址
cadServiceURLhttp://127.0.0.1:8200VIEWER_CAD_SERVICE_URLDXF 编辑服务地址
llmAPIKey""VIEWER_LLM_API_KEYchat agent 的 LLM key。留空则进入离线模式,用确定性 mock,不产生真实回复
llmBaseURL""VIEWER_LLM_BASE_URLOpenAI 兼容端点,如 https://api.openai.com/v1
llmModel""VIEWER_LLM_MODEL模型名,如 gpt-4o、deepseek-chat
skillsDir../skills/distVIEWER_SKILLS_DIR正式 skill 集合目录,agent 只面对 dist,不感知开发版本
skillVenv../skills/.venvVIEWER_SKILLS_VENVskill 专用 venv,装法:bash tools/install_skill_venv.sh
skillCLIaiplan,aidxfv3,aiifcVIEWER_SKILLS_CLIagent 可执行命令的白名单
apiToken""VIEWER_API_TOKENBearer 鉴权。留空即关闭,只适合本机开发;生产必须设置
corsOriginshttp://localhost:5173,http://localhost:8080VIEWER_CORS_ORIGINSCORS 白名单,逗号分隔

最小配置示例:

json
{
  "host": "127.0.0.1",
  "port": 8090,
  "dataDir": "../data",
  "nodeBin": "node",
  "converterScript": "../converter/convert.js",
  "maxUploadMB": 200,
  "webDist": "../web/dist",
  "pgDSN": "",
  "editServiceURL": "http://127.0.0.1:8100",
  "cadServiceURL": "http://127.0.0.1:8200",
  "skillsDir": "../skills/dist",
  "skillVenv": "../skills/.venv",
  "skillCLI": "aiplan,aidxfv3,aiifc"
}

鉴权与 CORS ​

鉴权默认关闭,因为编辑 API 会在沙箱里执行脚本,等于代码执行入口,所以生产环境必须设置 apiToken。设置之后,所有端点都要求 Authorization: Bearer <token>。只有三类只读文件端点豁免,因为 xeokit 和 <img> 标签带不了请求头:

  • GET /v1/models/{id}/model.xkt
  • GET /v1/models/{id}/metadata.json
  • GET /v1/models/{id}/issues/{file}

浏览器端把 token 存在 localStorage,键名 aiifc_token。遇到 401 会弹输入框,保存后自动重试原请求。chat 的事件流用 EventSource,没法带自定义头,这一条路径放行 ?token= 查询参数。

两个 Python 编辑服务自身没有鉴权,安全完全靠只监听 127.0.0.1。不要把它们暴露到网络上。

chat agent ​

对话由 Go 进程内的 Eino agent 驱动,不依赖外部服务。要点:

  • LLM 三参见上表。key 留空时用离线 mock,方便测试。
  • skill 三项配置:skillsDir 指向正式集合,skillVenv 提供 CLI 运行环境,skillCLI 是命令白名单。
  • 文件工具里 grep 依赖 ripgrep,没装会报错,用 sudo apt install ripgrep 装上。
  • 编排是主 agent 加子 agent 两层:orchestrator 负责对话和派活,ifc-agent 和 cad-agent 各带自己的 skill 干活,子 agent 的输出分组显示在对话栏里。
  • agent 可以中途向用户提问,回答后继续执行。
  • 旧的 VIEWER_OPENCODE_URL 已退役,设置了也没有效果,可以从部署环境里删掉。

edit-service ​

环境变量默认说明
VIEWER_DATA_DIR../data数据目录。必须与 server 的 dataDir 一致,否则编辑请求 404
EDIT_SERVICE_PORT8100监听端口

cad-edit-service ​

与 edit-service 同构,只多一项流目录配置:

环境变量默认说明
VIEWER_DATA_DIR../data数据目录,三方必须一致
AIDXF_FLOWS_DIRflowsDXF 沙箱契约层目录
CAD_SERVICE_PORT8200监听端口

沙箱环境变量 ​

script/run 和 script/save 在服务端沙箱里执行脚本。机制见沙箱执行环境,部署相关的变量如下:

环境变量默认说明
SANDBOX_BACKENDautoauto、bwrap、rlimit 三选一。生产只有 bwrap,rlimit 仅供测试
SCRIPT_RUN_CONCURRENCY3run/save 并发上限
SCRIPT_MAX_FSIZE_BYTES / SCRIPT_MAX_OUTPUT_BYTES / SCRIPT_MAX_PRODUCT_BYTES256MiB / 1MiB / 256MiB沙箱资源限额
SANDBOX_ENV_CACHE_DIR$XDG_CACHE_HOME/aibim-sandbox-envs依赖环境缓存根。不要配到 data/ 或 /tmp 下
SCRIPT_ENV_BUILD_TIMEOUT_S300依赖环境构建超时

脚本可以用 PEP 723 块声明依赖,声明即全量替换默认集。run/save 依赖 uv 二进制,缺失报 503。

PostgreSQL ​

不配置时,Issue、override、修改记录全部落文件,零外部依赖。配置 DSN 后自动建三张表。模型文件和版本快照始终在文件系统里。

测试要用 VIEWER_TEST_PG_DSN 指向专用测试库,测试会删表。

端口 ​

默认端口一览:server 8090,edit-service 8100,cad-edit-service 8200,web 开发服务器 5173。

Apache-2.0 · xeokit AGPL 注意事项见项目介绍