我用Seed Evolving打造了一个金价哨兵:无需盯盘也能自动生成提醒
最近金价波动比较频繁,我经常会遇到一个很真实的问题:想知道自己买入的黄金现在大概是赚了还是亏了,但又不想隔几分钟就打开 App 看一眼。
于是我把这个需求丢给 Seed Evolving,让它先帮我拆成一个能落地的小工具:数据从哪里来、哪些逻辑必须由代码确定计算、哪些部分适合交给模型生成、金融提醒应该怎么避开“投资建议”的边界。
这篇文章记录的是:我如何在 Seed Evolving 的指导下,从一个“我不想老盯金价”的想法,做出一个可以抓真实金价、计算盈亏、调用 Seed Evolving API 生成提醒文案的金价监控 Agent。

说明:本文只做技术实践,不构成任何投资建议。工具只负责价格监控、盈亏计算和提醒文案生成,不预测涨跌,不建议买卖。
一、我想做什么
我一开始只给 Seed Evolving 提了一个很粗的需求:
我想做一个金价监控工具,不想一直盯盘。
它要能看实时金价,算我现在赚了还是亏了,到阈值后提醒我。
提醒不能像投资建议,只能做价格记录。
Seed Evolving 给我的拆解是:先不要急着写完整程序,而是把工具拆成 5 个模块。
- 金价数据源:从京东金融页面抓“实时金价”。
- 持仓计算:根据买入金价和买入金额算克数。
- 阈值判断:盈利或亏损超过设定金额才提醒。
- Seed Evolving API:把数据整理成自然语言提醒。
- 风险边界:不预测涨跌,不给买卖建议。
这一步对我很有帮助,因为它把一个模糊想法变成了可以逐步实现的任务清单。
如果不用 Seed Evolving,我大概率会直接写成一句很硬的打印:
当前浮盈 173.37 元,达到盈利阈值。
但 Seed Evolving 提醒我,金融类工具最重要的不是把话说得刺激,而是要把“触发原因、当前状态、风险边界”说清楚。所以最后提醒变成了:
盈利提醒:当前金价 874.91 元/克,持仓约 11.6279 克,浮动盈亏 173.37 元。本提醒仅用于记录价格变化,不构成投资建议。
这不是单纯“美化文案”,而是让工具从一段脚本变成一个更像 Agent 的提醒助手。
二、整体方案
根据 Seed Evolving 的建议,我把工具拆成三层:
金价页面/API
↓
Python 脚本:抓取价格、计算盈亏、判断阈值
↓
Seed Evolving:指导实现思路 + API 生成提醒文案
↓
控制台/弹窗/消息推送

Seed Evolving 参与了两类事情。
第一类是开发过程中的指导:
- 帮我把需求拆成数据源、计算、提醒、模型调用几个模块。
- 建议用 Selenium 处理京东金融页面的 JS 渲染。
- 提醒我把 API Key 放进环境变量。
- 帮我收紧 Prompt,避免输出投资建议。
第二类是运行时的能力:
- 根据实时金价、持仓、盈亏和触发原因生成提醒。
- 在 API 失败时保留本地兜底文案。
- 后续可以扩展成日报、异常解释、多平台价格摘要。
其中确定性的事情仍然交给代码,而需要理解上下文和组织语言的事情交给 Seed Evolving。
三、准备 API Key
火山方舟支持使用兼容 OpenAI SDK 的方式调用模型。这里我使用 Seed Evolving:
我在火山方舟 Agent Plan 里创建了专属 API Key。实际发布或截图时,一定要把 Key 中间部分打码,只保留开头和结尾用于说明即可。
ARK_API_KEY=你的火山方舟APIKey
ARK_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
ARK_MODEL=doubao-seed-evolving
注意:API Key 不要写死在代码里,也不要提交到 GitHub。建议放到环境变量里。
Python 依赖:
pip install openai selenium webdriver-manager beautifulsoup4
四、核心代码
按照 Seed Evolving 给出的拆解,我没有一上来就写一个巨大的脚本,而是把任务拆成几个小步骤:先拿到真实金价,再算盈亏,再判断是否提醒,最后把结果交给 Seed Evolving 生成文案。

1. 定义数据源
金价数据来自京东金融黄金页面。这个页面需要 JS 渲染,所以我用 Selenium 打开页面,再用 BeautifulSoup 解析页面内容。
GOLD_URL = (
"https://m.jr.jd.com/finance-gold/msjgold/homepage"
"?from=fhc&ip=66.249.71.78&orderSource=6&ptag=16337378.0.1"
)
2. 抓取实时金价
核心思路是:启动无头 Chrome,等待页面渲染,找到包含“实时金价”的节点,再用正则提取价格数字。
def fetch_gold_price() -> float:
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=390,844")
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options,
)
try:
driver.get(GOLD_URL)
time.sleep(4)
soup = BeautifulSoup(driver.page_source, "html.parser")
titles = soup.find_all("span", class_="gold-price-persent-title")
for title in titles:
text = title.get_text(" ", strip=True)
if "实时金价" in text:
match = re.search(r"(d+(?:.d+)?)", text)
if match:
return float(match.group(1))
raise RuntimeError("未在页面中找到实时金价")
finally:
driver.quit()
3. 计算持仓和盈亏
这里不让模型参与计算,因为这类结果必须稳定、可复现。买入克数、当前价值、浮动盈亏都由代码直接算。
def calc_position(buy_price: float, buy_amount: float, current_price: float) -> Position:
weight = buy_amount / buy_price
current_value = weight * current_price
profit = current_value - buy_amount
return Position(buy_price, buy_amount, weight, current_price, current_value, profit)
4. 判断是否触发提醒
阈值也交给代码处理。比如浮盈超过 20 元触发盈利提醒,浮亏超过 30 元触发亏损提醒。
def should_alert(profit: float, profit_threshold: float, loss_threshold: float):
if profit >= profit_threshold:
return True, "盈利提醒"
if profit <= -abs(loss_threshold):
return True, "亏损提醒"
return False, "未触发"
5. 调用 Seed Evolving 生成提醒
这一段是运行时真正调用 Seed Evolving API 的地方。它接收前面代码算出的结构化数据,再生成一段符合边界的提醒。Prompt 里明确限制它不预测涨跌,也不提供买卖建议。
def ask_seed_evolving(position: Position, reason: str) -> str:
client = OpenAI(
api_key=os.getenv("ARK_API_KEY"),
base_url=os.getenv("ARK_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3"),
)
prompt = f"""
请生成一段简洁的金价提醒文案。
限制:不预测涨跌,不提供买入、卖出、加仓、止损等交易建议。
数据:
- 触发原因:{reason}
- 当前金价:{position.current_price:.2f} 元/克
- 持仓克数:{position.weight:.4f} 克
- 浮动盈亏:{position.profit:.2f} 元
"""
response = client.chat.completions.create(
model=os.getenv("ARK_MODEL", "doubao-seed-evolving"),
messages=[
{"role": "system", "content": "你只生成价格提醒文案,不提供投资建议。"},
{"role": "user", "content": prompt},
],
temperature=0.3,
)
return response.choices[0].message.content.strip()
完整可运行代码放在文末附录。
五、Seed Evolving 在这里做了什么
这个项目里,Seed Evolving 不是最后才接进来的“文案插件”,而是从设计阶段就参与了。
1. 帮我把需求拆成模块
我最开始的需求很散:盯金价、算盈亏、提醒、不要太麻烦。Seed Evolving 把它拆成了几个明确函数:
fetch_gold_price():获取实时金价
calc_position():计算持仓和盈亏
should_alert():判断是否触发提醒
ask_seed_evolving():生成提醒文案
main():串起整个流程
这让我写代码时不会混在一个 while 循环里乱堆逻辑。
2. 指导我选真实数据源方案
一开始我想直接用 requests 抓页面,但京东金融页面里的金价是 JS 渲染出来的。Seed Evolving 建议我改成 Selenium:先打开页面,等待渲染,再解析 HTML。
这个建议直接决定了工具能不能拿到真实金价,而不是停留在模拟数据。
3. 帮我设计金融提醒边界
金价提醒很容易写成“可以卖了”“赶紧止损”这种话,但这就偏向投资建议了。Seed Evolving 帮我把 Prompt 限制成:
不预测涨跌。
不提供买入、卖出、加仓、止损等交易建议。
只说明当前价格、持仓、浮动盈亏和触发原因。
所以最后生成的是提醒,而不是交易建议。
4. 运行时生成提醒文案
工具跑起来后,Seed Evolving 会根据实时数据生成一段提醒。比如这次实测里,它拿到的数据是:
当前金价:874.91 元/克
持仓克数:11.6279 克
浮动盈亏:173.37 元
触发原因:盈利提醒
最后输出:
盈利提醒:当前金价 874.91 元/克,持仓约 11.6279 克,浮动盈亏 173.37 元。本提醒仅用于记录价格变化,不构成投资建议。
我觉得这个点才是它最适合的位置:Seed Evolving 先指导我把工具拆清楚,再在运行时把结果说得清楚、克制、符合边界。
六、实测效果
假设输入:
买入金价:860.00
买入金额:10000
盈利提醒阈值:20
亏损提醒阈值:30
当前金价:874.91
程序会先计算:
买入克数:11.6279 克
当前价值:10173.37 元
浮动盈亏:173.37 元
因为浮盈超过 20 元,触发盈利提醒,然后交给 Seed Evolving 生成文案:
金价已触发盈利提醒:当前金价为 874.91 元/克,你的持仓约 11.6279 克,当前浮动盈亏约 173.37 元,已超过设置的盈利提醒阈值。请把它作为价格变化记录参考,不要仅凭单次提醒做交易决策。
这样我不用一直盯盘,只需要在触发阈值时看一眼提醒。下面是我在 VS Code 里实际运行的截图,可以看到数据源、实时金价,以及 Seed Evolving 生成的提醒文案。

七、踩坑记录
1. API Key 不能写进代码
最开始我差点直接把 Key 放进脚本里,这非常危险。正确方式是用环境变量读取:
api_key = os.getenv("ARK_API_KEY")
如果没有配置 Key,就自动退回本地模板提醒。
2. 页面结构可能变化
金价页面如果改版,爬虫选择器可能失效。所以我把 fetch_gold_price() 单独封装出来,后续更换数据源时不影响盈亏计算和提醒逻辑。
3. 不要重复提醒
如果每 30 秒检查一次,达到阈值后可能一直刷屏。所以代码里用 last_reason 做了一层简单去重,避免同一种提醒重复弹出。
4. 金融内容要守边界
这个工具只提醒“发生了什么”,不告诉用户“该怎么交易”。Prompt 里也明确限制了:
不预测涨跌,不给买入、卖出、加仓、止损等交易建议。
八、还能怎么扩展
后续我想继续加几个功能:
- 接入邮件、企业微信或飞书机器人推送。
- 记录每次价格,自动生成走势图。
- 每天晚上让 Seed Evolving 生成一段金价监控日报。
- 同时监控多个平台金价,提示价差。
- 做成一个桌面小窗,放在电脑右下角。
其中我最想做的是“每日摘要”。因为单次提醒解决的是即时问题,日报解决的是复盘问题。
总结
这个金价哨兵不是一个复杂项目,但它很适合用来验证 Seed Evolving 在小工具里的价值:
- 真实需求来自生活。
- Python 负责稳定计算和抓取真实数据。
- Seed Evolving 负责需求拆解、实现建议、Prompt 边界和运行时提醒生成。
- 整个工具可运行、可扩展、可继续迭代。
对我来说,AI 编程最有意思的地方不是生成一大段看起来很厉害的代码,而是把一个很小、很具体、真的会用到的需求做完整。
这次的结论也很简单:不用一直盯盘了,让工具替我盯着就行。
附:完整代码
import os
import re
import time
from dataclasses import dataclass
from bs4 import BeautifulSoup
from openai import OpenAI
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
GOLD_URL = (
"https://m.jr.jd.com/finance-gold/msjgold/homepage"
"?from=fhc&ip=66.249.71.78&orderSource=6&ptag=16337378.0.1"
)
@dataclass
class Position:
buy_price: float
buy_amount: float
weight: float
current_price: float
current_value: float
profit: float
def fetch_gold_price() -> float:
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=390,844")
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options,
)
try:
driver.get(GOLD_URL)
time.sleep(4)
soup = BeautifulSoup(driver.page_source, "html.parser")
titles = soup.find_all("span", class_="gold-price-persent-title")
for title in titles:
text = title.get_text(" ", strip=True)
if "实时金价" in text:
match = re.search(r"(d+(?:.d+)?)", text)
if match:
return float(match.group(1))
page_text = soup.get_text(" ", strip=True)
match = re.search(r"实时金价s*(d+(?:.d+)?)", page_text)
if match:
return float(match.group(1))
raise RuntimeError("未在页面中找到实时金价")
finally:
driver.quit()
def calc_position(buy_price: float, buy_amount: float, current_price: float) -> Position:
weight = buy_amount / buy_price
current_value = weight * current_price
profit = current_value - buy_amount
return Position(buy_price, buy_amount, weight, current_price, current_value, profit)
def should_alert(profit: float, profit_threshold: float, loss_threshold: float):
if profit >= profit_threshold:
return True, "盈利提醒"
if profit <= -abs(loss_threshold):
return True, "亏损提醒"
return False, "未触发"
def fallback_message(position: Position, reason: str) -> str:
return (
f"{reason}:当前金价 {position.current_price:.2f} 元/克,"
f"持仓约 {position.weight:.4f} 克,浮动盈亏 {position.profit:.2f} 元。"
"本提醒仅用于记录价格变化,不构成投资建议。"
)
def ask_seed_evolving(position: Position, reason: str) -> str:
api_key = os.getenv("ARK_API_KEY")
base_url = os.getenv("ARK_BASE_URL", "https://ark.cn-beijing.volces.com/api/v3")
model = os.getenv("ARK_MODEL", "doubao-seed-evolving")
if not api_key:
return fallback_message(position, reason)
client = OpenAI(api_key=api_key, base_url=base_url)
prompt = f"""
请生成一段简洁的金价提醒文案。
限制:
1. 不预测涨跌。
2. 不提供买入、卖出、加仓、止损等交易建议。
3. 最后加一句风险提示。
数据:
- 触发原因:{reason}
- 买入金价:{position.buy_price:.2f} 元/克
- 买入金额:{position.buy_amount:.2f} 元
- 持仓克数:{position.weight:.4f} 克
- 当前金价:{position.current_price:.2f} 元/克
- 当前价值:{position.current_value:.2f} 元
- 浮动盈亏:{position.profit:.2f} 元
"""
try:
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "你只生成价格提醒文案,不提供投资建议。"},
{"role": "user", "content": prompt},
],
temperature=0.3,
)
return response.choices[0].message.content.strip()
except Exception as exc:
return fallback_message(position, reason) + f"nSeed Evolving 调用失败:{exc}"
def main():
buy_price = float(os.getenv("BUY_PRICE", "860.00"))
buy_amount = float(os.getenv("BUY_AMOUNT", "10000"))
profit_threshold = float(os.getenv("PROFIT_THRESHOLD", "20"))
loss_threshold = float(os.getenv("LOSS_THRESHOLD", "30"))
current_price = fetch_gold_price()
position = calc_position(buy_price, buy_amount, current_price)
alert, reason = should_alert(position.profit, profit_threshold, loss_threshold)
print("=== 金价监控 Agent Demo ===")
print("数据源:京东金融实时金价")
print(f"模型:{os.getenv('ARK_MODEL', 'doubao-seed-evolving')}")
print(f"当前金价:{position.current_price:.2f} 元/克")
print(f"持仓克数:{position.weight:.4f} 克")
print(f"浮动盈亏:{position.profit:.2f} 元")
print(f"触发状态:{reason}")
if alert:
print("n=== Seed Evolving 提醒 ===")
print(ask_seed_evolving(position, reason))
else:
print("n未达到提醒阈值。")
if __name__ == "__main__":
main()
-
07.20
王者荣耀雅典娜执弈定局什么时候上线 雅典娜执弈定局上线时间介绍
-
07.20
红色沙漠发售前夕引爆Steam 预估销量已达40万
-
07.20
漫画网址资源下载入口在哪?-漫画网址下载热门站点大全
-
07.20
王者荣耀雅典娜执弈定局多少钱 雅典娜执弈定局价格介绍
-
07.20
三国志异闻录平民前期阵容搭配推荐
-
07.20
闪耀暖暖x哪吒传奇联动「风起朝歌」版本时装汇总
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏