集成模式分析
请关注公众号【碳硅化合物AI】
目录
- 概述
- LLM 提供商集成模式
- 向量存储集成模式
- 集成测试模式
- HTTP 客户端集成
- 配置和构建器模式
- 异常处理和重试机制
- 总结
概述
LangChain4j 支持 20+ LLM 提供商和 30+ 向量数据库。通过统一接口抽象实现无缝切换。集成新提供商主要工作:实现ChatModel或EmbeddingStore接口,处理 HTTP 调用、错误处理、重试等细节。
LLM 集成模式
所有 LLM 集成遵循相同模式:实现ChatModel接口、使用构建器模式、处理 HTTP 请求/响应、转换数据格式、处理错误和重试。
以 OpenAI 为例:
publicclassOpenAiChatModelimplementsChatModel{privatefinalOpenAiClientclient;privatefinalIntegermaxRetries;@OverridepublicChatResponsedoChat(ChatRequestchatRequest){// 转换格式ChatCompletionRequestopenAiRequest=toOpenAiChatRequest(chatRequest);// 调用 API(带重试)ParsedAndRawResponse<ChatCompletionResponse>response=withRetryMappingExceptions(()->client.chatCompletion(openAiRequest),maxRetries);// 转换响应returnChatResponse.builder().aiMessage(aiMessageFrom(response.parsed())).tokenUsage(tokenUsageFrom(response.parsed())).finishReason(finishReasonFrom(response.parsed())).build();}}关键点:OpenAiClient封装 HTTP 调用,toOpenAiChatRequest()做格式转换,withRetryMappingExceptions()处理重试,最后转换响应为ChatResponse。
集成类关系图
集成方式
两种方式:有官方 SDK 直接用 SDK,没有则用langchain4j-http-client构建 HTTP 请求。实际项目中,OpenAI、Anthropic 等大厂都有官方 SDK,直接用更稳定;小厂或自建服务需要用 HTTP 客户端。
向量存储集成
向量存储集成模式类似,实现EmbeddingStore接口。核心方法:add()添加嵌入向量和原始内容,findRelevant()根据查询向量找最相似的。实现类包括PineconeEmbeddingStore、MilvusEmbeddingStore、InMemoryEmbeddingStore等。
集成流程
集成测试
所有集成必须通过统一测试套件,确保行为一致。ChatModel实现继承AbstractChatModelIT,只需实现models()返回测试实例,基础测试(消息处理、工具调用、流式响应、图片输入、结构化输出、错误处理等)自动运行。这确保了所有集成行为一致。
HTTP 客户端和配置
langchain4j-http-client提供 HTTP 客户端抽象,默认使用 Java 11+ 的java.net.http.HttpClient,也可自定义(OkHttp、Apache HttpClient 等)。
所有集成使用构建器模式:可选参数、链式调用、不可变对象、build()时验证。参数分三层:构建器参数(默认值)、RequestParameters(请求级)、ChatRequest.parameters()(调用级,优先级最高)。
异常处理和重试
不同提供商错误格式不同,需要统一映射(401 认证失败、429 限流、5xx 服务器错误等)。RetryUtils.withRetryMappingExceptions()提供统一重试:捕获可重试异常(网络错误、5xx、429),指数退避,达到最大次数后抛出。可重试:网络错误、5xx、429;不可重试:4xx(除 429)、认证失败。
总结
集成模式设计清晰:统一接口无缝切换、标准化测试确保一致、灵活 HTTP 客户端、构建器模式配置清晰、完善的错误处理和重试。集成新提供商主要工作:实现接口、数据格式转换、HTTP 调用(或官方 SDK)、写集成测试。通过统一抽象,使用体验完全一致。