尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

3天上线一个学英语应用,字节跳动技术副总裁:我是这样用TRAE写代码的

发布时间:2026/9/26 4:32:15

资讯中心
01
ARTICLE

3天上线一个学英语应用,字节跳动技术副总裁:我是这样用TRAE写代码的

3天上线一个学英语应用,字节跳动技术副总裁:我是这样用TRAE写代码的
1. 从「背单词」到「任务调度」TRAE 写代码的真实落地路径TRAE 是字节跳动推出的 AI 原生 IDE核心能力是把自然语言描述的技术方案直接转成可运行代码。它适合谁适合已经会用至少一门语言写业务、但不想把时间耗在样板代码上的开发者也适合想快速验证产品原型的产品经理和独立开发者。我关注这个工具很久了最近拿一个「学英语应用」的完整链路做了实测从需求拆解、Prompt 编写、模块生成到本地跑通全程用 TRAE 的 Builder 模式加 Chat 模式配合完成。很多人第一次用 TRAE 会犯一个错把需求当许愿池一句话丢进去等奇迹。比如「帮我写一个背单词 App」出来的东西大概率跑不起来。字节跳动技术副总裁洪定坤分享过一个关键思路——用「和同事同步技术方案」的方式写 Prompt。什么意思就是把业务逻辑翻译成工程语言。比如背单词的复习调度本质是「通过 words_review_record 表的 next_review_time 字段筛选待复习单词再用 word_id 关联 answer_list 表随机选干扰项生成三类基础题型」。这种描述方式让 AI 能准确理解数据流和业务规则而不是靠猜。这篇文章我会交付一套可复制的 TRAE 项目配置骨架、关键提示词模板以及本地运行验证的完整步骤。你跟着做能在自己的机器上跑出一个带复习调度、题型生成、标签管理的学英语应用后端。过程中我会标出哪些地方 AI 容易跑偏、怎么用追问把代码拉回正轨。2. TaoToken 前置给 TRAE 配一个稳定的模型调用入口TRAE 本身内置了模型能力但在实际开发中你可能会遇到两个问题一是想切换不同模型对比生成质量二是团队协作时需要统一的 API 调用入口做用量管理。这时候可以用 TaoToken 作为模型调用的统一网关。TaoToken 是一个大模型 API 聚合平台提供 OpenAI 兼容的接口格式你可以在 TRAE 里通过自定义模型配置接入。先拿 API Key。访问 https://taotoken.net/api-keys 注册后创建一个 Key复制保存。注意这个 Key 只在创建时显示一次丢了就得重新生成。然后在 TRAE 里配置自定义模型。打开 TRAE 设置找到「模型」或「AI Provider」选项选择「自定义 OpenAI 兼容接口」填入Base URLhttps://taotoken.net/apiAPI Key你刚才复制的 KeyModel Name按需填写比如gpt-4o或claude-sonnet-4-20250514配置完成后在 TRAE 的 Chat 面板里就能选择这个自定义模型来生成代码。这样做的好处是你的 Prompt 和生成记录可以通过 TaoToken 的控制台统一查看方便排查「为什么这次生成的代码和上次不一样」这类问题。如果你主要用 TRAE 做长期编码项目建议了解一下 Coding Plan 的用量套餐比按次调用更划算。具体可以看 https://taotoken.net/coding-plan 的说明。3. 可复制配置TRAE 项目骨架与 8 个关键 Prompt 模板3.1 项目初始化与目录结构在 TRAE 里新建项目选择「Builder」模式输入以下初始化 Prompt创建一个 Node.js Express SQLite 的学英语应用后端项目。 目录结构 - src/ - db/ # 数据库连接与初始化 - models/ # 数据模型 - services/ # 业务逻辑 - routes/ # API 路由 - utils/ # 工具函数 - tests/ # 测试文件 - app.js # 入口 - package.json 数据库使用 better-sqlite3不需要 ORM直接写 SQL。 先创建 package.json 和基础目录结构不要生成具体业务代码。TRAE 会生成项目骨架和 package.json。检查一下依赖是否包含express、better-sqlite3、cors、nodemon。如果缺少直接在 Chat 里说「把缺少的依赖加到 package.json 并执行 npm install」。3.2 数据库表结构 Prompt这是整个应用的地基。用工程语言描述表关系创建以下 SQLite 表结构写在 src/db/schema.sql 中 1. words 表id, word, meaning, phonetic, example_sentence, created_at 2. words_review_record 表id, user_id, word_id, next_review_time, review_count, error_rate, last_reviewed_at 3. answer_list 表id, word_id, option_text, is_correct 4. tags 表id, user_id, name, color 5. word_tags 表id, word_id, tag_id 要求 - words_review_record 的 next_review_time 默认值为当前时间 - error_rate 为 0-1 的浮点数 - 所有表加 created_at 和 updated_at - 为 next_review_time 和 user_id 建索引生成后让 TRAE 写一个src/db/init.js在应用启动时执行 schema.sql 并插入 20 条测试单词数据。3.3 复习调度算法 Prompt这是核心业务逻辑对应洪定坤说的「算法调度」。用「判错逻辑 → 数据更新 → 曲线计算」的流程描述在 src/services/reviewService.js 中实现复习调度算法 函数 getDueWords(userId, limit) - 查询 words_review_record 中 next_review_time 当前时间 且 user_id userId 的记录 - 按 next_review_time 升序排列取前 limit 条 - 关联 words 表返回单词完整信息 函数 updateReviewResult(userId, wordId, isCorrect) - 如果 isCorrect 为 truereview_count 1error_rate 乘以 0.8next_review_time 设为当前时间 间隔天数 - 如果 isCorrect 为 falsereview_count 1error_rate 乘以 1.2 但不超过 1.0next_review_time 设为当前时间 1 天 - 间隔天数根据 review_count 计算1次→1天2次→2天3次→4天4次→7天5次以上→15天 - 用事务保证数据一致性 函数 getReviewStats(userId) - 返回总单词数、待复习数、已掌握数error_rate 0.2 且 review_count 3生成后重点检查事务部分是否正确使用了db.transaction()。如果 TRAE 用了BEGIN/COMMIT手写 SQL让它改成 better-sqlite3 的事务 API。3.4 题型生成 Prompt对应「从 answer_list 随机选干扰项生成三类基础题型」在 src/services/quizService.js 中实现题型生成 函数 generateQuiz(userId, wordId, type) - type 支持 meaning_choice、sentence_fill、scenario_make - meaning_choice从 answer_list 中取该单词的 3 个错误选项 1 个正确选项打乱顺序返回 - sentence_fill取 words 表的 example_sentence挖空目标单词返回带空格的句子和 4 个选项 - scenario_make返回单词和中文释义要求用户造句不提供选项 函数 generateQuizBatch(userId, count) - 调用 getDueWords 获取待复习单词 - 为每个单词随机分配一种题型 - 返回题目数组每题包含 wordId、type、question、options、correctAnswer这里有个坑TRAE 可能会把answer_list的查询写成全表扫描。让它加上WHERE word_id ?条件并确认answer_list表有word_id索引。3.5 API 路由 Prompt在 src/routes/ 下创建以下路由 - GET /api/review/due?userId1limit10 → 返回待复习单词列表 - POST /api/review/submit → body: { userId, wordId, isCorrect } → 更新复习记录 - GET /api/quiz/generate?userId1count5 → 返回题目批次 - POST /api/quiz/check → body: { wordId, answer } → 返回是否正确 - GET /api/stats?userId1 → 返回复习统计 - POST /api/tags → body: { userId, name, color } → 创建标签 - POST /api/words/:wordId/tags → body: { tagId } → 给单词打标签 所有路由加错误处理中间件返回统一格式 { code, data, message }。3.6 标签与个性化 Prompt对应「创建标签表来存储配置让单词复习流程根据配置动态调整」修改 getDueWords 函数支持按标签过滤 - 新增可选参数 tagId - 如果传了 tagId只返回带有该标签的待复习单词 - 在 words_review_record 查询后用 JOIN word_tags 过滤 新增函数 getWordsByTag(userId, tagId) - 返回该标签下所有单词及其复习状态3.7 测试 Prompt在 tests/ 下用 Jest 写单元测试 - reviewService.test.js测试 getDueWords 返回正确数量、updateReviewResult 的 error_rate 计算、事务回滚 - quizService.test.js测试三种题型的生成逻辑、选项数量正确、正确答案在选项中 - 使用内存数据库 better-sqlite3(:memory:) 避免污染开发数据3.8 本地运行验证 Prompt在 app.js 中 - 引入所有路由 - 启动时执行 db/init.js - 监听 3000 端口 - 添加 cors 和 express.json() 中间件 - 添加全局错误处理 然后生成一个 curl 测试脚本 test-api.sh依次调用所有接口并打印结果。4. 验证请求本地跑通与结果检查代码生成后在 TRAE 的终端里执行npm install node app.js看到Server running on port 3000后新开终端跑测试脚本bash test-api.sh预期输出类似{ code: 0, data: [ { wordId: 1, word: abandon, meaning: 放弃, type: meaning_choice, options: [放弃, 获得, 坚持, 忽略], correctAnswer: 放弃 } ], message: success }如果data为空数组说明words_review_record表里没有next_review_time 当前时间的记录。执行以下 SQL 手动插入一条INSERT INTO words_review_record (user_id, word_id, next_review_time, review_count, error_rate) VALUES (1, 1, datetime(now, -1 day), 0, 0.5);再调一次接口应该能返回题目。提交答案验证调度逻辑curl -X POST http://localhost:3000/api/review/submit \ -H Content-Type: application/json \ -d {userId:1,wordId:1,isCorrect:true}然后查统计接口curl http://localhost:3000/api/stats?userId1如果error_rate从 0.5 变成了 0.4next_review_time变成了明天说明调度算法生效了。5. 本篇常见错排查报错一Cannot find module better-sqlite3TRAE 生成的 package.json 可能没写这个依赖。直接在 Chat 里说「安装 better-sqlite3 并重新生成 package-lock.json」或者手动执行npm install better-sqlite3。如果安装失败检查 Node 版本是否 18better-sqlite3 对 Node 版本有要求。报错二SQLITE_ERROR: no such table: words_review_record说明db/init.js没有在路由之前执行。检查 app.js 的引入顺序先require(./db/init)再require(./routes/...)。如果 init.js 里用了异步操作确保用await或回调保证表创建完成后再启动服务。报错三生成的题目选项重复比如四个选项都是「放弃」。这是因为answer_list表里同一个word_id的错误选项不够 3 个。让 TRAE 修改generateQuiz如果错误选项不足从其他单词的answer_list里随机借调但要排除与正确答案相同的文本。报错四error_rate超过 1.0 或变成负数检查updateReviewResult里的乘法逻辑。正确做法是Math.min(1.0, error_rate * 1.2)和Math.max(0, error_rate * 0.8)。如果 TRAE 写成了直接赋值手动改一下。报错五TRAE 生成的代码用了 TypeScript 但项目是 JavaScript在 Prompt 里明确写「使用 JavaScript不要 TypeScript」。如果已经生成了.ts文件让 TRAE 转成.js并移除类型注解。报错六自定义模型配置后 TRAE 提示「连接失败」检查 Base URL 是否填了https://taotoken.net/api注意末尾不要加/v1或/chat/completionsTRAE 会自动拼接。API Key 是否有多余空格。如果还是失败去 TaoToken 控制台看调用日志确认请求是否到达。6. 从 Prompt 到产品把 TRAE 用成「工程搭档」这套流程跑下来最深的感受是TRAE 的边界不在于它能生成多少代码而在于你能把需求描述得多像技术方案。洪定坤说的「人类主导逻辑框架AI 填充技术细节」在实际操作中就是——你负责想清楚数据怎么流、状态怎么变、边界在哪里TRAE 负责把这些翻译成能跑的代码。如果你已经跑通了上面的背单词后端下一步可以试试用 TRAE 的 Builder 模式生成一个简单的前端页面把 API 串起来。或者接入 TaoToken 的模型对话能力给应用加一个「AI 造句批改」功能用户输入英文句子调用模型判断语法和用词返回修改建议。模型对话的接入方式可以参考 https://taotoken.net/doc 的文档里面有完整的请求示例。长期做编码项目的话建议把常用的 Prompt 模板存成 TRAE 的「自定义指令」下次新建项目直接调用省去重复描述的时间。Coding Plan 的用量管理也能帮你控制成本具体在 https://taotoken.net/coding-plan 看套餐详情。最后留一个实用技巧每次 TRAE 生成代码后不要急着运行先让它「解释这段代码的数据流」。如果解释得含糊说明 Prompt 里的逻辑没描述清楚补一句追问再重新生成。这个习惯能帮你省下大量调试时间。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。