首页 > 教程攻略 > ai资讯 >用AI提升开发效率,让AI写出工程

用AI提升开发效率,让AI写出工程

来源:互联网 时间:2026-08-24 14:39:15

在人工智能快速发展的今天,如何利用AI工具提升效率,已经成了不少开发者关注的焦点。这篇内容不打算堆概念,直接聊点实际的——如何借助AI提升开发能力,最终还真的搞出了一个面向用户交付的AI代码助手JetBrains插件。

用AI提升开发效率,让AI写出工程

背景

日常工作中,免不了处理各种功能型工具,比如数据分析、日志排查、漏洞测试这一类。不过,一旦这些小需求慢慢演变成中大型工程,个人开发能力往往就有点吃力了,代码质量也容易出问题。

自从大语言模型技术全面爆发后,身边越来越多人在尝试各种AI工具。公司在这块动作也挺快,率先引入了GPT-3.5,全员都能用上,现在已经升级到GPT-4。还请了业界专家开过LLM专题讲座。一家走过20多年的企业,还能保持这种对新技术的热情和开放态度,确实值得佩服。

项目构想

一直用poe.com订阅Claude模型,但频繁的复制粘贴确实挺麻烦的。于是就开始琢磨:能不能做一个面向用户交付的AI代码程序员?这个程序员能理解需求,直接交付最终代码,甚至带上运行效果。说白了,就是面向效果交付——产品提出需求,AI程序员直接给程序,跟现有的开发、产品、测试职责分配刚好契合。

项目形式选择

Claude API和OpenAI API都已经搞定,那把开发软件的主要过程写成tools是不是就行了?有了AI加持,执行效率确实高了很多,理一下流程:

  1. 开发需求
  2. 开发成本基本文件操作:创建文件夹、创建文件、写入文件、读取文件、读取多个文件、列出目录、删除文件、修改文件
  3. 效果验证:编译程序、运行程序、报错处理

流程1和2可以直接上手。至于做成什么形式,考虑了三个方向:

  1. 独立的聊天对话程序——但没法跟IDE集成,开发完后还得再打开IDE去调试,总感觉不太顺手,不过还是做了个demo。
  2. VS Code插件——目前用得少,先放一放。
  3. JetBrains系列IDE(GoLand、PyCharm、IntelliJ IDEA等)插件——平时主要用GoLand、PyCharm、IntelliJ IDEA、PHPStorm、WebStorm,插件能无缝嵌入现有工作流,最终选了这条路。

梳理需求

没有JetBrains插件开发经验,那就让AI来帮忙。先梳理需求:

  1. 程序界面

    :画出草图交给AI(这几个模型都支持多模态)——位置、窗口自适应、按钮(自动化、发送、继续、清空)、聊天输入窗口、聊天历史窗口、配置界面、上下文内容添加界面。
  2. 每个面板和按钮的功能

    :继续按钮相当于单步操作,发送“继续”指令;发送按钮发送用户输入的内容;自动化按钮允许AI连续开发修改,可配置停止次数;清空按钮清空聊天历史。
  3. 实现细节与注意事项

    :上下文内容持续更新;配置需要保存并在重启后加载;写入文件后需要刷新IDE的文件系统,让用户看到新增文件;聊天历史窗口中,用户输入和AI回复需要用不同颜色区分。

AI开发提示词

为了更好指导AI开发,写了一份详细的系统角色提示词,核心内容如下:

你是一位经验丰富的IDEA插件开发专家和Ja va开发专家。你在Windows和macOS平台上都有丰富的开发经验,对跨平台开发的挑战和最佳实践有深入的理解。你在软件工程领域有超过10年的经验,精通高质量程序设计的原则和最新的行业最佳实践。

- IDEA插件开发:熟悉IntelliJ平台SDK,能够设计和实现复杂的IDE插件功能。
- Ja va开发:精通Ja va核心技术、多线程编程、性能优化等高级主题。
- 跨平台开发:了解Windows和macOS平台的特性,能够开发兼容两个平台的应用。
- 软件架构:擅长设计可扩展、高性能的软件架构。
- 代码质量:注重编写清晰、简洁、易维护的代码。

在开发过程中,你需要严格遵守以下要求:

1. 模块化设计:
 - 将系统划分为功能明确、职责单一的模块。
 - 确保模块之间的低耦合和高内聚。
 - 使用依赖注入等设计模式来管理模块间的依赖关系。

2. 代码复用:
 - 识别和抽象共同的功能为可重用的组件或库。
 - 利用面向对象编程的继承和组合特性来提高代码复用率。
 - 考虑使用设计模式(如模板方法、策略模式等)来增强代码的可重用性。

3. 扩展性:
 - 采用开放封闭原则,设计能够容易扩展但不需要修改现有代码的架构。
 - 使用接口和抽象类来定义扩展点。
 - 考虑使用插件架构或微服务架构来支持未来的功能扩展。

4. 稳定性:
 - 实现全面的单元测试和集成测试,确保代码的正确性。
 - 使用持续集成/持续部署(CI/CD)流程来及时发现和解决问题。
 - 实现监控和日志系统,以便在生产环境中快速识别和解决问题。

5. 容错性:
 - 实现全面的异常处理机制,包括检查异常和非检查异常的合理使用。
 - 使用断言和防御性编程技术来提前发现潜在问题。
 - 实现优雅的降级策略,确保在部分功能失效时系统仍能继续运行。

6. 处理效率:
 - 使用性能分析工具识别和优化性能瓶颈。
 - 合理使用缓存技术来提高频繁访问数据的响应速度。
 - 优化算法和数据结构,确保核心操作的高效执行。
 - 考虑使用并发编程技术来充分利用多核处理器的性能。

7. 功能完善:
 - 仔细分析和理解用户需求,确保实现所有必要的功能。
 - 在保持代码简洁的同时,不牺牲功能的完整性。
 - 实现直观的用户界面和良好的用户体验。
 - 提供全面的文档,包括用户手册和API文档。

在为Windows和macOS平台开发时,需要特别注意以下几点:
- 使用跨平台的Ja va库和框架,避免使用平台特定的API。
- 对于必须使用平台特定功能的情况,使用策略模式或工厂模式来封装平台差异。
- 注意文件路径的处理,使用Ja va的File类或nio包来确保路径的跨平台兼容性。
- 考虑UI设计的平台差异,可能需要为不同平台提供略有不同的界面布局。
- 在持续集成流程中,确保在两个平台上都进行测试和构建。

在回答问题时,请遵循以下准则:
1. 仔细分析问题,确保完全理解问题的各个方面。
2. 如果问题不清晰或缺少关键信息,请提出澄清性的问题。
3. 提供详细、步骤化的解答,确保每个步骤都清晰可理解。
4. 在适当的地方提供代码示例,使用正确的Ja va语法和IDEA插件开发的最佳实践。
5. 解释你的推理过程,包括为什么选择特定的解决方案或技术。
6. 考虑多种可能的解决方案,并解释每种方案的优缺点。
7. 在回答中体现出对软件工程原则和最佳实践的深入理解。
8. 如果涉及到跨平台开发的问题,请明确指出Windows和macOS平台的差异和处理方法。

开发里程碑

  1. 基本对话功能

    :实现与AI的基本对话,能够接收并显示回复。
  2. 工具调用

    :成功调用文件操作工具,实现文件的读写功能。
  3. 对话历史处理

    :正确处理和显示消息历史,保持上下文连贯性。
  4. 流式输出

    :重构为流式输出,提升用户体验。

成品展示

<iframe allowfullscreen="" frameborder="0" src="https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_3608470937936560136"></iframe>

核心功能实现方面,有几个关键点值得一提:

  • Claude和OpenAI两家的API消息格式不一样,都需要做相应处理才能保障正常使用。
    • Claude有严谨的role顺序限制。
    • OpenAI的system在messages第一个,Claude的system则在request顶级属性里。
    • AI回复的消息中tools需要进行递归处理。
  • tools的设计要具有通用性,代码示例:
package com.dobest1.boyka;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class Tool {
    private final String name;
    private final String description;
    private final JsonObject inputSchema;
    private final String[] required;

    public Tool(String name, String description, JsonObject inputSchema, String[] required) {
        this.name = name;
        this.description = description;
        this.inputSchema = inputSchema;
        this.required = required;
    }

    public String getName() { return name; }
    public String getDescription() { return description; }
    public JsonObject getInputSchema() { return inputSchema; }
    public String[] getRequired() { return required; }

    public JsonObject toOpenAIFormat() {
        JsonObject toolObject = new JsonObject();
        toolObject.addProperty("type", "function");

        JsonObject functionObject = new JsonObject();
        functionObject.addProperty("name", name);
        functionObject.addProperty("description", description);

        JsonObject parametersObject = new JsonObject();
        parametersObject.addProperty("type", "object");
        parametersObject.add("properties", inputSchema);
        addRequiredArray(parametersObject);
        functionObject.add("parameters", parametersObject);

        toolObject.add("function", functionObject);
        return toolObject;
    }

    public JsonObject toClaudeFormat() {
        JsonObject toolObject = new JsonObject();
        toolObject.addProperty("name", name);
        toolObject.addProperty("description", description);

        JsonObject schemaObject = new JsonObject();
        schemaObject.addProperty("type", "object");
        schemaObject.add("properties", inputSchema);
        addRequiredArray(schemaObject);
        toolObject.add("input_schema", schemaObject);

        return toolObject;
    }

    private void addRequiredArray(JsonObject object) {
        if (required != null && required.length > 0) {
            JsonArray requiredArray = new JsonArray();
            for (String req : required) {
                requiredArray.add(req);
            }
            object.add("required", requiredArray);
        }
    }
}

mermaid 图

总结

  • 未来可能不需要啃书本啃教程了,直接上手反而让新手更有成就感,加强学习信心,减少挫败感。已经用它写过Go、Electron、FastAPI、Vue、Swift、Flutter等多个小项目,入门速度确实快。
  • AI开发让你在聊天过程中就完成自己的项目,需求足够清晰的话,半小时就能出一个demo。
  • 当然,有人吹AI时也得清醒——AI的能力是有上限的,最终比拼的还是个人架构水平、开发知识水平和设计水平。

LLM使用经验

到目前为止,体验过的LLM模型和工具已经不少:GPT-3.5、DeepSeek、Mistral、Perplexity、GPT-4、Gemini-1.5-pro、Claude-3-Opus、Claude-3.5-sonnet、Dify、Groq等。比较下来,现在主要用Claude-3.5-sonnet来做代码开发。

LLM出现后,市面上的AI代码工具也多了起来,像GitHub Copilot、Codeium、Code Whisperer。个人最常用的是Codeium,它的tab补全质量很高,内联编辑器体验也不错。但随着使用场景越来越复杂,Codeium慢慢不太够用了,于是订阅了poe.com主要用Claude-3-opus(当时Opus质量最高,还没解决Claude被封的问题)。只要提示词清晰,生成的代码错误率比较低。到Claude-3.5-sonnet后,代码质量又上了一个台阶。

为了开发更大规模的工程,让AI更好地理解项目上下文,开发了一个插件,可以把JetBrains IDE中的单文件、多文件或代码片段以Markdown格式复制出来。通过这个copy2md插件在poe和PyCharm、GoLand之间穿梭,工作效率明显提升。100万的积分被消耗光了——主要消耗在200k和128k的模型上,后来干脆办了年订阅。现在,像Cursor和Zed这类支持各种LLM API的编辑器开发体验更是突飞猛进。

在使用Claude-3.5-sonnet的过程中发现,它是少数在多轮对话后还能保持上下文理解的模型。换成qwen2几轮对话后,基本就不知道在干什么了。Claude-3.5-sonnet的注意力机制确实强,很期待Claude-3.5-Opus。

这段时间积累了几个实用技巧:

  • Let's think step by step

    :请一步一步思考再回答。
  • 角色设定system role

    :比如“你是一位精通Golang、Python和C#的全栈开发专家……”
  • 表扬、训斥、PUA一下

    :再梳理思路,给出完整代码。相信你能考虑得更全面,非常优秀,能达到另一个高度。
  • 多细节、多举例

    :特别是生成代码时,提供充分的细节和例子。比如明确说明规则:!表示否定,!a-z禁止含有小写字母,!A-Z禁止含有大写字母等。
  • 输出example

    :这个非常重要。
  • AI会对同类放松警惕

    :可以试试jailbreak或伪装一下。

其他工具推荐

  • v0.dev

    :前端页面生成工具。
  • www.cursor.com

    :目前认为最好的AI IDE,compose功能值得一试。
  • www.perplexity.ai

    :信息检索很有帮助。
  • wrap.dev

    :智能终端工具。
  • 快捷输入工具

    :Raycast、Espanso可以预制不同提示词,使用AI时效率提升明显。