
当前,大语言模型(LLM)的能力已得到广泛认可,但将其简单、生硬地嵌入应用已无法满足复杂多变的业务需求。真正的价值在于将LLM作为智能引擎(Intelligent Engine)的核心,让其具备长期记忆(RAG)、实时感知(实时搜索)和操作万物(MCP) 的能力,并与成熟的企业级框架(如Spring生态)无缝集成。
这种融合架构正在成为新一代AI应用的标准范式。本文将深入探讨如何利用 SpringAI、RAG、MCP 和实时搜索 这四大核心技术,构建一个强大、可靠且可扩展的LLM智能引擎。
ChatClient、EmbeddingClient 等接口,屏蔽不同LLM API的差异。@EnableAi,自动配置,YAML配置),极大降低了LLM集成的复杂度。一个融合了四大技术的智能引擎架构如下图所示:
text
[用户请求]
|
v
+-----------------------------------------------------------------+
| SpringAI 应用 (智能网关) |
| |
| +-------------------------+ |
| | Prompt | |
| | | |
| | +---------------------+ | |
| | | User Query | | |
| | +---------------------+ | |
| | | Context from RAG |<---+ |
| | | Context from Search |<---+ |
| | | Tool Calls (MCP) |<---+ |
| | +---------------------+ | | |
| +-------------------------+ | |
| | |
| +-----------------------+ | |
| | ChatClient | | |
| | (OpenAI, Anthropic...)| | |
| +-----------------------+ | |
+-----------------------------------------------------------------+
| | | |
| | | |
v v v v
+----------+ +----------------+ +-------------+ +-----------------+
| LLM | | 向量数据库 | | 实时搜索API | | MCP Servers |
| (GPT-4, | | (PgVector, | | (Google, | | (Calculator, |
| Claude...)| | RedisStack, | | Serper...) | | SQL, Shell...) |
+----------+ | Chroma...) | +-------------+ +-----------------+
+----------------+工作流程:
EmbeddingClient将查询向量化,并向向量数据库发起检索,获取相关的静态知识(RAG)。ChatClient发送给LLM。LLM生成回答,其间可能会自动调用一个或多个MCP工具来完成任务。假设我们要构建一个能回答技术问题、查询实时新闻并能操作本地文件的助手。
依赖 (pom.xml):
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId>
</dependency>
<!-- 其他必要依赖,如Web -->配置 (application.yml):
yaml
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
vectorstore:
pgvector:
enabled: true
# ... 数据库配置java
@Service
@RequiredArgsConstructor
public class RagService {
private final VectorStore vectorStore;
private final EmbeddingClient embeddingClient;
public List<Document> retrieveContext(String query) {
// 将查询转换为嵌入向量
List<Double> queryEmbedding = embeddingClient.embed(query);
// 在向量库中搜索相似文档
SearchRequest request = SearchRequest.query(query).withTopK(5);
return vectorStore.similaritySearch(request);
}
// 初始化向量库的方法(文档入库)
public void loadDocuments(List<Document> docs) { ... }
}java
@Service
public class RealTimeSearchService {
@Value("${serper.api.key}")
private String serperApiKey;
public String searchWeb(String query) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("X-API-KEY", serperApiKey);
headers.setContentType(MediaType.APPLICATION_JSON);
Map<String, String> requestMap = Map.of("q", query, "num", "5");
HttpEntity<Map<String, String>> request = new HttpEntity<>(requestMap, headers);
ResponseEntity<Map> response = restTemplate.postForEntity(
"https://api.serper.dev/search", request, Map.class);
// 处理响应,提取搜索摘要...
return extractSnippetsFromResponse(response.getBody());
}
}SpringAI尚未原生支持MCP客户端,但我们可以通过Java MCP SDK或直接调用本地进程来集成。
java
@Service
public class McpService {
public String executeTool(String toolName, String input) {
// 简化示例:实际应使用正式的MCP客户端库
ProcessBuilder processBuilder = new ProcessBuilder("node", "/path/to/mcp/server", input);
try {
Process process = processBuilder.start();
// 读取进程输出...
String result = ...;
return result;
} catch (IOException e) {
return "Error executing tool: " + e.getMessage();
}
}
}java
@Service
@RequiredArgsConstructor
public class IntelligentEngineService {
private final ChatClient chatClient;
private final RagService ragService;
private final RealTimeSearchService searchService;
private final McpService mcpService;
public String processQuery(String userQuery) {
// 1. 并行获取RAG上下文和实时信息
List<Document> ragContext = ragService.retrieveContext(userQuery);
String realTimeInfo = searchService.searchWeb(userQuery);
// 2. 构建系统提示,注入上下文、工具描述和指令
String systemPrompt = """
你是一个强大的AI助手。请根据以下上下文和实时信息回答问题。
如果用户要求你执行计算、操作文件等,你可以调用可用工具。
相关文档上下文:
%s
实时网络信息:
%s
可用工具:
- get_current_time: 获取当前时间
- read_file: 读取文件内容
...其他工具...
请谨慎判断是否需要使用工具。
""".formatted(ragContext, realTimeInfo);
// 3. 构建用户消息
Prompt prompt = new Prompt(
List.of(
new SystemPromptTemplate(systemPrompt).createMessage(),
new UserMessage(userQuery)
)
);
// 4. 调用LLM
ChatResponse response = chatClient.call(prompt);
// 5. (后续)处理LLM响应,解析其中的工具调用请求,并通过McpService执行
// 这是一个复杂步骤,可能需要多轮对话
return response.getResult().getOutput().getText();
}
}将SpringAI、RAG、MCP和实时搜索相结合,不再是简单的技术堆砌,而是构建具备知识、感知和行动能力的真正智能引擎的必由之路。
这种架构极大地释放了LLM的潜力,使其能够广泛应用于智能客服、高级代码助手、企业知识平台、个人AI代理等复杂场景,代表了当前AI应用工程化的最高水平和未来发展方向。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。