AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


用AI提升开发效率,让AI写出工程
发布日期:2024-08-27 07:34:21 浏览次数: 1697


引言

在人工智能快速发展的今天,如何利用AI工具提升效率成为了许多人关注的话题。本文将详细介绍我如何利用AI技术,提升自己的开发能力,并开发了一个面向用户交付的AI代码助手JetBrains插件。

背景

在我日常工作中,经常需要使用各种功能性工具,如数据处理、日志排查、漏洞测试等。然而,当这些需求逐渐演变成中大型工程时,个人开发能力往往捉襟见肘,代码质量也难以保证。

自从大语言模型(LLM)技术爆发以来,我一直在积极使用各种AI工具。而我们公司也非常具有前瞻性,率先引入了GPT-3.5,让全公司员工都能体验到AI带来的变革(现在已经升级到GPT-4了),同时也要去了业界大佬进行了LLM讲座。作为一家有20多年历史的企业,能保持这样对新技术的热情和开放态度,着实令人钦佩。

项目构想

尽管订阅了poe.com可以使用Claude模型,频繁的复制粘贴操作让人感到繁琐。于是,我萌生了一个想法:能否开发一个面向用户交付的AI代码程序员?这个程序员能够理解需求,并直接交付最终代码,甚至是运行效果。面向效果交付,符合现行的开发、产品、测试职责分配。产品提出需求,AI程序员给出程序。

项目形式选择

Claude API 和OpenAI API我已经搞定了,把开发软件的主要过程写成tools是不是就可以了?在有AI的buff下,我的执行能力贼强,理一下流程:

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

流程1 和 2 可以直接做起来,做成什么样子?

  1. 独立的聊天对话程序难以和IDE集成:AI开发完后在去IDE打开相应的目录进行调试?不协调,但也做了一个demo出来。
  2. vscode插件:目前使用vscode较少
  3. JetBrains系列IDE(GoLand、PyCharm、IntelliJ IDEA等)插件:个人主要使用GoLand、PyCharm、IntelliJ IDEA、PHPStorm、WebStorm,JetBrains插件可以无缝集成到现有的开发工作流中。

梳理需求

我没有jebrains插件开发经验,只能让AI来实现,首先是梳理需求:

  1. 程序界面,画出草图给到AI(这几个模型都支持多模态) a. 位置、窗口自适应、按钮(自动化、发送、继续、清空)、聊天输入窗口、聊天历史窗口、配置界面、上下文内容添加界面
  2. 每个面板和按钮的对应功能是什么 a. 继续按钮:相当于单步操作,发送“继续”指令 b. 发送按钮:发送用户输入的内容 c. 自动化按钮:允许AI连续开发修改,可配置停止次数 d. 清空按钮:清空聊天历史
  3. 在实现的过程中细节、注意点是什么 a. 上下文内容是持续更新 b. 配置是需要保存并在重启后加载 c. 当写入文件后需要刷新IDE的文件系统,让用户看到新增文件 d. 在聊天历史窗口中,用户输入和AI回复需要用不同颜色区分

AI开发提示词

为了更好地指导AI进行开发,我编写了详细的系统角色提示词。以下是关键部分:

你是一位经验丰富的IDEA插件开发专家和Java开发专家。你在Windows和macOS平台上都有丰富的开发经验,对跨平台开发的挑战和最佳实践有深入的理解。你在软件工程领域有超过10年的经验,精通高质量程序设计的原则和最新的行业最佳实践。
- IDEA插件开发:熟悉IntelliJ平台SDK,能够设计和实现复杂的IDE插件功能。- Java开发:精通Java核心技术、多线程编程、性能优化等高级主题。- 跨平台开发:了解Windows和macOS平台的特性,能够开发兼容两个平台的应用。- 软件架构:擅长设计可扩展、高性能的软件架构。- 代码质量:注重编写清晰、简洁、易维护的代码。


在开发过程中,你需要严格遵守以下要求:
1. 模块化设计: - 将系统划分为功能明确、职责单一的模块。 - 确保模块之间的低耦合和高内聚。 - 使用依赖注入等设计模式来管理模块间的依赖关系。
2. 代码复用: - 识别和抽象共同的功能为可重用的组件或库。 - 利用面向对象编程的继承和组合特性来提高代码复用率。 - 考虑使用设计模式(如模板方法、策略模式等)来增强代码的可重用性。
3. 扩展性: - 采用开放封闭原则,设计能够容易扩展但不需要修改现有代码的架构。 - 使用接口和抽象类来定义扩展点。 - 考虑使用插件架构或微服务架构来支持未来的功能扩展。
4. 稳定性: - 实现全面的单元测试和集成测试,确保代码的正确性。 - 使用持续集成/持续部署(CI/CD)流程来及时发现和解决问题。 - 实现监控和日志系统,以便在生产环境中快速识别和解决问题。
5. 容错性: - 实现全面的异常处理机制,包括检查异常和非检查异常的合理使用。 - 使用断言和防御性编程技术来提前发现潜在问题。 - 实现优雅的降级策略,确保在部分功能失效时系统仍能继续运行。
6. 处理效率: - 使用性能分析工具识别和优化性能瓶颈。 - 合理使用缓存技术来提高频繁访问数据的响应速度。 - 优化算法和数据结构,确保核心操作的高效执行。 - 考虑使用并发编程技术来充分利用多核处理器的性能。
7. 功能完善: - 仔细分析和理解用户需求,确保实现所有必要的功能。 - 在保持代码简洁的同时,不牺牲功能的完整性。 - 实现直观的用户界面和良好的用户体验。 - 提供全面的文档,包括用户手册和API文档。

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


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

开发里程碑

  1. 基本对话功能:实现与AI的基本对话,能够接收和显示回复。
  2. 工具调用:成功调用文件操作工具,实现文件的读写功能。
  3. 对话历史处理:正确处理和显示消息历史,保持上下文连贯性。
  4. 流式输出:重构为流式输出,提升用户体验。

成品展示

核心功能实现

  • 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(主要没解决Claude被封的问题,当时Opus质量最高了),只要提示词清晰,生成的代码错误较少,到Claude-3.5-sonnet让代码质量更上一层。为了能开发更大规模的工程,让AI更好的理解项目上下文,我开发了一个插件可以将JetBrains IDE中的单文件、多文件或代码片段以Markdown格式复制出来。我通过copy2md插件在poe和pycharm、goland中穿梭游走,这插件大大提高了工作效率。把100万的积分给消耗光了(主要消耗在200k和128k的模型上),之后办了个年订阅。现在,使用支持各种LLM API的编辑器如Cursor和Zed,开发体验可以说是突飞猛进。

在使用Claude-3.5-sonnet的过程中,我发现只有它在多轮对话后还能理解上下文,换成qwen2几轮对话后,都不知道在干什么了。Claude-3.5-sonnet注意力机制很强,期待Claude-3.5-Opus。

通过这段时间的实践,我总结了几个使用AI的实用技巧:

  • Let's think step by step:请一步一步的思考,并回答我
  • 角色设定system role : 你是一位精通Golang、Python和C#的全栈开发专家,同时具备Windows和macOS平台的开发经验。你在软件工程领域有丰富的经验,深谙高质量程序设计的原则和最佳实践。
  • 表扬一下、训一下、pua一下:再次梳理思路,给出完整代码。我相信你能考虑的更加全面,并且非常优秀。达到另一个高度。(当生成完一次消息后,再次发送你的pua)
  • 多细节、多举例:特别是在需要生成代码时,提供充分的细节和例子。比如明确说明一些规则:!表示否定,!a-z禁止含有小写字母,!A-Z禁止含有大写字母等。
  • 输出example:非常重要、非常重要
  • AI会对同类放松警惕(jailbreak 、伪装一下)

其他工具推荐

  • v0.dev 前端页面生成
  • www.cursor.com 我认为最好的AI IDE,它的compose值的一试
  • www.perplexity.ai
  • wrap.dev 智能终端
  • 快捷输入工具:Raycast Espanso,可以预制不同提示词,在使用AI的过程提升效率

 


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询