Skip to content

第二部分:交互艺术——如何给 Trae 下达“高质量指令”

Builder 模式 vs. Chat 模式

模式对比

特性Builder 模式(底部全量构建)Chat 模式(左侧聊天窗口)
适用场景生成完整代码、重构、大型修改咨询问题、调试、小范围修改
上下文范围更大,可包含整个文件或项目相对较小,适合特定问题
交互方式一次性输入,全量生成多轮对话,逐步深入
生成速度相对较慢,质量更高相对较快,响应及时
适用任务复杂任务,需要深度思考简单任务,需要快速反馈

Builder 模式使用指南

最佳使用场景

  • 生成新文件:从头开始创建一个新文件
  • 大规模重构:修改整个文件或模块的结构
  • 复杂功能实现:实现需要多步思考的复杂功能
  • 代码风格统一:统一整个项目的代码风格

使用技巧

  1. 提供完整上下文:在 Builder 模式中,提供尽可能完整的上下文信息
  2. 明确输出格式:清晰指定需要的输出格式和结构
  3. 使用 @ 符号引用:利用 @Files、@Codebase 等引用相关代码
  4. 设置约束条件:明确代码风格、性能要求等约束条件

示例

@Files src/components/Button.tsx

请根据现有 Button 组件的风格,创建一个新的 Input 组件,要求:
1. 支持 placeholder 属性
2. 支持 disabled 状态
3. 支持 error 状态
4. 与 Button 组件风格一致
5. 提供完整的 TypeScript 类型定义

输出格式:完整的 React 组件代码,包含必要的注释

Chat 模式使用指南

最佳使用场景

  • 代码调试:分析和解决代码中的错误
  • 概念解释:询问代码的工作原理或最佳实践
  • 小范围修改:对现有代码进行小幅修改
  • 快速咨询:快速获取关于特定问题的建议

使用技巧

  1. 问题具体化:将问题描述得具体而清晰
  2. 提供相关代码:只提供与问题相关的代码片段
  3. 逐步深入:通过多轮对话逐步解决复杂问题
  4. 使用追问技巧:当回答不完整时,使用追问获取更多信息

示例

我在使用 React 时遇到了一个问题,以下是相关代码:

```tsx
function useCounter() {
  const [count, setCount] = useState(0);
  
  const increment = () => {
    setCount(count + 1);
  };
  
  return { count, increment };
}

当我多次快速点击按钮时,计数没有正确增加,这是为什么?


## 精准引用(The Power of @)

### @Files:快速定位相关逻辑

#### 功能介绍
@Files 指令允许你快速引用特定文件,让 Trae 理解该文件的内容和上下文。

#### 使用方法

@Files path/to/file.js

[任务描述]


#### 高级用法
- **引用多个文件**:`@Files file1.js file2.js file3.js`
- **使用通配符**:`@Files src/components/*.tsx`
- **引用目录**:`@Files src/utils/`

#### 示例

@Files src/utils/date.js src/utils/format.js

请基于这两个文件中的工具函数,创建一个新的时间格式化工具,支持多种日期格式。


### @Codebase:处理跨模块引用

#### 功能介绍
@Codebase 指令让 Trae 理解整个代码库的结构和依赖关系,适用于跨模块的任务。

#### 使用方法

@Codebase

[任务描述]


#### 最佳实践
- **大型项目**:结合 @Files 使用,先引用核心文件,再使用 @Codebase
- **跨模块任务**:使用 @Codebase 确保 Trae 理解模块间的依赖关系
- **代码风格统一**:使用 @Codebase 让 Trae 学习项目的整体代码风格

#### 示例

@Codebase

请分析整个代码库,找出所有使用 deprecated 方法的地方,并提供替代方案。


### @Docs:喂入第三方库文档

#### 功能介绍
@Docs 指令允许你将第三方库的文档链接喂给 Trae,让它学习最新的 API 和使用方法。

#### 使用方法

@Docs https://example.com/api-docs

[任务描述]


#### 支持的文档类型
- **官方 API 文档**:库的官方 API 文档
- **GitHub README**:项目的 GitHub README 文件
- **技术博客**:相关的技术博客文章
- **本地文档**:项目中的本地文档文件

#### 示例

@Docs https://react.dev/reference/react

请基于最新的 React 文档,实现一个使用 React 18 新特性的组件。


## 多轮对话的“纠偏”技巧

### 常见问题
- **理解偏差**:Trae 对任务的理解与预期不符
- **输出质量**:生成的代码质量不高或不符合要求
- **偏离主题**:对话逐渐偏离原始任务

### 纠偏策略

#### 1. 明确指出问题
- **错误示例**:"不对,重新生成"
- **正确示例**:"生成的代码中缺少错误处理逻辑,请添加 try-catch 块"

#### 2. 提供参考示例
- **错误示例**:"生成一个更好的版本"
- **正确示例**:"请参考以下代码风格,重新生成:
  ```tsx
  function handleError(error) {
    console.error('An error occurred:', error);
    return { success: false, error: error.message };
  }
  ```"

#### 3. 重新定义任务
- **错误示例**:"我需要一个函数"
- **正确示例**:"请重新实现一个函数,要求:
  1. 接收两个数字参数
  2. 返回它们的和
  3. 包含参数类型检查
  4. 使用 TypeScript 编写"

#### 4. 逐步引导
- 首先指出主要问题
- 然后提供具体的修正建议
- 最后要求重新生成

### 实战示例

#### 初始对话

**Q:** 请生成一个 React 组件,显示用户列表

**A:**

```tsx
import React from 'react';

interface User {
  id: number;
  name: string;
}

interface UserListProps {
  users: User[];
}

const UserList: React.FC<UserListProps> = ({ users }) => {
  return (
    <div>
      {users.map(user => (
        <div key={user.id}>{user.name}</div>
      ))}
    </div>
  );
};

export default UserList;

纠偏对话

Q: 生成的组件缺少加载状态和错误处理,请添加:

  1. 当 users 为 null 或 undefined 时显示加载状态
  2. 当 users 为空数组时显示 "No users found" 消息
  3. 添加适当的 CSS 样式

A:

tsx
import React from 'react';
import './UserList.css';

interface User {
  id: number;
  name: string;
}

interface UserListProps {
  users: User[] | null | undefined;
  isLoading?: boolean;
  error?: string;
}

const UserList: React.FC<UserListProps> = ({ 
  users, 
  isLoading = false, 
  error 
}) => {
  if (isLoading) {
    return <div className="user-list-loading">Loading users...</div>;
  }
  
  if (error) {
    return <div className="user-list-error">Error: {error}</div>;
  }
  
  if (!users || users.length === 0) {
    return <div className="user-list-empty">No users found</div>;
  }
  
  return (
    <div className="user-list">
      {users.map(user => (
        <div key={user.id} className="user-item">
          {user.name}
        </div>
      ))}
    </div>
  );
};

export default UserList;
css
/* UserList.css */
.user-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px;
  border: 1px solid #e0e0e0;
  border-radius: 4px;
}

.user-item {
  padding: 8px 12px;
  background-color: #f5f5f5;
  border-radius: 4px;
}

.user-list-loading {
  padding: 16px;
  text-align: center;
  color: #666;
}

.user-list-error {
  padding: 16px;
  text-align: center;
  color: #e74c3c;
  background-color: #fadbd8;
  border-radius: 4px;
}

.user-list-empty {
  padding: 16px;
  text-align: center;
  color: #666;
  font-style: italic;
}

通过掌握这些交互技巧,你可以更有效地与 Trae 进行沟通,获得更高质量的代码和建议。