<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>snowflow</title><description>雪流之域</description><link>https://snowflow.cloud/</link><language>zh_CN</language><item><title>今日宜吃 / today food 的架构设计</title><link>https://snowflow.cloud/posts/todayfood-architecture/</link><guid isPermaLink="true">https://snowflow.cloud/posts/todayfood-architecture/</guid><description>一个基于黄历的 AI 开运菜单生成器，前端 Vue 3 + 后端 FastAPI + openai-agents，monorepo 组织三个工程。</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://snowflow.cloud/projects/todayfood/&quot;&gt;今日宜吃 / today food&lt;/a&gt; 是我做的一个小项目：基于黄历的 AI 开运菜单生成器，每天给你一签、一菜、一份干饭宜忌，搭配幸运三件套（口味/颜色/方位）。小程序竖屏布局，所有内容当日固定，凌晨 0 点按北京时间切换。&lt;/p&gt;
&lt;p&gt;这篇复盘它的架构设计。&lt;/p&gt;
&lt;h2&gt;整体架构&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;┌─────────────┐   /api/*   ┌─────────────┐
│  frontend   │ ─────────▶ │  backend    │
│  (Vue 3)    │            │  (FastAPI)  │
└─────────────┘            └──────┬──────┘
       │                          │ 内嵌
       │                          ▼
       │                  ┌─────────────┐
       │                  │ admin 模块  │
       │                  │ (router/db) │
       │                  └─────────────┘
       │                          │
       │                          ▼
       │                  ┌─────────────┐
       └─────────────────▶│   SQLite    │
                          └─────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;前端纯静态，后端跑 FastAPI，两者通过 &lt;code&gt;/api/*&lt;/code&gt; 通信。后端内嵌了 admin 管理模块，共享同一个数据库。&lt;/p&gt;
&lt;h2&gt;Monorepo 组织&lt;/h2&gt;
&lt;p&gt;仓库是 monorepo，包含三个工程：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;目录&lt;/th&gt;
&lt;th&gt;技术栈&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;frontend/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vue 3 + Vite&lt;/td&gt;
&lt;td&gt;用户侧 H5 应用（食历 / 择食 / 关于）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;backend/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;FastAPI + openai-agents&lt;/td&gt;
&lt;td&gt;业务 API + AI 接入 + 后台管理（内嵌）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;admin/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;FastAPI + 单文件 HTML&lt;/td&gt;
&lt;td&gt;后台管理界面（可独立部署）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;之所以放一起而不是拆三个仓库，是因为这三个工程耦合很紧：admin 和 backend 共享数据库 schema，frontend 的 API 契约直接对 backend。拆开反而增加同步成本。&lt;/p&gt;
&lt;h2&gt;前端几个关键决策&lt;/h2&gt;
&lt;h3&gt;API 前缀统一为 &lt;code&gt;/api&lt;/code&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// frontend/src/config.js
const API_BASE = import.meta.env.VITE_API_BASE || &apos;/api&apos;
export const API = {
  TODAY: `${API_BASE}/fortune/today`,
  DRAW: `${API_BASE}/fortune/draw`,
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开发环境由 Vite 代理 &lt;code&gt;/api&lt;/code&gt; 到后端，生产环境由 nginx 反代。前后端前缀一致，切换环境零改动。&lt;/p&gt;
&lt;h3&gt;摇签动画的最小时长&lt;/h3&gt;
&lt;p&gt;AI 调用耗时不确定，但用户体验上摇签动画不能&quot;一调就停&quot;或&quot;卡死等&quot;。所以设了一个最小时长：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const DRAW_MIN_DURATION = 2500
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不管走不走 AI 调用，摇签动画至少持续 2.5 秒；若 AI 调用耗时更长，则摇动状态一直保持到后端返回。这是个很小的细节，但对体验影响很大。&lt;/p&gt;
&lt;h2&gt;后端为什么用 openai-agents&lt;/h2&gt;
&lt;p&gt;一开始后端就是普通的 FastAPI + 直接调 OpenAI SDK。后来迁到 &lt;code&gt;openai-agents&lt;/code&gt;，主要图两点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Agent 抽象&lt;/strong&gt;：菜单生成涉及多步推理（看黄历 → 定宜忌 → 选食材 → 组菜谱），用 Agent 比手写 prompt 拼装清晰&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具调用规范&lt;/strong&gt;：Agent 框架对 function calling 的生命周期管理更稳&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;部署&lt;/h2&gt;
&lt;p&gt;后端用 systemd 常驻，监听 9081 端口；前端 &lt;code&gt;vite build&lt;/code&gt; 出静态文件，nginx 托管并反代 &lt;code&gt;/api&lt;/code&gt;。这个组合在 VPS 上零成本、足够稳。&lt;/p&gt;
&lt;h2&gt;小结&lt;/h2&gt;
&lt;p&gt;这个项目体量不大，但把&quot;前端静态 + 后端 API + AI 接入 + 后台管理&quot;这套常见组合走了一遍。monorepo 组织、API 前缀统一、动画最小时长这些细节，都是小决策但经得起复用。&lt;/p&gt;
</content:encoded></item><item><title>四款 Agent 编程工具使用心得：Codex / Claude Code / Trae Work / ZCode</title><link>https://snowflow.cloud/posts/agent-tools-review/</link><guid isPermaLink="true">https://snowflow.cloud/posts/agent-tools-review/</guid><description>国内外四款 agentic coding 工具的实战对比——从终端派到 IDE 派，从闭源到自研内核，各自适合什么场景。</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2026 年这波 agentic coding 浪潮，终端 agent 和 AI IDE 两派都在狂奔。我把手上能用的几款都过了一遍：OpenAI 的 Codex、Anthropic 的 Claude Code、字节的 Trae Work、智谱的 ZCode。这篇记一下各自的脾性和适合的场景。&lt;/p&gt;
&lt;h2&gt;为什么放在一起比&lt;/h2&gt;
&lt;p&gt;这四款有个共同点：都是 &lt;strong&gt;agentic&lt;/strong&gt; 工具，不是&quot;IDE 里塞个聊天框&quot;那种补全插件。它们能读目录、改代码、跑命令、看结果再迭代，区别在于形态和取舍：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;工具&lt;/th&gt;
&lt;th&gt;厂商&lt;/th&gt;
&lt;th&gt;形态&lt;/th&gt;
&lt;th&gt;底层模型&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;终端 CLI（开源，Rust）&lt;/td&gt;
&lt;td&gt;GPT 系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;终端 CLI&lt;/td&gt;
&lt;td&gt;Claude 系&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trae Work&lt;/td&gt;
&lt;td&gt;字节跳动&lt;/td&gt;
&lt;td&gt;AI IDE 的 Work 模式&lt;/td&gt;
&lt;td&gt;多模型&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZCode&lt;/td&gt;
&lt;td&gt;智谱&lt;/td&gt;
&lt;td&gt;桌面可视化 Agent&lt;/td&gt;
&lt;td&gt;GLM-5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;下面逐个说。&lt;/p&gt;
&lt;h2&gt;Codex：终端原教旨主义者的选择&lt;/h2&gt;
&lt;p&gt;OpenAI 出的终端 coding agent，开源、Rust 写的，跑在命令行里。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用着最舒服的地方&lt;/strong&gt;是它和终端工作流无缝——我在项目目录里敲一行需求，它自己读文件、改代码、跑测试、看报错再修。整个过程透明，每一步都能看到在干什么，想接管随时可以打断。开源这点也很加分，能看清楚它到底对代码做了什么。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不太适应的地方&lt;/strong&gt;：纯 CLI 对不熟悉终端的人门槛偏高，没有可视化，长任务跑到一半想回看上下文得翻终端历史。另外它对项目结构的理解有时候会比较&quot;直&quot;，复杂重构容易钻牛角尖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适合&lt;/strong&gt;：终端重度用户、喜欢掌控每一步、开源党。&lt;/p&gt;
&lt;h2&gt;Claude Code：推理和长任务的强项&lt;/h2&gt;
&lt;p&gt;Anthropic 的终端 agent，形态上和 Codex 类似，都是 CLI。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最深的印象是推理质量&lt;/strong&gt;。同样一个需求，Claude Code 经常能先想清楚再动手，尤其在涉及多文件改动、需要理解业务上下文的任务上，它规划的步骤明显更合理。长任务（比如跨模块重构）它扛跑能力很强，不容易中途跑偏。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;短板&lt;/strong&gt;：和 Codex 一样是纯终端，可视化和易用性不如 IDE 派。另外它对工具链的覆盖面我觉得没有 Codex 那么广，跑一些偏门命令偶尔要自己兜。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适合&lt;/strong&gt;：复杂任务多、看重推理质量、愿意在终端里干活的人。&lt;/p&gt;
&lt;h2&gt;Trae Work：中文场景和 IDE 派的代表&lt;/h2&gt;
&lt;p&gt;字节跳动的 Trae IDE 里有个 Work 模式（原来叫 Solo），是国内 AI 原生 IDE 里我最常用的一款。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最大的优势是中文场景&lt;/strong&gt;。需求用中文写、文档中文、报错解读中文，整个交互链路对中文开发者友好得不行，这点是前面两个国外工具比不了的。IDE 形态降低了门槛，不用记命令，左边文件树右边编辑器，可视化 diff，改了什么一目了然。多模型协同也是个亮点，不同任务能切不同模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需要注意的地方&lt;/strong&gt;：因为是 IDE 形态，相比纯 CLI 的 agent，&quot;轻量&quot;不起来，开一个项目就得开整个 IDE。复杂 agentic 任务上，它的自主性和 Codex/Claude Code 那种纯 agent 还是有差距，更像&quot;强化的 IDE 助手&quot;而非&quot;放手让它干&quot;的 agent。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适合&lt;/strong&gt;：中文开发场景、IDE 重度用户、团队协作、不想折腾终端的人。&lt;/p&gt;
&lt;h2&gt;ZCode：自研内核的国产 agentic 新选手&lt;/h2&gt;
&lt;p&gt;智谱的 ZCode，3.0 之后全面切了自研 Agent 内核，深度适配 GLM-5.2，定位是&quot;GLM-5.2 的 agentic 开发环境&quot;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;和 Codex、Claude Code 是同层面的 agentic 工具&lt;/strong&gt;，不是补全插件。但它走了条不一样的路：用桌面可视化解决终端 agent 操作门槛高的问题。命令行 agent 那一套（读改跑看）它都有，但套了层友好的 GUI，不用盯着黑框框。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实际用下来的亮点&lt;/strong&gt;是国产模型 agentic 能力的成熟度。GLM-5.2 配自研内核，在常见 coding 任务上已经能打，而且因为模型和 agent 内核同源，配合比&quot;第三方内核套第三方模型&quot;更紧。免费这点对个人开发者也很实在。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不足&lt;/strong&gt;：生态和沉淀还比不上前面几家，社区教程、踩坑文档偏少，遇到边界情况得自己摸索。可视化界面在追求效率的老手看来，有时反而比 CLI 多几步操作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适合&lt;/strong&gt;：想要 agentic 能力但嫌 CLI 难用、想用国产模型、个人开发者。&lt;/p&gt;
&lt;h2&gt;怎么选&lt;/h2&gt;
&lt;p&gt;没有银弹，看你卡在哪条短板上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;终端重度 + 想要掌控感&lt;/strong&gt; → Codex&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务复杂、看重推理&lt;/strong&gt; → Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中文场景 + IDE 工作流 + 团队&lt;/strong&gt; → Trae Work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;想要 agentic 又嫌 CLI 难用 + 国产模型&lt;/strong&gt; → ZCode&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我自己的实际用法是混着来：日常小改和中文项目用 Trae Work，复杂重构和长任务交给 Claude Code，想看 agent 透明执行过程时用 Codex，ZCode 用来体验国产 agentic 的进展。工具是手的延伸，多几只手不亏。&lt;/p&gt;
&lt;h2&gt;一点感受&lt;/h2&gt;
&lt;p&gt;这一轮 agent 工具的核心进步，不是模型变聪明了多少，而是 &lt;strong&gt;agent 内核&lt;/strong&gt;这件事独立出来了——读改跑看的循环、工具调用、上下文管理，这些从模型里拆出来做成专门的工程。Codex 开源、ZCode 自研内核，都说明大家意识到：光有好模型不够，得有好的 agent 工程把模型的能力稳定释放出来。&lt;/p&gt;
&lt;p&gt;这对开发者是好事：模型层卷模型，agent 层卷工程，我们坐收渔利。&lt;/p&gt;
</content:encoded></item></channel></rss>