mcpField
R
recommendations

recommendations

github.com/tasterayその他2750 回インストール15 週間前に更新
リポジトリ

recommendations について

recommendations は、TasteRay API によるパーソナライズ推薦と関連コードのレビューを支援するスキルです。好み、制約、履歴から文脈を整えて API を呼び出し、確信度に応じた説明やフィードバック反映を行います。

主な機能

  1. 01会話から推薦の文脈を構築
  2. 02推薦・説明エンドポイントの呼び出し
  3. 03確信度に応じた結果の提示
  4. 04フィードバックに基づく推薦の調整
  5. 05レート制限・認証・サーバーエラーへの対応

活用シーン

  1. 01TasteRay のパーソナライズ推薦呼び出しの実装
  2. 02好みや制約に基づくリクエストの準備
  3. 03推薦が合う理由の説明
  4. 04推薦コードの文脈構築とエラー処理のレビュー

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tasteray/skills --skill recommendations

インストール後、Claude Code で/recommendationsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
api-reference.md
context-patterns.md
presentation-patterns.md

詳細

レコメンデーション

TasteRay API を通じたパーソナライズされたレコメンデーション。

目標

レコメンデーションを作成したり、レコメンデーション関連のコード(API 連携、コンテキスト構築、表示ロジックなど)をレビューしたりする際は、10/10 の評価を目指してください。

このスキルの原則や手法への準拠度に基づいて、すべての作業を 0〜10 の尺度で評価してください。評価は X/10 とし、良い点と、10/10 に到達するために改善が必要な点を具体的にフィードバックしてください。

10/10 とは、次の条件を満たすことを意味します。

  • 中核となる原則(レコメンデーションの前に理解すること)を体現している
  • API を呼び出す前に、豊富なコンテキストを構築している
  • パーソナライズされた説明とともにレコメンデーションを提示している
  • 信頼度が低い場合、レート制限、エラーなどのエッジケースに適切に対処している
  • すべてのアンチパターンを回避している

10/10 に到達するまで、繰り返し改善してください。


中核となる原則

レコメンデーションの前に理解すること。

優れたレコメンデーションは、好み、制約、履歴、状況など、その人を深く理解することから生まれます。会話から有意義なコンテキストを構築する前に、API を呼び出してはいけません。

重要な点:レコメンデーションの質は、それを裏付けるコンテキストの質によって決まります。


API の概要

TasteRay Recommendation API は、複数の分野にわたるパーソナライズされたレコメンデーションを提供します。

ベース URL
https://api.tasteray.com
認証

すべてのリクエストでは、ヘッダーに API キーが必要です。

X-API-Key: your-api-key
主なエンドポイント
エンドポイントメソッド説明
/v1/recommendPOSTパーソナライズされたレコメンデーションを取得
/v1/explainPOST1 つのアイテムについて詳しい説明を取得
/v1/usageGETクォータと使用状況の統計を確認

参照:API Reference


レコメンデーションの流れ

すべてのレコメンデーションは、次のパターンに従います。

1. Build context from conversation
   ↓
2. Call POST /v1/recommend
   ↓
3. Interpret confidence scores
   ↓
4. Present with personalized explanations
   ↓
5. Iterate based on feedback
ステップ 1:コンテキストを構築する

会話から次の情報を抽出します。

  • preferences:明示された好き嫌いと好みの傾向
  • profile:心理的なプロフィールのテキスト(elicitation スキルから取得)
  • constraints:必須条件(予算、食事制限、場所など)
  • history:過去に気に入った、または気に入らなかったアイテム
ステップ 2:API を呼び出す
POST /v1/recommend
{
  "vertical": "movies",
  "context": {
    "preferences": ["dark comedies", "complex characters"],
    "profile": "Values authenticity and depth. Drawn to stories about outsiders...",
    "constraints": {"max_length_minutes": 120},
    "history": [
      {"item": "Parasite", "rating": 5},
      {"item": "The Lobster", "rating": 4}
    ]
  },
  "count": 5
}
ステップ 3:信頼度を解釈する
スコア意味対応
0.9+強い一致このレコメンデーションを最初に提示する
0.7-0.9良い一致確信を持って提示する
0.5-0.7中程度の一致注意点を添え、合わない可能性がある理由を説明する
<0.5弱い一致省略するか、大きな不確実性があることを説明する
ステップ 4:レコメンデーションを提示する

アイテムを列挙するだけではいけません。説明をパーソナライズしてください。

悪い例:

「あなたの好みに基づいて、『パラサイト 半地下の家族』をおすすめします。」

良い例:

「複雑な登場人物が描かれるブラックコメディがお好きなことを踏まえると、『パラサイト 半地下の家族』はぴったりでしょう。『ロブスター』で共感されていたアウトサイダーの視点を持ちながら、より鋭い社会批評が描かれています。」

ステップ 5:反復する

フィードバックを活用して改善します。

  • 「ちょっと違う」→ 何が足りないのか尋ねる
  • 「X についてもっと教えて」→ /v1/explain を呼び出す
  • 「違うものがいい」→ 制約を調整して再度クエリする

コンテキストの構築

レコメンデーションの質は、コンテキストの質に完全に左右されます。

Preferences 配列

会話から抽出した、明示的な好みに関する発言です。

"preferences": [
  "dark comedies",
  "complex anti-heroes",
  "slow-burn narratives",
  "dislikes: jump scares",
  "dislikes: predictable endings"
]

抽出パターン:

  • 「X が大好き」→ 好意的な好み
  • 「X は我慢できない」→ 否定的な好み(「dislikes:」を先頭に付ける)
  • 「X のようなもの」→ 参考例
  • 「X すぎないもの」→ 制約または否定的な好み
Profile テキスト

自由形式の心理プロフィールです。elicitation スキルを使う場合は、調査結果を要約します。

"profile": "Values authenticity over polish. Drawn to outsider narratives
and stories about people who don't fit in. Appreciates moral ambiguity
and complex characters who aren't clearly good or bad. Responds strongly
to themes of class and social hierarchy. Prefers films that trust the
audience's intelligence."
Constraints Object

推奨を絞り込む必須条件:

分野一般的な制約
映画max_length_minutes、release_year_min、exclude_genres
レストランcuisine、price_range、location、dietary
製品max_price、category、brand_exclude
旅行budget、dates、accessibility、interests
求人location、salary_min、remote、experience_level
History Array

評価(1~5段階)付きの過去のアイテム:

"history": [
  {"item": "The Grand Budapest Hotel", "rating": 5},
  {"item": "Transformers", "rating": 1},
  {"item": "Moonlight", "rating": 4}
]

ガイドライン:

  • 肯定的な例と否定的な例の両方を含めます
  • 最大50件(APIの上限)
  • 最近のアイテムほど高く重み付けされます
  • 入手可能な場合は、アイテム識別子(IMDB IDなど)を含めます

参照:Context Patterns Reference


分野別のパターン

映画・テレビ

主なコンテキストのシグナル:

  • ジャンルの好み(避けたいジャンルも含む)
  • 展開の好み(じっくり進む作品か、アクション満載か)
  • 時代の好み(古典、現代、近年)
  • 言語や字幕への抵抗感
  • 求めている気分

制約の例:

{
  "max_length_minutes": 120,
  "release_year_min": 2010,
  "exclude_genres": ["horror", "musical"],
  "languages": ["en", "fr"],
  "streaming_services": ["netflix", "hulu"]
}
レストラン

主なコンテキストのシグナル:

  • 料理の好みと、新しいものに挑戦する意欲
  • 価格への敏感さ
  • 食事制限(正確に把握する必要があります)
  • 利用シーン(デート、ビジネス、カジュアル)
  • 雰囲気の好み

制約の例:

{
  "location": {"lat": 37.7749, "lng": -122.4194, "radius_miles": 5},
  "price_range": [2, 3],
  "dietary": ["vegetarian-options"],
  "open_now": true
}
製品

主なコンテキストのシグナル:

  • 使用目的と状況
  • 品質と価格のトレードオフ
  • 好きなブランドと避けたいブランド
  • 重視する機能
  • デザインの好み

制約の例:

{
  "max_price": 500,
  "category": "headphones",
  "brand_exclude": ["beats"],
  "features_required": ["noise-cancelling", "wireless"]
}
旅行

主なコンテキストのシグナル:

  • 旅行スタイル(冒険、リラックス、文化体験)
  • 不慣れな環境への抵抗感
  • アクティビティの好み
  • 同行者(ひとり、カップル、家族)
  • これまでの旅行先(気に入った場所、気に入らなかった場所)

制約の例:

{
  "budget_per_day": 200,
  "dates": {"start": "2024-06-01", "end": "2024-06-14"},
  "accessibility": ["wheelchair-accessible"],
  "climate": "warm",
  "visa_free_for": "US"
}
求人

主なコンテキストのシグナル:

  • キャリアにおける価値観と優先事項
  • 働き方の好み
  • 成長志向か安定志向か
  • 企業文化との相性を示すシグナル
  • スキルと経験レベル

制約の例:

{
  "location": "San Francisco",
  "remote": "hybrid",
  "salary_min": 150000,
  "experience_level": "senior",
  "company_size": ["startup", "mid"]
}

提示パターン

推奨内容と同じくらい、提示の仕方も重要です。

確信度に応じた提示

確信度が高い場合(0.9以上):

「これはあなたにぴったりの候補です。[Item] は、[specific trait] というあなたの好みによく合っています。」

確信度が良好な場合(0.7~0.9):

「[Item] は合いそうです。[positive trait] という特徴がありますが、[caveat] なので、求めているものとは少し違うかもしれません。」

確信度が中程度の場合(0.5~0.7):

「これは少し意外な候補ですが、[Item] は気に入るかもしれません。[trait] という特徴があり、明確におっしゃっていたわけではありませんが、[pattern] から考えると気に入っていただけるかもしれません。」

確信度が低い場合(0.5未満):

通常は省略します。または:「冒険したい気分なら、[Item] はいつもの好みとはかなり異なりますが、[reason for including] という理由で候補に加えています。」

説明の構成

各推奨について、次の点を説明します。

  1. 適合点 - どのような点が、明示された好みに合っているか
  2. 関連性 - 気に入ったアイテムとどう関連しているか
  3. 注意点 - 好みと合わない可能性がある点(該当する場合)
フィードバックへの対応

「もっと詳しく」 → /v1/explain エンドポイントを使用します:

POST /v1/explain
{
  "vertical": "movies",
  "item": "Parasite",
  "context": { /* same context */ }
}

「ちょっと違う」 → 確認の質問をします:

「このおすすめのどこが違いましたか?[X] が強すぎますか?それとも [Y] が足りませんか?」

「まったく違うもの」 → アプローチを調整します:

「別の切り口で試してみます。[previous focus] をいったん置いておくとして、今はどんな気分ですか?」

参照:Presentation Patterns Reference


Elicitationとの統合

Elicitationスキルは心理的なプロファイルを構築します。より充実した推奨に活用してください。

情報の引き出しからプロファイルへ

自己定義に関する記憶から、以下が明らかになります。

  • 好みを形作る形成的な経験
  • コンテンツに共鳴する感情のパターン
  • アイデンティティのテーマ(主体性、つながり、再生)

価値観の聞き取りから、以下が明らかになります。

  • 推薦に反映すべき中核的な優先事項
  • 何を「しっくりくる」と感じるか

スキーマの検出から、以下が明らかになります。

  • 受け止め方に影響する可能性のあるパターン
  • 慎重に扱うべきトピックやテーマ
プロファイルの作成

情報を引き出した後、プロファイル文字列を作成します。

"profile": "Core value: authenticity. Drawn to narratives about
self-reinvention (redemption themes in life story). Responds to
understated emotion over melodrama. Achievement-oriented but values
creative expression over status markers. Formative memory involves
finding belonging through shared creative work—look for collaborative
or community themes."
統合例
  1. 情報を引き出すスキルを使って、その人を理解します
  2. 得られた情報をプロファイルテキストにまとめます
  3. 豊富なコンテキストを添えて推薦 API を呼び出します
  4. その人のストーリーにつながる推薦を提示します

エラー処理

レート制限

制限を超えると、API は 429 Too Many Requests を返します。

プランリクエスト数/分リクエスト数/日
Free10100
Pro605,000
Enterprise300無制限

対処方法:

  • 待機時間については Retry-After ヘッダーを確認します
  • 制限に達する場合はリクエストをキューに入れます
  • 頻繁に行うクエリのキャッシュを検討します
認証エラー

401 Unauthorized - API キーが無効、または設定されていません。

対処方法:

  • API キーが正しく設定されていることを確認します
  • キーの有効期限が切れていないか確認します
  • キーに適切な権限があることを確認します
サーバーエラー

500+ - サーバー側の問題です。

対処方法:

  • 指数バックオフを実装します
  • フォールバック動作(適切な縮退運転)を用意します
  • デバッグ用にログを記録します

エラーコードの詳細については、API リファレンスを参照してください。


アンチパターン

避けるべきこと:

コンテキストが空のまま呼び出す

事前にコンテキストを構築せずに API を呼び出すことです。

代わりに、推薦をリクエストする前に、必ず好み、制約、履歴を収集してください。

生の結果をそのまま提示する

パーソナライズせずに API のレスポンスをそのまま提示することです。

代わりに、信頼度スコアを解釈し、その人が明示した好みにつながる説明を作成してください。

低スコアなのに過信する

一致度の低い候補(信頼度 < 0.5)を、一致度の高い候補と同じ確信度で提示することです。

代わりに、信頼度の低い推薦を省くか、明確な但し書きを付けてください。

制約を見落とす

明示された制約(予算、食事制限など)を見落としたり、誤って記憶したりすることです。

代わりに、制約を明示的に記録し、API を呼び出す前に毎回確認してください。

コンテキストを忘れる

会話のやり取りをまたいでコンテキストを維持しないことです。

代わりに、会話を通じて好み、履歴、制約を蓄積してください。

説明がない

理由を説明せずに推薦することです。

代わりに、推薦にはすべて、明示された好みにつながるパーソナライズされた説明を含めてください。

フィードバックを無視する

否定的なフィードバックを、その後の推薦の改善に活用しないことです。

代わりに、候補が合わなかった場合は何が問題だったかを尋ね、それに応じてコンテキストを調整してください。


参考資料

詳細なガイド:


クイックリファレンス

最小限のリクエスト
POST /v1/recommend
Headers: X-API-Key: your-key

{
  "vertical": "movies",
  "context": {
    "preferences": ["at least one preference"]
  },
  "count": 5
}
完全なリクエスト
POST /v1/recommend
{
  "vertical": "movies",
  "context": {
    "preferences": ["dark comedies", "complex characters"],
    "profile": "Values authenticity. Drawn to outsider narratives...",
    "constraints": {
      "max_length_minutes": 120,
      "release_year_min": 2010
    },
    "history": [
      {"item": "Parasite", "rating": 5, "id": "tt6751668"},
      {"item": "The Lobster", "rating": 4, "id": "tt3464902"}
    ]
  },
  "count": 5,
  "explain": true
}
信頼度のクイックガイド
スコア対応
≥0.9最初に推薦し、強い一致として提示
0.7-0.9自信を持って含める
0.5-0.7但し書きを付けて含める
<0.5省くか、十分な但し書きを付ける

コメント