Agent入门开发

张开发
2026/6/9 22:31:43 15 分钟阅读
Agent入门开发
今天起我们开始学习利用大模型进行个人 Agent 的开发。一、准备工作在基于大模型构建智能体时所有对话交互均需要通过网络请求远端大模型服务实现。而完成调用的前提是获得大模型平台颁发的身份凭证 ——API_KEY。本文以深度求索DeepSeek大模型开放平台为例进行讲解。在 DeepSeek 官网完成平台注册与实名认证后进入其 API 开放平台在 API keys 界面创建API key 并及时复制密钥仅在创建时显示一次关闭页面后将无法再次查看完整密钥。由于后续开发 Agent 需要调用 API我们需要购买适量 token十元已足够入门使用。在完成 API_KEY 身份凭证配置后我们还需要明确请求的目标地址才能让智能体与云端大模型建立网络连接。这需要用到 URLUniform Resource Locator统一资源定位符俗称网络地址它是是程序与大模型通信的唯一入口。// DeepSeek 大模型对话接口地址 public static final String URL https://api.deepseek.com/chat/completions;智能体Java 程序和大模型云端服务的交互就是数据的收发过程但它们是完全不同的系统无法直接交流必须使用全行业通用的数据格式JSON。然而原生 Java 无法处理 JSON为了解决这个问题我们必须引入 Java 生态最主流的 JSON 处理工具Jackson 库。我们需要用到三个依赖包jackson-databind核心功能包ObjectMapper、JsonNode 所在包jackson-coreJSON 底层解析包jackson-annotations注解支持包将它们导入即可。在完成身份凭证API_KEY、服务地址URL、外部依赖库Jackson 三大前置准备后我们需要创建两个工具对象。// JSON 序列化/反序列化核心工具 private static final ObjectMapper mapper new ObjectMapper(); // 网络请求客户端工具 private static final HttpClient httpClient HttpClient.newHttpClient();ObjectMapper 是 Jackson 库的核心对象可以实现Java 对象与 JSON 格式的相互转换。HttpClient 是 Java 原生的 HTTP 客户端用于建立网络连接、发送请求并接收大模型的返回数据。二、交互功能完成准备工作后我们可以着手设计交互功能。在与 AI 对话时智能体通常能通过历史对话即上下文记忆给出相应回答。为了使我们的自定义 Agent 拥有“短期记忆”我们可以初始化一个全局高效字符串工具StringBuilder用于动态拼接并存储用户与 AI 的历史对话内容完成连贯的多轮交互。static final StringBuilder stringBu new StringBuilder();在完成上下文记忆的载体准备后我们首先要为大模型定义清晰的交互指令与输出规范这一步正是通过提示词拼接实现的。// 拼接提示词与约束规则 String input 用户问题:%s 规制回答简洁明了不要捏造数据 .formatted(prompt);这里采用了文本块语法利用三引号实现多行字符串编写并结合 formatted() 方法动态插入用户提问内容。我们在指令中严格设定了交互规则控制大模型的输出风格和内容边界。这种固定规则模板确保了 AI 始终遵循统一标准生成回答。之后再通过核心交互方法 chat() 完成用户输入接收、上下文拼接、大模型请求、响应解析、对话记忆更新的智能体实现自然对话交互的流程。public static void chat(String prompt) throws Exception { // 拼接提示词与约束规则 String input 用户问题:%s 规制回答文件简洁明了不要捏造数据 .formatted(prompt); // 将本轮用户输入追加到全局上下文构建对话记忆 stringBu.append(input); // 1. 构建请求参数封装模型名称、对话上下文、生成风格等核心配置 MapString, Object body new HashMap(); body.put(model, deepseek-chat); // 传入完整的历史对话上下文让大模型理解多轮对话 body.put(messages, new Object[]{Map.of(role, user,content,stringBu.toString() )}); body.put(temperature, 0.1); // 控制输出风格数值越低回答越严谨、简洁 // 2. 序列化通过ObjectMapper将Java参数转换为JSON格式适配大模型接口要求 String json mapper.writeValueAsString(body); // 3. 构建HTTP请求绑定接口地址、身份凭证、请求体发起POST请求 HttpRequest request HttpRequest.newBuilder() .uri(URI.create(URL)) .header(Authorization, Bearer API_KEY) .header(Content-Type, application/json) .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); // 4. 发送网络请求通过HttpClient完成通信获取大模型返回的响应数据 HttpResponseString resp httpClient.send(request, HttpResponse.BodyHandlers.ofString()); // 5. 反序列化解析JSON响应结果提取AI生成的文本内容 JsonNode root mapper.readTree(resp.body()); String str root.path(choices).get(0).path(message).path(content).asText(); // 输出AI回答并将回答追加到上下文记忆中为下一轮对话做准备 System.out.println(AIstr); stringBu.append(str); }该方法完整实现了带记忆能力的 AI 对话。接收用户问题后会把历史对话一并发送给大模型保证交互的连贯性同时依托前置初始化的核心工具完成数据格式转换与网络通信最终将 AI 回答输出并更新记忆库。在智能体对接大模型的开发过程中chat() 方法采用了标准化的代码编写范式。该实现结构清晰、通用性强是 Java 实现 AI 对话交互的标准方案。开发者无需深入每行代码细节只需掌握其六大核心模块的设计原理就能快速复用这套基础代码框架。三、对话演示构建主函数实现持续对话public static void main(String[] args) { // 无限循环实现持续对话 while (true) { try { // 获取控制台输入 Scanner scan new Scanner(System.in); System.out.print(我); // 读取用户输入的问题 String prompt scan.nextLine(); // 调用核心对话方法完成AI交互 DPAgent.chat(prompt); } catch (Exception e) { throw new RuntimeException(e); } } }对话演示可以看见智能体按我们的要求进行了相应回答并能够获取历史对话信息。然而智能体底层依赖大模型离线训练完成的静态知识库其既无法主动联网获取最新信息也未接入任何外部数据接口。因此面对天气、实时新闻、动态数据等时效性较强的问题时纯大模型对话智能体无法回答这也是我们需要为智能体拓展外部工具调用能力的原因。在之后的学习中我们将通过接入第三方实时服务等方式进一步丰富智能体的功能使其从 “纯文本对话机器人” 升级为工具增强型智能体。

更多文章