以下是使用 原始 HTTP 客户端(如 Apache HttpClient 或 OkHttp)Spring AILangChain4j 开发 AI 应用的主要差异,包括功能特性、开发效率、可扩展性等方面,并附有完整的代码示例和详细注释。
在这里插入图片描述


一、技术选型对比概览

特性 原始 HttpClient/OkHttp Spring AI LangChain4j
抽象层级 低(直接调用 API) 中高(封装模型调用逻辑) 高(提供链式结构与提示工程支持)
模型适配能力 手动处理请求/响应 支持 OpenAI、Anthropic 等主流模型 支持 LLM、Chat Model、Embedding 等多种模型
提示工程支持 基础支持(Prompt, PromptTemplate) 强大(PromptTemplate, Chain, Memory, Tool)
工具集成 需手动集成 可通过 Spring Boot 自动配置 支持自定义工具(Tool)
内存管理 可通过 ChatMemory 实现上下文保持 支持 ChatMemory
可维护性 较低(需手动处理错误、序列化等) 高(依赖注入 + 统一接口) 高(模块化设计 + 可插拔组件)
学习曲线 低(适合熟悉 REST 调用的开发者) 高(涉及 AI 编排概念)
社区生态 成熟通用 HTTP 客户端 Spring 生态整合良好 Java 领域专用 AI 框架

二、完整代码示例

1. 使用原始 OkHttp 调用 OpenAI ChatGPT 接口

import okhttp3.*;

import java.io.IOException;

public class RawHttpClientExample {

    // 替换为你的 OpenAI API Key
    private static final String API_KEY = "your_openai_api_key";
    private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");

    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        // 构建请求体 JSON
        String jsonBody = "{\n" +
                "  \"model\": \"gpt-3.5-turbo\",\n" +
                "  \"messages\": [\n" +
                "    {\"role\": \"user\", \"content\": \"你好,请介绍一下你自己\"}\n" +
                "  ]\n" +
                "}";

        RequestBody body = RequestBody.create(jsonBody, JSON);

        // 构建请求
        Request request = new Request.Builder()
                .url("https://api.openai.com/v1/chat/completions")
                .post(body)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

⚠️ 注意事项:

  • 需要手动处理 JSON 序列化与反序列化。
  • 错误处理、重试机制等都需要自己实现。
  • 不具备提示模板、记忆等功能。

2. 使用 Spring AI 调用 OpenAI

Maven 依赖:
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>0.8.0</version>
</dependency>
示例代码:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
public class SpringAiService {

    @Value("${spring.ai.openai.api-key}")
    private String apiKey;

    private final ChatClient chatClient;

    public SpringAiService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    public String askQuestion(String question) {
        return chatClient
                .prompt()
                .user(userSpec -> userSpec.text(question))
                .call()
                .content();
    }
}
application.yml 配置:
spring:
  ai:
    openai:
      api-key: your_openai_api_key
      model: gpt-3.5-turbo

✅ 优势:

  • 自动封装了模型调用逻辑。
  • 支持提示模板、记忆、流式输出等高级功能。
  • 易于集成到 Spring Boot 应用中。

3. 使用 LangChain4j 调用 OpenAI

Maven 依赖:
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai</artifactId>
    <version>0.24.0</version>
</dependency>
示例代码:
import dev.langchain4j.chain.ConversationalRetrievalChain;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.InMemoryChatMemory;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.retriever.EmbeddingStoreRetriever;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;

public class LangChain4jExample {

    public static void main(String[] args) {
        // 创建聊天模型
        OpenAiChatModel chatModel = OpenAiChatModel.withApiKey("your_openai_api_key");

        // 创建记忆存储
        ChatMemory chatMemory = InMemoryChatMemory.withMaxMessages(10);

        // 创建 Embedding Store(用于检索)
        EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
        EmbeddingModel embeddingModel = dev.langchain4j.model.openai.OpenAiEmbeddingModel.withApiKey("your_openai_api_key");

        // 构建检索器
        EmbeddingStoreRetriever retriever = EmbeddingStoreRetriever.from(embeddingStore, embeddingModel);

        // 构建问答链
        ConversationalRetrievalChain chain = ConversationalRetrievalChain.builder()
                .chatLanguageModel(chatModel)
                .retriever(retriever)
                .chatMemory(chatMemory)
                .build();

        // 添加文档内容(模拟知识库)
        Document document = Document.from("Java 是一种广泛使用的编程语言,由 Sun Microsystems 在 1995 年发布。");
        embeddingStore.add(embeddingModel.embed(document.content()).content());

        // 进行问答
        String answer = chain.invoke("Java 是什么?");
        System.out.println(answer);
    }
}

✅ 优势:

  • 支持记忆、检索、工具调用等复杂流程。
  • 支持链式结构,便于构建复杂的 AI Agent。
  • 提供模块化的组件,易于扩展。

三、总结表格

功能点 原始 HttpClient/OkHttp Spring AI LangChain4j
请求控制 完全可控 封装好 封装好
提示工程 支持 强大
记忆管理 支持 支持
工具调用 有限支持 支持
模型抽象 支持多模型 支持多模型
开发难度
可维护性
推荐场景 快速调试、轻量级应用 Spring Boot 项目 复杂 AI Agent、LLM 编排

四、结论建议

  • 原始 HTTP 客户端:适合快速验证或轻量级项目,但不推荐用于生产级 AI 应用。
  • Spring AI:适合已有 Spring Boot 项目,希望快速接入 AI 模型并具备基本编排能力。
  • LangChain4j:适合需要复杂编排、记忆、工具调用的 AI 应用,如智能客服、Agent、RAG 系统等。

如果你正在开发一个长期维护的 AI 应用,推荐使用 LangChain4jSpring AI 来提升开发效率和系统可维护性。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐