springboot+langchain4jDay6-Day11后续学习计划

springboot+langchain4jDay6-Day11后续学习计划 源代码源代码6-10对于java从业者非常easy这里就不写了可以直接看day6-day10的代码需注意day9的springboot版本降为了2.7.18每天的源代码基本都有readme.mdDay 11联网搜索 Tool — Agent 自主决策实时搜索 技术栈LangChain4j AiServices · Function Calling · 博查搜索 API · 华风爱科天气 API核心能力Agent 注册了两个 Tool自主决定何时调哪个不需要 if-else 路由Tool触发场景数据来源WebSearchTool.search()新闻、股价、赛事等通用搜索博查BochaSearch APIWeatherTool.getWeather()天气、温度、穿衣、出行等气象问题华风爱科WeatherCNOpenAPI用户「今天北京天气怎么样」 → LLM 判断需要实时天气数据 → 自动调用 WeatherTool.getWeather(北京) ├─ Step 1城市搜索 → 获取城市 Key如 101924 └─ Step 2实况天气 → 返回温度/湿度/风速等 → LLM 整理后回复用户架构┌──────────┐ ┌─────────────────────┐ ┌──────────────┐ │ 用户 │────▶│ AgentService │────▶│ DeepSeek-V3 │ │ (问题) │ │ (AiServices 代理) │ │ (LLM) │ └──────────┘ └───────┬─────────────┘ └──────┬───────┘ │ │ │ Function Calling │ ┌────▼────────────────────┐ │ │ 同时注册两个 Tool │◀────┘ └────┬──────────┬──────────┘ │ │ ┌──────────▼─┐ ┌─────▼──────────┐ │WebSearchTool│ │ WeatherTool │ │.search(q) │ │.getWeather(城市)│ └──────┬──────┘ └─────┬──────────┘ │ │ ┌──────▼──────┐ ┌─────▼──────────┐ │ 博查 Search │ │ 华风爱科 OpenAPI │ │ API │ │ 两步查询 │ └─────────────┘ └────────────────┘文件结构day11/ ├── pom.xml └── src/main/java/com/day11/demo/ ├── Day11Application.java ├── config/ │ └── ChatModelConfig.java ← OpenAiChatModel Bean接 SiliconFlow ├── service/ │ └── AgentService.java ← AiServices 组装 Agent 双 Tool ├── tool/ │ ├── WebSearchTool.java ← 博查联网搜索 Tool │ └── WeatherTool.java ← 华风爱科天气 Tool城市搜索 实况 ├── controller/ │ └── AgentController.java ← GET /agent/chat?message... └── dto/ └── Result.java核心代码WeatherTool.java — 华风爱科两步查询Tool(查询指定城市的实时天气信息包括气温、体感温度、湿度、风向风速...当用户询问天气、温度、是否下雨、穿衣建议等气象问题时使用此工具。)publicStringgetWeather(StringcityName){// Step 1城市搜索 → 获取 KeyStringcityKeysearchCityKey(cityName);// 调 /locations/v1/cities/search.json// Step 2实况天气 → 格式化返回returngetCurrentConditions(cityKey,cityName);// 调 /currentconditions/v1/{Key}.json}AgentService.java — 双 Tool 注入agentAiServices.builder(WebSearchAgent.class).chatLanguageModel(chatModel).tools(searchTool,weatherTool)// ← 同时注册两个 Tool.chatMemory(chatMemory).build();// LLM 自行判断用户意图决定调哪个 Tool或都不调API Key 配置方式 A直接填写 application.yml本地开发推荐bocha:api-key:你的博查Keyweathercn:api-key:你的华风爱科Key方式 B环境变量生产/CI 推荐# WindowssetBOCHA_API_KEY你的博查KeysetWEATHERCN_API_KEY你的华风爱科Key# Linux / macOSexportBOCHA_API_KEY你的博查KeyexportWEATHERCN_API_KEY你的华风爱科Key获取 API Key服务注册地址说明博查搜索https://open.bochaai.com微信扫码注册免费额度华风爱科https://openapi.weathercn.com官方天气 API启动mvn spring-boot:run测试# 不需要 Tool 的问题LLM 直接回答curlhttp://localhost:8080/agent/chat?message你叫什么名字# 触发 WeatherTool华风爱科天气curlhttp://localhost:8080/agent/chat?message今天北京天气怎么样curlhttp://localhost:8080/agent/chat?message上海明天要下雨吗要不要带伞curlhttp://localhost:8080/agent/chat?message深圳现在多少度# 触发 WebSearchTool博查通用搜索curlhttp://localhost:8080/agent/chat?message2024年NBA总冠军是谁curlhttp://localhost:8080/agent/chat?message最近有什么AI方面的新闻华风爱科接口说明接口 1城市搜索GET https://openapi.weathercn.com/locations/v1/cities/search.json ?apikeyYOUR_API_KEY q北京 languagezh-cn返回 JSON 数组取[0].Key作为后续查询的城市标识如101924。接口 2实况天气GET https://openapi.weathercn.com/currentconditions/v1/{Key}.json ?apikeyYOUR_API_KEY languagezh-cn detailstrue返回 JSON 数组[0]包含温度、湿度、风速等完整实况数据。面试要点为什么要注册两个 Tool— 职责分离天气专用 Tool vs 通用搜索 Tool。LLM 看到两个 Tool 的描述后能更精准地做意图路由不需要代码里写 if-elseWeatherTool 为什么要两步请求— 华风爱科 API 的设计先通过城市名拿到标准化的城市 Key再用 Key 查实时天气。这样能精确处理同名城市Tool注解的描述为什么这么重要— 描述文本会被序列化成 Function Calling 的 JSON Schema 传给 LLMLLM 靠描述决定何时调用。描述越准路由越精确Key 取第一条够准确吗— 华风爱科接口会按相关度排序第一条通常是最匹配的城市。如需精确可以加省份等限制词如「北京市」没有 API Key 怎么办—WeatherTool无 Key 时返回引导提示WebSearchTool无 Key 时降级返回配置说明。Agent 仍能正常对话不会崩溃