用途:为 Perplexity Sonar API 提供生产可用的 TypeScript 与 Python 集成模式,适用于实现 Perplexity 集成、重构 SDK 用法等场景。由于 Perplexity 采用 OpenAI 线格式,做法是在 openai 客户端库之上构建封装,并针对 Perplexity 特有响应(引用、搜索结果、相关问题)做处理。
前提:已安装 openai 包(npm install openai 或 pip install openai);在 PERPLEXITY_API_KEY 中配置 API 密钥;了解 OpenAI chat completions 格式。
主要能力:
- 类型化客户端单例(TypeScript):扩展 OpenAI.ChatCompletion,增加 citations、search_results、related_questions 字段,并扩展 usage 增加 citation_tokens、num_search_queries、reasoning_tokens;通过 getClient() 惰性创建实例,baseURL 为 https://api.perplexity.ai,未设置密钥时抛错。
- 完整响应解析的搜索函数:支持模型 sonar、sonar-pro、sonar-reasoning-pro、sonar-deep-research;可选参数包括 systemPrompt、maxTokens、temperature、searchRecencyFilter(hour/day/week/month)、searchDomainFilter(最多 20 个域名)、returnRelatedQuestions、returnImages;返回 answer、citations、relatedQuestions、usage 与 model。
- 指数退避重试:withRetry 默认 maxRetries 3、baseDelayMs 1000、maxDelayMs 30000,仅对 429、408 与 5xx 重试,延迟含随机抖动。
- Python 模式:用 @lru_cache 复用客户端,search() 支持 model、system_prompt、max_tokens、search_recency_filter、search_domain_filter,返回 answer、citations、usage、model。
- 引用格式化:formatCitationsAsMarkdown 将 [1] 等标记替换为 Markdown 链接;formatCitationsAsFootnotes 生成脚注列表。
使用方式:按步骤先建立类型化客户端单例,再实现搜索函数,配合重试包装调用,最后用引用格式化工具输出面向用户的结果。
限制:资料未提供具体收费、价格、平台支持范围与效果数据;searchDomainFilter 上限 20 个域名来自资料;重试仅针对 429、408 与 5xx。