✍️

【JavaScript】NovelAIのNovel部分をAPIで呼び出す

2024/10/19に公開

結論

  • 各種パラメータは適当なので、適切にチューニングが必要
  // 送信するデータ(APIに渡すJSONデータ)
  const data = {
    // モデルに渡す入力データ。小説の書き出しやキャラクター設定などのテキストデータを指定する
    input: '吾輩は猫である。名前はまだない。',
    // 使用するモデルの指定
    model: 'genji-jp-6b-v2',
    parameters: {
      // 入力を文字列として扱うかどうか
      use_string: true,
      // 出力のランダム性を制御するパラメータ(0に近いほど決定的、1に近いほどランダム)
      temperature: 0.7,
      // 出力されるテキストの最大文字数
      max_length: 2048,
      // 出力されるテキストの最小文字数
      min_length: 100,
      // 出力時に考慮するトークンの範囲(100トークンを考慮)
      top_k: 100,
      // 確率分布に基づいてトークンを選択する際のしきい値
      top_p: 0.9,
      // 同じ内容の繰り返しを避けるためのペナルティ設定
      repetition_penalty: 2.5,
      // ペナルティを適用する範囲(トークン数で指定)
      repetition_penalty_range: 1024,
      // 繰り返しペナルティの適用強度
      repetition_penalty_slope: 3,
      // 繰り返しを避けるための最小n-gramサイズ
      no_repeat_ngram_size: 3,
      // より自然な出力を目指すためのtail free samplingのしきい値
      tail_free_sampling: 0.7,
      // 出力されるテキストの背景情報やガイドラインを指定するためのパラメータ。モデルに対して、生成する文章のトーンや内容を制約するための指示を与える
      context: '文学的な表現で、比喩を多めに。舞台設定は現代日本。ファイル名やメタデータは含めるな。',
    },
  };

  // NovelAIのマイページから発行したアクセストークン
  const accessToken = '...';
  
  // ヘッダー情報(認証トークンとコンテンツタイプの指定)
  const headers = {
    Authorization: `Bearer ${accessToken}`,
    'Content-Type': 'application/json',
  };

  // fetch APIを使用してPOSTリクエストを送信する関数
  const generateCharacter = async () => {
    // APIにPOSTリクエストを送信し、結果を取得
    const response = await fetch('https://api.novelai.net/ai/generate', {
      method: 'POST',
      headers: headers,
      body: JSON.stringify(data),
    });

    // レスポンスのJSONデータを取得
    const result = await response.json();
    // 取得した結果をコンソールに表示
    console.log(result);
  };

  // NovelAIを呼び出す
  await generateCharacter()

アクセストークンの取得方法

  • 左上の歯車マーク→アカウント→アクセストークンで取得可能



API定義について

modelに設定できる各種モデルの解説

  • 日本語特化しているのはgenji系、その他のモデルはよく英語を返してくる

1. 2.7B

  • 2.7Bパラメータを持つ軽量モデル。軽量で動作が速く、リソースの消費も少ないため、実験や高速な出力が必要なシナリオに適している。文脈理解はやや弱いが、簡単な生成には十分なパフォーマンスを発揮する。

2. 6B-v4

  • 6Bパラメータを持つ中規模モデルで、精度と生成速度のバランスが取れている。ストーリー生成やダイアログなど、幅広いタスクに対応できる汎用モデル。

3. euterpe-v2

  • より芸術的で創造的な文章を生成するモデル。フィクションや詩など、想像力豊かなコンテンツの生成に向いており、感情表現や文章の流れが重要な場面で強みを発揮する。

4. genji-python-6b

  • 6Bパラメータを持つモデルで、Pythonスクリプト生成に特化している。プログラミングコードの生成に適しており、開発者向けの補助ツールとして使われる。

5. genji-jp-6b

  • 日本語に対応した6Bパラメータモデル。日本語の自然な文章生成や、ローカライズされたコンテンツ作成に特化しており、日本語の文法やニュアンスに強いパフォーマンスを発揮する。

6. genji-jp-6b-v2

  • genji-jp-6bの改良版。v2では精度や文脈理解が向上し、日本語の出力品質がさらに改善されている。より高度な日本語の文章生成に対応。

7. krake-v2

  • クリエイティブなフィクションやファンタジーのストーリー生成に優れたモデル。特に物語の生成において、キャラクターの対話や詳細な描写が得意。v2は精度と創造性が向上している。

8. hypebot

  • コンテンツを誇張表現が多い形に生成するモデル。広告文やキャッチーなフレーズの生成に適している。

9. infillmodel

  • テキストの一部を埋める(補完する)ことに特化したモデル。途中で抜けている部分や空欄の箇所を自然に埋め、文章の整合性を保つ。

10. cassandra

  • 物語生成に強いモデルで、特に悲劇や予言的なテーマに強みを持つ。深い感情表現や重厚なストーリーラインを生成する場面で効果的。

11. sigurd-2.9b-v1

  • 2.9Bパラメータを持つモデル。英雄的なファンタジーや冒険をテーマにしたコンテンツの生成に向いており、勇敢さや冒険心を表現するシーンで力を発揮する。

12. blue

  • カラーテーマに基づいて調整されたバリエーションの1つで、blueは冷静で論理的な文章生成に向いている。科学的な記述や客観的な情報の生成が得意。

13. red

  • redは情熱的で感情の起伏が大きい文章を生成するモデル。強い感情表現や、熱意を伴う文章が必要なシーンに適している。

14. green

  • greenは、穏やかでナチュラルなトーンの文章生成に適している。自然や静けさを表現したいときに使われ、リラックスした雰囲気のコンテンツを生成する。

15. purple

  • purpleはミステリアスで幻想的なトーンの文章生成に向いている。ゴシック、ファンタジー、サスペンスなど、不気味な雰囲気の文章を生成する場面で効果的。

16. clio-v1

  • 歴史的なテーマや古典的なスタイルの文章生成に強みを持つモデル。歴史的な物語や伝記的なコンテンツ生成が得意で、古典的な言い回しを伴う文章を生成する。

17. kayra-v1

  • NovelAIの最新で最も高度なモデルの1つ。文脈理解や創造的な表現力が強化されており、物語生成、キャラクター設定、詳細な描写が得意。特にファンタジーやフィクションで最高レベルのパフォーマンスを発揮する。

Discussion