Perplexity AI

Perplexity AI 提供了一项独特的 AI 服务,该服务将其语言模型与实时搜索能力相结合。它提供了多种模型,并支持流式响应以用于对话式 AI。

Spring AI 通过与 Perplexity AI 集成,复用现有的 OpenAI 客户端。要开始使用,您需要获取一个 Perplexity API 密钥 ,配置基础 URL,并选择一种支持的 模型 。

Perplexity API 并未完全兼容 OpenAI API。Perplexity 将实时网络搜索结果与其语言模型的响应相结合。与 OpenAI 不同,Perplexity 并未开放 toolCalls—— 即函数调用机制。此外,目前 Perplexity 还不支持多模态消息。

前提条件(Prerequisites)

  • 创建 API 密钥: 访问 此处 以生成 API 密钥。 在您的 Spring AI 项目中,通过配置 spring.ai.openai.api-key 属性来使用它。
  • 设置 Perplexity 基础 URL: 将 spring.ai.openai.base-url 属性设置为 api.perplexity.ai
  • 选择 Perplexity 模型: 使用 spring.ai.openai.chat.model=< 模型名称 & gt; 属性来指定模型。 参考 支持的模型 以获取可用选项。
  • 设置聊天完成路径: 将 spring.ai.openai.chat.completions-path设置为 /chat/completions

您可以在 application.properties 文件中设置这些配置属性:

spring.ai.openai.api-key=<your-perplexity-api-key>
spring.ai.openai.base-url=https://api.perplexity.ai
spring.ai.openai.chat.model=llama-3.1-sonar-small-128k-online
spring.ai.openai.chat.completions-path=/chat/completions

为了在处理敏感信息(如 API 密钥)时增强安全性,您可以使用 Spring 表达式语言(SpEL)引用自定义环境变量:

# In application.yml
spring:
  ai:
    openai:
      api-key: ${PERPLEXITY_API_KEY}
      base-url: ${PERPLEXITY_BASE_URL}
      chat:
        model: ${PERPLEXITY_MODEL}
        completions-path: ${PERPLEXITY_COMPLETIONS_PATH}
# In your environment or .env file
export PERPLEXITY_API_KEY=<your-perplexity-api-key>
export PERPLEXITY_BASE_URL=https://api.perplexity.ai
export PERPLEXITY_MODEL=llama-3.1-sonar-small-128k-online
export PERPLEXITY_COMPLETIONS_PATH=/chat/completions

添加存储库和 BOM

Spring AI 工件发布在 Spring MilestoneSnapshot 存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。

为了帮助进行依赖管理,Spring AI 提供了 BOM(物料清单),以确保在整个项目中使用一致的 Spring AI 版本。请参阅依赖管理部分将 Spring AI BOM 添加到您的构建系统。

自动配置(Auto-configuration)

Spring AI 为 OpenAI 聊天模型提供 Spring Boot 自动配置。要启用它,请在项目的 Maven pom.xml文件中添加以下依赖项:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

或者,在你的 Gradle 构建文件 build.gradle 中添加:

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-openai'
}

聊天属性(Chat Properties)

Retry 属性(Retry Properties)

前缀 spring.ai.retry 用作属性前缀,允许您为 OpenAI 模型配置 retry 机制。

属性 描述 默认值
spring.ai.retry.max-attempts 最大重试次数。 10
spring.ai.retry.backoff.initial-interval 指数退避策略的初始睡眠持续时间。 2 sec.
spring.ai.retry.backoff.multiplier 退避间隔乘数。 5
spring.ai.retry.backoff.max-interval 最大退避持续时间。 3 min.
spring.ai.retry.on-client-errors 如果为false,抛出NonTransientAiException,并且不会对4xx客户端错误码进行重试。 false
spring.ai.retry.exclude-on-http-codes 不应触发重试的HTTP状态码列表(例如抛出NonTransientAiException)。 empty
spring.ai.retry.on-http-codes 应触发重试的HTTP状态码列表(例如抛出TransientAiException)。 empty
连接属性(Connection Properties)

前缀是 spring.ai.openai 的属性,用于配置 OpenAI 的链接。

属性 描述 默认值
spring.ai.openai.base-url 连接URL。必须设置为https://api.groq.com/openai -
spring.ai.openai.api-key Groq API密钥 -
配置属性(Configuration Properties)

前缀是 spring.ai.openai.chat 的属性,用于配置 OpenAI 的 ChatModel 实现。

属性 描述 默认值
spring.ai.openai.chat.enabled (已移除且不再有效) 启用OpenAI聊天模型 true
spring.ai.openai.chat 启用OpenAI聊天模型 openai
spring.ai.openai.chat.base-url 可选覆盖spring.ai.openai.base-url提供特定聊天URL。必须设置为https://api.groq.com/openai -
spring.ai.openai.chat.api-key 可选覆盖spring.ai.openai.api-key提供特定聊天API密钥 -
spring.ai.openai.chat.options.model 可用模型名称包括llama3-8b-8192llama3-70b-8192mixtral-8x7b-32768gemma2-9b-it -
spring.ai.openai.chat.options.temperature 控制生成内容创造性的采样温度。值越高输出越随机,值越低结果越集中和确定。不建议同时修改temperature和top_p 0.8
spring.ai.openai.chat.options.frequencyPenalty -2.0到2.0之间的数值。正值会根据token在文本中的现有频率进行惩罚,降低模型重复相同内容的可能性 0.0f
spring.ai.openai.chat.options.maxTokens 聊天补全中生成的最大token数。输入token和生成token的总长度受模型上下文长度限制 -
spring.ai.openai.chat.options.n 为每个输入消息生成多少聊天补全选项。注意将根据所有选项生成的token数量计费。保持n=1可最小化成本 1
spring.ai.openai.chat.options.presencePenalty -2.0到2.0之间的数值。正值会根据token是否已出现在文本中进行惩罚,增加模型谈论新话题的可能性 -
spring.ai.openai.chat.options.responseFormat 指定模型输出格式的对象。设置为{ "type": "json_object" }可启用JSON模式,保证模型生成的消息是有效JSON -
spring.ai.openai.chat.options.seed (Beta功能)如果指定,系统将尽力确定性采样,相同seed和参数的重复请求应返回相同结果 -
spring.ai.openai.chat.options.stop API将停止生成更多token的序列(最多4个) -
spring.ai.openai.chat.options.topP 温度采样的替代方法-核心采样,模型考虑具有top_p概率质量的token结果。0.1表示只考虑概率质量前10%的token。建议修改此参数或temperature但不要同时修改 -
spring.ai.openai.chat.options.tools 模型可能调用的工具列表。目前仅支持函数作为工具。用于提供模型可能生成JSON输入的函数列表 -
spring.ai.openai.chat.options.toolChoice 控制模型调用哪个(如果有)函数。none表示不调用函数而生成消息;auto表示模型可选择生成消息或调用函数;通过{"type":"function","function":{"name":"my_function"}}指定特定函数会强制调用该函数。无函数时默认为none,有函数时默认为auto -
spring.ai.openai.chat.options.user 代表终端用户的唯一标识符,可帮助OpenAI监控和检测滥用行为 -
spring.ai.openai.chat.options.functions 函数名称列表,用于在单个提示请求中启用函数调用。这些名称的函数必须存在于functionCallbacks注册表中 -
spring.ai.openai.chat.options.stream-usage (仅流式传输)设置为添加包含整个请求token使用统计的额外块。此块的choices字段为空数组,所有其他块也将包含usage字段但值为null false
spring.ai.openai.chat.options.proxy-tool-calls 如果为true,Spring AI不会内部处理函数调用而是代理给客户端处理;如果为false(默认),Spring AI会内部处理函数调用。仅适用于支持函数调用的聊天模型 false

运行时选项(Runtime Options )

OpenAiChatOptions.java 提供模型配置,例如要使用的 temperature、maxToken、topP 等。

在启动时,可以使用 OpenAiChatModel (api,options) 构造函数或 spring.ai.openai.chat.options.*属性来配置默认选项。

在运行时,您可以通过在 Prompt 调用中添加新的、特定请求的选项来覆盖默认选项。例如,为特定请求覆盖默认型号和温度:

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        OpenAiChatOptions.builder()
            .model("mixtral-8x7b-32768")
            .temperature(0.4)
        .build()
    ));

工具 / 功能调用(Tool/Function Calling)

Perplexity 不支持显式的函数调用。相反,它将搜索结果直接整合到响应中。

多模态(Multimodal )

目前,Perplexity API 不支持媒体内容。

示例控制器(Sample Controller)

创建一个新的 Spring Boot 项目,并将 spring-ai-starter-model-openai 添加到 pom (或 gradle) 依赖项中。

在 src/main/resources 目录下添加 application.properties 文件,以启用和配置 OpenAi 聊天模型:

spring.ai.openai.api-key=<PERPLEXITY_API_KEY>
spring.ai.openai.base-url=https://api.perplexity.ai
spring.ai.openai.chat.completions-path=/chat/completions
spring.ai.openai.chat.options.model=llama-3.1-sonar-small-128k-online
spring.ai.openai.chat.options.temperature=0.7

# The Perplexity API doesn't support embeddings, so we need to disable it.
spring.ai.openai.embedding.enabled=false

将 api-key 替换为您的 Perplexity Api 密钥。

这将创建一个 OpenAiChatModel 的实现,你可以将其注入到你的类中。下面是一个简单的 @Controller 类的示例,它使用聊天模型进行文本生成。

@RestController
public class ChatController {

    private final OpenAiChatModel chatModel;

    @Autowired
    public ChatController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    /**
     * 文本生成
     * @param message 提示词
     * @return 响应结果
     */
    @GetMapping("/ai/generate")
    @Operation(summary = "文本生成")
    public Map<String, Object> generate(@RequestParam(value = "message", defaultValue = "你好!") String message) {
        try {
            String response = chatModel.call(message);
            return Map.of(
                    "success", true,
                    "generation", response,
                    "message", "Generated successfully"
            );
        } catch (Exception e) {
            return Map.of(
                    "success", false,
                    "error", e.getMessage(),
                    "message", "Generation failed"
            );
        }
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        return this.chatModel.stream(prompt);
    }

}

手动配置(Manual Configuration)

作者:Jeebiz  创建时间:2025-08-08 00:43
最后编辑:Jeebiz  更新时间:2025-08-31 23:07