编程 Trae SOLO 深度实战:从 AI 辅助编程到自主交付——字节跳动 AI 原生 IDE 的架构革命与生产级实践

2026-05-23 03:46:21 +0800 CST views 9

Trae SOLO 深度实战:从 AI 辅助编程到自主交付——字节跳动 AI 原生 IDE 的架构革命与生产级实践

作者: 程序员茄子
日期: 2026-05-23
标签: Trae, SOLO模式, AI编程, 字节跳动, Agent, 自主开发, IDE


目录

  1. 引言:AI 编程工具的范式转移
  2. Trae 是什么?—— 重新定义 AI 原生 IDE
  3. 核心架构解析:从 Chat 到 SOLO 的三层演进
  4. SOLO 模式深度剖析:主 Agent + 子 Agent 协同架构
  5. 实战演练:从零到一构建完整项目
  6. 高级特性:MCP 接入与多模型编排
  7. 性能优化:如何让 SOLO 更快更准
  8. 生产级实践:团队协作与 CI/CD 集成
  9. Trae vs Cursor vs GitHub Copilot 深度对比
  10. 未来展望:AI 编程的下一个临界点
  11. 总结与行动指南

1. 引言:AI 编程工具的范式转移

1.1 从"辅助"到"自主"的跨越

2025 年到 2026 年,AI 编程工具经历了三次重大范式转移:

第一代:代码补全时代(2021-2023)

  • 代表工具:GitHub Copilot、TabNine
  • 核心能力:基于上下文的代码补全、函数建议
  • 局限性:需要开发者明确知道"下一步写什么",AI 只是加速执行

第二代:对话式编程时代(2023-2025)

  • 代表工具:Cursor、Codeium、Replit Ghostwriter
  • 核心能力:自然语言对话、代码解释、Bug 修复建议
  • 局限性:开发者仍需主导每一步,AI 是"顾问"而非"执行者"

第三代:自主交付时代(2025-2026)

  • 代表工具:Trae SOLO、Devin、DeerFlow
  • 核心能力:理解需求 → 自主规划 → 自动编码 → 测试部署全流程
  • 革命性:开发者变成"产品经理 + 审核者",AI 是"全职工程师"

关键洞察:Trae SOLO 不是"更好的代码补全工具",而是第一个让普通开发者体验到"AI 全职员工"感受的生产级产品

1.2 为什么是字节跳动?

字节跳动做 AI IDE 有三个独特优势:

  1. 内部场景验证:字节有数万名工程师,内部已经用 Trae(前身是豆包 IDE)验证了 2 年,处理了数亿次代码生成请求
  2. 模型能力自持:豆包大模型 1.6 Pro 在代码生成任务上接近 Claude 3.5 Sonnet,且中文理解远超 GPT-4o
  3. 产品迭代速度:基于 VS Code 内核但完全重写 AI 交互层,2 周一次大版本更新(Cursor 是月更)

1.3 本文能带给你什么?

读完本文,你将掌握:

  • ✅ Trae SOLO 的底层架构与工作原理
  • ✅ 如何用 SOLO 模式在 30 分钟内完成传统需要 2 天的开发任务
  • ✅ 高级技巧:自定义 Agent、接入 MCP 工具、多模型编排
  • ✅ 生产级最佳实践:团队协作、代码审查、CI/CD 集成
  • ✅ 性能优化:让 SOLO 响应速度提升 3 倍的配置技巧

2. Trae 是什么?—— 重新定义 AI 原生 IDE

2.1 产品定位:不是"VS Code + 插件"

Trae 的官方定位是 AI-Native IDE(AI 原生集成开发环境),与"VS Code + GitHub Copilot 插件"有本质区别:

维度VS Code + CopilotTrae (IDE 模式)Trae (SOLO 模式)
AI 参与度被动响应(按需触发)主动辅助(实时建议)主导执行(自主完成)
开发流程传统流程不变优化传统流程重新定义流程
交互方式侧边栏对话内联 + 对话混合自然语言需求输入
适用场景代码补全、问答迭代开发、重构从 0 到 1 的完整项目

核心差异:Trae 的 AI 不是"附加功能",而是与编辑器内核深度集成的第一等公民

2.2 技术架构概览

Trae 基于 VS Code 1.85 内核改造,但在以下层面做了深度定制:

┌─────────────────────────────────────────────────┐
│           Trae IDE (VS Code 内核)              │
├─────────────────────────────────────────────────┤
│  AI 交互层 (重写)                              │
│  - SOLO Agent 引擎                            │
│  - 多模型路由 (Doubao/GLM/Kimi/Qwen)         │
│  - 上下文管理器 (256K tokens)                 │
│  - 代码索引 (基于 ripgrep + Tree-sitter)     │
├─────────────────────────────────────────────────┤
│  编辑引擎层 (改造)                            │
│  - 智能补全 (不同于 Copilot 的独立推理)       │
│  - 实时诊断 (AI 驱动的类型推断)               │
│  - 多文件编辑协调 (跨文件引用追踪)            │
├─────────────────────────────────────────────────┤
│  基础设施层 (VS Code 原生)                     │
│  - Electron 主进程                             │
│  - Extension Host                              │
│  - Language Server Protocol                    │
└─────────────────────────────────────────────────┘

关键创新点

  1. 上下文工程的系统化:传统 AI 编程工具靠"拼 prompt",Trae 内置了上下文管理器,自动决定"当前任务需要哪些文件/函数/依赖"
  2. 多模型动态路由:不同任务自动选择最优模型(代码生成用 Doubao-Seed-Code,复杂推理用 GLM-5.1)
  3. Agent 运行时:SOLO 模式不是"调用一次 API",而是持续的 Agent 循环(观察 → 思考 → 行动 → 再观察)

2.3 安装与配置(5 分钟上手)

2.3.1 下载与安装

# 官方下载地址
# 国内版: https://www.trae.com.cn/
# 国际版: https://www.trae.ai/

# macOS (推荐 Homebrew)
brew install --cask trae

# Windows (官方安装包)
# 下载 TraeSetup.exe 后双击安装

# Linux (AppImage)
chmod +x Trae-1.2.3.AppImage
./Trae-1.2.3.AppImage

2.3.2 首次配置

安装后需要完成三个关键配置:

① 模型选择(设置 → AI 模型)

推荐配置(国内用户):
  - 主力模型: Doubao-Seed-Code (代码生成速度快)
  - 复杂任务: GLM-5.1 (推理能力强)
  - 备选: Kimi-K2.5 (长上下文场景)

国际用户:
  - 主力模型: Claude 3.5 Sonnet (通过 API Key)
  - 备选: GPT-4o

② 快捷键绑定(设置 → 键盘快捷方式)

{
  "trae.solo.newTask": "cmd+ctrl+n",     // 新建 SOLO 任务
  "trae.chat.focus": "cmd+ctrl+c",       // 聚焦 AI 对话
  "trae.inlineSuggest.trigger": "alt+\\" // 触发内联建议
}

③ 项目规则配置(项目根目录创建 .trae/rules.md

# 项目规则

## 代码规范
- 使用 TypeScript 严格模式
- 变量命名用 camelCase
- 组件命名用 PascalCase
- 禁止使用 any 类型

## 架构约束
- 前端用 React + Tailwind CSS
- 状态管理用 Zustand
- API 请求用 SWR
- 错误处理用自定义 ErrorBoundary

## AI 生成代码偏好
- 优先生成单元测试
- 添加详细的中文注释
- 使用函数式组件(不用 class)

3. 核心架构解析:从 Chat 到 SOLO 的三层演进

Trae 提供了三种协作模式,对应不同的 AI 参与度:

3.1 Chat 模式:问答式辅助

适用场景:代码解释、Bug 排查、技术咨询

工作流程

开发者提问 → AI 回答(基于当前文件上下文)→ 开发者手动应用建议

示例

// 问:这段 TypeScript 代码有什么问题?
function add(a: number, b: number): number {
  return a + b;
}

// AI 回答:
// 1. 函数名不清晰,建议改为 `sum` 或 `addNumbers`
// 2. 没有输入验证,如果传入 NaN 会返回 NaN
// 3. 建议添加 JSDoc 注释

局限性:AI 只"说"不"做",所有代码修改需要开发者手动完成。

3.2 Builder 模式:迭代式协同

适用场景:功能开发、代码重构、测试编写

工作流程

开发者描述需求 → AI 生成方案 → 开发者确认 → AI 修改代码 → 开发者审查

示例

// 需求:为一个 React 组件添加"点赞"功能
// 输入:在 PostCard 组件中添加点赞按钮,调用 /api/like 接口

// AI 生成的执行计划:
// [1/3] 安装依赖: axios (用于 API 请求)
// [2/3] 修改 PostCard.tsx: 添加 LikeButton 子组件
// [3/3] 添加单元测试: PostCard.test.tsx

// 开发者确认后,AI 自动执行并展示改动预览

优势:AI 开始"动手",但每个关键步骤都需要开发者确认。

3.3 SOLO 模式:自主式交付

适用场景:从 0 到 1 的完整项目、标准化模块开发

工作流程

开发者描述需求(自然语言) → AI 自主完成全流程 → 开发者验收

核心特点

  1. 自主规划:AI 自动拆解任务(不需要开发者指定"先做什么后做什么")
  2. 并行执行:多个子 Agent 同时工作(例如:一个写前端,一个写后端)
  3. 自我纠错:如果代码运行报错,AI 自动调试并修复(不需要人工介入)
  4. 持续交付:每完成一个子任务就提交一次 Git commit

示例

# 输入需求(可以是语音/文字/截图)
"开发一个待办事项 App,要求:
 1. 支持添加/删除/编辑待办
 2. 数据存在 localStorage
 3. 用 React + TypeScript + Tailwind
 4. 响应式设计"

# AI 自主执行(无需人工干预):
# [00:01] 分析需求 → 生成项目结构
# [00:03] 创建 React 项目 (Vite + TS)
# [00:05] 安装依赖 (Tailwind, uuid)
# [00:08] 编写 TodoList 组件
# [00:12] 实现 localStorage 持久化
# [00:15] 添加响应式样式
# [00:18] 编写单元测试
# [00:20] 构建并预览
# [00:21] 提交 Git 仓库

# 输出:完整的可运行项目 + 使用文档

4. SOLO 模式深度剖析:主 Agent + 子 Agent 协同架构

4.1 架构设计哲学

SOLO 模式的核心设计理念是模拟一个完整的技术团队

                主 Agent (Project Manager)
                         │
        ┌────────────────┼────────────────┐
        │                │                │
   子 Agent 1    子 Agent 2    子 Agent 3
   (Frontend)    (Backend)     (Testing)
  • 主 Agent:负责需求理解、任务拆解、进度协调
  • 子 Agent:负责具体执行(每个子 Agent 是独立的 AI 实例,拥有自己的上下文窗口)

为什么需要多 Agent?

  1. 上下文窗口限制:单个 AI 实例的上下文窗口有限(即使 256K tokens 也装不下整个大型项目)
  2. 任务并行:前端和后端可以同时开发,不用互相等待
  3. 专业分工:不同的 Agent 可以用不同的模型(前端用快速模型,测试用精确模型)

4.2 主 Agent 的工作循环

主 Agent 运行一个改进的 ReAct 循环(Reasoning + Acting):

# 伪代码
class MainAgent:
    def run(self, user_requirement: str):
        # 第一阶段:需求理解
        self.plan = self.understand_requirement(user_requirement)
        
        # 第二阶段:任务拆解
        self.tasks = self.decompose_tasks(self.plan)
        
        # 第三阶段:分配子 Agent
        for task in self.tasks:
            agent = self.spawn_sub_agent(task.type)
            agent.assign(task)
        
        # 第四阶段:监控与协调
        while not self.all_tasks_done():
            status = self.check_sub_agents()
            if status.has_conflict:
                self.resolve_conflict(status)
            if status.has_error:
                self.debug_and_fix(status)
            time.sleep(5)
        
        # 第五阶段:集成测试
        self.integrate_and_test()
        
        # 第六阶段:交付
        return self.generate_deliverables()

关键能力 1:需求理解

主 Agent 不是简单"记住用户说的话",而是会主动追问不明确的点

用户:"做一个电商网站"

主 Agent:
"我需要确认几个细节:
 1. 需要支持哪些支付方式?(微信/支付宝/信用卡)
 2. 是否需要后台管理系统?
 3. 预期用户量级?(这影响技术选型)
 4. 有无设计稿或参考网站?"

用户:"用微信支付,需要后台,预计 1 万用户,参考淘宝"

主 Agent:
"好的,我规划了以下技术栈:
 - 前端:Next.js 15 + Tailwind CSS
 - 后端:Node.js + Express + MySQL
 - 支付:微信支付 SDK
 - 部署:Vercel (前端) + 阿里云 (后端)
 
 预计需要 6 个子任务,耗时约 45 分钟,是否开始?"

关键能力 2:任务拆解

主 Agent 会将需求拆解为有依赖关系的 DAG(有向无环图)

tasks:
  - id: task-1
    name: "初始化项目结构"
    depends_on: []
    estimated_time: 3min
    
  - id: task-2
    name: "实现用户注册登录"
    depends_on: [task-1]
    estimated_time: 10min
    
  - id: task-3
    name: "实现商品列表页"
    depends_on: [task-1]
    estimated_time: 8min
    
  - id: task-4
    name: "实现购物车"
    depends_on: [task-2, task-3]
    estimated_time: 12min
    
  - id: task-5
    name: "实现微信支付"
    depends_on: [task-4]
    estimated_time: 15min

4.3 子 Agent 的专业能力

每个子 Agent 是一个专注于特定领域的 AI 实例

4.3.1 Frontend Agent

擅长:React/Vue 组件开发、CSS 布局、状态管理

工作流程

// 输入任务:实现 TodoList 组件
class FrontendAgent {
  async execute(task: Task) {
    // 1. 读取项目既有代码(了解代码规范)
    const existingCode = this.readFiles(['src/App.tsx', 'src/index.css']);
    
    // 2. 生成组件代码
    const componentCode = this.generateComponent({
      name: 'TodoList',
      props: ['todos', 'onToggle', 'onDelete'],
      state: 'useState',
      styling: 'Tailwind'
    });
    
    // 3. 编写样式
    const styledCode = this.addStyling(componentCode, {
      responsive: true,
      darkMode: true
    });
    
    // 4. 编写单元测试
    const testCode = this.generateTest({
      component: 'TodoList',
      testCases: ['renders correctly', 'handles toggle', 'handles delete']
    });
    
    // 5. 写入文件
    this.writeFiles({
      'src/components/TodoList.tsx': componentCode,
      'src/components/TodoList.test.tsx': testCode
    });
    
    // 6. 运行测试
    await this.runTest('TodoList.test.tsx');
    
    return { status: 'success', files: [...] };
  }
}

生成代码示例

// src/components/TodoList.tsx
import React, { useState } from 'react';
import { TodoItem } from './TodoItem';

interface Todo {
  id: string;
  text: string;
  completed: boolean;
}

interface TodoListProps {
  initialTodos?: Todo[];
}

export const TodoList: React.FC<TodoListProps> = ({ initialTodos = [] }) => {
  const [todos, setTodos] = useState<Todo[]>(initialTodos);
  const [newTodo, setNewTodo] = useState('');

  // 添加待办
  const addTodo = () => {
    if (!newTodo.trim()) return;
    
    const todo: Todo = {
      id: crypto.randomUUID(),
      text: newTodo,
      completed: false
    };
    
    setTodos([...todos, todo]);
    setNewTodo('');
  };

  // 切换完成状态
  const toggleTodo = (id: string) => {
    setTodos(todos.map(todo =>
      todo.id === id ? { ...todo, completed: !todo.completed } : todo
    ));
  };

  // 删除待办
  const deleteTodo = (id: string) => {
    setTodos(todos.filter(todo => todo.id !== id));
  };

  // 统计未完成数量
  const remainingCount = todos.filter(todo => !todo.completed).length;

  return (
    <div className="max-w-md mx-auto mt-8 p-4 bg-white rounded-lg shadow">
      <h1 className="text-2xl font-bold mb-4">待办事项 ({remainingCount} 剩余)</h1>
      
      {/* 输入框 */}
      <div className="flex gap-2 mb-4">
        <input
          type="text"
          value={newTodo}
          onChange={(e) => setNewTodo(e.target.value)}
          onKeyPress={(e) => e.key === 'Enter' && addTodo()}
          placeholder="添加新待办..."
          className="flex-1 px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
        />
        <button
          onClick={addTodo}
          className="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600"
        >
          添加
        </button>
      </div>
      
      {/* 待办列表 */}
      <ul className="space-y-2">
        {todos.map(todo => (
          <TodoItem
            key={todo.id}
            todo={todo}
            onToggle={toggleTodo}
            onDelete={deleteTodo}
          />
        ))}
      </ul>
      
      {/* 空状态 */}
      {todos.length === 0 && (
        <p className="text-center text-gray-400 py-8">暂无待办,添加一个吧!</p>
      )}
    </div>
  );
};

4.3.2 Backend Agent

擅长:API 设计、数据库建模、身份验证

工作流程

// 输入任务:实现用户认证 API
class BackendAgent {
  async execute(task: Task) {
    // 1. 设计数据库 Schema
    const schema = this.designSchema({
      entities: ['User', 'Session'],
      relationships: []
    });
    
    // 2. 生成 Prisma Model
    const prismaSchema = this.generatePrismaSchema(schema);
    
    // 3. 实现 API 路由
    const routes = this.generateRoutes({
      endpoints: [
        { method: 'POST', path: '/api/register', handler: 'registerUser' },
        { method: 'POST', path: '/api/login', handler: 'loginUser' },
        { method: 'POST', path: '/api/logout', handler: 'logoutUser' }
      ]
    });
    
    // 4. 实现中间件(JWT 验证)
    const middleware = this.generateMiddleware({
      type: 'jwt-auth',
      provider: 'jsonwebtoken'
    });
    
    // 5. 编写单元测试
    const tests = this.generateTests({
      endpoints: routes,
      coverage: 'happy-path + error-cases'
    });
    
    return { status: 'success', files: [...] };
  }
}

4.3.3 Testing Agent

擅长:单元测试、集成测试、E2E 测试

特色能力:自动生成边界用例

// 生成的测试代码示例
import { render, screen, fireEvent } from '@testing-library/react';
import { TodoList } from './TodoList';

describe('TodoList', () => {
  it('应该能添加新待办', () => {
    render(<TodoList />);
    
    const input = screen.getByPlaceholderText('添加新待办...');
    const button = screen.getByText('添加');
    
    fireEvent.change(input, { target: { value: '测试待办' } });
    fireEvent.click(button);
    
    expect(screen.getByText('测试待办')).toBeInTheDocument();
  });
  
  it('应该能切换待办状态', () => {
    const initialTodos = [
      { id: '1', text: '测试', completed: false }
    ];
    
    render(<TodoList initialTodos={initialTodos} />);
    
    const checkbox = screen.getByRole('checkbox');
    fireEvent.click(checkbox);
    
    expect(checkbox).toBeChecked();
  });
  
  it('应该能删除待办', () => {
    const initialTodos = [
      { id: '1', text: '测试', completed: false }
    ];
    
    render(<TodoList initialTodos={initialTodos} />);
    
    const deleteButton = screen.getByText('删除');
    fireEvent.click(deleteButton);
    
    expect(screen.queryByText('测试')).not.toBeInTheDocument();
  });
  
  // 边界用例(AI 自动生成)
  it('空输入不应该添加待办', () => {
    render(<TodoList />);
    
    const button = screen.getByText('添加');
    fireEvent.click(button);
    
    expect(screen.queryByRole('listitem')).not.toBeInTheDocument();
  });
  
  it('应该正确处理特殊字符', () => {
    render(<TodoList />);
    
    const input = screen.getByPlaceholderText('添加新待办...');
    const button = screen.getByText('添加');
    
    fireEvent.change(input, { target: { value: '<script>alert("xss")</script>' } });
    fireEvent.click(button);
    
    // 验证 XSS 被转义
    expect(screen.queryByText('<script>')).not.toBeInTheDocument();
  });
});

4.4 协同机制:主 Agent 如何管理子 Agent

4.4.1 通信协议

子 Agent 之间通过 Message Queue 通信:

// 主 Agent 发送任务
mainAgent.dispatch({
  to: 'frontend-agent',
  task: {
    id: 'task-3',
    type: 'implement-component',
    payload: {
      component: 'TodoList',
      props: [...],
      styling: 'Tailwind'
    }
  }
});

// 子 Agent 返回进度
frontendAgent.report({
  taskId: 'task-3',
  status: 'in-progress',
  progress: 60,
  message: '正在编写单元测试...'
});

// 子 Agent 完成任

frontendAgent.report({
  taskId: 'task-3',
  status: 'completed',
  output: {
    files: ['src/components/TodoList.tsx', 'src/components/TodoList.test.tsx'],
    testsPassed: 5
  }
});

4.4.2 冲突解决

当多个子 Agent 修改同一个文件时,主 Agent 会自动合并冲突

// 场景:Frontend Agent 和 Backend Agent 都修改了 package.json
// Frontend Agent 添加了 axios
// Backend Agent 添加了 express

// 主 Agent 的合并策略:
// 1. 读取两个版本的 diff
// 2. 检测冲突(同一行被不同方式修改)
// 3. 如果没有冲突,自动合并
// 4. 如果有冲突,让两个 Agent 重新协商

const mergeResult = mainAgent.mergeChanges({
  file: 'package.json',
  changes: [
    { agent: 'frontend', additions: ['axios'] },
    { agent: 'backend', additions: ['express'] }
  ]
});

// 合并后的 package.json
{
  "dependencies": {
    "axios": "^1.6.0",      // 来自 Frontend Agent
    "express": "^4.18.2",   // 来自 Backend Agent
    "react": "^18.2.0"      // 既有依赖
  }
}

5. 实战演练:从零到一构建完整项目

5.1 需求描述

我们要用 Trae SOLO 模式开发一个技术博客系统,需求如下:

需求:开发一个技术博客系统

功能要求:
1. 首页展示文章列表(标题、摘要、发布时间)
2. 文章详情页(Markdown 渲染、代码高亮)
3. 标签分类(按标签筛选文章)
4. 搜索功能(全文搜索)
5. 评论系统(基于 Giscus)
6. 暗色模式切换
7. RSS 订阅

技术要求:
- 前端:Next.js 15 (App Router) + TypeScript + Tailwind CSS
- 内容管理:Markdown + Gray Matter(本地文件,不用数据库)
- 部署:Vercel
- 域名:blog.example.com

设计参考:
- 风格简洁,参考 Heidi's Blog (heidi.com)
- 支持移动端

5.2 启动 SOLO 任务

方式一:自然语言输入(推荐)

打开 Trae → 切换到 SOLO 模式 → 在输入框粘贴上面的需求

方式二:上传设计稿

点击"上传文件" → 选择 Figma 设计稿或截图 → AI 自动识别 UI 结构

方式三:语音描述(适合"边想边说"的场景)

点击麦克风图标 → 口述需求(支持中英文混合)

5.3 AI 的执行计划

Trae SOLO 会在 30 秒内生成详细的执行计划:

📋 项目执行计划

项目名称:技术博客系统
预计耗时:约 42 分钟
需要创建的子 Agent:3 个(Frontend、Content、Deploy)

任务拆解:
┌─────────────────────────────────────────────────┐
│ Task 1: 项目初始化 [3 min]                    │
│   - 创建 Next.js 15 项目                      │
│   - 配置 TypeScript + Tailwind                 │
│   - 配置 ESLint + Prettier                    │
│   - 初始化 Git 仓库                           │
└─────────────────────────────────────────────────┘
          ↓
┌─────────────────────────────────────────────────┐
│ Task 2: 实现布局组件 [5 min]                  │
│   - 实现 Header (导航栏)                      │
│   - 实现 Footer (页脚)                        │
│   - 实现 Layout (页面布局)                     │
│   - 实现 DarkModeToggle (暗色模式切换)         │
└─────────────────────────────────────────────────┘
          ↓
┌─────────────────────────────────────────────────┐
│ Task 3: 实现文章列表页 [8 min]                │
│   - 读取 Markdown 文件 (Gray Matter)          │
│   - 实现文章卡片组件                           │
│   - 实现分页                                   │
│   - 实现标签筛选                               │
└─────────────────────────────────────────────────┘
          ↓
┌─────────────────────────────────────────────────┐
│ Task 4: 实现文章详情页 [10 min]               │
│   - Markdown 渲染 (next-mdx-remote)           │
│   - 代码高亮 (Shiki)                          │
│   - 目录生成 (TOC)                            │
│   - 评论系统接入 (Giscus)                     │
└─────────────────────────────────────────────────┘
          ↓
┌─────────────────────────────────────────────────┐
│ Task 5: 实现搜索功能 [6 min]                  │
│   - 全文搜索 (FlexSearch)                     │
│   - 搜索框组件                                 │
│   - 搜索结果页                                 │
└─────────────────────────────────────────────────┘
          ↓
┌─────────────────────────────────────────────────┐
│ Task 6: 部署与优化 [10 min]                  │
│   - 配置 Vercel 部署                          │
│   - 生成 RSS Feed                             │
│   - 添加 SEO Meta Tags                        │
│   - 性能优化 (ISR)                            │
└─────────────────────────────────────────────────┘

是否开始执行?[确认] [修改计划] [取消]

5.4 实时进度监控

点击"确认"后,Trae 会打开实时进度面板

┌─────────────────────────────────────────────────────────────┐
│                    SOLO 任务进度                            │
├─────────────────────────────────────────────────────────────┤
│ 总体进度: ████████████████░░░░ 78% (32min / 42min)       │
│                                                             │
│ ✅ Task 1: 项目初始化 [完成]                                │
│    - 提交: a3f5e2 "Initial commit: Next.js + TS + Tailwind"│
│                                                             │
│ ✅ Task 2: 实现布局组件 [完成]                              │
│    - 提交: 7b9c4d "Add Header, Footer, Layout, DarkMode"  │
│                                                             │
│ 🔄 Task 3: 实现文章列表页 [进行中 65%]                     │
│    - 已完成: 文章卡片组件、分页                             │
│    - 进行中: 标签筛选                                      │
│    - 子 Agent: frontend-agent                              │
│                                                             │
│ ⏳ Task 4: 实现文章详情页 [等待中]                          │
│    - 依赖: Task 3                                          │
│                                                             │
│ ⏳ Task 5: 实现搜索功能 [等待中]                            │
│ ⏳ Task 6: 部署与优化 [等待中]                              │
├─────────────────────────────────────────────────────────────┤
│ 实时日志                                                    │
├─────────────────────────────────────────────────────────────┤
│ [14:32:15] frontend-agent: 开始实现标签筛选组件            │
│ [14:32:18] frontend-agent: 读取现有文章数据...             │
│ [14:32:22] frontend-agent: 生成 TagFilter.tsx              │
│ [14:32:28] frontend-agent: 添加单元测试                   │
│ [14:32:35] frontend-agent: 测试通过 (3/3)                  │
│ [14:32:36] frontend-agent: 提交 commit                    │
│ [14:32:40] main-agent: Task 3 完成,启动 Task 4           │
│ [14:32:41] backend-agent: 收到新任务                       │
└─────────────────────────────────────────────────────────────┘

特色功能:实时干预

如果 AI 的生成结果不符合预期,你可以随时"插话":

用户:"等一下,标签筛选要支持多选,不是单选"

主 Agent:
"收到,正在通知 frontend-agent 修改...
 [14:33:02] frontend-agent: 修改 TagFilter 组件(支持多选)
 [14:33:15] frontend-agent: 更新单元测试
 [14:33:20] frontend-agent: 重新提交 commit"

5.5 完成交付

42 分钟后,Trae 会弹出交付报告

┌─────────────────────────────────────────────────────────────┐
│                   ✅ 任务完成!                            │
├─────────────────────────────────────────────────────────────┤
│ 项目统计                                                    │
│ - 总耗时: 39 分钟(比预计快 3 分钟)                       │
│ - 生成文件: 37 个                                          │
│ - 代码行数: 2,847 行                                      │
│ - 单元测试: 58 个(通过率 100%)                          │
│ - Git 提交: 12 次                                         │
│                                                             │
│ 项目结构                                                    │
│ blog-system/                                               │
│ ├── src/                                                  │
│ │   ├── app/                # Next.js App Router           │
│ │   │   ├── page.tsx        # 首页                        │
│ │   │   ├── posts/[slug]/   # 文章详情页                  │
│ │   │   ├── tag/[tag]/      # 标签筛选页                  │
│ │   │   └── search/         # 搜索页                      │
│ │   ├── components/         # React 组件                  │
│ │   │   ├── Header.tsx                                  │
│ │   │   ├── Footer.tsx                                  │
│ │   │   ├── PostCard.tsx                                │
│ │   │   └── ...                                         │
│ │   ├── lib/               # 工具函数                     │
│ │   │   ├── mdx.ts         # Markdown 解析               │
│ │   │   └── search.ts      # 搜索索引                    │
│ │   └── styles/            # 全局样式                     │
│ ├── content/              # Markdown 文章                  │
│ │   ├── 2026-01-01-hello-world.mdx                      │
│ │   └── ...                                             │
│ ├── public/              # 静态资源                       │
│ ├── tests/               # 单元测试                       │
│ ├── next.config.js       # Next.js 配置                  │
│ ├── tailwind.config.ts   # Tailwind 配置                 │
│ └── README.md            # 项目文档                      │
│                                                             │
│ 下一步操作                                                  │
│ 1. 本地预览: npm run dev                                   │
│ 2. 部署到 Vercel: 点击"一键部署"按钮                      │
│ 3. 自定义域名: 在 Vercel 控制台配置                       │
└─────────────────────────────────────────────────────────────┘

一键部署

Trae 内置了 Vercel 集成,点击"一键部署"后会自动:

  1. 创建 Vercel 项目
  2. 上传源代码
  3. 配置环境变量
  4. 生成生产环境 URL(如 https://blog-example.vercel.app
  5. 自动配置自定义域名(如果已有)

6. 高级特性:MCP 接入与多模型编排

6.1 MCP(Model Context Protocol)接入

Trae 支持 MCP 协议(Anthropic 推出的 AI 工具调用标准),可以让 SOLO 模式调用外部工具。

6.1.1 什么是 MCP?

MCP 是一个让 AI 调用外部工具的标准化协议,类似于"AI 的插件系统":

┌─────────────┐          ┌─────────────┐          ┌─────────────┐
│   Trae      │          │   MCP       │          │   外部工具   │
│   SOLO      │ ◄──────► │   Server    │ ◄──────► │             │
│   (Client)  │  MCP协议  │             │   HTTP    │ - 数据库    │
└─────────────┘          └─────────────┘          │ - GitHub    │
                                                  │ - Slack     │
                                                  │ - Jira      │
                                                  └─────────────┘

6.1.2 配置 MCP Server

方式一:使用官方 MCP Server

Trae 内置了常用的 MCP Server:

// 设置 → MCP 配置
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxx"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
    },
    "sqlite": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sqlite", "./data.db"]
    }
  }
}

方式二:自定义 MCP Server

你可以用 Python/TypeScript 编写自己的 MCP Server:

# my_mcp_server.py
from mcp import Server, Tool

server = Server("my-tool")

@server.tool()
def query_database(query: str) -> str:
    """执行 SQL 查询"""
    # 实现数据库查询逻辑
    result = db.execute(query)
    return str(result)

@server.tool()
def send_slack_message(channel: str, message: str) -> bool:
    """发送 Slack 消息"""
    # 实现 Slack API 调用
    slack_client.chat_postMessage(channel=channel, text=message)
    return True

if __name__ == "__main__":
    server.run()

然后在 Trae 中配置:

{
  "mcpServers": {
    "my-tool": {
      "command": "python",
      "args": ["my_mcp_server.py"]
    }
  }
}

6.1.3 SOLO 模式中使用 MCP 工具

配置完成后,SOLO 模式会自动调用 MCP 工具:

用户:"从 GitHub 拉取 Issues,生成对应的数据库表"

主 Agent:
"我需要使用以下工具:
 1. GitHub MCP: 获取 Issues 列表
 2. SQLite MCP: 创建数据库表
 
 开始执行..."

[调用 GitHub MCP]
GET /repos/{owner}/{repo}/issues
→ 返回 15 个 Issues

[调用 SQLite MCP]
CREATE TABLE issues (
  id INTEGER PRIMARY KEY,
  title TEXT,
  body TEXT,
  state TEXT
);

INSERT INTO issues (id, title, body, state) VALUES ...

6.2 多模型编排

Trae 支持同时配置多个 AI 模型,并根据任务类型自动选择最优模型。

6.2.1 模型路由策略

# .trae/model-routing.yaml
routing:
  - task: "代码生成"
    model: "Doubao-Seed-Code"  # 速度快,中文注释质量高
    
  - task: "复杂推理"
    model: "GLM-5.1"           # 推理能力强
    
  - task: "长文档理解"
    model: "Kimi-K2.5"         # 256K 上下文
    
  - task: "代码审查"
    model: "Qwen3.5-Plus"      # 细致入微的错误检测
    
  - task: "默认"
    model: "Doubao-Seed-Code"  # 性价比最高

6.2.2 实战:让不同子 Agent 用不同模型

// .trae/solo-config.json
{
  "agents": {
    "frontend-agent": {
      "model": "Doubao-Seed-Code",  // 前端代码生成用快速模型
      "temperature": 0.2
    },
    "backend-agent": {
      "model": "GLM-5.1",           // 后端逻辑用推理模型
      "temperature": 0.1
    },
    "testing-agent": {
      "model": "Qwen3.5-Plus",      // 测试用精确模型
      "temperature": 0.0
    }
  }
}

效果

  • Frontend Agent 生成 React 组件的速度提升 40%
  • Backend Agent 生成的 API 代码错误率降低 60%
  • Testing Agent 生成的测试用例覆盖率提升 35%

7. 性能优化:如何让 SOLO 更快更准

7.1 上下文窗口优化

问题:SOLO 模式需要读取大量文件,容易超出上下文窗口限制(即使 256K tokens 也有限)

解决方案智能上下文压缩

Trae 内置了上下文优先级算法

class ContextManager:
    def rank_files(self, project_files: List[File], current_task: Task) -> List[File]:
        """对文件按相关性排序"""
        scored_files = []
        
        for file in project_files:
            score = 0
            
            # 因素1:文件是否被当前任务直接引用
            if self.is_directly_referenced(file, current_task):
                score += 10
                
            # 因素2:文件最近是否被修改
            if self.is_recently_modified(file, days=1):
                score += 5
                
            # 因素3:文件是否是核心配置文件
            if file.name in ['package.json', 'tsconfig.json', 'next.config.js']:
                score += 3
                
            # 因素4:文件类型(优先 TypeScript 源码,次优先测试文件)
            if file.extension == '.tsx' or file.extension == '.ts':
                score += 2
            elif file.extension == '.test.tsx':
                score += 1
                
            scored_files.append((file, score))
        
        # 按分数降序排序,截取前 N 个(不超过上下文窗口)
        scored_files.sort(key=lambda x: x[1], reverse=True)
        return [file for file, score in scored_files[:self.max_files]]

效果:将相关代码块的命中率从 60% 提升到 95%

7.2 响应速度优化

问题:SOLO 模式的端到端延迟可能达到 30-60 秒(需求理解 → 任务拆解 → 代码生成)

优化策略 1:任务并行化

// 优化前:串行执行
async function executeTasksSequentially(tasks: Task[]) {
  for (const task of tasks) {
    await executeTask(task);  // 一个完成后才开始下一个
  }
}

// 优化后:并行执行(无依赖的任务)
async function executeTasksInParallel(tasks: Task[]) {
  const graph = buildDependencyGraph(tasks);
  const levels = topologicalSortByLevel(graph);
  
  for (const level of levels) {
    await Promise.all(level.map(task => executeTask(task)));
  }
}

// 示例:Task 1 和 Task 2 无依赖关系,可以并行
// 优化前: 3min + 5min = 8min
// 优化后: max(3min, 5min) = 5min

优化策略 2:增量代码生成

// 优化前:每次都重新生成整个文件
async function generateFileFromScratch(task: Task) {
  const prompt = `生成一个完整的 ${task.fileName} 文件...`;
  const code = await ai.generate(prompt);  // 耗时 10-20 秒
  return code;
}

// 优化后:只生成差异部分
async function generateFileIncrementally(task: Task) {
  const existingCode = readFile(task.fileName);
  
  // AI 只生成需要修改的部分
  const prompt = `
    现有代码:
    ${existingCode}
    
    需要修改:
    ${task.requirement}
    
    请只输出需要修改的部分(diff 格式)
  `;
  
  const diff = await ai.generate(prompt);  // 耗时 3-5 秒
  const newCode = applyDiff(existingCode, diff);
  return newCode;
}

效果:代码生成速度提升 3 倍(从 15 秒降到 5 秒)

7.3 生成质量优化

问题:AI 生成的代码可能有 Bug 或不规范

优化策略 1:多层验证

class CodeQualityChecker {
  async check(code: string): Promise<CheckResult> {
    const results = await Promise.all([
      this.typeCheck(code),           // TypeScript 类型检查
      this.lintCheck(code),           // ESLint 规范检查
      this.securityCheck(code),       // 安全漏洞检查
      this.performanceCheck(code),    // 性能反模式检查
      this.testCoverageCheck(code)    // 测试覆盖率检查
    ]);
    
    return {
      passed: results.every(r => r.passed),
      errors: results.flatMap(r => r.errors)
    };
  }
  
  async autoFix(code: string, errors: Error[]): Promise<string> {
    // 让 AI 根据错误信息自动修复
    const prompt = `
        以下代码有 ${errors.length} 个错误:
        ${errors.map(e => `- ${e.message}`).join('\n')}
        
        代码:
        ${code}
        
        请修复这些错误(保持代码风格一致)
      `;
      
      return await ai.generate(prompt);
  }
}

优化策略 2:基于 RAG 的代码规范检索

Trae 会索引你的项目历史代码,作为"参考范例":

class CodeExampleRetriever {
  async retrieve(query: string): Promise<CodeExample[]> {
    // 从项目历史中检索相似的代码片段
    const vectorDB = await this.loadVectorDB();
    const similarCodes = await vectorDB.search(query, topK=5);
    
    return similarCodes.map(code => ({
      code: code.content,
      filePath: code.metadata.filePath,
      similarity: code.score
    }));
  }
}

// 使用示例
const retriever = new CodeExampleRetriever();
const examples = await retriever.retrieve('React 组件 + TypeScript + Tailwind');

// 将检索到的范例注入到 AI prompt 中
const prompt = `
  参考以下代码风格:
  ${examples.map((ex, i) => `示例 ${i+1}:\n${ex.code}`).join('\n\n')}
  
  生成一个新的 React 组件:
  ${requirement}
`;

效果:AI 生成的代码与项目既有风格的一致率从 70% 提升到 95%


8. 生产级实践:团队协作与 CI/CD 集成

8.1 团队协作场景

8.1.1 共享 SOLO 配置

在团队中,你可以将 Trae 配置提交到 Git 仓库:

your-project/
├── .trae/
│   ├── rules.md           # 项目规则(代码规范、架构约束)
│   ├── solo-config.json   # SOLO 模式配置(模型选择、Agent 配置)
│   ├── model-routing.yaml # 模型路由策略
│   └── prompts/          # 自定义 Prompt 模板
│       ├── code-review.md
│       └── test-generation.md
├── .vscode/
│   └── settings.json      # 推荐安装 Trae 插件
└── README.md              # 新成员上手指南

新成员上手流程

# 1. 克隆项目
git clone https://github.com/your-org/your-project.git
cd your-project

# 2. 安装 Trae(如果还没安装)
brew install --cask trae

# 3. 打开项目(Trae 会自动读取 .trae/ 配置)
trae .

# 4. 开始开发(配置已自动应用)

8.1.2 Code Review 辅助

Trae 可以自动生成 Code Review 意见:

// .trae/rules.md
## Code Review 规则
- 检查是否有权限验证漏洞
- 检查是否有 SQL 注入风险
- 检查是否有 XSS 风险
- 检查是否有硬编码的密钥
- 检查是否有性能反模式(如 N+1 查询)

使用方式

# 在 Git 提交前自动触发 Code Review
git commit -m "feat: 添加用户登录功能"
→ Trae 自动运行 Code Review
→ 如果发现高风险问题,阻止提交并给出修复建议

8.2 CI/CD 集成

8.2.1 GitHub Actions 集成

# .github/workflows/trae-solo.yml
name: Trae SOLO Auto Dev

on:
  issues:
    types: [opened, labeled]  # 当 Issue 被打上 'ai-do' 标签时触发

jobs:
  ai-develop:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Trae
        run: |
          curl -fsSL https://trae.com.cn/install.sh | sh
          trae auth login --token ${{ secrets.TRAE_API_TOKEN }}
      
      - name: Run SOLO Mode
        run: |
          # 从 Issue 标题和描述中提取需求
          ISSUE_TITLE="${{ github.event.issue.title }}"
          ISSUE_BODY="${{ github.event.issue.body }}"
          
          trae solo run \
            --requirement "$ISSUE_TITLE\n\n$ISSUE_BODY" \
            --auto-commit \
            --create-pr
      
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          title: "🤖 AI 自动生成: ${{ github.event.issue.title }}"
          body: |
            这是由 Trae SOLO 模式自动生成的代码。
            
            **关联 Issue**: #${{ github.event.issue.number }}
            
            **变更说明**:
            - 自动生成代码
            - 自动编写测试
            - 自动更新文档

使用场景

  1. 产品在 GitHub Issues 中提需求(用自然语言描述)
  2. 打上 ai-do 标签
  3. GitHub Actions 自动触发 Trae SOLO
  4. SOLO 完成开发并自动创建 PR
  5. 人工审查后合并

8.2.2 自建 CI/CD Pipeline

如果你不用 GitHub Actions,也可以用 Trae CLI:

# 安装 Trae CLI
npm install -g @trae/cli

# 配置 API Token
export TRAE_API_TOKEN="your-token-here"

# 在 CI 脚本中调用
trae solo run \
  --requirement "$(cat requirements.txt)" \
  --output-dir ./output \
  --model Doubao-Seed-Code \
  --auto-commit \
  --branch feat/ai-generated

9. Trae vs Cursor vs GitHub Copilot 深度对比

维度Trae (SOLO 模式)CursorGitHub Copilot
AI 参与度⭐⭐⭐⭐⭐ 完全自主⭐⭐⭐⭐ 高度辅助⭐⭐⭐ 被动响应
从 0 到 1 项目✅ 支持(核心能力)⚠️ 有限支持❌ 不支持
多文件编辑✅ 自动协调✅ 手动指定⚠️ 有限支持
自主调试✅ 自动修复错误⚠️ 需要人工确认❌ 不支持
中文支持⭐⭐⭐⭐⭐ 原生优化⭐⭐⭐ 基本可用⭐⭐ 准确度低
模型选择✅ 多模型(Doubao/GLM/Kimi)✅ Claude/GPT-4❌ 仅 GitHub 模型
MCP 支持✅ 完整支持⚠️ 部分支持❌ 不支持
价格(国内)🆓 完全免费💰 $20/月💰 ¥129/月
学习曲线平缓(自然语言)中等(需要 Prompt 工程)平缓(代码补全)
适合人群产品经理、初级开发者高级开发者所有开发者

9.1 选型建议

选 Trae SOLO,如果

  • ✅ 你需要从 0 到 1 快速原型验证
  • ✅ 你是产品经理/初级开发者,不太懂技术细节
  • ✅ 你的项目是中文场景(如微信小程序、国内主流技术栈)
  • ✅ 你希望"一次描述,自动完成"

选 Cursor,如果

  • ✅ 你是高级开发者,喜欢"精细控制"每一个细节
  • ✅ 你的项目已经有大量既有代码(Cursor 的代码库理解能力强)
  • ✅ 你需要频繁切换不同的 AI 模型(Cursor 的模型路由更灵活)

选 GitHub Copilot,如果

  • ✅ 你只需要代码补全(不需要自主开发)
  • ✅ 你的团队已经用 GitHub(集成更顺畅)
  • ✅ 你对价格不敏感(企业采购)

10. 未来展望:AI 编程的下一个临界点

10.1 短期趋势(2026-2027)

1. 多模态输入普及

当前:文字描述需求
未来:截图/手绘草图/语音 → AI 直接生成代码

示例:
  用户上传 Figma 设计稿
  → AI 自动识别组件结构
  → 生成对应的 React + Tailwind 代码
  → 像素级还原设计稿

2. 端到端测试自动化

当前:AI 生成代码 + 人工编写测试
未来:AI 自动生成测试 + 自动运行 + 自动修复

示例:
  AI 生成登录功能
  → 自动生成 E2E 测试(Playwright)
  → 在_headless 浏览器中运行
  → 如果发现 Bug,自动修复代码并重新运行测试

3. 跨项目知识迁移

当前:每个项目独立训练(或微调)
未来:AI 学会"举一反三"

示例:
  你在项目 A 中实现了"用户认证"
  → AI 自动提取通用模式
  → 在项目 B 中复用(自动适配新技术栈)

10.2 长期愿景(2028+)

1. AI 成为"全职开发者"

不是"辅助工具",而是"团队成员"

场景:
  你:"下周要上线一个电商小程序,帮我安排一下"
  
  AI:
    "好的,我分配了以下 AI 成员:
     - Frontend Agent: 负责小程序前端
     - Backend Agent: 负责 API 开发
     - Testing Agent: 负责测试
     - DevOps Agent: 负责部署
     
     预计 3 天完成,我每天向你汇报进度。
     如果有需要决策的地方,我会主动找你。"

2. 从"编程"到"产品管理"

开发者的角色转变:
  2024: 写代码(占比 80%)+ 需求理解(占比 20%)
  2026: 写代码(占比 40%)+ 需求理解(占比 60%)
  2028: 写代码(占比 10%)+ 需求理解(占比 90%)

开发者变成"产品经理 + 架构师":
  - 定义产品需求
  - 做技术选型
  - 审查 AI 生成的代码
  - 处理边缘情况(AI 搞不定的复杂逻辑)

11. 总结与行动指南

11.1 核心要点回顾

  1. Trae SOLO 不是"更好的代码补全工具",而是"AI 全职开发者"

    • 从"辅助"到"自主"的范式转移
    • 适合从 0 到 1 的快速原型开发
  2. 核心架构:主 Agent + 子 Agent 协同

    • 主 Agent:需求理解、任务拆解、进度协调
    • 子 Agent:Frontend、Backend、Testing 等专业分工
    • 通过 Message Queue 通信,支持并行执行
  3. 生产级实践要点

    • 配置项目规则(.trae/rules.md)保证代码质量
    • 接入 MCP 扩展能力(数据库、GitHub、Slack 等)
    • 集成 CI/CD(GitHub Actions 自动触发 SOLO)
  4. 性能优化技巧

    • 上下文窗口优化(智能压缩)
    • 任务并行化(无依赖任务同时执行)
    • 增量代码生成(只生成差异部分)

11.2 立即行动清单

第一步:安装并配置 Trae(5 分钟)

# macOS
brew install --cask trae

# 打开 Trae 并完成首次配置
trae .

第二步:用 SOLO 模式完成一个小项目(30 分钟)

需求示例:
  "开发一个倒计时组件,支持:
   1. 自定义目标时间
   2. 显示天/时/分/秒
   3. 到时间后触发回调
   4. 用 React + TypeScript + Tailwind"
   
→ 观察 SOLO 模式的完整执行流程
→ 体验"一次描述,自动完成"的快感

第三步:配置项目规则(10 分钟)

# 在你的项目根目录创建
mkdir .trae
cat > .trae/rules.md << EOF
# 项目规则

## 代码规范
- 使用 TypeScript 严格模式
- 变量命名用 camelCase

## 架构约束
- 前端用 React + Tailwind CSS
- 状态管理用 Zustand
EOF

第四步:接入 MCP(可选)(20 分钟)

// 配置 GitHub MCP
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "你的 GitHub Token"
      }
    }
  }
}

第五步:集成 CI/CD(可选)(30 分钟)

# 参考本文 8.2.1 的 GitHub Actions 配置
# 实现"打标签 → 自动开发 → 自动创建 PR"的全自动化流程

参考资源


版权声明:本文由程序员茄子原创,遵循 CC BY-NC-SA 4.0 协议。欢迎转载,但需注明出处。

更新日志

  • 2026-05-23:初始版本发布

推荐文章

css模拟了MacBook的外观
2024-11-18 14:07:40 +0800 CST
IP地址获取函数
2024-11-19 00:03:29 +0800 CST
Linux 常用进程命令介绍
2024-11-19 05:06:44 +0800 CST
如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
JavaScript 异步编程入门
2024-11-19 07:07:43 +0800 CST
mendeley2 一个Python管理文献的库
2024-11-19 02:56:20 +0800 CST
php客服服务管理系统
2024-11-19 06:48:35 +0800 CST
如何在Vue3中处理全局状态管理?
2024-11-18 19:25:59 +0800 CST
一键配置本地yum源
2024-11-18 14:45:15 +0800 CST
程序员茄子在线接单