Skip to content

智能提示 (Cue)

Trae 插件的智能提示功能(Cue)是一个强大的 AI 驱动的编程助手,能够在您编写代码时提供实时的智能建议、代码补全和上下文感知的提示。本指南将详细介绍如何使用和配置智能提示功能。

什么是智能提示

智能提示(Cue)是 Trae 插件的核心功能之一,它利用先进的 AI 技术为开发者提供:

  • 🧠 智能代码补全:基于上下文的精准代码建议
  • 💡 实时编程提示:在编写代码时获得即时帮助
  • 🔍 错误检测和修复:自动识别并建议修复代码问题
  • 📚 API 文档集成:内联显示函数和方法的文档
  • 🎯 最佳实践建议:推荐符合行业标准的编码方式
  • 🔄 重构建议:提供代码优化和重构的智能建议

启用智能提示

自动启用

智能提示功能默认在安装 Trae 插件后自动启用,无需额外配置。

手动控制

您可以通过以下方式控制智能提示:

快捷键

  • 启用/禁用提示Ctrl+Alt+C(Windows/Linux)或 Cmd+Option+C(macOS)
  • 手动触发提示Ctrl+Space(所有平台)
  • 接受建议TabEnter
  • 拒绝建议Esc

命令面板

  1. 打开命令面板(Ctrl+Shift+PCmd+Shift+P
  2. 输入 "Trae: Toggle Cue"
  3. 选择相应的选项

智能提示界面

1. 内联建议

javascript
function calculateTotal(items) {
  // 当您开始输入时,智能提示会出现
  return items.reduce((sum, item) => {
    return sum + item.price * item.quantity; // ← AI 建议的代码
  }, 0);
}
┌─────────────────────────────────────────────────────┐
│ 💡 Trae Cue 建议                                    │
├─────────────────────────────────────────────────────┤
│ return sum + item.price * item.quantity;           │
│                                                     │
│ 💬 计算商品总价,考虑数量和单价                      │
│ 🔧 建议:添加输入验证                               │
│ 📖 相关:Array.reduce() 文档                        │
│                                                     │
│ [Tab] 接受  [Esc] 拒绝  [→] 查看更多                │
└─────────────────────────────────────────────────────┘

2. 悬浮提示

typescript
interface User {
  id: string;
  name: string;
  email: string;
}

// 当鼠标悬停在 User 上时
const user: User = { // ← 显示 User 接口的详细信息
  id: "123",
  name: "张三",
  email: "zhangsan@example.com"
};

3. 错误检测

javascript
function divide(a, b) {
  return a / b; // ⚠️ 智能提示:可能的除零错误
}

// 建议的修复
function divide(a, b) {
  if (b === 0) {
    throw new Error('Division by zero is not allowed');
  }
  return a / b;
}

智能提示类型

1. 代码补全

变量和函数名补全

javascript
const userName = "Alice";
const userAge = 25;

// 输入 "user" 时的建议
console.log(user|); // userName, userAge

方法链补全

javascript
const numbers = [1, 2, 3, 4, 5];

numbers
  .filter(n => n > 2)  // ← AI 建议
  .map(n => n * 2)     // ← AI 建议
  .reduce((a, b) => a + b, 0); // ← AI 建议

对象属性补全

javascript
const config = {
  apiUrl: 'https://api.example.com',
  timeout: 5000,
  retries: 3
};

// 输入 "config." 时的建议
fetch(config.apiUrl, { // ← apiUrl, timeout, retries
  timeout: config.timeout
});

2. 模板和代码片段

React 组件模板

jsx
// 输入 "rfc" 触发 React Function Component 模板
import React from 'react';

const ComponentName = ({ prop1, prop2 }) => {
  return (
    <div>
      {/* 组件内容 */}
    </div>
  );
};

export default ComponentName;

异步函数模板

javascript
// 输入 "async" 触发异步函数模板
async function fetchData(url) {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('Fetch error:', error);
    throw error;
  }
}

错误处理模板

javascript
// 输入 "try" 触发错误处理模板
try {
  // 可能出错的代码
} catch (error) {
  console.error('Error occurred:', error);
  // 错误处理逻辑
} finally {
  // 清理代码
}

3. API 文档集成

javascript
// 当您使用 Array.map 时,显示内联文档
const doubled = numbers.map(num => num * 2);
/*
📖 Array.prototype.map()
创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。

参数:
- callback: 生成新数组元素的函数
- thisArg: 执行 callback 函数时值被用作 this

返回值:一个由原数组每个元素执行回调函数的结果组成的新数组
*/

4. 最佳实践建议

性能优化建议

javascript
// 原始代码
function expensiveOperation(data) {
  return data.map(item => {
    return processItem(item); // 💡 建议:考虑使用 useMemo 缓存结果
  });
}

// AI 建议的优化
import { useMemo } from 'react';

function OptimizedComponent({ data }) {
  const processedData = useMemo(() => {
    return data.map(item => processItem(item));
  }, [data]);
  
  return <div>{/* 使用 processedData */}</div>;
}

安全性建议

javascript
// 原始代码
const userInput = req.body.input;
const query = `SELECT * FROM users WHERE name = '${userInput}'`; // ⚠️ SQL 注入风险

// AI 建议的安全版本
const userInput = req.body.input;
const query = 'SELECT * FROM users WHERE name = ?';
const result = await db.query(query, [userInput]); // ✅ 使用参数化查询

5. 重构建议

函数提取建议

javascript
// 原始代码
function processOrder(order) {
  // 验证订单
  if (!order.id || !order.items || order.items.length === 0) {
    throw new Error('Invalid order');
  }
  
  // 计算总价
  let total = 0;
  for (const item of order.items) {
    total += item.price * item.quantity;
  }
  
  // 应用折扣
  if (order.discountCode) {
    total *= 0.9;
  }
  
  return { ...order, total };
}

// AI 建议的重构版本
function processOrder(order) {
  validateOrder(order);
  const total = calculateTotal(order.items, order.discountCode);
  return { ...order, total };
}

function validateOrder(order) {
  if (!order.id || !order.items || order.items.length === 0) {
    throw new Error('Invalid order');
  }
}

function calculateTotal(items, discountCode) {
  let total = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
  if (discountCode) {
    total *= 0.9;
  }
  return total;
}

语言特定功能

JavaScript/TypeScript

类型推断

typescript
// AI 自动推断类型
const users = [
  { id: 1, name: 'Alice', age: 30 },
  { id: 2, name: 'Bob', age: 25 }
]; // 推断为 Array<{id: number, name: string, age: number}>

// 智能类型建议
function processUser(user: typeof users[0]) { // ← AI 建议的类型
  return user.name.toUpperCase();
}

导入建议

javascript
// 当您使用未导入的函数时
const result = lodash.debounce(callback, 300); // ⚠️ lodash 未导入

// AI 建议添加导入
import { debounce } from 'lodash'; // ← 自动建议的导入
const result = debounce(callback, 300);

Python

类型注解建议

python
# 原始代码
def calculate_average(numbers):
    return sum(numbers) / len(numbers)

# AI 建议的类型注解版本
from typing import List

def calculate_average(numbers: List[float]) -> float:
    """计算数字列表的平均值"""
    if not numbers:
        raise ValueError("Cannot calculate average of empty list")
    return sum(numbers) / len(numbers)

异常处理建议

python
# 原始代码
def read_file(filename):
    with open(filename, 'r') as f:
        return f.read()

# AI 建议的改进版本
def read_file(filename: str) -> str:
    """安全地读取文件内容"""
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            return f.read()
    except FileNotFoundError:
        raise FileNotFoundError(f"File '{filename}' not found")
    except IOError as e:
        raise IOError(f"Error reading file '{filename}': {e}")

Java

设计模式建议

java
// 原始代码
public class DatabaseConnection {
    private static DatabaseConnection instance;
    
    public static DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }
}

// AI 建议的线程安全版本
public class DatabaseConnection {
    private static volatile DatabaseConnection instance;
    
    public static DatabaseConnection getInstance() {
        if (instance == null) {
            synchronized (DatabaseConnection.class) {
                if (instance == null) {
                    instance = new DatabaseConnection();
                }
            }
        }
        return instance;
    }
}

配置和自定义

1. 基本配置

json
{
  "trae.cue.enabled": true,
  "trae.cue.autoTrigger": true,
  "trae.cue.delay": 300,
  "trae.cue.maxSuggestions": 5,
  "trae.cue.showDocumentation": true,
  "trae.cue.showBestPractices": true,
  "trae.cue.enableErrorDetection": true
}

2. 高级配置

json
{
  "trae.cue.languages": {
    "javascript": {
      "enabled": true,
      "priority": "high",
      "features": ["completion", "documentation", "refactoring"]
    },
    "python": {
      "enabled": true,
      "priority": "high",
      "features": ["completion", "type-hints", "error-detection"]
    },
    "java": {
      "enabled": true,
      "priority": "medium",
      "features": ["completion", "patterns", "documentation"]
    }
  },
  "trae.cue.contextWindow": 1000,
  "trae.cue.cacheSize": 100,
  "trae.cue.confidenceThreshold": 0.7
}

3. 自定义提示规则

json
{
  "trae.cue.customRules": [
    {
      "name": "console-log-warning",
      "pattern": "console\\.log\\(",
      "message": "考虑使用日志库而不是 console.log",
      "severity": "warning",
      "suggestion": "使用 logger.info() 或 logger.debug()"
    },
    {
      "name": "async-without-await",
      "pattern": "async function.*{[^}]*}",
      "condition": "!contains('await')",
      "message": "异步函数中没有使用 await",
      "severity": "info"
    }
  ]
}

性能优化

1. 缓存策略

javascript
// 智能提示会缓存常用的建议
const cache = {
  'react-component': {
    template: 'function Component() { return <div></div>; }',
    lastUsed: Date.now(),
    frequency: 15
  },
  'async-function': {
    template: 'async function name() { try { } catch (error) { } }',
    lastUsed: Date.now(),
    frequency: 8
  }
};

2. 上下文感知

javascript
// 基于文件类型和项目结构的智能建议
const context = {
  fileType: 'react-component',
  projectFramework: 'react',
  dependencies: ['react', 'react-dom', 'typescript'],
  recentImports: ['useState', 'useEffect', 'useCallback'],
  codeStyle: 'functional-components'
};

故障排除

常见问题

智能提示不显示

  1. 检查插件是否已启用
  2. 验证语言支持
  3. 检查网络连接
  4. 重启 IDE

建议不准确

  1. 提供更多上下文
  2. 检查代码语法
  3. 更新插件版本
  4. 调整配置参数

性能问题

  1. 减少上下文窗口大小
  2. 降低建议频率
  3. 清理缓存
  4. 关闭不需要的功能

调试模式

json
{
  "trae.cue.debug": true,
  "trae.cue.logLevel": "verbose",
  "trae.cue.showTimings": true,
  "trae.cue.trackUsage": true
}

快捷键参考

功能Windows/LinuxmacOS
手动触发提示Ctrl+SpaceCtrl+Space
接受建议TabTab
拒绝建议EscEsc
下一个建议Alt+]Option+]
上一个建议Alt+[Option+[
显示文档Ctrl+K Ctrl+ICmd+K Cmd+I
启用/禁用Ctrl+Alt+CCmd+Option+C

最佳实践

1. 有效使用智能提示

  • 提供清晰的上下文:编写有意义的变量名和函数名
  • 保持代码整洁:良好的代码结构有助于更准确的建议
  • 及时接受建议:不要让建议窗口长时间停留
  • 学习建议模式:观察和学习 AI 的建议模式

2. 配置优化

  • 根据项目调整:为不同项目配置不同的提示规则
  • 平衡性能和功能:在功能丰富性和性能之间找到平衡
  • 定期更新:保持插件和配置的最新状态

3. 团队协作

  • 共享配置:在团队中共享智能提示配置
  • 统一标准:建立团队的代码风格和最佳实践
  • 培训团队:确保团队成员了解如何有效使用智能提示

下一步

掌握智能提示功能后,您可以继续学习:

  1. 快速应用功能 - 高效应用代码更改
  2. 构建器模式 - 快速生成项目结构
  3. 快捷键大全 - 提高操作效率

让智能提示成为您编程路上的得力助手,提升编码效率和代码质量!

您的终极 AI 驱动 IDE 学习指南