跳到主要内容

OpenAI 兼容语言模型

许多服务和工具暴露 OpenAI 兼容的 API。在 LangChain4j 中使用它们的一般方法是:

  1. 确定 Base URL: 找到该服务的 API 端点。通常以 /v1 结尾。

  2. 获取 API Key: 如果服务需要身份验证,请获取 API 密钥。如果是本地服务且不需要密钥,则在 apiKey 参数中放入占位符。

  3. 指定模型名称: 确定该服务应使用的正确模型名称。这通常是必需的。

  4. 配置 OpenAiChatModelOpenAiStreamingChatModel

    ChatModel model = OpenAiChatModel.builder()
    .baseUrl("YOUR_API_BASE_URL") // e.g., "http://localhost:8000/v1"
    .apiKey("YOUR_API_KEY_OR_PLACEHOLDER") // e.g., "sk-yourkey" or "none"
    .modelName("MODEL_NAME_AS_PER_PROVIDER_DOCS") // e.g., "gpt-3.5-turbo" or custom name
    // Add other configurations like temperature, timeout, etc. as needed
    .logRequests(true)
    .logResponses(true)
    .build();

特定 OpenAI 兼容 API 的配置

某些 OpenAI 兼容 API 在流式响应(尤其是工具调用)方面的行为可能不同。LangChain4j 提供配置选项来处理这些差异:

accumulateToolCallId(用于 OpenAiStreamingChatModel

控制流式响应中工具调用 ID 的处理方式。默认值为 true

  • 启用(true:工具调用 ID 会跨流式分块累积(标准 OpenAI 行为)
    • 示例:分块 1 发送 "abc",分块 2 发送 "def" → 最终 ID:"abcdef"
  • 禁用(false:每个分块的工具调用 ID 会替换前一个
    • 示例:分块 1 发送 "abc",分块 2 发送 "abc" → 最终 ID:"abc"
    • 适用于 DeepSeek 或 Qwen 等在每个分块中发送完整工具调用 ID 的 API
StreamingChatModel model = OpenAiStreamingChatModel.builder()
.baseUrl("https://api.deepseek.com/v1") // or other provider
.apiKey("YOUR_API_KEY")
.modelName("deepseek-chat")
.accumulateToolCallId(false) // Set to false for DeepSeek, Qwen, etc.
.build();

下面我们提供面向流行 OpenAI 兼容 API 的具体示例,包括 Tuning Engines、Groq、Docker Model Runner、GPT4All、Ollama 和 LM Studio。

目录:

使用 OpenAI 兼容语言模型的前置条件

LangChain4j 的 OpenAI 模块可用于各种 OpenAI 兼容 API,包括本地和基于云的解决方案。对于下面的每个模型,我们展示如何创建 ChatModel,然后你就可以像 标准 OpenAI 示例 一样与模型聊天。

首先,确保在 pom.xml 或 Gradle 构建文件中包含 OpenAI 模块:

纯 Java

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.18.1</version>
</dependency>

Spring Boot

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.18.1-beta28</version>
</dependency>

Tuning Engines

部署方式: SaaS(需要密钥)

描述: Tuning Engines 暴露一个可位于模型提供商前方的 OpenAI 兼容端点。LangChain4j 保留应用与智能体逻辑,而该端点可集中路由、策略控制、审计日志、追踪、审批和成本可见性。

ChatModel model = OpenAiChatModel.builder()
.baseUrl("https://api.tuningengines.com/v1")
.apiKey(System.getenv("TUNING_ENGINES_API_KEY"))
.modelName("gpt-4o-mini")
.build();

Groq

部署方式: SaaS(需要密钥)

描述: Groq 为 LLM 提供非常快速的推理。

设置: 要使用 Groq,你需要来自 GroqCloud 的 API 密钥。

配置 LangChain4j 的 OpenAiChatModelOpenAiStreamingChatModel

ChatModel model = OpenAiChatModel.builder()
.baseUrl("https://api.groq.com/openai/v1")
.apiKey(System.getenv("GROQ_API_KEY")) // Or your actual key
.modelName("llama3-8b-8192") // Or any other model offered by Groq, e.g., mixtral-8x7b-32768, llama3-70b-8192
.temperature(0.0)
.build();

可在 Groq 模型页面 上查找可用模型名称。

Docker Model Runner

部署方式: 本地

描述: Docker Model Runner 允许你使用 Docker Desktop 在本地运行 LLM(底层使用 llama.cpp,并可使用 CPU)。这适用于开发、测试或离线使用。支持 Mac 和 Windows。

设置:

  1. 安装 Docker Desktop
  2. 在 Docker Desktop 中启用 Docker Model Runner 功能(Settings > Experimental Features > Enable Docker Model Runner)
  3. 在其正下方,勾选 "Enable host-side TCP support"。
  4. 使用 Docker Model Runner CLI 拉取模型,例如 docker model pull ai/qwen3,或从 此列表 中的其他模型。

ai/qwen3 的示例(关于该模型的更多信息见 此处):

ChatModel model = OpenAiChatModel.builder()
.baseUrl("http://localhost:12434/engines/llama.cpp/v1")
.modelName("ai/qwen3")
.build();

某些模型支持工具调用,详情见 docker 模型页面。

GPT4All

部署方式: 本地

描述: GPT4All 提供桌面应用,可在本机运行开源 LLM。它也可以暴露 OpenAI 兼容 API。

设置:

  1. https://gpt4all.io/ 下载并安装 GPT4All。
  2. 启动 GPT4All,并通过其 UI 下载所需模型,例如 llama-3.2-1b-instruct
  3. 在 GPT4All 设置中启用 "Web Server" 模式("Settings" > "Application" > Advanced 下:"Enable Local API Server")。
  4. 记下 GPT4All 中显示的 IP 地址和端口(通常为 http://localhost:4891/v1)。
  5. 配置 LangChain4j:
ChatModel model = OpenAiChatModel.builder()
.baseUrl("http://localhost:4891/v1")
.modelName("llama-3.2-1b-instruct") // The model name might be derived from the model loaded in GPT4All UI or configurable. Check GPT4All docs.
.build();

Ollama

虽然 LangChain4j 有专用的 langchain4j-ollama 模块(见 Ollama 文档),你也可以如上所示使用 OpenAI 模块连接到 Ollama 的 OpenAI 兼容端点。

部署方式: 本地

描述: Ollama 允许你在本地运行开源大语言模型,例如 Llama 3、Mistral 等。它提供 OpenAI 兼容的 API 端点。

设置:

  1. https://ollama.ai/ 安装 Ollama。
  2. 使用命令行拉取模型:ollama pull <model_name>(例如 ollama pull gemma3)。
  3. 确保 Ollama 正在运行。它在 http://localhost:11434/v1/ 提供 OpenAI 兼容 API。
  4. 配置 LangChain4j:
ChatModel model = OpenAiChatModel.builder()
.baseUrl("http://localhost:11434/v1/")
.modelName("gemma3")
.build();

示例:

LM Studio

部署方式: 本地

描述: LM Studio 提供 UI 来发现、下载并运行本地 LLM。它还提供 OpenAI 兼容的本地服务器。

设置:

  1. https://lmstudio.ai/ 下载并安装 LM Studio。
  2. 通过 LM Studio UI(Search 选项卡)下载所需模型,例如 smollm2-135m-instruct
  3. 转到 "Developer" 选项卡(左侧类似 >_ 的图标),并将服务器状态切换为 'running'
  4. 服务器运行后,你会在右上角看到地址(例如 http://127.0.0.1:1234)。或者,cURL 调用也会给出完整 URL。
  5. 目前 LM Studio 不支持 HTTP2,因此我们需要强制使用 HTTP1.1。为此,需要添加正确的 maven 或 gradle 依赖:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-http-client-jdk</artifactId>
<version>1.18.1</version>
</dependency>
  1. 配置 LangChain4j 并指定 httpClientBuilder
import java.net.http.HttpClient;
import dev.langchain4j.http.client.jdk.JdkHttpClientBuilder;
import dev.langchain4j.http.client.jdk.JdkHttpClient;

...

HttpClient.Builder httpClientBuilder = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1) ;

JdkHttpClientBuilder jdkHttpClientBuilder = JdkHttpClient.builder()
.httpClientBuilder(httpClientBuilder);

ChatModel model = OpenAiChatModel.builder()
.baseUrl("http://127.0.0.1:1234/v1")
.modelName("smollm2-135m-instruct")
.httpClientBuilder(jdkHttpClientBuilder)
.build();