微信扫码
添加专属顾问
我要投稿
在人工智能快速发展的今天,如何利用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 可以直接做起来,做成什么样子?
我没有jebrains插件开发经验,只能让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平台的差异和处理方法。
核心功能实现
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);
}
}
}
迄今为止,我已经体验过不少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的实用技巧:
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-30
通俗易懂的梳理MCP的工作流程(以高德地图MCP为例)
2025-04-30
一文说明 Function Calling、MCP、A2A 的区别!
2025-04-30
MCP很好,但它不是万灵药|一文读懂 MCP
2025-04-30
旅行规划太难做?5 分钟构建智能Agent,集成地图 MCP Server
2025-04-29
10万元跑满血版DeepSeek,这家公司掀了一体机市场的桌子|甲子光年
2025-04-29
谷歌大神首次揭秘Gemini预训练秘密:52页PPT干货,推理成本成最重要因素
2025-04-29
一文说清:什么是算法备案、大模型备案、大模型登记 2.0
2025-04-29
MCP:AI时代的“万能插座”,大厂竞逐的焦点
2024-08-13
2024-06-13
2024-08-21
2024-09-23
2024-07-31
2024-05-28
2024-08-04
2024-04-26
2024-07-09
2024-09-17
2025-04-29
2025-04-29
2025-04-29
2025-04-28
2025-04-28
2025-04-28
2025-04-28
2025-04-28