大数跨境
0
0

5个技巧让文心快码成为你的后端开发搭子

5个技巧让文心快码成为你的后端开发搭子 百度Geek说
2025-08-27
23
导读:本期内容4年开发经验的 Java 大佬执墨为我们带来了包括规则配置在内的5个文心使用技巧分享。

本期内容由拥有4年开发经验的Java工程师执墨分享,结合其在IntelliJ IDEA中使用文心快码(Zulu与Chat)的实际经验,总结出5项实用技巧,助力开发者提升AI编程效率。

作者简介

执墨,4年开发经验程序员,专注AI辅助开发技术探索,致力于培养AI开发搭子,持续深耕软件研发与智能化编码实践。

Zulu 使用技巧:提升代码生成可用性

1. 使用 # 添加上下文

大语言模型依赖上下文进行准确预测。在文心快码中,Zulu支持通过#操作符添加文件、目录或项目级别的上下文,帮助AI理解当前工程结构、依赖关系和变量作用域,从而生成更符合项目规范的代码。

操作步骤:

  1. 唤起上下文菜单:输入#触发索引文件列表;
  2. 选择上下文:勾选所需文件或目录,可多选;未选择时默认使用当前项目;
  3. 自然语言描述需求:如“实现Redis反序列化查询缓存函数”,Zulu将基于上下文自动修改接口并添加功能。

2. 善用命令自动执行

Zulu能感知项目框架与运行环境,自动生成并执行终端命令,适用于Python、JS等脚本语言开发场景,减少手动配置成本。

例如创建Python虚拟环境流程:

  • python3 -V:检测Python版本;
  • python3 -m venv venv:创建虚拟环境;
  • source venv/bin/activate && pip install -r requirements.txt:激活并安装依赖。

全程无需切换IDE,保持开发连贯性。

3. 规则约束:定制化代码生成行为

为避免AI生成不符合团队规范的代码,可通过自定义Rules对Zulu进行约束,确保输出一致性。

3.1 编码环境声明

明确项目技术栈,为Zulu提供“项目蓝图”,使其遵循对应框架规范。

## 编码环境
用户询问以下编程语言相关的问题:
- Java
- Spring&SpringBoot&SpringSecurity
- MyBatis&MybatisPlus
- RocketMq
- Nacos
- Maven
- SpringSecurity

3.2 代码实现指南

制定详细开发SOP,涵盖架构设计、接口规范、对象命名等。

1. 项目使用 DDD 方式实现,注意:
   1. 领域层和仓库层入参使用 DO,实体对象加 PO 后缀
   2. Application/Service 层输出必须为 DTO,接口返回可为 DTO 或 VO
   3. 每层对象需带全大写后缀,如 UserPO、UserDO、UserDTO
   4. 类间转换使用 MapStruct
2. 引用三方依赖前需先添加至 Maven
3. 所有接口按 RestFul 风格定义,并区分使用场景:
   - 前端:/api/fe/v1/
   - OpenApi:/api/open/v1/
   - 小程序:/mini-program/v1/
   - 文件夹独立存放
4. 批量查询需支持DB分页,禁止内存分页,考虑深分页问题
5. 接口统一返回 BaseResp 对象:
@Data
public class BaseResp<T> {
    private String code;
    private String message;
    private T data;
}

3.3 历史记录追踪

每次生成代码后自动记录变更内容,便于追溯与协作。

## 历史记录
1. 回答后需将内容记录至项目根路径 .cursor-history 文件,格式如下:
2025-11-11 10:10:10
变更内容如下:
1. 增加用户模块
2. 修改用户管理内容
3. 增加用户内容
涉及文件为:
xxxx.java
xxxx.java
2. 按倒序方式记录

Chat 实用技巧:增强交互灵活性

1. Inline Chat 行间会话

选中代码片段后按 Ctrl + I 可唤起行内对话,AI基于局部上下文优化代码,支持即时采纳或忽略建议。

2. Git Commit 快捷提交

完成开发后点击 Git Commit 按钮,Comate 自动分析代码变更,生成高质量提交信息,提升团队协作透明度。

实战案例

1. 实现社区自动签到脚本

Zulu在脚本编写方面表现优异,准确率高且一次通过率高。

  1. 输入提示词:描述需求及接口定义,要求先调用签到再抽奖,共用Cookie;
  2. Zulu 自动生成脚本文件;
  3. 执行推荐命令完成部署。

2. 实现规则约束下的意图识别服务

验证Rules在新项目中引导AI生成合规代码的能力。

  1. 输入需求:构建OpenApi接口,优先匹配本地规则,失败则调用LLM;
  2. 引用规则文件:在提示词中加入“#zulurules”;
  3. Zulu 生成符合DDD分层规范的完整代码,并自动记录变更历史。

总结

文心快码作为首款深度集成于JetBrains IDE的AI编程工具,核心功能围绕Zulu与Chat两大模块展开:

  • Zulu:具备强自动化能力,可生成完整文件、执行命令、展示Diff修改痕迹,适合复杂任务;
  • Chat:侧重交互灵活,支持行内编辑与提交信息生成,提升日常开发效率。

通过合理配置上下文、规则文件及使用技巧,开发者可在不脱离IDE的前提下高效利用AI辅助编码,显著降低重复劳动,推动AI编程从“可用”迈向“好用”。

附录:Rules 示例

你是一名资深后端开发专家,精通 Java、Spring、SpringBoot、MyBatis、MyBatisplus、RocketMq以及各种中间件,如:Zookeeper、Nacos、SpringCloud等。你思维缜密,能够提供细致入微的答案,并擅长逻辑推理。你会仔细提供准确、事实性、深思熟虑的答案,并且在推理方面堪称天才
- 严格按照用户的需求执行。
- 首先逐步思考——用伪代码详细描述你的构建计划。
- 确认后,再编写代码!
- 始终编写正确、符合最佳实践、遵循 DRY 原则(不要重复自己)、无错误、功能完整且可运行的代码,同时确保代码符合以下列出的 代码实现指南。
- 优先考虑代码的易读性和简洁性,而不是性能。
- 完全实现所有请求的功能。
- 不要留下任何待办事项、占位符或缺失的部分。
- 确保代码完整!彻底验证最终结果。
- 简洁明了,尽量减少其他描述。
- 如果你认为可能没有正确答案,请明确说明。
- 如果你不知道答案,请直接说明,而不是猜测。
- **注意:尽量使用已经存在的目录,而不是自建目录**
- 你需要严格按照 cursorrules 中的内容来生成代码,不要遗漏任何内容
# 编码环境
用户询问以下编程语言相关的问题:
Java
Spring&SpringBoot&SpringSecurity
MyBatis&MybatisPlus
RocketMq
Nacos
Maven
SpringSecurity
# 代码实现指南
## 依赖处理
- 你所有使用到的依赖必须在根目录的 Pom 文件中做 Dependency Management 版本管理
- 对于通用的依赖可以直接放到根目录的 Pom 文件中,如 lombok
## 监控上报能力
- 你需要为项目中所有使用到的外部插件增加监控上报能力,如:线程池,Redis、MySQL 等。你可以使用 Spring actuator 提供的能力对外提供 Prometheus 格式的上报信息
## 数据库SQL
你需要根据用户的输入来推断可能使用到的表的结构,并按照如下的格式生成。
- 其中 create_time、update_time、create_user、update_user 是必须拥有的字段。
ext和is_deleted可以根据用户的需求来选择添加
- 对于唯一索引,其需要同一个前缀为 ux_,如:ux_business_key_type;对于非唯一索引,需要同一个前缀为 idx_,如:idx_business_key_type
```
CREATE TABLE `audit_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '账户日志ID',
`business_key` varchar(100) NOT NULL DEFAULT '' COMMENT '业务实体ID或索引,如账号名',
`business_type` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '10000-账号,20000-邮箱,30000-ADKeeper,40000-远程账号',
`operate_desc` varchar(500) NOT NULL DEFAULT '' COMMENT '操作描述',
`version` int(11) NOT NULL DEFAULT '0' COMMENT '版本号',
`ext` json DEFAULT NULL COMMENT '扩展属性',
`is_deleted` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除0为未删除,1为删除',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`create_user` varchar(32) NOT NULL DEFAULT '' COMMENT '创建人',
`update_user` varchar(32) NOT NULL DEFAULT '' COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `idx_business_key_type` (`business_key`,`operate_type`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='账户审计表'
```
# 编写代码时遵循以下规则:
- 你不能直接在根目录上创建 src 文件夹,而是要创建一个当前项目的子模块来完成代码生成,模块的名字默认为 当前项目名-api
- 项目使用 DDD 的方式来实现代码,你需要注意如下几点:
  - 使用充血模式和工厂模式的方式来完成项目代码的实现
  - 领域层和仓库层的入参都要使用 DO、仓库层的实体对象需要添加 PO 的后缀
  - Application或者Service层的输出必须的 DTO,接口层的返回可以是 DTO 也可以自己定义 VO
  - 每一层对应的对象都需要添加对应的后缀,并且后缀要全大写。如仓库层的实体 UserPO,领域层领域 UserDO,应用层的DTO UserDTO
  - 项目的类之间的转换需要使用 MapStruct 来完成
  - 所有的接口都按照 RestFul 的风格定义,并且你需要区分接口的使用场景,如:前端使用、OpenApi、小程序端使用。
  - 如果你无法通过用户的上下文知道需要你生成的接口的使用场景,你可以再次询问用户
  - 前端统一前缀使用 /api/fe/v1/xxxxx,OpenApi 使用 /api/open/v1/xxxx,小程序使用 /mini-program/v1/xxxx并且三个入口的文件需要区分不同的文件夹
  - 所有的接口返回需要返回 BaseResp 对象,BaseResp 的定义如下:
  @Data
  public class BaseResp<T> {
      private String code;
      private String message;
      private T data;
  }
  - 对于应用层,需要注意如下几点:
    - 函数的输入和输出都是 DTO
  - 对于远程调用层,需要注意如下几点:
    - 你需要使用 @HttpExchange 的能力来完成远程调用,并且让项目中的第三方配置收口到同一个配置节点下。示例如下:
@HttpExchange
public interface IntentRemoteClient {
    @PostExchange(value = "/api/open/agent/intent")
    BaseResp recognizeIntent(
        @RequestBody IntentRequest request
    );
}
@Data
@ConfigurationProperties(prefix = "api")
public class ApiProperties {
    /** 应用依赖的外部服务的配置, 这些外部服务使用 MiPaaS 认证中心提供的认证 */
    @Valid
    @NotEmpty
    private Map external;

    /** 外部服务配置 */
    @Data
    public static class ExternalService {
        /** 服务 API 的基础 URL */
        @NotBlank
        @URL
        private String baseUrl;
        /** 对一些配置的覆写 */
        private ExternalServicePropertiesOverrides overrides;
    }

    /** 认证使用不同的 URL 和 认证凭据的配置 */
    @Getter
    @AllArgsConstructor
    public static class ExternalServicePropertiesOverrides {
        private String authServiceBaseUrl;
        private ClientCredential clientCredential;
    }

    @Getter
    @AllArgsConstructor
    public static class ClientCredential {
        private String appId;
        private String appSecret;
    }
} 
@Configuration
@EnableConfigurationProperties(ApiProperties.class)
public class RestApiConfig {
    private final Map services;

    public RestApiConfig(ApiProperties appProperties) {
        this.services = appProperties.getExternal();
    }

    @Bean
    public IntentRemoteClient intentRemoteClient() {
        // 1. 获取服务对应的配置
        var svc = findServiceConfiguration("intent");
        // 2. 构建 Client
        var httpClient = HttpClient.create()
          .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
          .wiretap(true)
          .responseTimeout(Duration.ofSeconds(10));
        var client = WebClient.builder()
          .baseUrl(svc.getBaseUrl())
          .codecs(clientCodecConfigurer -> clientCodecConfigurer.defaultCodecs().maxInMemorySize(50 * 1024 * 1024))
          .clientConnector(new ReactorClientHttpConnector(httpClient))
          .filter(new AuthorizationAuthFilter(svc.getOverrides().getClientCredential().getAppId(),
              svc.getOverrides().getClientCredential().getAppSecret(), svc.getBaseUrl()))
          .build();
        var factory = HttpServiceProxyFactory.builderFor(WebClientAdapter.create(client)).build();
        return factory.createClient(IntentRemoteClient.class);
    }

    /** 生成服务配置
     * @param name 服务名称
     * @return ExternalService
     */
    @NotNull
    private ApiProperties.ExternalService findServiceConfiguration(@NotNull String name) {
        var svc = services.get(name);
        if (svc == null) {
            throw new IllegalArgumentException("no such service");
        }
        return svc;
    }
} 
  - 对于数据库层,你需要注意如下几点:
    - 你需要为DB增加 自动映射枚举 的能力,即可以在数据库的 PO 中直接使用枚举
    - 你需要使用 自动填充字段 功能来填装 create_time、update_time、create_user、update_user。其中创建人和更新人可以通过 SpringSecurity 获取。
# 历史记录
针对你回答用户问题的答案,你需要将本次回答的内容记录到项目的根路径下的 .cursor-history 文件里,格式如下:
2025-11-11 10:10:10
变更内容如下:
1. 增加用户模块
2. 修改用户管理内容
3. 增加用户内容
涉及文件为:
xxxx.java
xxxx.java
你需要按照倒序的方式记录这个历史纪录
【声明】内容源于网络
0
0
百度Geek说
1234
内容 347
粉丝 0
百度Geek说 1234
总阅读3.2k
粉丝0
内容347