OpenAI 兼容语言模型
许多服务和工具暴露 OpenAI 兼容的 API。在 LangChain4j 中使用它们的一般方法是:
-
确定 Base URL: 找到该服务的 API 端点。通常以
/v1结尾。 -
获取 API Key: 如果服务需要身份验证,请获取 API 密钥。如果是本地服务且不需要密钥,则在
apiKey参数中放入占位符。 -
指定模型名称: 确定该服务应使用的正确模型名称。这通常是必需的。
-
配置
OpenAiChatModel或OpenAiStreamingChatModel: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 的 OpenAiChatModel 或 OpenAiStreamingChatModel:
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。
设置:
- 安装 Docker Desktop
- 在 Docker Desktop 中启用 Docker Model Runner 功能(Settings > Experimental Features > Enable Docker Model Runner)
- 在其正下方,勾选 "Enable host-side TCP support"。
- 使用 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。
设置:
- 从 https://gpt4all.io/ 下载并安装 GPT4All。
- 启动 GPT4All,并通过其 UI 下载所需模型,例如
llama-3.2-1b-instruct。 - 在 GPT4All 设置中启用 "Web Server" 模式("Settings" > "Application" > Advanced 下:"Enable Local API Server")。
- 记下 GPT4All 中显示的 IP 地址和端口(通常为
http://localhost:4891/v1)。 - 配置 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 端点。
设置:
- 从 https://ollama.ai/ 安装 Ollama。
- 使用命令行拉取模型:
ollama pull <model_name>(例如ollama pull gemma3)。 - 确保 Ollama 正在运行。它在
http://localhost:11434/v1/提供 OpenAI 兼容 API。 - 配置 LangChain4j:
ChatModel model = OpenAiChatModel.builder()
.baseUrl("http://localhost:11434/v1/")
.modelName("gemma3")
.build();
示例:
- 对于 OpenAI 兼容端点用法,可改编通用 OpenAI 示例。
- 使用专用 Ollama 模块:langchain4j-examples/.../OllamaChatModelExamples.java
LM Studio
部署方式: 本地
描述: LM Studio 提供 UI 来发现、下载并运行本地 LLM。它还提供 OpenAI 兼容的本地服务器。
设置:
- 从 https://lmstudio.ai/ 下载并安装 LM Studio。
- 通过 LM Studio UI(Search 选项卡)下载所需模型,例如
smollm2-135m-instruct。 - 转到 "Developer" 选项卡(左侧类似
>_的图标),并将服务器状态切换为 'running' - 服务器运行后,你会在右上角看到地址(例如
http://127.0.0.1:1234)。或者,cURL 调用也会给出完整 URL。 - 目前 LM Studio 不支持 HTTP2,因此我们需要强制使用 HTTP1.1。为此,需要添加正确的 maven 或 gradle 依赖:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-http-client-jdk</artifactId>
<version>1.18.1</version>
</dependency>
- 配置 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();