Nuxt Nation カンファレンスが開催されます。11月12日~13日にご参加ください。


プロジェクトについて

Nuxt ChatGPT は、Nuxt3 ChatGPTモジュールの機能を紹介するために構築されたプロジェクトです。ChatGPTクローンとして機能し、作成したドキュメントをフォルダに整理・分類する機能など、会話や出力を管理するためのユーザーエクスペリエンスを向上させる機能が強化されています。

モジュールについて

このユーザーフレンドリーなモジュールは、Nuxt 3 プロジェクトへのシームレスな実装を可能にする簡単な統合プロセスを誇っています。タイプセーフな統合により、ChatGPTNuxt 3 プロジェクトに苦労なく統合できます。useChatgpt() コンポーザブルを通じて、chat および chatCompletion メソッドに簡単にアクセスできます。さらに、このモジュールは、リクエストが Nitroサーバー 経由でルーティングされるため、APIキーの漏洩を防ぎ、セキュリティを保証します。このモジュールは、openai ライブラリバージョン4.0.0を内部で使用しています。

機能

  • 💪   Nuxt 3 プロジェクトへの容易な実装。
  • 👉   ChatgptのNuxt 3 プロジェクトへのタイプセーフな統合。
  • 🕹️   chatchatCompletiongenerateImage メソッドへの容易なアクセスを提供する useChatgpt() コンポーザブルを提供します。
  • 🔥   リクエストを Nitroサーバー 経由でルーティングすることでセキュリティを確保し、APIキーの漏洩を防ぎます。
  • 🧱   軽量でパフォーマンスに優れています。

はじめに

  1. プロジェクトにnuxt-chatgptの依存関係を追加します
  • npm
    npm install --save-dev nuxt-chatgpt
    
  • pnpm
    pnpm add -D nuxt-chatgpt
    
  • yarn
    yarn add --dev nuxt-chatgpt
    
  1. nuxt.config.tsのmodulesセクションにnuxt-chatgptを追加します
export default defineNuxtConfig({
  modules: ["nuxt-chatgpt"],

  // entirely optional
  chatgpt: {
    apiKey: 'Your apiKey here goes here'
  },
})

これで完了です! NuxtアプリでNuxt Chatgptを使用できるようになりました 🔥

使用方法と例

nuxt-chatgptモジュールでchatchatCompletiongenerateImageメソッドにアクセスするには、useChatgpt()コンポーザブルを使用できます。これにより、それらに簡単にアクセスできます。

chatchatCompletion メソッドには3つのパラメータが必要です

名前タイプデフォルト説明
message文字列chat() のみで使用可能処理のためにGPTモデルに送信するテキストメッセージを表す文字列。
messages配列chatCompletion() のみで使用可能rolecontent を含むオブジェクトの配列
model文字列chat() には gpt-4o-minichatCompletion() には gpt-4o-miniさまざまな種類の自然言語処理タスクの特定のモデルを表します。
optionsオブジェクト{ temperature: 0.5, max_tokens: 2048, top_p: 1 frequency_penalty: 0, presence_penalty: 0 }生成する応答の数、各応答の最大長など、APIリクエストに渡す追加オプションを指定するオプションのオブジェクト。

generateImage メソッドには1つのパラメータが必要です

名前タイプデフォルト説明
message文字列目的の画像のテキストによる説明。最大長は1000文字です。
model文字列dall-e-2 または dall-e-3画像生成に使用するモデル。現在、dall-e-2のみがサポートされています。
optionsオブジェクト{ n: 1, quality: 'standard', response_format: 'url', size: '1024x1024', style: 'natural' }生成する画像の数、品質、サイズ、スタイルなど、APIリクエストに渡す追加オプションを指定するオプションのオブジェクト。

利用可能なモデル

  • text-davinci-002
  • text-davinci-003
  • gpt-3.5-turbo
  • gpt-3.5-turbo-0301
  • gpt-3.5-turbo-1106
  • gpt-4
  • gpt-4o
  • gpt-4o-mini
  • gpt-4-turbo
  • gpt-4-1106-preview
  • gpt-4-0314
  • gpt-4-0613
  • gpt-4-32k
  • gpt-4-32k-0314
  • gpt-4-32k-0613
  • dall-e-2
  • dall-e-3

簡単な chat の使用方法

次の例では、モデルは指定されておらず、デフォルトでgpt-4o-miniモデルが使用されます。

const { chat } = useChatgpt()

const data = ref('')
const inputData = ref('')

async function sendMessage() {
  try {
    const response = await chat(inputData.value)
    data.value = response
  } catch(error) {
    alert(`Join the waiting list if you want to use GPT-4 models: ${error}`)
  }
}
<template>
  <div>
    <input v-model="inputData">
    <button
      @click="sendMessage"
      v-text="'Send'"
    />
    <div>{{ data }}</div>
  </div>
</template>

異なるモデルでの chat の使用方法

const { chat } = useChatgpt()

const data = ref('')
const inputData = ref('')

async function sendMessage() {
  try {
    const response = await chat(inputData.value, 'gpt-4o-mini')
    data.value = response
  } catch(error) {
    alert(`Join the waiting list if you want to use GPT-4 models: ${error}`)
  }
}
<template>
  <div>
    <input v-model="inputData">
    <button
      @click="sendMessage"
      v-text="'Send'"
    />
    <div>{{ data }}</div>
  </div>
</template>

簡単な chatCompletion の使用方法

次の例では、モデルは指定されておらず、デフォルトでgpt-4o-miniモデルが使用されます。

const { chatCompletion } = useChatgpt()

const chatTree = ref([])
const inputData = ref('')

async function sendMessage() {
  try {
    const message = {
      role: 'user',
      content: `${inputData.value}`,
    }

    chatTree.value.push(message)

    const response = await chatCompletion(chatTree.value)
    
    const responseMessage = {
      role: response[0].message.role,
      content: response[0].message.content
    }
    
    chatTree.value.push(responseMessage)
  } catch(error) {
    alert(`Join the waiting list if you want to use GPT-4 models: ${error}`)
  }
}
<template>
  <div>
    <input v-model="inputData">
    <button
      @click="sendMessage"
      v-text="'Send'"
    />
    <div>
      <div
        v-for="chat in chatTree"
        :key="chat"
      >
        <strong>{{ chat.role }} :</strong>
        <div>{{ chat.content }} </div>
      </div>
    </div>
  </div>
</template>

異なるモデルでの chatCompletion の使用方法

const { chatCompletion } = useChatgpt()

const chatTree = ref([])
const inputData = ref('')

async function sendMessage() {
  try {
    const message = {
      role: 'user',
      content: `${inputData.value}`,
    }

    chatTree.value.push(message)

    const response = await chatCompletion(chatTree.value, 'gpt-4o-mini')
    
    const responseMessage = {
      role: response[0].message.role,
      content: response[0].message.content
    }
    
    chatTree.value.push(responseMessage)
  } catch(error) {
    alert(`Join the waiting list if you want to use GPT-4 models: ${error}`)
  }
}
<template>
  <div>
    <input v-model="inputData">
    <button
      @click="sendMessage"
      v-text="'Send'"
    />
    <div>
      <div
        v-for="chat in chatTree"
        :key="chat"
      >
        <strong>{{ chat.role }} :</strong>
        <div>{{ chat.content }} </div>
      </div>
    </div>
  </div>
</template>

簡単な generateImage の使用方法

次の例では、モデルは指定されておらず、デフォルトでdall-e-2モデルが使用されます。

const { generateImage } = useChatgpt()

const images = ref([])
const inputData = ref('')
const loading = ref(false)

async function sendPrompt() {
  loading.value = true
  try {
    images.value = await generateImage(inputData.value)
  } catch (error) {
    alert(`Error: ${error}`)
  }
  loading.value = false
}
<template>
  <div>
    <div v-if="!loading && !images.length">
      <input v-model="inputData">
      <button
        @click="sendPrompt"
        v-text="'Send Prompt'"
      />
    </div>
    <div v-else-if="loading">Generating, please wait ...</div>
    <div v-if="images && !loading" >
      <img v-for="image in images" :key="image.url" :src="image.url" alt="generated-image"/>
    </div>
  </div>
</template>

異なるモデルとオプションでの generateImage の使用方法

const { generateImage } = useChatgpt()

const images = ref([])
const inputData = ref('')
const loading = ref(false)

async function sendPrompt() {
  loading.value = true
  try {
    images.value = await generateImage(inputData.value, 'dall-e-2', {
      n: 1,
      quality: 'standard',
      response_format: 'url',
      size: '1024x1024',
      style: 'natural'
    })
  } catch (error) {
    alert(`Error: ${error}`)
  }
  loading.value = false
}
<template>
  <div>
    <div v-if="!loading && !images.length">
      <input v-model="inputData">
      <button
        @click="sendPrompt"
        v-text="'Send Prompt'"
      />
    </div>
    <div v-else-if="loading">Generating, please wait ...</div>
    <div v-if="images && !loading" >
      <img v-for="image in images" :key="image.url" :src="image.url" alt="generated-image"/>
    </div>
  </div>
</template>

chat vs chatCompletion

chat メソッドを使用すると、ユーザーはOpenAI APIにプロンプトを送信して応答を受信できます。このエンドポイントを使用して、ユーザーと自然な方法で対話できる会話型インターフェースを構築できます。たとえば、chatメソッドを使用して、カスタマーサービスの質問に答えたり、製品やサービスに関する情報を提供したりできるチャットボットを構築できます。

chatCompletion メソッドは chat メソッドに似ていますが、より長く、より複雑な応答を生成するための追加機能を提供します。具体的には、chatCompletionメソッドでは、会話履歴を入力として提供できます。APIはこれを使用して、会話のコンテキストと一致する応答を生成できます。これにより、ユーザーとより長く、より自然な会話を交わすことができるチャットボットを構築できます。

モジュールオプション

名前タイプデフォルト説明
apiKey文字列xxxxxxapiKeyはここに入力します
isEnabledブール値trueモジュールを有効または無効にします。デフォルトは True です。

貢献

貢献は、オープンソースコミュニティを学習、刺激、創造のための素晴らしい場所にします。皆様のご貢献に心より感謝申し上げます。

改善のための提案がある場合は、リポジトリをフォークしてプルリクエストを作成してください。「機能強化」タグを付けて issue を開くこともできます。プロジェクトにスターを付けるのをお忘れなく!改めて感謝いたします!

  1. プロジェクトのフォーク
  2. フィーチャブランチの作成 (git checkout -b feature/AmazingFeature)
  3. 変更のコミット (git commit -m 'Add some AmazingFeature')
  4. ブランチへのプッシュ (git push origin feature/AmazingFeature)
  5. プルリクエストを開く

ライセンス

MITライセンスの下で配布されます。詳細については、LICENSE.txt を参照してください。

連絡先

Oliver Trajceski - LinkedIn - oliver@akrinum.com

プロジェクトリンク: https://nuxtchatgpt.com

開発

# Install dependencies
npm install

# Generate type stubs
npm run dev:prepare

# Develop with the playground
npm run dev

# Build the playground
npm run dev:build

# Run ESLint
npm run lint

# Run Vitest
npm run test
npm run test:watch

# Release new version
npm run release

謝辞

このスペースを使用して、役立つと思われるリソースをリストし、クレジットを付与してください。始めるために、私のお気に入りをいくつか追加しました!