# java-openai-sdk **Repository Path**: liu-qi-start/java-openai-sdk ## Basic Information - **Project Name**: java-openai-sdk - **Description**: 1、使用java开发语言,开发openai api接口调用支持 2、使用httpclient5发起openai api接口调用 3、使用fastjson序列化与反序列化 4、支持文本生成(completions)、对话(/chat/completions)、向量化(embeddings) 5、支持流式响应,并做好了流式响应块数据合并。 6、支持tool call外部工具调用 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-06-28 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-openai-sdk #### 介绍 - 使用java开发语言,开发openai api接口调用支持 - 使用httpclient5发起openai api接口调用 - 使用fastjson序列化与反序列化 - 支持文本生成(completions)、对话(/chat/completions)、向量化(embeddings) - 支持流式响应,并做好了流式响应块数据合并。 - 支持tool call外部工具调用 - 支持链式与AI对话 #### 软件架构 ``` com.liuqi.openai.core 核心部分 ├── client: 对接openai api的客户端 │ └── OpenAiClient: openai api 接口描述 │ └── Executor: 发起http openai请求的执行器 │ └── StreamHandler: 流式响应的回调接口 │ └── AbstractOpenAiClient: 提供了构建openai客户端的构建基本参数 │ └── httpclient: 使用httpclient5实现http接口调用 ├── chat: 对话(/chat/completions) 请求参数与响应参数的描述 │ └── ChatCompletionRequest: 对话接口请求参数 │ └── ChatCompletionResponse: 对话接口响应参数 ├── completion: 文本生成(completions) 请求参数与响应参数的描述 │ └── CompletionRequest: 文本生成接口请求参数 │ └── CompletionResponse: 文本生成接口响应参数 ├── embedding: 向量化(embeddings) 请求参数与响应参数的描述 │ └── EmbeddingRequest: 向量化接口请求参数 │ └── EmbeddingResponse: 向量化接口响应参数 ├── shared: api接口公共的 请求参数与响应参数的描述 │ └── StreamOptions: stream_options 请求参数 │ └── Usage: usage 响应参数(usage), 描述tokens计量 ├── merge: 流式响应数据块合并 │ └── MergeChunkChatCompletion: 对话(/chat/completions)接口 流式响应数据块合并 │ └── MergeChunkCompletion: 文本生成(completions)接口 流式响应数据块合并 com.liuqi.openai.data: openai所需要使用到的数据 ├── message: openai 交互消息 │ └── ChatMessage: openai 交互消息父类 │ └── AiMessage: AI消息 │ └── SystemMessage: 系统消息 │ └── ToolResultMessage: 工具调用 │ └── UserMessage: 用户消息 │ └── ChatMessageType: 消息类型 com.liuqi.openai.memory: 对话缓存/记忆 ├── chat: 对话缓存/记忆 │ └── MessageWindowChatMemory: 最大窗口限制缓存器 com.liuqi.openai.model: 对openai client进行简化封装,简化openai api的调用。支持在model配置模型入参,后续调用opanai api,参数都会带上 ├── handler: 流式响应回调 │ └── StreamingResponseHandler: 思考内容、内容、完成、错误 的回调 ├── input: Prompt的格式化 │ └── Prompt: Prompt │ └── PromptTemplate: Prompt模板,使用Mustache模板引擎解析 ├── output: Ai 模型的统一格式输出 │ └── Response: Ai 模型的统一格式输出 │ └── TokenUsage: Token 使用 │ └── FinishReason: finish_reason 参数描述 ├── OpenAiChatModel: 对话模型 ├── OpenAiCompletionModel: 文本生成模型 ├── OpenAiEmbeddingModel: 向量化模型 com.liuqi.openai.tool: 定义外部工具调用 ├── CustomTool: 自定义工具 ├── webhook: webhook工具调用 │ └── WebHook: webhook工具调用描述 │ └── WebHookTool: 内置的webhook工具,实现http远程调用. com.liuqi.openai.util: 工具包 ``` #### 测试用例 ``` 测试用例引用了logback作为日志输出,在resources目录下的logback.xml进行配置。 设置 trace级别,观察项目中的日志输出 ``` #### 测试用例 opanai client 文本生成(/completion)、对话(/chat/completion)、向量化(/embedding)。 文本生成和对话包含流式与非流式的调用 [HttpClient5使用的openai客户端 TestClient](src/test/java/test/openai/client/TestClient.java) #### 测试用例 model 对openai client进行简化封装,简化openai api的调用。 在模型中一次性把入参进行配置,后续在发起openai api请求时,都会把入参带上,无效每次请求都进行设置。 - [对话模型:TestOpenAiChatModel](src/test/java/test/openai/model/TestOpenAiChatModel.java) - [文本生成模型:TestOpenAiCompletionModel](src/test/java/test/openai/model/TestOpenAiCompletionModel.java) - [向量化处理模型:TextOpenAiEmbeddingModel](src/test/java/test/openai/model/TextOpenAiEmbeddingModel.java)