从零到发布:用 AI Agent 构建 BTC 价格监控应用的全流程实战

举报
yd_240501397 发表于 2026/10/17 01:17:47 2026/10/17
【摘要】 从零到发布:用 AI Agent 构建 BTC 价格监控应用的全流程实战本文记录了使用华为云 CodeArts Agent 编写代码、启动预览、推送 GitCode 仓库、发布到开发者作品展览馆的完整流程,分享在沙箱环境下的网络处理、端口管理、隧道穿透等实战经验。一、项目背景比特币价格波动剧烈,手动刷新行情页面效率低下。我需要一个工具:实时刷新 BTC 价格,无需手动操作价格预警 — 波动超...

从零到发布:用 AI Agent 构建 BTC 价格监控应用的全流程实战

本文记录了使用华为云 CodeArts Agent 编写代码、启动预览、推送 GitCode 仓库、发布到开发者作品展览馆的完整流程,分享在沙箱环境下的网络处理、端口管理、隧道穿透等实战经验。

一、项目背景

比特币价格波动剧烈,手动刷新行情页面效率低下。我需要一个工具:

  • 实时刷新 BTC 价格,无需手动操作
  • 价格预警 — 波动超过阈值时主动通知我
  • 可视化趋势 — 直观看到价格走势
  • 简洁好用 — 打开浏览器即用,无需安装

技术选型很直接:Node.js + Express 后端 + 原生 HTML/CSS/JS 前端。不引入 React/Vue 等框架,保持轻量。数据源选用 CoinGecko 免费 API,每 30 秒轮询一次。

二、架构设计

┌─────────────────────┐     WebSocket      ┌──────────────────────┐
│   浏览器前端         │  ←──────────────→  │   Node.js 服务端      │
│                      │                    │                      │
│  · 价格展示卡片      │                    │  · Express HTTP      │
│  · Canvas 折线图     │                    │  · WebSocket Server  │
│  · Notification API  │                    │  · 30s 定时轮询      │
│  · 阈值设置面板      │                    │  · 模拟数据后备      │
└─────────────────────┘                    └──────────┬───────────┘
                                                      │ HTTP
                                                      ▼
                                           ┌──────────────────────┐
                                           │   CoinGecko API      │
                                           │   BTC 实时价格        │
                                           └──────────────────────┘

核心设计决策:

1. WebSocket 而非轮询

前端不需要定时请求后端,后端有新数据时主动推送。延迟更低,资源消耗更小。ws 库在 Express 服务器上挂载 WebSocket 升级端点,几行代码搞定。

2. 模拟数据后备

这是我踩的第一个坑。沙箱环境网络受限,无法直连 CoinGecko API。与其让应用直接报错,不如设计一个优雅降级方案:

async function fetchBtcPrice() {
  try {
    const res = await fetch('https://api.coingecko.com/...');
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return await res.json();
  } catch (e) {
    // 网络不可达 → 模拟数据随机游走
    return generateMockPrice();
  }
}

模拟数据基于上一次价格做 ±0.5% 随机游走,走势逼真。部署到有外网的环境时自动切换真实数据,零配置改动。

3. Canvas 手绘图表

不引入 Chart.js 等图表库。价格折线图用 Canvas 2D API 直接绘制,120 个数据点,代码不到 60 行。好处是零依赖、加载快、完全可控。

4. 浏览器原生通知

if (Notification.permission === 'granted') {
  new Notification('BTC 价格预警', {
    body: `当前价格 $${price},波动 ${change}%`
  });
}

不需要推送服务(PWA Push),不需要后端存储用户设备信息。浏览器 Notification API 足够。首次使用请求权限,之后每次价格波动超阈值自动弹通知。

三、AI Agent 编码实战

这次没有手写一行代码,全程通过 CodeArts Agent 完成。几个关键经验:

1. 指令要具体

给 Agent 的 prompt 不是"帮我写个 BTC 监控",而是:

创建 BTC 价格监控网页应用。技术栈 Node.js + Express + WebSocket。功能:实时获取 BTC 价格(CoinGecko API,每 30 秒轮询)、WebSocket 推送、浏览器通知(波动超 2% 时触发)、Canvas 折线图、深色主题卡片式布局。服务监听 8080 端口。

技术栈、功能点、API 来源、更新频率、界面风格、端口号——全部明确。Agent 一次就生成了可运行的代码。

2. Agent 会自主解决问题

CoinGecko API 在沙箱中不可达,Agent 没有卡住等我问,而是自动判断网络不通,主动添加了模拟数据后备方案。这种自主排障能力省了很多来回。

3. 端口冲突处理

8080 端口被环境中已有进程占用,Agent 自动检测空闲端口改用 3000。这个细节很重要——盲目占用已占端口会导致启动失败。

四、发布到作品展览馆

代码写完只是第一步,发布到华为云开发者作品展览馆才是完整闭环。整个流程涉及 8 个步骤,这里分享几个关键环节:

1. GitCode OAuth 授权

发布需要代码托管在 GitCode。流程是:

  1. Agent 检测到本地无 GitCode 凭证
  2. 启动 OAuth 回调服务器,生成登录链接和二维码
  3. 用户在浏览器中扫码授权
  4. Token 自动落盘,后续操作无需再次登录

整个过程对用户来说就是"扫个码",Agent 处理了所有后台逻辑。

2. DevBridge 隧道穿透

作品需要在线可预览。本地服务跑在 3000 端口,但外部无法直接访问。DevBridge 隧道解决了这个问题:

本地 localhost:3000  →  DevBridge 中继  →  公网 URL

创建隧道 → 配置端口 → 启动托管,三步拿到公网地址。面试官、同事、朋友打开链接就能看到你的应用,不用装任何东西。

3. 封面自动生成

作品需要封面图。Agent 的处理方式让我印象深刻:

  1. preflight — 安装 Playwright + Chromium + CJK 字体(首次约 3 分钟)
  2. 截图 — 用无头浏览器访问运行中的应用,截取实际页面
  3. 合成 — 将截图 + 标题 + 简介合成 16:9 封面
  4. 字形校验 — 像素级检查中文是否正常渲染(防止豆腐块)

最关键的是第四步。沙箱环境字体不全,中文很容易渲染成方块。Agent 有一套字形校验机制,确保封面上的中文清晰可读。

4. STS 临时凭证

发布需要华为云 IAM 凭证,但直接用永久 AK/SK 上传不安全。流程使用 STS 临时凭证:

  • 创建 IAM 自委托,生成 900 秒有效期的临时 AK/SK
  • 永久凭证留本地,只上传临时凭证
  • 过期自动刷新,全程无感知

五、踩坑记录

坑 1:沙箱文件系统隔离

CodeArts 运行在 bwrap 沙箱中,文件系统与宿主机隔离。Agent 在沙箱内创建的文件,宿主机直接 ls 看不到。

解法:沙箱的 /workspace 目录通过 --bind 挂载到宿主机。把文件复制到 /workspace/ 下,宿主机就能访问。关键是要理解 bwrap 的挂载映射关系。

坑 2:CoinGecko API 不可达

沙箱网络策略限制外网访问,fetch 直接失败。

解法:模拟数据后备。不是 hack,是正经的优雅降级——很多生产系统也会在 API 不可用时使用缓存或模拟数据。

坑 3:Git 仓库无远程

git init + git commit 只创建了本地仓库,没有 origin 远程。发布流程需要远端 URL。

解法:先通过 GitCode API 创建仓库,再 git remote add origin + git push。注意 remote URL 中不要包含 token(发布前清理)。

坑 4:端口被占用

环境中 8080 端口已有进程。直接启动会报 EADDRINUSE。

解法:用 ss -tlnp | grep :8080 检测端口占用,自动选择空闲端口。永远不要假设端口是空闲的。

六、项目数据

指标 数值
代码总行数 681 行
后端文件 server.js (81 行)
前端文件 index.html + style.css + app.js (568 行)
外部依赖 express, ws (仅 2 个)
数据更新频率 30 秒
价格历史保留 120 个数据点
通知触发阈值 默认 2%(可自定义)

七、总结

这次实践有几个感悟:

1. AI Agent 改变了编码方式。 从"写代码"变成"描述需求 + 审查结果"。指令越具体,产出质量越高。Agent 还能自主排障,减少人工干预。

2. 发布流程比写代码更复杂。 OAuth 授权、隧道穿透、封面生成、凭证管理——每一步都有坑。把这些流程固化成 Skill,一次配置反复使用,是正确的做法。

3. 优雅降级是基本素养。 网络不通就用模拟数据,端口占用就换端口,字体缺失就补装。不要让用户看到报错,要让他们看到"虽然有限制,但功能正常"。

4. 安全意识贯穿始终。 STS 临时凭证替代永久 AK/SK,GitCode OAuth 替代明文密码,remote URL 清理 token。安全不是事后补丁,是设计时就考虑的。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。