LangChain4j系列—OpenAI开发实例
一、引入Maven依赖
1、纯Java
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.35.0</version>
</dependency>
2、Spring boot
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId><version>0.35.0</version>
</dependency>
二、API Key
要使用OpenAI模型,您需要一个API密钥。你可以在这里创建一个。
如果您没有自己的OpenAI API密钥,不要担心。您可以暂时使用演示密钥,我们为演示目的免费提供:
String apiKey = "demo";
三、创建 OpenAiChatModel
1、纯Java
ChatLanguageModel model = OpenAiChatModel.builder().apiKey(System.getenv("OPENAI_API_KEY"))....build();
这将使用默认模型参数(例如gpt-3.5-turbo模型名称、0.7温度等)创建OpenAiChatModel的实例。通过在生成器中提供值,可以自定义默认模型参数。
2、Spring Boot
配置application.properties:
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.base-url=...
langchain4j.open-ai.chat-model.custom-headers=...
langchain4j.open-ai.chat-model.frequency-penalty=...
langchain4j.open-ai.chat-model.log-requests=...
langchain4j.open-ai.chat-model.log-responses=...
langchain4j.open-ai.chat-model.logit-bias=...
langchain4j.open-ai.chat-model.max-retries=...
langchain4j.open-ai.chat-model.max-completion-tokens=...
langchain4j.open-ai.chat-model.max-tokens=...
langchain4j.open-ai.chat-model.model-name=...
langchain4j.open-ai.chat-model.organization-id=...
langchain4j.open-ai.chat-model.parallel-tool-calls=...
langchain4j.open-ai.chat-model.presence-penalty=...
langchain4j.open-ai.chat-model.proxy.host=...
langchain4j.open-ai.chat-model.proxy.port=...
langchain4j.open-ai.chat-model.proxy.type=...
langchain4j.open-ai.chat-model.response-format=...
langchain4j.open-ai.chat-model.seed=...
langchain4j.open-ai.chat-model.stop=...
langchain4j.open-ai.chat-model.strict-schema=...
langchain4j.open-ai.chat-model.strict-tools=...
langchain4j.open-ai.chat-model.temperature=...
langchain4j.open-ai.chat-model.timeout=...
langchain4j.open-ai.chat-model.top-p=
langchain4j.open-ai.chat-model.user=...
请参阅上面的一些参数的描述。
此配置将创建OpenAiChatModel bean,它可以由AI服务使用,也可以在需要时自动连接,例如:
@RestController
class ChatLanguageModelController {ChatLanguageModel chatLanguageModel;ChatLanguageModelController(ChatLanguageModel chatLanguageModel) {this.chatLanguageModel = chatLanguageModel;}@GetMapping("/model")public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {return chatLanguageModel.generate(message);}
}
四、结构化输出
工具和JSON模式都支持结构化输出功能。
1、工具的结构化输出
要为工具启用结构化输出功能,请在构建模型时设置.strictTools(true):
OpenAiChatModel.builder()....strictTools(true).build(),
请注意,这将自动使所有工具参数都是必需的(在json模式中是必需的),并为json模式的每个对象设置additionalProperties=false。这是由于当前OpenAI的限制。
2、JSON模式的结构化输出
要为JSON模式启用结构化输出功能,请在构建模型时设置.responseFormat(“JSON_schema”)和.strictJsonSchema(true):
OpenAiChatModel.builder()....responseFormat("json_schema").strictJsonSchema(true).build(),
在这种情况下,AiServices不会在最后一条UserMessage的末尾追加“You must answer strictly In the following JSON format:…”字符串,而是将从给定的POJO创建JSON模式,并将其传递给LLM。请注意,这仅在方法返回类型为POJO时有效。如果返回类型是其他类型(如枚举或List<String>),则应用旧的行为(“You must answer strictly…”)。在不久的将来,将支持所有返回类型。
五、创建OpenAiStreamingChatModel
1、纯Java
OpenAiStreamingChatModel model = OpenAiStreamingChatModel.builder().apiKey(System.getenv("OPENAI_API_KEY"))....build();
2、Spring Boot
添加配置文件:
langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.streaming-chat-model.base-url=...
langchain4j.open-ai.streaming-chat-model.custom-headers=...
langchain4j.open-ai.streaming-chat-model.frequency-penalty=...
langchain4j.open-ai.streaming-chat-model.log-requests=...
langchain4j.open-ai.streaming-chat-model.log-responses=...
langchain4j.open-ai.streaming-chat-model.logit-bias=...
langchain4j.open-ai.streaming-chat-model.max-retries=...
langchain4j.open-ai.streaming-chat-model.max-completion-tokens=...
langchain4j.open-ai.streaming-chat-model.max-tokens=...
langchain4j.open-ai.streaming-chat-model.model-name=...
langchain4j.open-ai.streaming-chat-model.organization-id=...
langchain4j.open-ai.streaming-chat-model.parallel-tool-calls=...
langchain4j.open-ai.streaming-chat-model.presence-penalty=...
langchain4j.open-ai.streaming-chat-model.proxy.host=...
langchain4j.open-ai.streaming-chat-model.proxy.port=...
langchain4j.open-ai.streaming-chat-model.proxy.type=...
langchain4j.open-ai.streaming-chat-model.response-format=...
langchain4j.open-ai.streaming-chat-model.seed=...
langchain4j.open-ai.streaming-chat-model.stop=...
langchain4j.open-ai.streaming-chat-model.strict-schema=...
langchain4j.open-ai.streaming-chat-model.strict-tools=...
langchain4j.open-ai.streaming-chat-model.temperature=...
langchain4j.open-ai.streaming-chat-model.timeout=...
langchain4j.open-ai.streaming-chat-model.top-p=...
langchain4j.open-ai.streaming-chat-model.user=...
六、创建OpenAiModerationModel
1、纯Java
ModerationModel model = OpenAiModerationModel.builder().apiKey(System.getenv("OPENAI_API_KEY"))....build();
2、Spring Boot
langchain4j.open-ai.moderation-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.moderation-model.base-url=...
langchain4j.open-ai.moderation-model.custom-headers=...
langchain4j.open-ai.moderation-model.log-requests=...
langchain4j.open-ai.moderation-model.log-responses=...
langchain4j.open-ai.moderation-model.max-retries=...
langchain4j.open-ai.moderation-model.model-name=...
langchain4j.open-ai.moderation-model.organization-id=...
langchain4j.open-ai.moderation-model.proxy.host=...
langchain4j.open-ai.moderation-model.proxy.port=...
langchain4j.open-ai.moderation-model.proxy.type=...
langchain4j.open-ai.moderation-model.timeout=...
七、创建OpenAiTokenizer
1、纯Java
Tokenizer tokenizer = new OpenAiTokenizer();
// or
Tokenizer tokenizer = new OpenAiTokenizer("gpt-4o");
2、Spring Boot
OpenAiTokenizer bean由Spring Boot启动器自动创建。