Skip to content

Perplexity API ​

本文档详细介绍了如何使用 Perplexity API 进行聊天完成请求,并提供了 Java 示例代码,帮助开发者快速集成该 API。

概述 ​

Perplexity API 提供了强大的搜索 和 推理 生成能力。本文将展示如何构建请求、解析响应以及在 Java 项目中调用 Perplexity API。

请求示例 ​

以下是使用 curl 命令向 Perplexity API 发送请求的示例:

bash
curl --request POST \
  --url https://api.perplexity.ai/chat/completions \
  --header 'Authorization: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "messages": [
      {
        "content": "When is the last day of the Spring 2025 semester at Kapiolani Community College?",
        "role": "user"
      }
    ],
    "model": "llama-3.1-sonar-large-128k-online"
}'

请求参数说明 ​

  • Authorization: 替换 YOUR_API_KEY 为您的 Perplexity API 密钥。
  • Content-Type: 固定为 application/json。
  • messages: 聊天消息数组,每条消息包含 content(内容)和 role(角色,通常为 user 或 assistant)。
  • model: 指定使用的模型,如 llama-3.1-sonar-large-128k-online。

请求数据结构 ​

以下是请求数据的 JSON 结构示例:

json
{
  "model": "llama-3.1-sonar-large-128k-online",
  "messages": [
    {
      "content": "When is the last day of the Spring 2025 semester at Kapiolani Community College?",
      "role": "user"
    }
  ]
}

字段说明 ​

  • model: 使用的语言模型。
  • messages: 聊天消息数组,包含用户和助手的对话内容。

响应数据结构 ​

成功的响应数据结构如下:

json
{
  "id": "b81218d9-17ba-447d-9a3d-0982104933c1",
  "model": "llama-3.1-sonar-large-128k-online",
  "created": 1732857164,
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 33,
    "total_tokens": 53
  },
  "citations": [
    "https://www.monroecc.edu/etsdbs/MCCatPub.nsf/academic+calendar+lookup/2025-Spring-Semester?OpenDocument",
    "https://www.kapiolani.hawaii.edu/classes/academic-calendar/",
    "https://kellogg.edu/about/academic-calendar/",
    "https://www.kapiolani.hawaii.edu/classes/",
    "https://www.kapiolani.hawaii.edu/admissions/application-deadlines/"
  ],
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": "The last day of the Spring 2025 semester at Kapi'olani Community College is Friday, May 16, 2025[2][4]."
      },
      "delta": {
        "role": "assistant",
        "content": ""
      }
    }
  ]
}

字段说明 ​

  • id: 唯一的响应标识符。
  • model: 使用的模型名称。
  • created: 响应创建的时间戳。
  • usage: 令牌使用情况,包括提示令牌、完成令牌和总令牌数。
  • citations: 相关引用链接。
  • object: 响应对象类型,通常为 chat.completion。
  • choices: 生成的回答选项数组,每个选项包含回答内容及相关信息。

参考链接 ​

Java 调用 Perplexity API ​

配置 PERPLEXITY_API_KEY 和账号可用的 PERPLEXITY_MODEL。上文请求与响应中的模型名称是历史示例,实际调用以平台当前可用模型为准。

以下是使用 Java 调用 Perplexity API 的示例代码,展示了如何构建请求、发送 HTTP 请求并解析响应。

依赖库 ​

确保您的项目中包含以下依赖库:

  • OkHttp: 用于发送 HTTP 请求。
  • Lombok: 简化 Java 类的编写。
  • JSON 解析库: 如 tio-json。
  • java-openai:提供请求、响应模型和 HTTP 客户端。
xml
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>${okhttp.version}</version>
</dependency>

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>${lombok.version}</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>nexus.io</groupId>
  <artifactId>java-openai</artifactId>
  <version>1.3.9</version>
</dependency>

示例代码 ​

请求与响应类型由 java-openai 提供,无需在业务项目中重新定义。依赖版本由项目依赖管理统一配置。

调用代码 ​

java
package nexus.io.llm.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import nexus.io.openai.chat.OpenAiChatMessage;
import nexus.io.openai.chat.OpenAiChatResponse;
import nexus.io.openai.chat.OpenAiChatRequest;
import nexus.io.openai.client.OpenAiClient;
import nexus.io.tio.utils.environment.EnvUtils;
import nexus.io.tio.utils.json.JsonUtils;

import okhttp3.Response;

public class PerplexityTest {

  @Test
  public void testAsk() {
    // 加载环境变量
    EnvUtils.load();
    String apiKey = EnvUtils.get("PERPLEXITY_API_KEY");
    String apiPrefixUrl = "https://api.perplexity.ai";

    // 构建请求对象
    OpenAiChatRequest chatRequestVo = new OpenAiChatRequest();
    List<OpenAiChatMessage> messages = new ArrayList<>();
    messages.add(new OpenAiChatMessage("user", "When is the last day of the Spring 2025 semester at Kapiolani Community College?"));
    chatRequestVo.setModel(EnvUtils.get("PERPLEXITY_MODEL"))
                .setStream(false)
                .setMessages(messages);

    String jsonRequest = JsonUtils.toJson(chatRequestVo);

    // 发送请求并处理响应
    try (Response response = OpenAiClient.chatCompletions(apiPrefixUrl, apiKey, jsonRequest)) {
      String responseBody = response.body().string();
      if (!response.isSuccessful()) {
        throw new IllegalStateException("请求失败: " + response.code() + " " + responseBody);
      }
      OpenAiChatResponse chatResponse = JsonUtils.parse(responseBody, OpenAiChatResponse.class);
      System.out.println(JsonUtils.toJson(chatResponse));
    } catch (IOException e) {
      throw new IllegalStateException("读取响应失败", e);
    }
  }
}

代码说明 ​

  1. 环境变量加载: 使用 EnvUtils 加载环境变量,获取 PERPLEXITY_API_KEY。
  2. 构建请求对象: 创建 OpenAiChatRequest 对象,设置模型、消息内容和其他参数。
  3. 发送 HTTP 请求: 使用 OpenAiClient 发送 POST 请求至 Perplexity API。
  4. 处理响应:
    • 如果请求成功,解析响应体并输出。
    • 如果请求失败,输出错误信息。

数据类 ​

使用库提供的 OpenAiChatRequest、OpenAiChatMessage 和 OpenAiChatResponse。平台扩展字段以实际返回 JSON 为准,需要保留原始响应时读取 response.body().string()。

总结 ​

本文档介绍了如何使用 Perplexity API 进行聊天完成请求,包括 curl 请求示例、请求与响应数据结构说明以及 Java 调用示例。通过这些内容,开发者可以快速上手并集成 Perplexity API 到自己的应用中。

如需更多信息,请参考 Perplexity API 官方文档。