package com.ard.agent.tool;
|
|
import jakarta.annotation.Resource;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.ai.document.Document;
|
import org.springframework.ai.tool.annotation.Tool;
|
import org.springframework.ai.tool.annotation.ToolParam;
|
import org.springframework.ai.vectorstore.SearchRequest;
|
import org.springframework.ai.vectorstore.VectorStore;
|
import org.springframework.stereotype.Component;
|
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 知识库工具
|
*
|
* @author lsy
|
* @date 2026/5/11
|
*/
|
|
@Component
|
@Slf4j
|
public class KnowledgeTools {
|
|
@Resource
|
private VectorStore vectorStore; // 你的向量数据库
|
|
@Tool(description = """
|
从内部知识库中检索相关文档。当你需要查询公司政策、技术文档、产品说明等静态知识时,
|
应该优先调用此工具。此工具适用于非实时、非动态的数据查询。
|
""")
|
public String searchKnowledgeBase(
|
@ToolParam(description = "搜索关键词或问题") String query) {
|
log.info("AI调用searchKnowledgeBase工具,参数: query={}", query);
|
// 执行向量检索
|
List<Document> results = vectorStore.similaritySearch(
|
SearchRequest.builder().query(query) .topK(3)
|
.build()
|
);
|
|
if (results.isEmpty()) {
|
return "未找到相关知识";
|
}
|
|
return results.stream()
|
.map(Document::getText)
|
.collect(Collectors.joining("\n---\n"));
|
}
|
}
|