perplexity-performance-tuning
Perplexity APIのパフォーマンスをキャッシング、バッチ処理、コネクションプーリングで最適化します。APIレスポンスが遅い場合、キャッシング戦略を導入したい場合、またはPerplexity統合のリクエストスループットを最適化したい場合に活用できます。「perplexity performance」「optimize perplexity」「perplexity latency」「perplexity caching」「perplexity slow」「perplexity batch」といったフレーズで起動します。
description の原文を見る
Optimize Perplexity API performance with caching, batching, and connection pooling. Use when experiencing slow API responses, implementing caching strategies, or optimizing request throughput for Perplexity integrations. Trigger with phrases like "perplexity performance", "optimize perplexity", "perplexity latency", "perplexity caching", "perplexity slow", "perplexity batch".
SKILL.md 本文
Perplexity パフォーマンスチューニング
概要
キャッシング、バッチ処理、接続プーリングを使用して Perplexity API のパフォーマンスを最適化します。
前提条件
- Perplexity SDK がインストール済み
- 非同期パターンの理解
- Redis またはメモリ内キャッシュが利用可能(オプション)
- パフォーマンス監視が導入済み
レイテンシベンチマーク
| 操作 | P50 | P95 | P99 |
|---|---|---|---|
| Read | 50ms | 150ms | 300ms |
| Write | 100ms | 250ms | 500ms |
| List | 75ms | 200ms | 400ms |
キャッシング戦略
レスポンスキャッシング
import { LRUCache } from 'lru-cache';
const cache = new LRUCache<string, any>({
max: 1000,
ttl: 60000, // 1 minute
updateAgeOnGet: true,
});
async function cachedPerplexityRequest<T>(
key: string,
fetcher: () => Promise<T>,
ttl?: number
): Promise<T> {
const cached = cache.get(key);
if (cached) return cached as T;
const result = await fetcher();
cache.set(key, result, { ttl });
return result;
}
Redis キャッシング(分散)
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
async function cachedWithRedis<T>(
key: string,
fetcher: () => Promise<T>,
ttlSeconds = 60
): Promise<T> {
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const result = await fetcher();
await redis.setex(key, ttlSeconds, JSON.stringify(result));
return result;
}
リクエストバッチ処理
import DataLoader from 'dataloader';
const perplexityLoader = new DataLoader<string, any>(
async (ids) => {
// Batch fetch from Perplexity
const results = await perplexityClient.batchGet(ids);
return ids.map(id => results.find(r => r.id === id) || null);
},
{
maxBatchSize: 100,
batchScheduleFn: callback => setTimeout(callback, 10),
}
);
// Usage - automatically batched
const [item1, item2, item3] = await Promise.all([
perplexityLoader.load('id-1'),
perplexityLoader.load('id-2'),
perplexityLoader.load('id-3'),
]);
接続の最適化
import { Agent } from 'https';
// Keep-alive connection pooling
const agent = new Agent({
keepAlive: true,
maxSockets: 10,
maxFreeSockets: 5,
timeout: 30000,
});
const client = new PerplexityClient({
apiKey: process.env.PERPLEXITY_API_KEY!,
httpAgent: agent,
});
ページネーション最適化
async function* paginatedPerplexityList<T>(
fetcher: (cursor?: string) => Promise<{ data: T[]; nextCursor?: string }>
): AsyncGenerator<T> {
let cursor: string | undefined;
do {
const { data, nextCursor } = await fetcher(cursor);
for (const item of data) {
yield item;
}
cursor = nextCursor;
} while (cursor);
}
// Usage
for await (const item of paginatedPerplexityList(cursor =>
perplexityClient.list({ cursor, limit: 100 })
)) {
await process(item);
}
パフォーマンス監視
async function measuredPerplexityCall<T>(
operation: string,
fn: () => Promise<T>
): Promise<T> {
const start = performance.now();
try {
const result = await fn();
const duration = performance.now() - start;
console.log({ operation, duration, status: 'success' });
return result;
} catch (error) {
const duration = performance.now() - start;
console.error({ operation, duration, status: 'error', error });
throw error;
}
}
実装手順
ステップ 1: ベースラインの確立
Perplexity の重要な操作に対する現在のレイテンシを測定します。
ステップ 2: キャッシングの実装
頻繁にアクセスされるデータに対するレスポンスキャッシングを追加します。
ステップ 3: バッチ処理の有効化
DataLoader またはそれに類するツールを使用して自動リクエストバッチ処理を行います。
ステップ 4: 接続の最適化
keep-alive による接続プーリングを構成します。
出力
- API レイテンシの削減
- キャッシングレイヤーの実装
- リクエストバッチ処理の有効化
- 接続プーリングの構成
エラーハンドリング
| 問題 | 原因 | 解決策 |
|---|---|---|
| キャッシュミス嵐 | TTL 期限切れ | stale-while-revalidate を使用 |
| バッチタイムアウト | アイテムが多すぎる | バッチサイズを削減 |
| 接続枯渇 | プーリングなし | maxSockets を構成 |
| メモリ圧力 | キャッシュが大きすぎる | 最大キャッシュエントリを設定 |
例
シンプルなパフォーマンスラッパー
const withPerformance = <T>(name: string, fn: () => Promise<T>) =>
measuredPerplexityCall(name, () =>
cachedPerplexityRequest(`cache:${name}`, fn)
);
リソース
次のステップ
コスト最適化については、perplexity-cost-tuning を参照してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- Brmbobo
- リポジトリ
- Brmbobo/Web2podcast
- ライセンス
- MIT
- 最終更新
- 2026/1/26
Source: https://github.com/Brmbobo/Web2podcast / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。