乐于分享
好东西不私藏

7. 提示词工程篇:《写给AI的"需求文档":Java风格的Prompt模板管理》

7. 提示词工程篇:《写给AI的"需求文档":Java风格的Prompt模板管理》

给Java开发者的提示词实战指南

大家好!今天我要教你们怎么用最简单的方式管理Prompt,就像写Java代码一样简单明了。

一、什么是Prompt?(1句话理解)

Prompt就是你给AI的”说明书”,告诉AI你想要什么、怎么回答。

二、最简单的实现思路

你问AI → AI回答你写说明书 → AI按照说明书回答

三、项目结构(极简)

prompt-simple/├── src/main/java/│   ├── PromptDemo.java      # 主程序│   └── templates/           # 模板类├── prompts/                 # 模板文件└── config.properties       # 配置文件

四、第一步:添加依赖(只需要2个)

创建pom.xml

<?xml version="1.0" encoding="UTF-8"?><project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>prompt-simple</artifactId><version>1.0</version><dependencies><!-- 1. 调用AI的库 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-deepseek</artifactId><version>0.29.1</version></dependency><!-- 2. HTTP客户端 --><dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.2.1</version></dependency></dependencies></project>

五、第二步:配置文件

创建config.properties

# DeepSeek API配置deepseek.api.key=你的API密钥deepseek.model=deepseek-chatdeepseek.url=https://api.deepseek.com# 模板目录template.dir=prompts/

六、第三步:创建模板文件

在项目根目录创建prompts文件夹,里面放模板文件:

1. `java_coder.txt` – 代码生成模板

请以Java专家的身份回答。任务:{{task}}使用框架:{{framework}}要求:代码要有注释,格式规范。只返回代码,不要解释。

2. `tech_help.txt` – 技术问答模板

请以技术顾问的身份回答。问题:{{question}}要求:回答要专业但易懂,给出实际解决方案。用中文回答。

3. `code_review.txt` – 代码审查模板

请以代码审查专家的身份审查代码。代码:{{code}}要求:指出问题,给出改进建议。分点说明,格式清晰。

七、第四步:创建Prompt模板类

import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.util.HashMap;import java.util.Map;/** * 最简单的Prompt模板类 */publicclassSimplePrompt{private String template;  // 模板内容private Map<String, String> variables = new HashMap<>();/**     * 创建模板     */publicstatic SimplePrompt create(String templateName){        SimplePrompt prompt = new SimplePrompt();try {// 从文件读取模板            Path path = Paths.get("prompts/" + templateName + ".txt");            String content = Files.readString(path);            prompt.template = content;        } catch (IOException e) {            System.err.println("读取模板文件失败: " + e.getMessage());// 使用内置模板            prompt.template = getBuiltinTemplate(templateName);        }return prompt;    }/**     * 内置模板(以防文件不存在)     */privatestatic String getBuiltinTemplate(String name){switch (name) {case"java_coder":return"请以Java专家的身份回答。\n任务:{{task}}\n使用框架:{{framework}}\n要求:代码要有注释,格式规范。\n只返回代码,不要解释。";case"tech_help":return"请以技术顾问的身份回答。\n问题:{{question}}\n要求:回答要专业但易懂,给出实际解决方案。\n用中文回答。";case"code_review":return"请以代码审查专家的身份审查代码。\n代码:{{code}}\n要求:指出问题,给出改进建议。\n分点说明,格式清晰。";default:return"请回答问题:{{question}}";        }    }/**     * 设置变量     */public SimplePrompt set(String key, String value){        variables.put(key, value);returnthis;  // 支持链式调用    }/**     * 渲染模板(替换变量)     */public String render(){        String result = template;for (Map.Entry<String, String> entry : variables.entrySet()) {            String placeholder = "{{" + entry.getKey() + "}}";            result = result.replace(placeholder, entry.getValue());        }return result;    }/**     * 快速生成代码的方法     */publicstatic String generateCode(String task, String framework){return SimplePrompt.create("java_coder")            .set("task", task)            .set("framework", framework)            .render();    }/**     * 快速技术问答的方法     */publicstatic String askTech(String question){return SimplePrompt.create("tech_help")            .set("question", question)            .render();    }}

八、第五步:创建AI调用类

import dev.langchain4j.model.chat.ChatLanguageModel;import dev.langchain4j.model.deepseek.DeepSeekChatModel;import java.util.Properties;import java.io.FileInputStream;/** * 调用DeepSeek的类 */publicclassDeepSeekClient{private String apiKey;private String model;publicDeepSeekClient(){// 读取配置try {            Properties props = new Properties();            props.load(new FileInputStream("config.properties"));this.apiKey = props.getProperty("deepseek.api.key");this.model = props.getProperty("deepseek.model""deepseek-chat");if (apiKey == null || apiKey.trim().isEmpty()) {                System.err.println("⚠️ 警告:未设置API密钥,请在config.properties中设置");            }        } catch (Exception e) {            System.err.println("读取配置文件失败: " + e.getMessage());        }    }/**     * 简单调用AI     */public String ask(String prompt){if (apiKey == null || apiKey.trim().isEmpty()) {return"❌ 错误:请先设置DeepSeek API密钥";        }try {            System.out.println("🤖 正在调用DeepSeek...");// 创建DeepSeek模型            ChatLanguageModel model = DeepSeekChatModel.builder()                .apiKey(apiKey)                .modelName(this.model)                .build();// 调用AI            String response = model.generate(prompt);            System.out.println("✅ AI回答完成");return response;        } catch (Exception e) {            System.err.println("调用AI失败: " + e.getMessage());return"抱歉,AI服务暂时不可用。";        }    }/**     * 使用模板调用AI     */public String askWithTemplate(String templateName, Map<String, String> variables){// 创建模板        SimplePrompt prompt = SimplePrompt.create(templateName);// 设置变量for (Map.Entry<String, String> entry : variables.entrySet()) {            prompt.set(entry.getKey(), entry.getValue());        }// 渲染模板        String renderedPrompt = prompt.render();        System.out.println("📝 生成的Prompt:\n" + renderedPrompt);// 调用AIreturn ask(renderedPrompt);    }}

九、第六步:主程序

import java.util.HashMap;import java.util.Map;import java.util.Scanner;/** * 主程序 - 使用示例 */publicclassPromptDemo{privatestatic DeepSeekClient aiClient = new DeepSeekClient();publicstaticvoidmain(String[] args){        System.out.println("🚀 AI Prompt模板管理系统");        System.out.println("=====================\n");        Scanner scanner = new Scanner(System.in);while (true) {            System.out.println("\n请选择功能:");            System.out.println("1. 生成代码");            System.out.println("2. 技术问答");            System.out.println("3. 代码审查");            System.out.println("4. 自定义模板");            System.out.println("5. 退出");            System.out.print("请选择(1-5): ");            String choice = scanner.nextLine();switch (choice) {case"1":                    generateCode(scanner);break;case"2":                    askTechQuestion(scanner);break;case"3":                    reviewCode(scanner);break;case"4":                    customTemplate(scanner);break;case"5":                    System.out.println("👋 再见!");                    scanner.close();return;default:                    System.out.println("❌ 无效选择,请重试");            }        }    }/**     * 功能1:生成代码     */privatestaticvoidgenerateCode(Scanner scanner){        System.out.println("\n💻 代码生成功能");        System.out.print("请输入任务(如:实现用户登录功能): ");        String task = scanner.nextLine();        System.out.print("请输入框架(如:Spring Boot): ");        String framework = scanner.nextLine();        System.out.println("\n⏳ 正在生成代码...");// 方法1:使用快速方法// String prompt = SimplePrompt.generateCode(task, framework);// String answer = aiClient.ask(prompt);// 方法2:使用模板方法        Map<String, String> variables = new HashMap<>();        variables.put("task", task);        variables.put("framework", framework);        String answer = aiClient.askWithTemplate("java_coder", variables);        System.out.println("\n✅ 生成的代码:");        System.out.println("====================");        System.out.println(answer);        System.out.println("====================\n");        System.out.print("按回车键继续...");        scanner.nextLine();    }/**     * 功能2:技术问答     */privatestaticvoidaskTechQuestion(Scanner scanner){        System.out.println("\n❓ 技术问答功能");        System.out.print("请输入技术问题: ");        String question = scanner.nextLine();        System.out.println("\n⏳ 正在思考...");        Map<String, String> variables = new HashMap<>();        variables.put("question", question);        String answer = aiClient.askWithTemplate("tech_help", variables);        System.out.println("\n💡 回答:");        System.out.println("====================");        System.out.println(answer);        System.out.println("====================\n");        System.out.print("按回车键继续...");        scanner.nextLine();    }/**     * 功能3:代码审查     */privatestaticvoidreviewCode(Scanner scanner){        System.out.println("\n🔍 代码审查功能");        System.out.println("请输入要审查的代码(输入空行结束):");        StringBuilder code = new StringBuilder();        String line;while (!(line = scanner.nextLine()).isEmpty()) {            code.append(line).append("\n");        }if (code.length() == 0) {            System.out.println("❌ 代码不能为空");return;        }        System.out.println("\n⏳ 正在审查代码...");        Map<String, String> variables = new HashMap<>();        variables.put("code", code.toString());        String answer = aiClient.askWithTemplate("code_review", variables);        System.out.println("\n📋 审查报告:");        System.out.println("====================");        System.out.println(answer);        System.out.println("====================\n");        System.out.print("按回车键继续...");        scanner.nextLine();    }/**     * 功能4:自定义模板     */privatestaticvoidcustomTemplate(Scanner scanner){        System.out.println("\n🎨 自定义模板功能");        System.out.println("当前可用模板:");        System.out.println("1. java_coder - 代码生成");        System.out.println("2. tech_help - 技术问答");        System.out.println("3. code_review - 代码审查");        System.out.print("\n请输入模板名称(直接输入名字): ");        String templateName = scanner.nextLine();// 读取变量        Map<String, String> variables = new HashMap<>();        System.out.println("\n请设置变量(格式:变量名=值,输入done结束):");while (true) {            System.out.print("变量(或输入done): ");            String input = scanner.nextLine();if (input.equalsIgnoreCase("done")) {break;            }if (input.contains("=")) {                String[] parts = input.split("="2);if (parts.length == 2) {                    variables.put(parts[0].trim(), parts[1].trim());                    System.out.println("✅ 已设置变量: " + parts[0].trim() + " = " + parts[1].trim());                }            }        }if (variables.isEmpty()) {            System.out.println("❌ 没有设置任何变量");return;        }        System.out.println("\n⏳ 正在处理...");        String answer = aiClient.askWithTemplate(templateName, variables);        System.out.println("\n✨ 结果:");        System.out.println("====================");        System.out.println(answer);        System.out.println("====================\n");        System.out.print("按回车键继续...");        scanner.nextLine();    }}

十、第七步:运行准备

1. 创建配置文件

在项目根目录创建config.properties

deepseek.api.key=sk-你的API密钥deepseek.model=deepseek-chatdeepseek.url=https://api.deepseek.comtemplate.dir=prompts/

2. 创建模板文件夹

创建prompts文件夹,放入三个模板文件。

3. 获取API密钥

  1. 访问:https://platform.deepseek.com/

  2. 注册账号

  3. 在API Keys页面创建密钥

  4. 复制到配置文件中

十一、第八步:编译运行

编译命令:

javac -cp ".:lib/*" *.java

运行命令:

java -cp ".:lib/*" PromptDemo

十二、使用示例

场景1:生成代码

请选择(1-5): 1请输入任务:实现用户登录功能请输入框架:Spring Boot🤖 正在调用DeepSeek...✅ 生成的代码:====================// UserController.java@RestController@RequestMapping("/api/users")public class UserController {    @PostMapping("/login")    public ResponseEntity<LoginResponse> login(@RequestBody LoginRequest request) {        // 实现登录逻辑    }}====================

场景2:技术问答

请选择(1-5): 2请输入技术问题:Redis和MySQL有什么区别?🤖 正在调用DeepSeek...💡 回答:====================1. 数据类型:Redis是键值存储,MySQL是关系型数据库2. 性能:Redis内存存储更快,MySQL磁盘存储3. 用途:Redis适合缓存,MySQL适合持久化存储====================

十三、进阶:模板管理类

如果你想更专业一点,可以添加模板管理:

import java.io.File;import java.util.*;/** * 模板管理器 */publicclassTemplateManager{private Map<String, String> templates = new HashMap<>();private String templateDir = "prompts/";publicTemplateManager(){        loadTemplates();    }/**     * 加载所有模板     */privatevoidloadTemplates(){        File dir = new File(templateDir);if (!dir.exists()) {            dir.mkdirs();            System.out.println("📁 创建了模板目录: " + templateDir);            createDefaultTemplates();        }        File[] files = dir.listFiles((d, name) -> name.endsWith(".txt"));if (files != null) {for (File file : files) {try {                    String name = file.getName().replace(".txt""");                    String content = Files.readString(file.toPath());                    templates.put(name, content);                    System.out.println("📄 加载模板: " + name);                } catch (Exception e) {                    System.err.println("加载模板失败: " + file.getName());                }            }        }    }/**     * 创建默认模板     */privatevoidcreateDefaultTemplates(){// 创建三个默认模板文件        String[] defaultTemplates = {"java_coder.txt","tech_help.txt""code_review.txt"        };// ... 创建文件代码 ...    }/**     * 获取模板     */public String getTemplate(String name){return templates.getOrDefault(name, "模板不存在: " + name);    }/**     * 添加新模板     */publicvoidaddTemplate(String name, String content){        templates.put(name, content);try {// 保存到文件            Path path = Paths.get(templateDir + name + ".txt");            Files.writeString(path, content);            System.out.println("✅ 模板已保存: " + name);        } catch (Exception e) {            System.err.println("保存模板失败: " + e.getMessage());        }    }/**     * 列出所有模板     */publicvoidlistTemplates(){        System.out.println("\n📋 可用模板列表:");for (String name : templates.keySet()) {            System.out.println("  • " + name);        }        System.out.println("总计: " + templates.size() + " 个模板");    }}

十四、简单总结

今天你学会了:

  1. ✅ Prompt是什么:给AI的说明书

  2. ✅ 模板文件:把常用的Prompt存成文件

  3. ✅ 变量替换:用{{变量名}}实现个性化

  4. ✅ 调用AI:用DeepSeek API获取回答

  5. ✅ 简单界面:命令行交互

核心代码回顾:

// 1. 创建模板SimplePrompt prompt = SimplePrompt.create("java_coder")    .set("task""写登录功能")    .set("framework""Spring Boot");// 2. 渲染模板String rendered = prompt.render();// 3. 调用AIString answer = aiClient.ask(rendered);

记住这几点:

  1. 模板要具体:越具体,AI回答越好

  2. 变量要灵活:用{{}}实现模板复用

  3. 角色要明确:告诉AI以什么身份回答

  4. 格式要指定:告诉AI怎么输出

十五、下一步改进建议

如果你想进一步优化:

  1. 添加更多模板:比如SQL生成、文档编写

  2. 保存历史记录:把问答保存到文件

  3. 图形界面:做成桌面应用

  4. Web API:做成服务供其他程序调用

十六、完整项目结构

text

prompt-simple/├── config.properties          # 配置文件├── prompts/                   # 模板目录│   ├── java_coder.txt        # 代码生成模板│   ├── tech_help.txt         # 技术问答模板│   └── code_review.txt       # 代码审查模板├── src/│   ├── SimplePrompt.java     # 模板类│   ├── DeepSeekClient.java   # AI客户端│   ├── TemplateManager.java  # 模板管理器(可选)│   └── PromptDemo.java       # 主程序├── lib/                      # 依赖库└── README.md                 # 说明文件

现在,你已经有了一个简单可用的Prompt模板系统!快去试试吧!

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 7. 提示词工程篇:《写给AI的"需求文档":Java风格的Prompt模板管理》

评论 抢沙发

1 + 2 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮