淬火行动发的 Solution Agent 只有 ARM 版?笔者把它按 Dockerfile 魔改上了 Intel 笔记本:绕过 gitcode submodule 的坑、从 arm64 镜像里提取 banner.sh 和 Wiki 数据、端口重映射、重建索引顺手关掉 Flask debug——最终 58 个方案完整跑通。
改造Solution Agent for x86~~
环境:淬火行动培训 · Docker · arm64 (aarch64) → amd64 (x86_64) · 镜像 9.12GB → 15GB
本文首发于华为 O3 社区,2026-11-09 搬运至本站
一、缘起:给 SA 搬个家
借用一句人民的名义经典台词:Solution Agent好啊,Solution Agent得会玩啊~
在淬火行动培训的第一天,笔者就觉得Solution Agent(后文简称SA)是个好东西,要是自己的电脑上能启一个,那以后售前项目岂不是起飞了~
然而查阅SA项目链接,发现SA目前只有for ARM版本,想要在笔者的Intel笔记本上运行得根据Dockerfile略微进行魔改~在AI Coding已经相当成熟的今天,即便以前没有接触过容器的工程师,想要实现也是非常容易的吧~
- ✓ 改造前架构:arm64 (aarch64)
- ✓ 改造后架构:amd64 (x86_64)
- ✓ 改造前镜像大小:9.12GB
- ✓ 改造后镜像大小:15GB
二、改造路上的小阻碍
这里分享几个改造过程中遇到的【小阻碍】:
2.1 msmodeling submodule 拉取失败
现象:git submodule update --init --recursive 报 fatal: remote-curl: bad line length character: <CH,gitcode.com 访问异常。
原因:git submodule update 方式与 gitcode.com 不兼容。
解决:绕过 submodule 机制,直接 clone 指定分支:
cd /home/antares/solution-agent
rm -rf msmodeling
git clone --branch pr/serving-cast-mtp-support https://gitcode.com/yk77/msmodeling.git msmodeling
结果:成功检出 1723 个文件。
2.2 scripts/banner.sh 缺失
现象:Dockerfile 第 47 行 COPY scripts/banner.sh /usr/local/bin/banner.sh 报 not found,scripts 目录仅有 start_server.py。
原因:该文件在当前 Git 工作目录中缺失。
解决:从已有 arm64 镜像中提取。
结果:文件内容为入口横幅脚本(打印版权信息后 exec “$@”),与 Git HEAD 一致。
三、配置 TIPs:API KEY 换成自己的
培训课程导师提供的是DeepSeek的API KEY,无论是原生ARM版本还是魔改的x86版本,都需要使用自己的KEY:
docker exec solution-agent bash -c 'cat > /root/.config/opencode/opencode.jsonc << "EOF"
{
"$schema": "https://opencode.ai/config.json",
"skills": {
"paths": ["skills/ascend"]
},
"provider": {
"Ark": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ark",
"options": {
"baseURL": "https://ark.cn-beijing.volces.com/api/plan/v3",
"apiKey": "ark-******这里不能告诉你********"
},
"models": {
"ark-code-latest": { "name": "ark-code-latest" }
}
}
},
"model": "Ark/ark-code-latest"
}
EOF
'
四、端口适配与首次启动
4.1 端口对照
课堂老师提供的镜像使用的端口和项目本身使用的端口不一致,笔者为了避免麻烦,就改成了和课堂老师使用镜像一致的端口:

4.2 修改启动端口
docker exec solution-agent sed -i \
's/^ANALYZE_PORT=5000/ANALYZE_PORT=8013/; s/^AGENT_PORT=5001/AGENT_PORT=8014/' \
/app/plateform/backend/start.sh
4.3 wiki 目录报错
镜像构建完毕启动后出现报错:
- ✓ 现象:Agent 服务(app_opencode.py)启动时报 FileNotFoundError: ‘/app/industry-solution-data/wiki’。
- ✓ 原因:Wiki 知识库数据目录不入库(Docker 部署文档明确说明),需手动创建。
- ✓ 解决:创建空目录后,WikiIndexManager.build_index() 遍历空目录返回空索引,服务正常启动(行业方案检索功能因无数据不可用,需挂载真实 Wiki 数据方可完整使用)。
五、启动服务与健康检查
5.1 启动命令
解决索引问题后启动服务:容器以 –net=host 模式运行,容器内端口即宿主机端口,三个服务均在后台运行:
# 后端(分析服务 :8013 + Agent 服务 :8014)
docker exec -d solution-agent bash -c 'cd /app/plateform/backend && bash start.sh > /tmp/backend.log 2>&1'
# 前端(:5002)
docker exec -d solution-agent bash -c 'cd /app/plateform && python -m http.server 5002 > /tmp/frontend.log 2>&1'
5.2 健康检查
# 分析服务
$ docker exec solution-agent curl -s http://localhost:8013/api/health
{"msmodeling_installed":true,"msmodeling_path":"/app/msmodeling","service":"plateform-backend (database + msmodeling)","status":"ok"}
# Agent 服务
$ docker exec solution-agent curl -s http://localhost:8014/health
{"backend":"claude-code","service":"昇腾行业Solution Agent (Claude Code + model-agent)","status":"healthy","version":"2.0.0"}
# 前端
$ docker exec solution-agent curl -s -o /dev/null -w "%{http_code}" http://localhost:5002/
200
5.3 一键启动脚本
下面提供一键启动脚本,傻瓜式使用才是王道~

脚本参考(原文节选):
#!/bin/bash
# solution-agent 服务管理脚本(后台运行)
# 用法: ./start_solution_agent.sh [start|stop|status|health|restart|logs [backend|frontend]]
CONTAINER="solution-agent"
ANALYZE_PORT=8013
AGENT_PORT=8014
FRONTEND_PORT=5002
start() {
echo "==> 确保 wiki 数据目录存在..."
docker exec "$CONTAINER" mkdir -p /app/industry-solution-data/wiki
echo "==> 启动后端(:${ANALYZE_PORT} 分析服务 / :${AGENT_PORT} Agent 服务)..."
docker exec -d "$CONTAINER" bash -c 'cd /app/plateform/backend && bash start.sh > /tmp/backend.log 2>&1'
echo "==> 启动前端(:${FRONTEND_PORT})..."
docker exec -d "$CONTAINER" bash -c 'cd /app/plateform && python -m http.server '"$FRONTEND_PORT"' > /tmp/frontend.log 2>&1'
echo "等待服务启动..."
sleep 8
status
echo ""
health
}
stop() {
echo "==> 停止所有服务..."
docker exec "$CONTAINER" bash -c '
六、改造项清单
本次改造涉及的全部改造项清单如下:

七、实战问题:「暂无方案,敬请期待」
最后讲一讲在改造后使用SA for x86遇到的小问题:x86 平台前端页面点击”生成方案设计”后,始终显示”暂无方案,敬请期待”,而 arm64 平台正常显示完整方案。
7.1 排查过程
第一步:确认前端调用链——通过阅读前端 index.html 代码,确认 generateSolution() 函数的调用流程。
第二步:逐个测试 API:

第三步:定位根因——查看 app_opencode.py 第 679 行,generate-solution 的实现逻辑(原文此处有代码截图):方案生成依赖 Wiki 知识库索引,通过 wiki_index_manager.lookup() 查找匹配方案,索引为空时返回”暂无方案”。检查 Agent 服务日志,根因确认:Wiki 知识库索引为空(0 个方案)。

7.2 修复步骤
- ✓ 修复 1:从 arm64 镜像提取 Wiki 数据——Wiki 数据包含 10 个行业目录、17 个 .md 文件
- ✓ 修复 2:重建 Wiki 索引
- ✓ 修复 3:关闭 Flask debug 模式
- ✓ 修复 4:清除 .pyc 缓存并重启
- ✓ 第五步:验证结果——Agent 服务日志确认
- ✓ 第六步:持久化更新——将修复持久化到宿主机,更新 docker run 命令新增挂载
7.3 持久化更新

start_all.sh 更新:启动时自动清理 __pycache__ 避免缓存问题。
7.4 修复后的最终状态

浏览器访问,方案生成恢复正常:

本文由 奶莉小跟班 原创,首发于华为 O3 社区,哦对了,我就是奶莉小跟班~~~~