工具调用
This commit is contained in:
parent
fada2aab78
commit
47becaa432
5
pom.xml
5
pom.xml
@ -60,6 +60,11 @@
|
|||||||
<artifactId>langchain4j-spring-boot-starter</artifactId>
|
<artifactId>langchain4j-spring-boot-starter</artifactId>
|
||||||
<version>1.1.0-beta7</version>
|
<version>1.1.0-beta7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jsoup</groupId>
|
||||||
|
<artifactId>jsoup</artifactId>
|
||||||
|
<version>1.20.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.huangge1199.ai.config;
|
package com.huangge1199.ai.config;
|
||||||
|
|
||||||
import com.huangge1199.ai.service.LangChainService;
|
import com.huangge1199.ai.service.LangChainService;
|
||||||
|
import com.huangge1199.ai.tool.InterviewQuestionTool;
|
||||||
import dev.langchain4j.memory.ChatMemory;
|
import dev.langchain4j.memory.ChatMemory;
|
||||||
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
|
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
|
||||||
import dev.langchain4j.model.chat.ChatModel;
|
import dev.langchain4j.model.chat.ChatModel;
|
||||||
@ -33,6 +34,7 @@ public class LangChainConfig {
|
|||||||
.chatMemory(chatMemory)
|
.chatMemory(chatMemory)
|
||||||
.chatMemoryProvider(memoryId->MessageWindowChatMemory.withMaxMessages(10))
|
.chatMemoryProvider(memoryId->MessageWindowChatMemory.withMaxMessages(10))
|
||||||
.contentRetriever(contentRetriever)
|
.contentRetriever(contentRetriever)
|
||||||
|
.tools(new InterviewQuestionTool())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package com.huangge1199.ai.tool;
|
||||||
|
|
||||||
|
import dev.langchain4j.agent.tool.P;
|
||||||
|
import dev.langchain4j.agent.tool.Tool;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.jsoup.Jsoup;
|
||||||
|
import org.jsoup.nodes.Document;
|
||||||
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InterviewQuestionTool
|
||||||
|
*
|
||||||
|
* @author huangge1199
|
||||||
|
* @since 2025/7/12 13:15:28
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class InterviewQuestionTool {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从面试鸭网站获取关键词相关的面试题列表
|
||||||
|
*
|
||||||
|
* @param keyword 搜索关键词(如"redis"、"java多线程")
|
||||||
|
* @return 面试题列表,若失败则返回错误信息
|
||||||
|
*/
|
||||||
|
@Tool(name = "interviewQuestionSearch", value = """
|
||||||
|
Retrieves relevant interview questions from mianshiya.com based on a keyword.
|
||||||
|
Use this tool when the user asks for interview questions about specific technologies,
|
||||||
|
programming concepts, or job-related topics. The input should be a clear search term.
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
public String searchInterviewQuestions(@P(value = "the keyword to search") String keyword) {
|
||||||
|
List<String> questions = new ArrayList<>();
|
||||||
|
// 构建搜索URL(编码关键词以支持中文)
|
||||||
|
String encodedKeyword = URLEncoder.encode(keyword, StandardCharsets.UTF_8);
|
||||||
|
String url = "https://www.mianshiya.com/search/all?searchText=" + encodedKeyword;
|
||||||
|
// 发送请求并解析页面
|
||||||
|
Document doc;
|
||||||
|
try {
|
||||||
|
doc = Jsoup.connect(url)
|
||||||
|
.userAgent("Mozilla/5.0")
|
||||||
|
.timeout(5000)
|
||||||
|
.get();
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("get web error", e);
|
||||||
|
return e.getMessage();
|
||||||
|
}
|
||||||
|
// 提取面试题
|
||||||
|
Elements questionElements = doc.select(".ant-table-cell > a");
|
||||||
|
questionElements.forEach(el -> questions.add(el.text().trim()));
|
||||||
|
return String.join("\n", questions);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user