AI应用开发入门这么简单?附可直接运行源码
-
依赖版本不好控,组件一组合就冲突 -
示例项目太重,想跑个 demo 成本很高 -
就算跑通了,也不知道代码为什么这样写
-
先跑起来 -
再看懂它 -
最后把一次最小调用串起来
@RequestMapping("chat1")public String chat1(@RequestParamString msg) {Message systemMessage = new SystemMessage("你是一位专业的 Java 技术顾问。");Message userMessage = new UserMessage(msg);return chatClient.prompt(new Prompt(List.of(systemMessage, userMessage))).call().content();}

Message systemMessage = new SystemMessage("你是一位专业的 Java 技术顾问。");Message userMessage = new UserMessage(msg);

Message 是一句话,Prompt 是一整次对话
@GetMapping("/chat2")public String chat2() {PromptTemplate template = new PromptTemplate("请用{language},向{level}程序员解释什么是{concept}。");Prompt renderedPrompt = template.create(Map.of("language", "中文","level", "初级","concept", "微服务"));return chatClient.prompt(renderedPrompt).call().content();}

👉 一个“通用遥控器”,无论底层是通义千问还是 GPT,用法都一样
@GetMapping("/chat3")public String chat3() {Prompt prompt = new Prompt(List.of(new SystemMessage("你是一位经验丰富的 Java 架构师。"),new UserMessage("什么是 LLM")));ChatResponse response = chatModel.call(prompt);Usage usage = response.getMetadata().getUsage();log.info( "promptTokens: {}, completionTokens: {}, totalTokens: {}",usage.getPromptTokens(),usage.getCompletionTokens(),usage.getTotalTokens());for (Generation result : response.getResults()) {log.info("result: {}", result.getOutput().getText());}return response.getResult().getOutput().getText();}
-
ChatModel更偏底层接口,业务里通常更常用的是ChatClient -
PromptTemplate用的是{},不要和${}混淆 -
call()本身是无状态调用,多轮对话需要自己维护上下文 -
Token 是计费单位,输入和输出都会消耗
-
Message负责“说什么” -
Prompt负责“怎么组织” -
ChatModel负责“把请求发出去并拿回结果”

👉 ChatModel 是“发动机”👉 ChatClient 是“方向盘 + 仪表盘”
-
支持链式调用,写起来更顺 -
能放默认配置,不用每次重复写 -
更方便挂日志、顾问和后续扩展逻辑
@Beanpublic ChatClient chatClient(ChatModel chatModel) {return ChatClient.builder(chatModel).defaultSystem("你是一位专业的 Java 技术顾问,请用简洁专业的语言回答问题。").defaultAdvisors(new SimpleLoggerAdvisor()).defaultTools(weatherTool).build();}
@GetMapping(value = "/chat4", produces = "text/html;charset=utf-8")public Flux<String> chat4(@RequestParam(name = "msg", defaultValue = "你好") String msg) {return chatClient.prompt().user(msg).stream().content();}

-
怎么让 AI 调工具 -
怎么让 AI 自己规划步骤 -
怎么让 AI 记住上下文


夜雨聆风