DevEco Studio 内置的AI编程辅助工具(二)

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

   CodeGenie是集成在DevEco Studio中的AI智能编程助手,基于华为盘古大模型,提供智能代码生成、代码续写、代码优化等功能。主要包含三大核心功能:自然语言代码生成编辑区代码生成(Inline Edit)编辑区代码续写

二、自然语言代码生成

2.1 两种生成模式

模式一:提问问答模式(标准代码生成)
  • 功能:根据自然语言描述生成独立的代码片段

  • 输入方式:在对话框输入代码需求描述

  • 输出:生成符合要求的完整代码段

  • 操作步骤

    1. 在对话区域输入代码需求描述

    2. 点击发送按钮(或按Enter键)

    3. 自动生成代码

    4. 可选择一键复制或一键插入到编辑区

模式二:代码修改模式(上下文感知修改)
  • 功能:基于现有文件上下文进行代码修改

  • 输入方式:先选择文件,再输入修改描述

  • 输出:提供代码对比,显示修改差异

  • 操作步骤

    1. 点击"@Add Context > Files"选择需要修改的文件

    2. 在对话框输入代码修改描述

    3. 生成内容与原始文件对比

    4. 点击采纳按钮快速应用修改

2.2 使用示例

需求描述:
"使用ArkTS语言写一段代码,在页面顶部插入Swiper组件,其中有3个Image组件,图片资源名分别为app.media.axxx,app.media.bxxx,app.media.cxxx。这些Image组件的宽度撑满父布局,高度为200,图片缩放类型为保持图片宽高比不变,将图片完全显示在边界内。Swiper组件设置为自动播放,播放时间间隔为2秒。"

生成代码可能包含:

// 生成的ArkTS代码片段
@Component
struct MySwiperComponent {
  build() {
    Column() {
      Swiper() {
        ForEach(['app.media.axxx', 'app.media.bxxx', 'app.media.c'], 
          (item: Resource) => {
            Image(item)
              .width('100%')
              .height(200)
              .objectFit(ImageFit.Contain)
          }
        )
      }
      .autoPlay(true)
      .interval(2000) // 2秒
      .indicator(true)
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Start)
  }
}

2.3 功能特点

  1. 智能理解:能理解复杂的自然语言描述

  2. 一键操作:支持一键复制或插入到编辑区

  3. 对比查看:修改模式下提供代码对比功能

  4. 快速采纳:可直接采纳全部或部分修改

三、编辑区代码生成(Inline Edit)

Inline Edit允许在ArkTS文件的编辑窗口中通过自然语言进行问答,基于当前文件的上下文智能生成代码片段,特别适合在现有代码基础上进行修改和增强。

3.2 唤醒方式

方式一:右键菜单唤醒
  1. 在代码编辑区域右键

  2. 选择"CodeGenie > Inline Edit"

  3. 或使用快捷键:

    • Windows/Linux: Alt + I

    • macOS: Command + I

方式二:选中代码唤醒
  1. 选中一段代码

  2. 点击出现的Inline Edit浮框

  3. 或使用快捷键唤醒

  4. 注意:如果浮框未出现,需要到设置中取消勾选"Hide Inline Edit Overlay"

设置路径

  • File > Settings > CodeGenie > Code Generation

  • 或 macOS: DevEco Studio > Preferences/Settings > CodeGenie > Code Generation

3.3 使用流程

步骤1:输入描述
  • 在对话框中输入代码功能描述

  • 按Enter键开始生成

  • 点击"Stop Generation"可中断生成过程

步骤2:查看结果

生成完成后,在编辑区展示生成的代码内容,通过不同颜色显示差异:

  • 绿色区域:新生成的代码内容

  • 蓝色区域:对现有代码进行修改的内容

  • 红色区域:删除的代码内容

步骤3:采纳或拒绝

提供多种采纳方式:

  1. 全部采纳

    • 点击"Accept All"

    • 或使用快捷键:Alt + Enter

  2. 分段采纳

    • 点击界面中的"Accept"区域

    • 或使用快捷键:

      • Windows/Linux: Shift + Ctrl + Y

      • macOS: Shift + Command + Y

  3. 分段拒绝

    • 点击界面中的"Reject"区域

    • 或使用快捷键:

      • Windows/Linux: Shift + Ctrl + N

      • macOS: Shift + Command + N

步骤4:重新生成或继续编辑
  • 重新生成:点击刷新/Regenerate按钮,根据当前描述重新生成

  • 继续编辑:点击"Further Edit"或使用快捷键:

    • Windows/Linux: Ctrl + K

    • macOS: Command + K

3.4 使用示例

场景:为现有组件添加功能

// 现有代码
@Component
struct UserCard {
  @State userName: string = '张三'
  
  build() {
    Row() {
      Text(this.userName)
        .fontSize(20)
    }
  }
}

// 输入描述:"添加用户头像和点击事件"
// 生成可能的结果:
@Component
struct UserCard {
  @State userName: string = '张三'
  @State isSelected: boolean = false
  
  build() {
    Row() {
      // 绿色:新生成的代码
      Image($r('app.media.user_avatar'))
        .width(40)
        .height(40)
        .borderRadius(20)
        .margin({ right: 10 })
      
      Text(this.userName)
        .fontSize(20)
        // 蓝色:修改的代码
        .fontColor(this.isSelected ? Color.Blue : Color.Black)
    }
    // 绿色:新生成的代码
    .padding(10)
    .backgroundColor(this.isSelected ? '#F0F8FF' : Color.White)
    .onClick(() => {
      this.isSelected = !this.isSelected
    })
    .border({ width: 1, color: this.isSelected ? Color.Blue : Color.Gray })
  }
}

四、编辑区代码续写

   利用AI大模型分析并理解在代码编辑区的上下文信息,智能续写符合上下文的ArkTS或C++代码片段。特别适合在编写代码过程中获得智能提示。

4.2 使用约束

  1. 上下文要求

    • 建议编辑区已有较丰富上下文

    • AI模型需要足够的上下文来理解编程场景

    • 如果内容太少,AI可能无法有效理解意图

  2. 触发规则

    • 光标上文10行内,有效代码行数需超过5行

    • 排除以下情况:

      • 单独的{}()[]括号行

      • 空行

      • 纯注释行

4.3 续写设置

设置路径

  • File > Settings > CodeGenie > Code Generation

  • 或 macOS: DevEco Studio > Preferences/Settings > CodeGenie > Code Generation

主要配置选项

  1. 启用代码续写

    • 勾选"Enable code generation"

  2. 勿扰模式

    • 勾选"Do not disturb mode"

    • 隐藏代码生成工具栏及快捷键提示

    • 适合熟悉快捷键的开发者

  3. 续写类型选择

    • Enable snippet generation:片段续写

    • Enable inline generation:行内续写

  4. 时延设置

    • 可设置续写的触发时延

4.4 续写类型

类型一:行内续写(Inline Generation)
  • 触发方式:在编码时稍作停顿

  • 特点:在当前代码行即时续写

  • 适用场景:编写单行代码时的智能补全

类型二:片段续写(Snippet Generation)
  • 触发方式:输入回车

  • 特点:根据上下文生成多行代码片段

  • 适用场景:需要生成完整代码块

4.5 触发方式

  1. 自动触发

    • 行内续写:停顿自动触发

    • 片段续写:按Enter键触发

  2. 手动触发

    • 使用快捷键:

      • Windows/Linux: Alt + C

      • macOS: Option + C

4.6 采纳方式

提供多种灵活的采纳方式:

  1. 快速采纳

    • Tab键采纳全部内容

  2. 精细采纳

    • 逐行采纳

      • Windows/Linux: Ctrl + ↓

      • macOS: Command + ↓

    • 逐单词采纳

      • Windows/Linux: Ctrl + →

      • macOS: Option + →

  3. 忽略内容

    • Esc键忽略续写内容

4.7 常用快捷键

操作macOS快捷键Windows快捷键
触发多行代码续写Enter、Option+CEnter、Alt+C
触发单行代码续写Option+XAlt+X
采纳续写生成的代码TabTab
忽略续写生成的代码EscEsc
查看上一个代码续写结果Option + [Alt + [
查看下一个代码续写结果Option + ]Alt + ]
重新生成代码内容(最多5次)Option + RAlt + R
展示CodeGenie面板Option + UAlt + U
代码逐行采纳Command + ↓Ctrl + ↓
代码逐单词采纳Option + →Ctrl + →

4.8 使用示例

场景:编写一个状态管理函数

// 用户编写的代码
@Component
struct Counter {
  @State count: number = 0
  
  build() {
    Column() {
      Text(`Count: ${this.count}`)
        .fontSize(24)
      
      // 在此处按Enter或稍作停顿
      // AI可能续写的内容:
      Button('增加')
        .onClick(() => {
          this.count++
        })
        .margin({ top: 10 })
      
      Button('减少')
        .onClick(() => {
          if (this.count > 0) {
            this.count--
          }
        })
        .margin({ top: 5 })
      
      Button('重置')
        .onClick(() => {
          this.count = 0
        })
        .margin({ top: 5 })
    }
  }
}

五、功能对比

功能特性自然语言代码生成编辑区代码生成(Inline Edit)编辑区代码续写
使用场景全新代码生成、复杂功能实现现有代码修改、功能增强编写过程中的智能补全
上下文依赖可选(代码修改模式)强依赖当前文件上下文强依赖当前编辑位置上下文
输入方式自然语言描述自然语言描述自动或快捷键触发
输出形式完整代码片段代码差异对比续写代码建议
采纳方式一键复制/插入分段采纳/拒绝Tab键采纳、逐行采纳
交互性中等高(可多次修改)低(主要自动)

5.2 选择建议

  1. 需要从头创建新功能 → 自然语言代码生成

  2. 修改现有代码 → 编辑区代码生成(Inline Edit)

  3. 编写代码时需要智能提示 → 编辑区代码续写

  4. 不确定具体实现细节 → 自然语言代码生成

  5. 精确控制修改内容 → 编辑区代码生成

六、建议

6.1 编写高质量提示词

  1. 具体明确

    • 不建议: "做一个按钮"

    • 建议: "创建一个圆角红色按钮,点击后弹出对话框"

  2. 包含约束条件

    • 不建议: "实现用户列表"

    • 建议: "使用List组件实现用户列表,每项显示头像和用户名,支持下拉刷新"

  3. 指定样式细节

    • 不建议: "做个好看的布局"

    • 建议: "使用Flex布局,左右结构,左侧宽度30%,右侧70%,有10px间距"

6.2 充分利用上下文

  1. 在适当的位置使用Inline Edit

    • 确保光标在需要修改的代码附近

    • 提供足够的上下文信息

  2. 续写的时机选择

    • 编写完函数声明后使用续写

    • 在循环或条件语句开始时使用续写

6.3 效率提升

  1. 分层采纳

    • 使用分段采纳功能,只接受需要的部分

    • 特别是对于复杂的生成结果

  2. 多次迭代

    • 如果不满意生成结果,使用"Further Edit"继续描述

    • 或者使用"Regenerate"重新生成

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值