利用deepseek的java智能体开发——实现上下文记忆并利用高德平台调取天气信息
Java 11 起内置了 java.net.http.HttpClient,不需要引入 OkHttp 或 Apache HttpClient,减少依赖。Java 智能体开发就是用 Java 调用大语言模型(比如 DeepSeek、GPT)的 API,让程序能理解自然语言、做出决策、并执行相应操作。• 模型名必须是 deepseek-chat,写成 deepseekchat 会返回错误 JSON,导
Java 智能体开发就是用 Java 调用大语言模型(比如 DeepSeek、GPT)的 API,让程序能理解自然语言、做出决策、并执行相应操作。
核心思路是:
![]()
"智能体"和普通聊天机器人的区别在于它能调用工具。比如你问"济南天气怎么样",普通聊天只会瞎编,智能体会:
1. 识别出这是天气查询
2. 自动调用天气 API 拿真实数据
3. 把数据交给 AI 组织成自然语言回复
一、项目目标
用 Java 从零实现一个命令行智能体,具备以下能力:
• 与用户持续对话(有记忆)
• 识别天气查询意图,自动调用高德 API 获取实时天气
• 将天气数据交给 AI 组织成自然语言回复

二、技术选型
为什么用 Java 17 内置 HttpClient
Java 11 起内置了 java.net.http.HttpClient,不需要引入 OkHttp 或 Apache HttpClient,减少依赖。用法:
为什么用 Jackson 而不是 javax.json
Jackson 的 JsonNode 支持链式调用,解析嵌套 JSON 更方便:

注意:Jackson 需要同时引入三个 jar,缺一不可:
jackson-databind(核心功能)
jackson-core(底层解析)
jackson-annotations(注解支持)
只加 jackson-databind 会在运行时报 NoClassDefFoundError: JsonView。
三、DeepSeek API 接入
请求结构
DeepSeek 兼容 OpenAI 格式,请求体如下

注意事项:
• 模型名必须是 deepseek-chat,写成 deepseekchat 会返回错误 JSON,导致后续解析 NPE
• temperature 越小回答越严谨,这里设 0.1 适合工具调用场景
• API Key 格式是 sk-xxxxxxxxxxxxxxxx,在 platform.deepseek.com 申请
用 Jackson 构建请求体

解析响应

path() 比 get() 安全,找不到字段时返回 MissingNode 而不是 null,不会直接 NPE。但 get(0) 仍然可能返回 null(数组为空时),所以调试时要先打印原始响应确认 API 正常返回。
四、对话记忆实现
用静态 StringBuilder 累积所有对话内容,每次请求都把完整历史带上:

这是最简单的记忆方案,把所有历史拼成一个长字符串发给模型。缺点是对话越长 token 消耗越多,生产环境一般只保留最近 N 轮。
五、Function Calling 简化实现
标准的 Function Calling 需要定义 tools schema,流程复杂。这里用 prompt 工程实现同等效果:
第一步:让模型识别意图并格式化输出

第二步:判断输出意图

整个流程是两次 AI 调用:第一次识别意图+提取城市,第二次把天气数据转成自然语言。
六、高德天气 API
接口地址
![]()
extensions=base 返回实时天气,extensions=all 返回预报。
关键坑:中文 URL 编码
URI.create() 不接受未编码的中文字符,必须先编码:

不编码会抛:
![]()
解析响应
高德返回结构:

七、踩坑汇总

八、运行效果

更多推荐




所有评论(0)