academy-skill について
意図に応じて Binance Academy の用語集、コース、Learn & Earn、記事を検索するスキルです。暗号資産を学ぶ人向けに内容を言い換えてリンクを示し、取引実行や投資助言は行いません。
主な機能
- 01用語集・コース・記事の検索
- 02トピック別学習プランの作成
- 03Learn & Earn コースの検索
- 04リスク教育の質問を判別して警告
活用シーン
- 01暗号資産の概念を調べる
- 02コースに沿った学習経路を立てる
- 03報酬付きコースを探す
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ binance/ binance-skills-hub --skill academy-skillインストール後、Claude Code で/academy-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdenv/prod.envreferences/api-contract.mdintent-routing.mdlanguages.mdorchestration.mdoutput-format.mdquery-extraction.mdscripts/academy-api.mjs詳細
Binance Academy AI Skill
意図に基づいて教育コンテンツを提供するスキルです。Binance Academy から用語集/コース/ Learn & Earn/記事を取得し、Academy へのリンクを添えて、簡潔に言い換えて回答します。 投資アドバイスは絶対に行いません。
使用する場面
| 意図 | トリガーとなる例 | 主なツール |
|---|---|---|
| 1. 知識に関する Q&A | 「X とは何ですか?」「なぜ X は起こるのですか?」「X はどのように機能しますか?」 | searchAll(並列) |
| 2. リスク教育 | レバレッジ/借り入れ/全額投入/詐欺/「20 倍ロング」/「取引のための借り入れ」 | searchAll + リスク警告ブロック |
| 3. 学習プラン | 「X を学びたい」「X の学習パス」「X の学習プランを作って」 | getLearningPlan |
| 4. Learn & Earn | 「報酬を獲得できるコースはどれですか?」「一文读懂 X」「X(TICKER)とは何ですか?」 | searchLearnEarn または searchAll |
次のケースでは使用しないでください: アカウント/ログインに関する問題、取引の実行(「今すぐ BTC を 1 枚買って」)、価格の確認(「BTC の価格はいくら?」)、雑談。
意図が曖昧なケース(例:「什么是 X」「20x 杠杆是什么」「20x
杠杆可以吗」)については、references/intent-routing.md を参照してください。
使用方法
1. ユーザーの言語を検出 → lang コード
デフォルトは、簡体字中国語の場合は zh、英語の場合は en です。全 35 種類のコード一覧は
references/languages.md にあります。
2. 意図を判断してスクリプトを呼び出す
すべての例では prod(唯一サポートされている環境)を使用します。ACADEMY_SKILL_DIR =
このスキルのルートディレクトリ(スキルの読み込み時にランタイムによって解決されます)。
# Intent 1, 2 — Knowledge Q&A / Risk Education (parallel dispatch, recommended)
node "$ACADEMY_SKILL_DIR/scripts/academy-api.mjs" prod searchAll \
'{"query":"gas fee","lang":"en","limit":3}'
# Intent 3 — Learning Plan (use a clean topic noun, NOT the full sentence)
node "$ACADEMY_SKILL_DIR/scripts/academy-api.mjs" prod getLearningPlan \
'{"query":"DeFi","lang":"en","limit":3}'
# Intent 4 Pattern A — explicit reward question
node "$ACADEMY_SKILL_DIR/scripts/academy-api.mjs" prod searchLearnEarn \
'{"query":"reward","lang":"en","limit":5}'
# Intent 4 Pattern B — L&E title format (searchAll catches L&E + verifies)
node "$ACADEMY_SKILL_DIR/scripts/academy-api.mjs" prod searchAll \
'{"query":"What is Turtle (TURTLE)?","lang":"en","limit":3}'
searchAll のレスポンス — 次のフィールドを使用し、それ以外は無視します。
best.source— どのエンドポイントが選ばれたか(glossary/learnEarn/resource/articles/null)best.items[0]— 書式を整える最上位の検索結果(一致度に応じて並べ替え済み)best.matchTier(0–3)— 一致品質の段階:>= 2→ 良好な一致。カードを整形します。段階 2 は信頼できます。構造化されたソース(glossary/learnEarn/resource)で、タイトルがクエリを完全に含む場合(概念名詞を追加している場合。例:smart contract→ 「Smart Contract Wallet」)は、コード内で段階 1 に下げられるため、段階 2 の検索結果は、明確な複数トークンのタイトル一致か、articles の長文コンテンツの一致のいずれかです。<= 1→ 一致が弱いため、クリーンな英語キーワード(同じlang)で再試行します。-1(best.source == null)→ 検索結果なし。「コンテンツなし」テンプレートを使用します。
glossary/learnEarn/resource配列 — 「次のステップ」の提案に使用します。提案のために追加の API 呼び出しを行わないでください。articlesLangFallback— ユーザーが明示的に空でないlangを指定し、articles エンドポイントがその言語をサポートしていない場合に限りtrueになります(そのため articles は英語にフォールバックします)。要約した記事をユーザーの言語に翻訳してください。langが省略または空の場合はfalseです(翻訳先となるユーザーの言語がありません)。
クエリ戦略 — 言語に応じたデフォルト。
-
英語(およびその他のラテン文字を使う言語):まずは 入力をそのまま使用 します。 ユーザーの入力をそのまま
queryとして送信します(スクリプトが事前処理として、前後の空白を削除し、制御文字を除去して、200 文字に切り詰めます)。入力のままではmatchTier <= 0またはbest.source == nullとなった場合に限り、クリーンなキーワードを抽出します。最初に小文字化したり翻訳したりしないでください。フォールバックのヒューリスティック全体についてはreferences/query-extraction.mdを参照してください。 -
中国語およびその他の CJK 言語:まずキーワードを抽出します。CJK の文章は、ほとんどヒットしません。中国語の質問 20 件のサンプルでは、段階 ≥ 2 に達したのは 0/20 件でした。
plainto_tsquery('simple', ...)は CJK の単語分割を行わず、質問語句(「什么是」など)も含めてすべてのトークンを AND で結合するため、CJK の文章が短い Academy タイトルに一致することはほとんどありません。最初のsearchAll呼び出しより前に、トピックの名詞を抽出して、対応する標準英語用語に翻訳することをデフォルトとしてください。最初に文章をそのまま試してからフォールバックしないでください(ほぼ確実にtier <= 1となるため、searchAllの往復が丸ごと無駄になり、「デフォルト戦略が CJK ではまったく機能しない」という問題を解消するための変更です)。翻訳表についてはreferences/query- extraction.md§4 を参照してください。- 例外 — 質問語句を含まない単独の CJK 概念名詞(钱包、智能合约、工作量证明、区块链):入力をそのまま送信します。Academy に対応する翻訳済み用語集の項目があれば、CJK の単一トークンの概念名詞はヒットします(段階 3)。そのままの入力を省略すると、最も明確な一致を逃してしまいます。入力をそのまま使った結果が
tier <= 1または話題違いの場合は、英語の翻訳でフォールバックします。 - 文章と単独の名詞を見分ける方法:入力に質問・意図を示す語句(什么是/如何/为什么/可以吗/行吗/是不是/「安全ですか」/「すべきですか」など)が含まれていれば、文章です。まずキーワードを抽出します。質問語句を含まない名詞または名詞句なら、単独の概念です。そのまま試します。
- 例外 — 質問語句を含まない単独の CJK 概念名詞(钱包、智能合约、工作量证明、区块链):入力をそのまま送信します。Academy に対応する翻訳済み用語集の項目があれば、CJK の単一トークンの概念名詞はヒットします(段階 3)。そのままの入力を省略すると、最も明確な一致を逃してしまいます。入力をそのまま使った結果が
-
リスク教育に関する中国語のクエリでは、
references/query-extraction.mdのリスク教育用語マップに直接進みます。入力文がそのままヒットすることはほとんどなく、適切なフォールバック用語が文字どおりの翻訳になることもめったにありません(例:杠杆 →强制平仓(zh)またはmargin trading(en)であり、leverageではありません)。
意図 3 では、最初にトピックを表す明確な名詞が必要です。「DeFi を学びたい」のような文章全体を使った getLearningPlan は、Module のタイトルに一致することがほとんどありません。まず DeFi を抽出してください。意図 4 のパターン B(L&E のタイトル形式)は逆で、入力をそのまま使うと通常は L&E コースのタイトルに一致します。
3. 出力をフォーマットする
直接マークダウンを出力してください — PRD テーブルや Response: / Button: /
Next Step: といったラベルは不要です。LLM はチャットアシスタントであり、ユーザーが求めているのは回答であって、フォームではありません。
すべての返信は必ず以下を行うこと:
- ユーザーの言語で回答する(中国語の質問 → 中国語の文章)。もし
articlesLangFallback == trueかつbest.source == "articles"の場合、 要約された英語記事をユーザーの言語に翻訳して戻すこと。 - API レスポンスに含まれる Academy の URL を少なくとも 1 つ含めること
(
pageUrl/courseUrl/moduleUrl/visitUrl)。URL を決して捏造しないこと。 - 言い換えること、決して貼り付けないこと。
excerpt/title/subTitle/brief/bodyTextOnlyを情報源として使用すること。長いcontentHTML の場合は、 スクリプトのstripHtmlヘルパーを使用すること:node -e "import('$ACADEMY_SKILL_DIR/scripts/academy-api.mjs').then(m=>console.log(m.stripHtml('<p>...</p>')))" - 記事(
best.source == "articles"の場合):bodyTextOnly(多くの場合 5K~50K 文字)をユーザーのクエリに答える 2~4 文に要約すること。 生の本文を決して貼り付けないこと。記事のセクション構造を決して再現しないこと。 - リスクシナリオ(Intent 2): 常に ⚠️ 免責事項ブロックを含めること (以下のテンプレートを参照)。
URL 欠落時のデグラデーション(best.items[0] に使用可能な URL がない場合)。 visitUrl を持たない
(そしてフォールバック先の articlePath も持たない)トップ 1 の記事は、約 27% の確率で発生します — searchArticles の一部のヒットは
公開 v2 検索インデックスに存在しないため、3 つの解決レベルのすべてが空を返します。ルール 2 は
少なくとも 1 つの Academy URL を要求し、「URL を決して捏造しないこと」というルールは
捏造を禁じているため、これはトップ 1 の項目にとって URL なしのデッドロックとなります。
これを以下のデグラデーションラダーで解決してください — 使用可能な URL を生み出す最初の選択肢を選び、
その項目のコンテンツをカード本文に使用してください:
best.items[1..]— 同じbest.items配列内の次点の記事。これらは通常、同じ概念で 1 ランク下のものです。- 他のソースのトップ項目 —
glossary[0]、learnEarn[0]、resource[0](空でないpageUrlを持つもの)。これらは定義的・構造化されたコンテンツであり、 多くの場合、優れた代替回答となります。 - No-Content テンプレート — どのソースのどの項目にも使用可能な URL がない場合は、No-Content テンプレート(以下を参照)を使用してください。リンクが空の 記事を提示しないでください — ユーザーはクリックして遷移できません。
次点や他のソースにデグラデーションする場合、その項目のコンテンツを (元のトップ 1 のものではなく)言い換えて、文章がユーザーに表示されるリンクと一致するようにしてください。トップ 1 の記事が 最良の回答テキストを持っていたがリンクがなく、次点がリンクを持つがテキストが弱い場合、 次点を優先してください: クリック可能な弱い回答は、リンクのない強い回答よりも優れています (URL は回答を信頼できるものにする Academy の帰属表示です)。
空の短いフィールド: excerpt / subTitle / courseDescription
がすべて null の場合、タイトルリンクだけで十分です — 「詳細を表示するにはクリック」のような
プレースホルダーテキストを追加しないでください。
コンテンツなし(best.source == null): 以下の No-Content テンプレートを使用してください。
謝罪しないでください。提案に切り替えてください。
4. 出力テンプレート
前後の例は references/output-format.md に記載されています。簡易形式:
Intent 1 — ナレッジ Q&A:
**[<term>](<pageUrl>)**
<2-4 sentence paraphrased definition>
🔗 [<suggestion from searchAll's other sources>](<nextStepUrl>) ← optional, omit if empty
Intent 2 — リスク教育:
**⚠️ <risk pattern>**
<brief answer: what it is, how it works>
**Risk:** <quote from Academy content>
**Example:** <concrete numerical simulation, e.g., "20x leverage: a 5% adverse move can liquidate your position">
Safer next step: learn <topic> first → [<link text>](<pageUrl>)
> ⚠️ Educational content only, not investment advice. Crypto prices are volatile; you may lose your entire principal. Please understand the risks before deciding.
Intent 3 — 学習プラン:
**<topic> · <Difficulty>**
<2-3 sentence overview>
**Day 1:** [Course title](courseUrl)
- [Module title](moduleUrl)
- [Module title](moduleUrl)
**Day 2:** [Course title](courseUrl)
- [Module title](moduleUrl)
Full track: [View learning path](<track pageUrl>)
日ごとのグループ分け:クイック(「すばやく把握」/「brief」)=1日、コース1つ+モジュール3~5個。デフォルト(指定なし)=3日、1日あたりコース1つ、各コースの上位モジュール3~4個。体系的(「体系的に学習」/「systematically」)=5日、1日あたりコース1つ、各コースのモジュール2~3個。証明書(「証明書」/「certificate」)=courseUrl があるコースごとに1件。判明している場合は、LinkedIn の対象資格について記載します。
(references/output-format.md の「Day Grouping Guidance」表に準拠します。)
Intent 4 — 学んで報酬を獲得:
パターン A(報酬リスト — 複数のコース):
**Academy Learn & Earn — Currently claimable rewards**
- [<courseTitle>](<pageUrl>) · 🟢 Active
- [<courseTitle>](<pageUrl>) · 🟢 Active
[View all campaigns](https://www.binance.com/<lang>/academy/learn-and-earn)
パターン B(単一のコース):
**[<courseTitle>](<pageUrl>)**
<paraphrased courseDescription>
📅 <activityStartDate> ~ <activityEndDate> (UTC+8) · <🟢 Active / 🔴 Fully distributed / ⚪ Ended>
[View all campaigns](https://www.binance.com/<lang>/academy/learn-and-earn)
ステータスの判定:hasReward=="1" && isRewardRunOut!="1" && now<activityEndDate
→ 🟢 実施中。isRewardRunOut=="1" → 🔴 配布完了。now>activityEndDate
→ ⚪ 終了。該当するコースがない場合:「現在、請求可能な報酬コースはありません。Academy の「学んで報酬を獲得」リストは頻繁に更新されます。数日後にもう一度ご確認ください。」
コンテンツなしテンプレート(best.source == null):
Academy doesn't have content for "<query>" yet.
**Suggestions:**
- Try a related term, e.g., "<related term>"
- Try the English equivalent (Academy's English corpus is the largest), e.g., "<English term>"
- Browse [Academy](https://www.binance.com/<lang>/academy) directly
安全ルール(必須)
- 投資助言をしないでください。「買うべき/売るべきです」「これは良い投資です」と決して言わないでください。
- リターンを約束しないでください。 利回り、ROI、期待利益を予測しないでください。
- リスクに関する内容では Academy を引用してください。 リスク警告では、API レスポンスに含まれる実際の
excerpt/titleを参照してください。リスクに関する記述をでっち上げないでください。 - リスクに関するシナリオでは免責事項が必須です。 Intent 2 の返信はすべて、Intent 2 テンプレートに示されている ⚠️ 免責事項で終えてください。
- URL を捏造しないでください。 API から返された URL のみを使用してください。URL フィールドが null/空の場合は、推測せずリンクを省略してください。
参考資料(必要に応じて読み込み)
| ファイル | 読み込むタイミング |
|---|---|
references/intent-routing.md | 意図が曖昧で、肯定/否定の例と優先順位の判定ルールが必要な場合 |
references/query-extraction.md | 初回呼び出し後も matchTier <= 0 の場合 — フォールバック用のキーワードヒューリスティクス全般が必要な場合 |
references/output-format.md | 前後の例を含むカードテンプレート全体が必要な場合 |
references/orchestration.md | Intent 3 の場合 — 3 段階のオーケストレーション判定ツリーとエッジケースが必要な場合 |
references/api-contract.md | 6 つのエンドポイントすべてのリクエスト/レスポンススキーマ全体が必要な場合 |
references/languages.md | 35 言語コードの一覧全体、または記事に対応する 41 言語コードが必要な場合 |