CodeArts Agent 使用技巧与节约Token技巧

CodeArts Agent是huawei cloud CodeArts服务提供的智能代码助手,基于大语言模型技术,为开发者提供代码生成、代码解释、代码优化、单元测试生成等AI辅助编程能力,可以极大的提升编码与调试效率。

本文将介绍CodeArts Agent的使用技巧,以及如何在使用CodeArts Agent时节约Token消耗。

CodeArts Agent两种模式的特点与适用场景

CodeArts Agent提供两种工作模式,适用于不同的开发场景:

快速探索模式

特点

  • 以自然语言对话形式交互,灵活自由
  • 快速响应,适合即时性问题解决
  • 不需要预先定义规范和流程
  • Agent自主理解需求并直接执行
  • 适合探索性、实验性开发

工作流程

用户描述需求 → Agent理解并执行 → 返回结果 → 用户反馈 → 迭代优化

使用场景

  • 快速原型开发:验证想法、构建MVP

    快速实现一个待办事项列表的前端页面
    
  • 代码片段生成:生成工具函数、算法实现

    写一个JavaScript函数,实现数组去重并保持原顺序
    
  • 问题诊断与分析:分析错误、解释代码

    这段代码为什么会内存泄漏?如何修复?
    
  • 技术方案咨询:技术选型、架构建议

    微服务架构下如何实现分布式事务?
    
  • 代码审查与优化:发现潜在问题

    检查这个API接口是否存在安全漏洞
    
  • 学习与探索:理解新技术、框架特性

    解释Vue3 Composition API与Options API的区别
    

优势

  • 响应快速,交互简单
  • 无需准备文档,即问即答
  • 适合快速迭代和实验

局限

  • 复杂项目可能缺乏系统性规划
  • 需要用户具备一定的引导能力
  • 大型任务可能需要多次交互

规范驱动模式

特点

  • 基于规格文档(spec.md)驱动开发
  • 强调"先规划、后实现"的开发流程
  • 自动生成设计文档(design.md)和任务清单(tasks.md)
  • 确保需求、设计、实现的一致性
  • 适合正式项目、团队协作

工作流程

需求分析 → 生成spec.md → 生成design.md → 生成tasks.md → 逐步实现 → 验证交付

核心文档

  1. spec.md(需求规格文档)

    • 描述"做什么"(What)
    • 包含功能需求、非功能需求、约束条件
    • 不包含技术实现细节
  2. design.md(技术设计文档)

    • 描述"怎么做"(How)
    • 包含架构设计、技术选型、接口设计
    • 数据模型、关键算法等
  3. tasks.md(任务清单)

    • 将设计分解为可执行的开发任务
    • 包含任务优先级、依赖关系
    • 支持任务状态跟踪

使用场景

  • 正式项目开发:企业级应用、产品开发

    开发一个电商平台的订单管理系统
    需求:订单创建、支付、发货、退款等完整流程
    
  • 复杂功能实现:多模块、多文件协作

    实现用户权限管理系统
    包含:角色管理、权限分配、访问控制、审计日志
    
  • 团队协作项目:需要文档沉淀

    重构遗留系统,需要详细的设计文档供团队评审
    
  • 需求明确的项目:已有清晰需求文档

    根据产品需求文档实现用户中心模块
    
  • 可追溯性要求:需要记录设计决策

    金融系统开发,需要完整的设计文档和实现记录
    

使用示例

用户:开发一个博客系统的评论模块

Agent执行流程:
1. 创建spec.md
   - 功能需求:发表评论、回复评论、删除评论、评论审核
   - 非功能需求:支持表情、防XSS、分页加载
   - 约束条件:用户需登录、评论长度限制

2. 创建design.md
   - 数据模型:Comment表设计
   - 接口设计:RESTful API
   - 技术选型:数据库、缓存策略
   - 安全设计:内容过滤、权限控制

3. 创建tasks.md
   - [ ] 创建Comment实体类和数据库表
   - [ ] 实现评论DAO层
   - [ ] 实现评论Service层
   - [ ] 实现评论Controller层
   - [ ] 添加评论审核功能
   - [ ] 编写单元测试
   - [ ] 集成测试

4. 逐步实现每个任务

优势

  • 需求、设计、实现高度一致
  • 自动生成完整文档
  • 适合团队协作和代码评审
  • 便于后续维护和迭代

局限

  • 前期需要时间编写规格文档
  • 不适合快速原型和实验性开发
  • 对需求明确性要求较高

模式选择建议

场景推荐模式原因
快速验证想法快速探索无需文档,快速迭代
学习新技术快速探索对话式学习更高效
代码片段生成快速探索简单任务无需文档
Bug分析修复快速探索问题导向,快速响应
企业级项目开发规范驱动需要完整文档和设计
多人协作项目规范驱动文档便于团队协作
复杂功能模块规范驱动需要系统性规划
需求评审项目规范驱动spec.md便于评审
重构遗留系统规范驱动需要设计文档记录

混合使用建议

  1. 项目初期用规范驱动模式建立整体架构和核心模块
  2. 具体细节实现用快速探索模式快速迭代
  3. 遇到问题时切换到快速探索模式诊断解决
  4. 解决后回到规范驱动模式继续系统开发

切换时机

  • 快速探索 → 规范驱动:当任务变复杂、需要文档沉淀时
  • 规范驱动 → 快速探索:当遇到具体问题需要快速解决时

一、高效编码技巧

1.1 提供清晰明确的任务描述

好的示例

请实现一个用户注册功能,包含以下要求:
1. 用户名:6-20字符,仅允许字母、数字、下划线
2. 密码:至少8位,包含大小写字母和数字
3. 邮箱:验证格式正确性
4. 返回详细的错误提示信息

避免模糊描述

帮我写个注册功能

1.2 分步骤处理复杂任务

对于复杂功能,建议拆分为多个小任务:

  1. 先实现核心数据结构和模型
  2. 再实现业务逻辑层
  3. 最后实现接口层和错误处理

示例

第一步:请创建用户数据模型,包含用户名、密码、邮箱字段
第二步:基于模型实现注册验证逻辑
第三步:添加数据库存储功能

1.3 充分利用上下文

  • 在同一会话中完成相关任务,Agent会记住之前的代码
  • 引用已生成的代码:基于上面的User类,添加登录方法
  • 避免重复描述相同需求

1.4 提供必要的上下文信息

项目使用Spring Boot 3.0 + MyBatis
数据库是MySQL 8.0
请实现用户注册接口

1.5 善用代码审查

完成编码后,让Agent审查代码:

请检查上面的代码是否存在:
1. 安全漏洞
2. 性能问题
3. 边界条件处理

二、调试技巧

2.1 提供完整的错误信息

推荐做法

运行时报错:
TypeError: Cannot read property 'id' of undefined
at UserController.update (src/controllers/user.ts:45)
at processTicksAndRejections (internal/process/task_queues.js:95)

相关代码:
async update(req: Request, res: Response) {
  const user = await User.findById(req.params.id);
  user.id = req.body.id;  // 第45行
}

2.2 描述预期行为与实际行为

预期:用户不存在时应返回404
实际:返回500内部错误
代码:[粘贴相关代码]

2.3 逐步缩小问题范围

  1. 先让Agent分析错误原因
  2. 根据建议修改代码
  3. 再次测试并反馈结果
  4. 循环直到问题解决

2.4 利用Agent的代码解释能力

请解释这段代码的执行流程,特别是异步处理部分:
[粘贴代码]

2.5 单元测试辅助调试

为这个函数生成单元测试,覆盖以下场景:
1. 正常输入
2. 空值输入
3. 边界值输入
4. 异常输入

三、节约Token技巧

3.1 避免重复粘贴大段代码

不推荐

请帮我优化这段代码:
[粘贴500行代码]

推荐

请帮我优化 src/services/UserService.ts 中的 validatePassword 方法

Agent可以直接读取项目文件,无需手动粘贴。

3.2 精简问题描述

冗余描述

你好,我遇到了一个问题,想请你帮忙看看。
是这样的,我在做一个项目,然后有个功能不太对,
具体来说是用户登录功能,登录的时候总是报错,
错误信息是...,你能帮我看看吗?

精简描述

用户登录报错:Invalid credentials
代码位置:src/auth/login.ts:32
请分析原因

3.3 合并相关请求

不推荐(多次请求):

1. 创建User类
2. 添加name属性
3. 添加email属性
4. 添加validate方法

推荐(一次请求):

创建User类,包含name、email属性和validate方法

3.4 使用引用而非重复

基于刚才生成的UserService,添加日志记录功能

而非重新描述UserService的所有细节。

3.5 明确指定文件范围

在 src/controllers 目录下查找处理用户认证的代码

而非让Agent搜索整个项目。

3.6 利用Agent的主动探索能力

让Agent自己查找相关代码:

分析项目中的数据库连接配置,找出可能导致连接失败的原因

3.7 适当使用代码片段

只需粘贴关键代码片段:

报错位置:
const result = data.items.map(item => item.value);
data结构:{ items: null }

而非整个文件。

四、最佳实践总结

4.1 编码阶段

技巧说明Token节省
明确需求提供详细的功能描述和约束条件减少30%
分步实现复杂任务拆分为小任务减少20%
利用上下文在同一会话完成相关任务减少40%
引用文件让Agent直接读取文件减少50%

4.2 调试阶段

技巧说明Token节省
完整错误信息提供错误堆栈和相关代码减少25%
描述差异说明预期vs实际行为减少20%
逐步调试一次解决一个问题减少30%

4.3 通用原则

  1. 精准:一次只问一个问题
  2. 简洁:删除无关的客套话
  3. 结构化:使用列表、代码块组织信息
  4. 引用:优先引用已有上下文而非重复描述
  5. 文件路径:提供文件路径让Agent自己读取

五、常见场景示例

场景1:新功能开发

需求:实现商品搜索功能
技术栈:Spring Boot + Elasticsearch
要求:
1. 支持关键词搜索
2. 支持分类筛选
3. 支持价格区间过滤
4. 分页返回结果

场景2:Bug修复

问题:订单支付后状态未更新
错误日志:[粘贴关键日志]
相关代码:src/services/OrderService.java:pay方法
数据库:订单表status字段
请分析原因并修复

场景3:代码重构

重构目标:src/utils/validator.ts
问题:
1. 函数过长(300行)
2. 重复代码多
3. 缺少类型定义
要求:拆分为多个小函数,提取公共逻辑

场景4:性能优化

性能问题:API响应时间超过3秒
接口:GET /api/users/search
数据量:用户表100万条
已索引:username, email
请分析瓶颈并优化

六、Token消耗对比示例

示例1:创建CRUD接口

高消耗方式(约2000 tokens):

请帮我创建一个完整的用户管理CRUD接口,
包括创建用户、读取用户、更新用户、删除用户,
每个操作都要有参数验证、错误处理、日志记录,
使用Express框架,TypeScript编写,
需要连接MySQL数据库,使用TypeORM,
用户表有id、username、password、email、createdAt、updatedAt字段,
密码需要加密存储,邮箱需要格式验证,
返回JSON格式,遵循RESTful规范...

低消耗方式(约500 tokens):

创建用户CRUD接口(Express + TypeScript + TypeORM)
字段:id, username, password(加密), email(验证), createdAt, updatedAt
RESTful风格,包含验证和错误处理

节省:75%

示例2:调试空指针异常

高消耗方式(约1500 tokens):

你好,我遇到了一个问题,程序运行的时候报错了,
错误信息是NullPointerException,我查了一下,
好像是某个对象是null,但是我不确定是哪个对象,
我把整个文件都贴给你看看,你帮我分析一下:

[粘贴整个300行文件]

你能告诉我哪里出了问题吗?应该怎么修改呢?

低消耗方式(约300 tokens):

NullPointerException at UserService.java:45
代码:user.getProfile().getAge()
user和profile都不应为null
请分析可能原因

节省:80%

七、高级技巧

7.1 使用模板请求

为常见任务准备模板:

创建Service模板

创建[服务名]Service,负责[职责]
依赖:[依赖项]
方法:[方法列表]
异常处理:[异常类型]

7.2 批量操作

为以下文件生成单元测试:
- src/services/UserService.ts
- src/services/OrderService.ts
- src/services/ProductService.ts

7.3 代码生成后立即验证

生成代码后,请:
1. 检查类型安全
2. 验证边界条件
3. 确认错误处理完整

7.4 利用Agent的探索能力

分析项目中所有使用了deprecated API的地方,列出文件和行号

总结:高效使用CodeArts Agent的关键是精准、简洁、结构化。通过合理组织请求、充分利用上下文、避免重复信息,可以在保证开发效率的同时显著降低Token消耗。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐