最近AI泡沫论甚嚣尘上,但《The Information》透露的数据显示所谓AI进入泡沫阶段似乎并不是板上钉钉的事实。 内部数据显示,OpenAI 面向付费用户的计算利润率提高到了 70% ,为“AI 泡沫论”提供了一个有力的实证反驳 。 所谓计算利润率,即⾯向付费⽤ 户运⾏ AI 模型后获得的收⼊分成⽐例,作为参考,一般软件业务的计算利润率大约超过90%,原因很简单,多提供一份软件服务不需要付出太多额外的计算成本,而AI大模型公司则需要付出大量的算力成本来满足付费用户的模型调用需求。 这一跨越式的增长意味着,通过模型优化和订阅层级的调整,顶级 AI 厂商已经证明其核心业务具备了类似于传统软件行业的盈利潜能 。 降本增效的焦虑最初来源于2025年初DeepSeek 等低成本竞争对手的冲击,迫使OpenAI其将重心从单纯追求参数规模转向极致的推理成本控制 。 与此同时,谷歌凭借自研 TPU 芯片在运营效率上形成的先天优势,让依赖昂贵英伟达芯片的 OpenAI 在这场成本拉锯战中稍显落后。 由此可见,AI 行业正处于从“技术幻觉期”向“效率交付期”过渡的拐点。这场竞赛的下半场,比拼的不仅是谁的模型更聪明,更是谁能率先解决“算力吞金”的难题。 泡沫论是否会彻底消散,取决于这些公司能否将当前的利润率优势,从付费订阅的小众群体扩展到数亿免费用户的普惠市场。 不过美股这波以AI泡沫论为理由的杀估值下跌,有望在近期得到缓解。下一步要看OpenAI是否能够在中东融到足够多的钱,能融到钱就意味着能够兑现此前数据中心开的大额订单,否则,AI产业链的上下游可能还需要一次挤泡沫。
【市场对AI泡沫论的焦虑蔓延:从英伟达到甲骨文了】 昨天市场盘中全面崩了,源自于这样一条新闻: 全球最大另类资产管理公司之一 Blue Owl 突然退出甲骨文密歇根州价值 100 亿美元的数据中心项目融资。甲骨文紧急澄清 “谈判按计划推进,已选择其他合作伙伴”,但市场仍然视作AI基建泡沫化开始发酵。 ​我之前分析过,在资金面不确定性增加的情况下,市场对AI泡沫的担忧开始吹毛求疵,之前苛刻审视英伟达的财报,现在开始蔓延到了挖掘AI中型厂商的财务漏洞。昨天甲骨文(Oracle)与其融资伙伴谈判破裂的消息,正是这一逻辑的集中体现。 事件的直接诱因是甲骨文最大的数据中心合作伙伴Blue Owl Capital宣布,将不再为密歇根州萨林镇的一个1吉瓦(1GW)数据中心项目提供100亿美元的融资。该项目原计划为OpenAI提供算力支持。 谈判破裂的核心原因在于租赁条款。Blue Owl认为该项目的财务回报和租赁条件不如甲骨文之前的项目。这反映出金融机构对AI基建的态度发生了结构性转变:资金不再是无条件的供给,贷款方开始对项目的投资回报率(ROI)和风险边际进行严格审查。虽然甲骨文试图引入黑石(Blackstone)作为替补,但这掩盖不了AI基建融资成本上升的事实。 市场之所以对这一变故反应强烈,核心原因在于甲骨文自身的财务状况已经极度紧绷。 债务规模:目前甲骨文的总债务接近1300亿美元。其债务与EBITDA的比率正在逼近4倍的红线,这是评级机构下调其投资级信用的重要参考阈值。 现金流瓶颈:为了在算力竞赛中保持地位,甲骨文的年度资本开支(CAPEX)已飙升至500亿美元左右。高额的硬件投入严重挤压了自由现金流(FCF),导致其在缺乏外部融资的情况下,很难维持现有的建设强度。 对于微软、谷歌这类现金储备充足的巨头,融资受阻只是节奏问题;但对于甲骨文这类依赖外部融资、高杠杆运作的中型基建商,这直接关系到其资产负债表的安全。 甲骨文的困境会迅速传导至整个AI基建链条。 首先,数据中心是AI产业链的物理载体。一旦融资受阻导致开工延期,下游的液冷、电力设备、网络交换机以及存储芯片的订单都会面临不确定性。许多依靠AI增长来掩盖传统业务疲软的公司,其营收逻辑将面临重塑。 其次是估值定价的重构。即便市场需求依然旺盛,但由于融资风险和交付周期的不确定性增加,投资者不再愿意支付过去的高溢价。这种“杀估值”的行为会波及台积电、博通、Arista Networks等所有环节,市场正在从“看订单数量”转向“看现金回收能力”。 最后,这会影响科技巨头的支出信心。当基建环节出现融资和建设瓶颈,且行业内形成支出放缓的预期时,巨头们为了保护利润率,会变得更加克制。如果领先者的支出增速放缓,整个行业的需求预期将从“指数级增长”回归到“线性增长”。 12月17日的大跌并非简单的利空,而是AI叙事从单纯的算力竞赛转向财务可持续性竞赛的拐点。 当资金成本不再廉价,市场对AI中型厂商的业绩要求将变得更加严苛。投资者需要关注的重点已不在芯片出货量,而在各环节厂商的资产负债表健康度。这场危机的结束,将取决于AI应用端能否产生足够的利润,以及基建商能否在不破坏信用评级的前提下,完成下一阶段的资本闭环。
【Vibe Coding 实战 Part 3】数据持久化:如何实现 Google Sheets 云端数据库同步 在上一阶段,我们通过 GitHub 和 Streamlit Cloud 实现了网站的公网访问。但存在一个致命问题:Streamlit Cloud 的文件系统是临时的,一旦服务器休眠或重启,保存在本地 CSV 文件中的“收藏记录”就会丢失。 为了解决这个问题,我们需要将数据存储迁移到 Google Sheets。它免费、稳定,且支持多端实时查看。 以下是实现“永久存储”的完整操作流程。 第一步:获取 Google Cloud 授权密钥 (必须手动操作) 这一步需要申请一个“服务账号”来代表程序读写表格。AI 无法替你操作 Google 后台,请按以下步骤执行: 创建项目 - 访问 Google Cloud Console。 - 点击左上角项目选择器,选择 "New Project" (新建项目),命名为 stock-dashboard,点击创建。 启用 API - 在左侧菜单点击 "APIs & Services" > "Library"。 - 搜索并启用以下两个 API(必须全部启用): Google Sheets API Google Drive API 创建服务账号 (Service Account) - 点击左侧菜单 "APIs & Services" > "Credentials" (凭据)。 - 点击顶部 "+ CREATE CREDENTIALS" > 选择 "Service Account"。 - Name 填写 streamlit-bot,点击 Done 完成。 获取密钥 (JSON) - 在凭据列表中,点击刚才创建的账号邮箱(类似 ...iam.gserviceaccount.com)。 - 进入 KEYS 标签页 > ADD KEY > Create new key。 - 选择 JSON 格式,文件会自动下载到本地。保存好这个文件。 第二步:准备 Google Sheets 表格 新建表格 在 Google Drive 新建一个表格,命名为 stock_bookmarks(注意:是文件名,不是下方的工作表名)。 重命名工作表:将底部默认的 Sheet1 重命名为 stock_bookmarks(确保代码能找到对应页面)。 设置表头:在第一行填入以下列名(需与代码逻辑一致):Timestamp, Ticker, Category, Title, URL, Source 配置共享权限 (关键) 打开刚才下载的 JSON 密钥文件,复制 client_email 字段后的邮箱地址。 回到 Google 表格,点击右上角 Share (分享)。 粘贴该邮箱地址,权限设置为 Editor (编辑者),点击发送。 第三步:在 Streamlit Cloud 配置密钥 登录 Streamlit Cloud 管理后台。 找到你的 App,点击右侧 "..." > Settings > Secrets。 在编辑框中,按照以下 TOML 格式填写(将 JSON 文件中的内容对应填入): [connections.gsheets] spreadsheet = "你的表格链接/edit" type = "service_account" project_id = "从JSON文件中复制" private_key_id = "从JSON文件中复制" private_key = "从JSON文件中复制" client_email = "从JSON文件中复制" client_id = "从JSON文件中复制" auth_uri = "" token_uri = "" auth_provider_x509_cert_url = "" client_x509_cert_url = "从JSON文件中复制" 第四步:使用 AI 替换代码逻辑 (Vibe Coding) 环境配置完成后,回到开发工具(Google Antigravity / Cursor),发送指令让 AI 修改代码。 提示词 (Prompt): 任务:将数据存储从 CSV 迁移到 Google Sheets我已经配置好了 Google Sheets 的连接环境。请更新 stock_dashboard.py 和 requirements.txt。修改要求: 依赖库:添加 st-gsheets-connection 到 requirements.txt。 连接设置: 使用 conn = st.connection("gsheets", type=GSheetsConnection, ttl=0) 初始化连接。 注意:必须设置 ttl=0 以禁用缓存,确保数据实时同步。 读取逻辑: 替换原有的 _csv 为 (worksheet="stock_bookmarks")。 如果读取的数据为空,需初始化一个空的 DataFrame,包含必要的列名。 写入逻辑 (收藏功能): 当用户点击“收藏”时,先读取最新数据,将新行追加到 DataFrame,然后使用 conn.update(worksheet="stock_bookmarks", data=updated_df) 更新表格。 Bug 修复 (唯一 ID): 在侧边栏显示收藏列表时,按钮的 key 必须包含 enumerate 的索引值(例如 key=f"del_{index}_{url}"),防止因 URL 重复导致报错。 第五步:推送更新与验证 提交代码:(在终端执行) git add . git commit -m "Migrate to Google Sheets" git push 如果遇到推送错误,使用 git push -f origin main 强制覆盖。 验证结果: 等待 Streamlit Cloud 自动重新部署(约 2 分钟)。 打开网页,点击“收藏”按钮。 查看 Google Sheets 表格,确认新数据已自动写入。 刷新网页,确认数据依然存在。 最终成果 现在,我的美股看板已经不再是一个简单的脚本,而是一个全栈应用: 前端:Streamlit 网页。 后端:Python 逻辑自动处理。 数据库:Google Sheets 永久存储。 部署:GitHub + Streamlit Cloud 自动化流水线。
【Vibe Coding 实战 Part 2】我用 AI 把“美股看板”升级并发布到了云端,全程只用了三步 在上一篇文章中,我们通过 Google Antigravity 和几句提示词,成功在本地电脑上跑出了一个简易的“美股追踪看板”。 但作为一个追求极致效率的 Vibe Coder,我怎么能忍受它只能在我的电脑上跑?我要把它发布到网上,变成一个可以在手机上随时查看的独立 App。 今天分享 Vibe Coding 的第二篇,如何指挥 AI 进行功能迭代、修复“天书”般的报错,并最终实现零成本的云端部署。 首先来看我的成果:点击访问 Stock Dashboard (注:由于是免费服务器,首次加载可能需要几十秒唤醒) 第一阶段:像产品经理一样提需求 Vibe Coding 的核心不是写代码,而是清晰地描述逻辑。 1. 净化信息流:区分“新闻”与“公告” 初版抓取的数据里,既有《华尔街日报》的分析,也有枯燥的 SEC 8-K 文件。我希望把它们分开。 我的 Prompt: “请修改代码,将信息流分为两类:‘官方公告’和‘媒体新闻’。规则:如果发布者是 PR Newswire、Business Wire 或标题包含 8-K、10-Q,归为公告;其他的归为新闻。在界面上用 Tab 标签页将它们分开显示。” AI 的执行: AI 自动引入了关键词过滤逻辑。现在,我想看财报直接点“公告”栏,想看市场新闻点“新闻”栏,效率翻倍。 2. 给 App 装上记忆:收藏功能 之前版本网页的一个痛点是“刷新即忘”,我需要一个收藏夹来收藏重要的新闻。 我的指令 (Prompt): “增加一个收藏功能。 在每条新闻旁边加个‘⭐ Save’按钮。 点击后,将新闻标题和链接保存到本地的 bookmarks.csv 文件里。 在侧边栏增加‘我的收藏’列表,读取这个 CSV 文件。” AI 的执行: 几秒钟后,代码更新完毕。我的看板从此拥有了“记忆”,重启电脑后收藏的数据依然存在。 第二阶段:像指挥官一样“修 Bug” 在开发收藏功能时,我遇到了 Vibe Coding 报错。屏幕上出现了一大片红色的字: StreamlitDuplicateElementKey: There are multiple elements with the same key... 如果是以前,我可能直接关机放弃了。但现在,我只需要读懂报错的字面意思:“有重复的钥匙 (Key)”。 当然,更简单的方法是把报错信息复制粘贴到Gemini里去问AI,让AI帮你选择如何修复。 问题分析: 原来,有一篇新闻同时提到了 NVDA 和 MSFT 两只股票。程序在渲染这两个股票的卡片时,给这篇新闻的收藏按钮生成了一模一样的 ID(Key)。系统不知道用户点的是哪一个,所以崩了。 我的修复指令 (Prompt): “报错显示按钮 ID 重复了。请修改代码逻辑:在生成收藏按钮的 Key 时,不要只用新闻链接,把股票代码 (Ticker) 也加进去拼在一起,确保每个按钮 ID 都是独一无二的。” 结果: AI 修改了一行代码,将 ID 生成逻辑从 link 改成了 ticker_link。报错消失,程序完美运行。 第三阶段:全网发布!保姆级部署教程 现在,我们要把这个跑在本地电脑上的程序,发布到互联网上。 我们将使用 GitHub (存代码) + Streamlit Cloud (跑代码) 的黄金组合。全程免费,无需服务器知识。 1. 收拾行囊:检查 4 个核心文件 在你的项目文件夹里,必须确保有以下 4 个文件(没有就手动新建 txt 文件改名): stock_dashboard.py (你的主代码) requirements.txt (至关重要! 这是告诉云端服务器要安装什么软件的清单) 如果你的文件夹里没有,请新建一个 txt,复制以下内容进去保存: yfinance gnews finvizfinance pandas watchdog watchlist.csv (你的初始关注股票列表,里面随便填一行 NVDA 即可) bookmarks.csv (你的初始收藏夹,新建一个空文件,填入表头 Timestamp,Ticker,Category,Title,URL,Source 即可) 2. 把代码上传到 GitHub GitHub 就像是程序员的网盘。 注册并登录 。 点击右上角 "+" -> "New repository"。 Repository name:随便填,比如 my-stock-app。 选择 Public (公开),不要勾选其他任何初始化选项。 点击 Create repository。 在跳转的页面中,点击链接文字 "uploading an existing file"。 把上面准备好的 4 个文件 全部拖进去。 点击底部的绿色按钮 Commit changes。 3. 一键部署到 Streamlit Cloud 这是最后一步! 打开 。 点击 "Sign in with GitHub" (用 GitHub 登录) 并授权。 点击醒目的蓝色按钮 "New app"。 填写表单: Repository: 点击下拉框,选中你刚才创建的 my-stock-app。 Main file path: 填写 stock_dashboard.py。 点击右下角的 Deploy!。 4. 见证奇迹 屏幕上会出现“烤蛋糕”的动画。等待约 2 分钟,你的浏览器会自动刷新,展示出你的美股看板! 总结 回顾一下,我们完全没有手写一行 Python 代码,仅仅通过与 AI 对话: 明确了需求(自动抓取、美股、时区转换)。 迭代了功能(分类公告、本地收藏)。 修复了 Bug(指出了逻辑冲突)。 完成了部署(利用 GitHub 和 Streamlit Cloud)。 下期预告: 现在的 App 虽然能用,但因为是免费云服务,重启后“收藏夹”数据可能会因为不是实时保存而丢失。 下一篇,我们将挑战进阶形态:《给 AI 装上“云大脑”:如何让美股看板连接 Google Sheets,实现永久的数据同步?》
【实战分享-零基础 Vibe Coding:我用 Google Antigravity 10分钟手搓了一个美股情报站】 今天分享一个我刚在出差路上完成的实战案例:在完全不懂代码的情况下,如何利用 Google Antigravity(以及 Gemini/ChatGPT)给自己开发一个专属的“美股每日情报站”。 先看成品:见下图。 第一步:明确需求 Vibe Coding 的第一原则:不要想代码怎么写,要想产品怎么用。 作为一个美股关注者,我的痛点很直接: 个性化:我只关心我持仓的那几只股票(NVDA, TSLA 等),不想看全市场的噪音。 自动化:我经常在全球各地出差,时差混乱。我希望网页能自动把所有时间换算成北京时间(GMT+8)的早上 10 点,并在那个时候给我推送最新的财报和新闻。 极简维护:我没有技术背景,最好是一个文件就能跑起来,支持 CSV 导入股票列表。 第二步:撰写 Prompt 跟大学学古法写代码开始学C语言101类似,现在编程101最重要的是学习如何写好的prompt,让AI更好的工作,理解并实现你的需求。 这里推荐用 Gemini 或 ChatGPT 来辅助撰写这个 Prompt,遵循这三个黄金原则: - 我的需求是什么(Goal) - 我希望如何实现(Tech Stack & Constraints) - 你希望AI遵守的规则(Rules) 这是我最终喂给 Google Antigravity 的核心 Prompt(建议收藏): **角色 (Role):** 你是一位资深 Python 开发专家 Agent。 **目标 (Goal):** 构建一个本地运行的美股追踪 Web 应用程序。 **核心功能 (Core Features):** 1. **关注列表 (Watchlist):** 支持手动输入股票代码(Ticker)和上传 CSV 文件导入。数据需保存到本地文件中(以便重启后数据持久化)。 2. **新闻聚合 (News Aggregation):** 使用 `yfinance`, `gnews`, 和 `finviz` 库(仅限免费源)来抓取最新的新闻。 3. **时区处理 (Timezone):** 自动将所有新闻和数据的时间戳转换为 GMT+8。 4. **用户界面 (UI):** 提供一个简洁清晰的仪表盘。核心展示“每日简报 (Daily Briefing)”板块,包含股价变动百分比以及可折叠展开的新闻详情卡片。 **约束条件 (Constraints):** * **代码稳健性:** 代码必须具有高鲁棒性。如果某个数据源(如 FinViz)抓取失败或超时,程序绝**不能崩溃**,只需在后台记录警告并跳过该源即可。 * **免费原则:** 严禁使用任何需要付费或申请复杂 Key 的 API。 * **零基础适配:** 我完全没有编程基础,请确保生成的部署方案严格遵循“一键运行 (one-click run)”的标准,越简单越好。 第三步:在 Google Antigravity 中实战编程 拿到了 Prompt,打开 Google Antigravity()。 这里我用Google Antigravity的原因是一鱼两吃,买了Google AI可以用gemini3+antigravity。 进入 Manager View (指挥模式),新建一个 Task,把上面的 Prompt 粘贴进去。 然后你要做的事情就是去买杯Bluebottel咖啡。 在你喝咖啡的期间,AI在为你持续工作, Planner Agent开始规划步骤。 Coder Agent开始写 Python 代码。 Terminal Agent自动安装 streamlit, yfinance 等依赖库。 下一步等Google Antigravity提示任务完成,你需要验证是否达到了你的目标: AI 会自动启动本地服务器。 打开浏览器输入 localhost:8501。 我试着输入了 nvda,系统立刻抓取到了最新的 FinViz 独家新闻,并且时间按照需求转成了北京时间。 额外需求:一开始我只用了 yfinance作为财经API的来源,我希望多加一些新闻来源,因此告诉 AI:“我觉得新闻太少了,帮我多加一些类似的免费新闻API。 AI自动加了 Google News 和 FinViz 也加进去。” 总结 通过这次实践,我发现只要逻辑清晰,代码能力不再是创造工具的门槛。 这就结束了吗?当然没有。现在的版本虽然能用,但还不够完美。比如界面还不够酷炫,而且必须在电脑上运行。 在提需求的时候,最关键的原则是最小可行原则。第一步告诉AI需求的时候,只提一个最关键的核心需求,让他跑通逻辑,跑通之后,你可以再后续提附加需求。否则需求太多,一旦出错,去调试就会很麻烦。 下一篇文章,我会讲讲如何增加更进一步的需求,并且把部署到云端,让所有人可以开放访问。