LlmKit

io.llmkit

入口门面类,通过 Java ServiceLoader (SPI) 自动发现 classpath 上的提供商模块,提供创建客户端的静态工厂方法。

静态方法
方法返回值说明
create(String apiKey) LlmClient 使用 API Key 创建默认客户端(使用第一个可用提供商)
builder(String providerName) LlmClientBuilder 为指定提供商创建构建器,可链式配置参数
providers() List<String> 列出所有已注册的提供商名称
Java
// 快速创建 — 使用默认提供商
LlmClient client = LlmKit.create("sk-xxx");

// 指定提供商 + 完整配置
LlmClient client = LlmKit
    .builder(Providers.OPENAI)
    .apiKey("sk-xxx")
    .model("gpt-4o")
    .build();

// 查看可用提供商
List<String> names = LlmKit.providers();
// → ["openai", "anthropic", "deepseek", ...]
接口

LlmClient

io.llmkit

核心客户端接口,实现 AutoCloseable。提供同步对话、流式对话和一次性对话三种调用方式。

方法
方法返回值说明
chat(ChatRequest request) ChatResponse 同步对话补全,发送请求并返回完整响应
chatStream(ChatRequest request, StreamListener listener) void 流式对话,通过 StreamListener 回调逐块接收响应
chat(String message) String 一次性便捷方法,发送单条消息并直接返回文本内容
Java
// 一次性对话
String answer = client.chat("What is quantum computing?");

// 完整请求
ChatResponse response = client.chat(ChatRequest.builder()
    .messages(ChatMessage.user("Hello"))
    .build());
System.out.println(response.content());
接口

LlmClientBuilder

io.llmkit

客户端构建器接口,通过 LlmKit.builder(name) 获取。支持链式调用配置客户端参数。

构建器方法
方法参数类型说明
apiKey(String) String 设置 API 密钥(必填)
model(String) String 设置模型名称,默认使用提供商的默认模型
baseUrl(String) String 覆盖默认 API 地址,可用于代理或本地模型(如 Ollama)
timeout(Duration) Duration 设置请求超时时间
retry(RetryPolicy) RetryPolicy 设置重试策略,遇到 429 或 5xx 自动重试
build() LlmClient 构建并返回 LlmClient 实例
Java
LlmClient client = LlmKit
    .builder(Providers.ANTHROPIC)
    .apiKey("sk-ant-xxx")
    .model("claude-sonnet-4-20250514")
    .baseUrl("https://api.anthropic.com")
    .timeout(Duration.ofSeconds(60))
    .retry(RetryPolicy.defaults())
    .build();
接口

StreamListener

io.llmkit

流式响应回调接口,用于 chatStream() 方法中逐块接收模型的输出。

回调方法
方法参数说明
onChunk(ChatChunk) ChatChunk 每收到一个流式数据块时调用
onComplete(ChatResponse) ChatResponse 流式输出完成时调用,传入完整响应
onError(Throwable) Throwable 发生错误时调用
Java
client.chatStream(request, new StreamListener() {
    @Override
    public void onChunk(ChatChunk chunk) {
        System.out.print(chunk.delta());
    }

    @Override
    public void onComplete(ChatResponse response) {
        System.out.println("\nDone");
    }

    @Override
    public void onError(Throwable e) {
        e.printStackTrace();
    }
});

RetryPolicy

io.llmkit

重试策略配置,用于在遇到 HTTP 429(速率限制)或 5xx(服务端错误)时自动重试。采用指数退避算法。

字段
字段类型默认值说明
maxRetries int 3 最大重试次数
initialDelayMs long 1000 首次重试前的等待时间(毫秒)
backoffMultiplier double 2.0 退避倍数,每次重试等待时间乘以此值
maxDelayMs int 30000 最大等待时间上限(毫秒)
静态方法
方法说明
builder() 创建 Builder 实例
defaults() 返回默认重试策略(3 次重试,1 秒初始延迟,2 倍退避)
Java
// 使用默认策略
RetryPolicy policy = RetryPolicy.defaults();

// 自定义策略
RetryPolicy policy = RetryPolicy.builder()
    .maxRetries(5)
    .initialDelayMs(2000)
    .backoffMultiplier(2.5)
    .maxDelayMs(60000)
    .build();

Providers

io.llmkit

内置提供商名称常量,用于 LlmKit.builder(name) 调用时避免硬编码字符串。

常量
常量提供商
Providers.OPENAI"openai"OpenAI
Providers.ANTHROPIC"anthropic"Anthropic
Providers.DEEPSEEK"deepseek"DeepSeek
Providers.GLM"glm"智谱 AI (GLM)
Providers.QWEN"qwen"通义千问 (DashScope)
Providers.MINIMAX"minimax"MiniMax
Providers.KIMI"kimi"Moonshot AI (Kimi)

ChatRequest

io.llmkit.model

不可变的对话请求模型,通过 Builder 模式构建。包含对话消息、模型参数和工具定义。

字段
字段类型说明
modelString模型名称,不设置时使用客户端默认模型
messagesList<ChatMessage>对话消息列表,按顺序排列
temperatureDouble采样温度,0.0 ~ 2.0,值越高输出越随机
maxTokensInteger生成的最大 token 数量
toolsList<ToolDefinition>可调用的工具/函数定义列表
topPDouble核采样参数 (nucleus sampling)
seedInteger随机种子,用于可复现的输出
stopList<String>停止序列列表,模型遇到这些字符串时停止生成
logprobsBoolean是否返回 token 的对数概率
topLogprobsInteger每个 token 返回的前 N 个对数概率 (0~20)
responseFormatString响应格式设置,支持 text、json_object、json_schema
工厂方法(responseFormat)
方法说明
jsonResponseFormat()设置响应格式为 JSON 对象模式
textResponseFormat()设置响应格式为纯文本模式
schemaResponseFormat(name, jsonSchema)设置响应格式为 JSON Schema 结构化输出
Java
ChatRequest request = ChatRequest.builder()
    .model("gpt-4o")
    .messages(
        ChatMessage.system("You are a helpful assistant"),
        ChatMessage.user("Explain quantum computing")
    )
    .temperature(0.7)
    .maxTokens(1024)
    .responseFormat(ChatRequest.jsonResponseFormat())
    .build();

ChatResponse

io.llmkit.model

不可变的对话响应模型,包含一个或多个 Choice、Token 用量和模型信息。

字段
字段类型说明
idString响应唯一标识
choicesList<Choice>生成的回复选项列表
usageUsageToken 用量统计
modelString实际使用的模型名称
便捷方法
方法返回值说明
content()String获取第一个 Choice 的文本内容,无内容时返回 null

Choice 嵌套类

字段类型说明
indexint选项索引
messageChatMessage生成的消息(包含内容或工具调用)
finishReasonString结束原因:stop、length、tool_calls
logprobsChoiceLogprobsToken 对数概率信息

ChatMessage

io.llmkit.model

不可变的对话消息模型,每条消息包含角色、内容,以及可选的工具调用信息。

Role 枚举

说明
SYSTEM系统指令,设定模型行为
USER用户输入的消息
ASSISTANT模型生成的回复
TOOL工具执行结果,反馈给模型
字段
字段类型说明
roleRole消息角色
contentString消息文本内容
toolCallsList<ToolCall>模型发起的工具调用列表(仅 ASSISTANT 角色)
toolCallIdString对应的工具调用 ID(仅 TOOL 角色)
工厂方法
方法说明
system(String content)创建 SYSTEM 角色消息
user(String content)创建 USER 角色消息
assistant(String content)创建 ASSISTANT 角色消息
toolResult(String toolCallId, String content)创建 TOOL 角色消息,包含工具调用 ID 和执行结果
Java
// 多轮对话
ChatRequest request = ChatRequest.builder()
    .messages(
        ChatMessage.system("You are a translator"),
        ChatMessage.user("Translate to French: Hello"),
        ChatMessage.assistant("Bonjour"),
        ChatMessage.user("Thank you")
    )
    .build();

ChatChunk

io.llmkit.model

不可变的流式响应数据块,在 StreamListener.onChunk() 回调中使用。

字段
字段类型说明
idString响应流唯一标识
choicesList<ChunkChoice>流式选项列表
便捷方法
方法返回值说明
delta()String获取第一个 Choice 的增量文本内容

ChunkChoice 嵌套类

字段类型说明
indexint选项索引
deltaChatMessage增量消息内容
finishReasonString结束原因,最后一个块为 stop/length/tool_calls

ToolDefinition

io.llmkit.model

工具/函数定义,描述模型可以调用的外部工具。通过 Builder 模式构建。

字段
字段类型说明
nameString工具名称
descriptionString工具功能描述,帮助模型决定何时调用
parametersStringJSON Schema 格式的参数定义
Java
ToolDefinition tool = ToolDefinition.builder()
    .name("get_weather")
    .description("Get current weather for a location")
    .parameters("{"type":"object"," +
        ""properties":{" +
          ""location":{"type":"string","description":"City name"}" +
        "}," +
        ""required":["location"]"})
    .build();

ToolCall

io.llmkit.model

模型发起的工具调用,包含在 ASSISTANT 角色的 ChatMessage 中。

字段
字段类型说明
idString工具调用的唯一标识
nameString调用的工具名称
argumentsString模型生成的 JSON 格式调用参数

ToolResult

io.llmkit.model

工具执行结果,用于将工具调用结果反馈给模型以继续对话。

字段
字段类型说明
toolCallIdString对应的工具调用 ID
contentString工具执行结果内容
isErrorboolean是否为错误结果,默认 false
Java
// 完整的 Tool Calling 流程
ChatResponse response = client.chat(request);

if (response.content() == null) {
    ToolCall call = response.getChoices().get(0)
        .getMessage().getToolCalls().get(0);

    // 执行你的工具函数...
    String result = executeTool(call.getName(), call.getArguments());

    // 将结果反馈给模型
    ChatRequest followUp = ChatRequest.builder()
        .messages(
            response.getChoices().get(0).getMessage(),
            ChatMessage.toolResult(call.getId(), result)
        )
        .build();

    ChatResponse finalResp = client.chat(followUp);
    System.out.println(finalResp.content());
}

Usage

io.llmkit.model

Token 用量统计,包含在 ChatResponse 中。

字段
字段类型说明
promptTokensint输入 prompt 消耗的 token 数
completionTokensint生成回复消耗的 token 数
totalTokensint总消耗 token 数

ChoiceLogprobs

io.llmkit.model

Token 级别的对数概率信息,需在 ChatRequest 中设置 logprobs=true 开启。

字段
字段类型说明
contentList<TokenLogprob>每个生成 token 的对数概率信息

TokenLogprob 嵌套类

字段类型说明
tokenString生成的 token 文本
logprobdouble该 token 的对数概率
topLogprobsList<TopLogprob>前 N 个候选 token 及其概率

TopLogprob 嵌套类

字段类型说明
tokenString候选 token 文本
logprobdouble该候选 token 的对数概率