使用 原始 HTTP 客户端(如 Apache HttpClient 或 OkHttp)、Spring AI 和 LangChain4j 开发 AI 应用的主要差异,包括功能特性、开发效率、可扩展性等

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


一、技术选型对比概览

特性原始 HttpClient/OkHttpSpring AILangChain4j
抽象层级低(直接调用 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/OkHttpSpring AILangChain4j
请求控制完全可控封装好封装好
提示工程支持强大
记忆管理支持支持
工具调用有限支持支持
模型抽象支持多模型支持多模型
开发难度
可维护性
推荐场景快速调试、轻量级应用Spring Boot 项目复杂 AI Agent、LLM 编排

四、结论建议

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱的叹息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值