小汉同学 - AI 超级智能体 - 2 - AI 大模型接入 笔记

鱼总的下发任务

1)在 AI 应用平台上创建智能体应用、工作流应用、智能体编排应用 ✅

image.png

2)使用至少一个 AI 软件客户端,推荐 Cursor✅

  • 前几天在用trae写一些crud,感觉挺好的,只是自己的prompt能力不太行,还有就是排队太爽了!!!

3)完成后端项目初始化✅

  • 还差通用代码,copy即可(云图库没做完,但是这个阶段搞完了的),再和gemini 2.5 pro battle一下,看一下如何写这个通用代码比较简洁,再学习一下常用的设计模式在项目中的正确应用,一下demo。

4)实践 4 种程序调用 AI 大模型的方式✅

  • 配置文件(application-local.yml)
yml
复制代码
myai: api-key: dashscope: xxx # dashscope的api-key spring: ai: dashscope: api-key: ${myai.api-key.dashscope} chat: options: model: qwen-plus
  • 获取api-key
java
复制代码
package com.xiaoh.haiagent.demo; import org.yaml.snakeyaml.Yaml; import java.io.InputStream; import java.util.Map; /** * @author: xiaohan * @dataTime: 2025/4/27 15:05 * @desc: */ public class AppConfig { public static String getApiKey(String key) { // 1. 从 classpath 加载 application.yml try (InputStream input = AppConfig.class.getClassLoader() .getResourceAsStream("application-local.yml")) { // 2. 使用 SnakeYAML 解析 Yaml yaml = new Yaml(); Map<String, Object> config = yaml.load(input); // 3. 按层级获取属性(注意类型转换) Map<String, Object> myai = (Map<String, Object>) config.get("myai"); Map<String, Object> apiKey = (Map<String, Object>) myai.get("api-key"); return apiKey.get(key).toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } }
  • 使用对应的SDK进行调用
java
复制代码
package com.xiaoh.haiagent.demo; import com.alibaba.dashscope.aigc.generation.Generation; import com.alibaba.dashscope.aigc.generation.GenerationParam; import com.alibaba.dashscope.aigc.generation.GenerationResult; import com.alibaba.dashscope.common.Message; import com.alibaba.dashscope.common.Role; import com.alibaba.dashscope.exception.ApiException; import com.alibaba.dashscope.exception.InputRequiredException; import com.alibaba.dashscope.exception.NoApiKeyException; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.Arrays; /** * @author: xiaohan * @dataTime: 2025/4/27 14:56 * @desc: */ // 建议dashscope SDK的版本 >= 2.12.0 public class SDKInvokeAI { public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { // 获取配置文件中的apiKey String apiKey = AppConfig.getApiKey("dashscope"); // 调用生成服务 Generation gen = new Generation(); Message systemMsg = Message.builder() .role(Role.SYSTEM.getValue()) .content("You are a helpful assistant.") .build(); Message userMsg = Message.builder() .role(Role.USER.getValue()) .content("你是谁?") .build(); GenerationParam param = GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx") .apiKey(apiKey) // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models .model("qwen-plus") .messages(Arrays.asList(systemMsg, userMsg)) .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); return gen.call(param); } public static void main(String[] args) { try { GenerationResult result = callWithMessage(); Gson gson = new GsonBuilder().setPrettyPrinting().create(); System.out.println(gson.toJson(result)); } catch (ApiException | NoApiKeyException | InputRequiredException e) { System.err.println("An error occurred while calling the generation service: " + e.getMessage()); } } }
  • 使用http进行调用
java
复制代码
package com.xiaoh.haiagent.demo; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.google.gson.*; import java.util.HashMap; /** * @author: xiaohan * @dataTime: 2025/4/27 17:31 * @desc: */ public class HTTPInvokeAI { public static void main(String[] args) { String apiKey = AppConfig.getApiKey("dashscope"); String url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"; // 设置请求头 HashMap<String, String> header = new HashMap<>(); header.put("Content-Type", "application/json"); header.put("Authorization", "Bearer " + apiKey); // 设置请求体 JsonObject body = new JsonObject(); // 设置对话列表 // 示例:设置系统消息和用户消息 JsonObject systemMsg = new JsonObject(); systemMsg.addProperty("role", "system"); systemMsg.addProperty("content", "You are a helpful assistant."); // 设置用户消息 JsonObject userMsg = new JsonObject(); userMsg.addProperty("role", "user"); userMsg.addProperty("content", "你是谁?"); // 将消息整合在一个数组中 JsonArray messages = new JsonArray(); messages.add(systemMsg); messages.add(userMsg); // 构建input对象(关键修正点) JsonObject input = new JsonObject(); input.add("messages", messages); // 需要将messages包裹在input对象中 // 添加到请求体中 JsonObject parameters = new JsonObject(); parameters.addProperty("result_format", "json_object"); // 组装请求体 body.addProperty("model", "qwen-plus"); body.add("input", input); body.add("parameters", parameters); // 发起请求 HttpResponse response = HttpRequest.post(url) .addHeaders(header) .body(body.toString()) .execute(); Gson gson = new GsonBuilder().setPrettyPrinting().create(); String s = gson.toJson(JsonParser.parseString(response.body())); if (response.isOk()) { System.out.println("调用成功,响应内容为:\n" + s); } else { System.out.println("调用失败,错误码为:\n" + s); } } }
  • 使用SpringAI进行调用
java
复制代码
package com.xiaoh.haiagent.demo; import jakarta.annotation.Resource; import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; /** * @author: xiaohan * @dataTime: 2025/4/27 22:50 * @desc: */ @Component public class SpringAIInvokeAI implements CommandLineRunner, ApplicationRunner { @Resource private ChatModel dashscopeChatModel; @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner.run"); AssistantMessage output = dashscopeChatModel.call(new Prompt("你好,我是小汉")) .getResult().getOutput(); System.out.println(output.getText()); } @Override public void run(ApplicationArguments args) throws Exception { // 这个接口也是一样的作用,只是参数格式不一样,而且这个先执行 System.out.println("ApplicationRunner.run"); } }
  • 使用LangChain4j进行调用
java
复制代码
package com.xiaoh.haiagent.demo; import dev.langchain4j.community.model.dashscope.QwenChatModel; /** * @author: xiaohan * @dataTime: 2025/4/27 23:38 * @desc: */ public class LangChain4jInvokeAI { public static void main(String[] args) { QwenChatModel chatModel = QwenChatModel.builder() .apiKey(AppConfig.getApiKey("dashscope")) .modelName("qwen-plus") .build(); String s = chatModel.chat("你好,我是小汉"); System.out.println(s); } }

5)使用 Ollama 部署 1 个本地大模型,并且通过 Spring AI 调用✅

java
复制代码
@Component public class SpringAIInvokeAI implements ApplicationRunner { @Resource private ChatModel ollamaChatModel; @Override public void run(ApplicationArguments args) throws Exception { // 这个接口也是一样的作用,只是参数格式不一样,而且这个先执行 System.out.println("ApplicationRunner.run"); AssistantMessage output = ollamaChatModel.call(new Prompt("你好,我是小汉")) .getResult().getOutput(); System.out.println(output.getText()); } }
image.png (需要去复习一下虚拟机和宿主机直接的通信的几种方式,记不住了)
  • 使用端口转发
image.png

遇到的问题

  • 主要遇到的问题就是ide和jdk兼容的问题,应该排查了1个小时,当时我都怀疑自己是否对文件编码是否理解,是否理解会什么会出现乱码。在gemini 2.5 flash 的帮助和讨论下,我终于发现了问题设置了UTF-8还是ide输出中文还是乱码?

先写到这,鱼总的笔记非常棒,感谢!

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
小汉同学
作者分享
26届,春招,校招。 不知道怎么弄了。。。焦虑中,请教以下各位大佬。 最先的几个月,我在慢吞吞的做项目,感觉需要自己手过一遍才算自己的。然后,又要自己准备得感觉差不多才心里踏实。现在感觉没有方向了。 我前不久准备好了简历,然后复习了两周的面试题。想着开始投简历。但是,我觉得很多岗位的JD我匹配不上,也不知道该不该投。我看了老鱼简历中的信息列表,点进去看感觉都不适合我。。。 看了抖音上的一些视频,去国聘行动,就业平台等,我看了。有一些岗位,但是,它们都必须在它们的平台上弄好简历,还不能上传我做好的简历。要填的东西很多。让我感觉会填很久,然后也不一定有响应。 之前待了一家实习,实习半个月,找我谈签三方,但是我觉得是Python路线,我就放弃了。在学校我线下去投递过,最近这几天去投了来校内的几家,目前还没有消息,感觉是没了。 图片是简历,已经脱敏。希望大佬们可以给我指点一下。目前不知道怎么弄了。 问题: 在哪里找中小公司的校招岗位? 如果JD自我感觉不匹配,是不是不需要投递了? 智联招聘、BOSS是不是和网上说的不适合校招毕业生? 麻烦各位大佬的回复了。谢谢。
4
AI 超级智能体项目教程 - 6 - 工具调用 笔记
1
小汉同学 - AI 超级智能体教程 - 4 - RAG 知识库基础 笔记
4
小汉同学 - AI 超级智能体教程 - 3 - AI 应用开发 笔记
3
各位大佬晚上好。想问一下问题,蓝桥杯该怎么准备。我在官方网站上面看见有对应的培训课程。但是有点贵(比较穷)。之前过完了B站满老师的数据结构课程,算是入门小白了吧(我也不知道是不是)。目前在根据满老师提供的文档进行复习。因为自己比较迟钝。所以想各位大佬给我提提方法,如何准备才够这个比赛。如果是选择他们官方的课程的话,我想去pdd去找一下有没有去年课程的,便宜一点😂 感谢各位大佬,感谢感谢!!!😁
3
下载 APP