ローカルでSupabaseを起動して制限なしで無料で使う

superbase

今日は前回紹介したクラウドのバックエンドサービスSupabaseをローカルで実行させる方法を紹介します。このやり方ではローカルのPostgreSQLデータベースを使用して、ローカルで実行されているSupabaseのインスタンスを使えるのでお金にも管理にも制限がありません。 まずは前回の記事を読んでおきましょう。 では早速Supabaseのセットアップに移ります。 Supabase CLIのインストール npmを使ってSupabaseをインストールします。詳しくはGitHubのドキュメンテーションを参照してください。 https://github.com/supabase/cli 次に、supabasをインストールします。 Docokerをインストール SupabaseはDockerのコンテナを使ってDBやUIアプリのスタックを管理しています。 今回はデスクトップアプリをインストールしますが同じことがDockerCLIでもできます。 ではOSにあったものをインストールしてください。 Supabaseインスタンスのイニシャライズ では下記のコマンドでSupabaseをイニシャライズします。 次にSupabaseのインスタンスをスタートします。 そうするとDockerのアプリケーションのほうでSupabaseのコンテナが起動してイメージが使用されていることがわかります。 ではContianerタブにあるSupabaseをクリックしその中の一覧からsupabase_studio_supabseを探します。 これがUIアプリのインスタンスですのでURLをクリックしてhttp://localhost:54323/を開きます。 これでローカルからSupabaseを起動することができました!

SvelteでSupabaseを使う例

superbase

今日は最近流行りのSvelteスタックで基本的な操作を理解できる例を紹介しますね。 Supabaseのセットアップ 前回のSupabaseの記事を読んでおきましょう。 次に、テーブルを準備します。 このスクリプトを選択します。 “Run”または “Execute” ボタンをクリックして選択したスクリプトを実行します。これにより、データベースに「Todo」テーブルが作成され、必要な行レベルのセキュリティルールも設定されます。 スクリプトが正常に実行されると、テーブルとルールが作成されたことを示す確認メッセージが表示されます。 “Data” タブに移動して、「Todo」テーブルが作成されていることを確認できます。 APIキーの取得 URLとキーの取得 プロジェクト設定に移動して(歯車アイコン)、APIタブを開き、API URLと匿名キー(anon key)を見つけてください。これらは次の手順で必要になります。 匿名キーは、クライアント側のAPIキーです。ユーザーがログインするまで、データベースへの「匿名アクセス」を許可します。ユーザーがログインしたら、キーはユーザー自身のログイントークンに切り替わります。これにより、データの行レベルのセキュリティが有効になります。 注意:サービスロールキーはセキュリティポリシーをバイパスし、データに完全なアクセス権を持っています。これらのキーは秘密に保つ必要があり、サーバー環境でのみ使用され、クライアントやブラウザ上で使用しないでください。 プロジェクトのクローン SupabaseのプロジェクトができたらSvelteのToDoリストのサンプルリポジトリがるのでこれをクローンしましょう。 https://github.com/supabase/supabase/tree/master/examples/todo-list/sveltejs-todo-list 下記のコマンドだとSupabaseの全部のリポがクローンされてしまうのでサイズはちょっと大きいかも ではSvelteの例があるディレクトリに移動してライブラリをインストールしましょう。同じディレクトリにNext.jsとNuxt.jsで作られたToDoリストのサンプルプロジェクトもあるようですね。 ではcode . のコマンドでVSCodeを開きましょう。 ルートディレクトリに.env.exampleのファイルがあるので名前を.envに変更します。 次に中にある環境変数に先ほどSupabaseでとってきた値を入力します。 アプリの起動 ではnpm run devのコマンドでSvelteアプリを起動します。 でサインアップをするとメールにちゃんとサインアップの確認メールが届きました。 そうするとToDoリストに誘導されてタスクを入力できるようになりましたね。 登録されたユーザーはAUthentication(認証)タブのユーザーから確認できますね。 でSvelteのアプリから追加したタスクもデータベースのテーブルに反映されていました。 Googleでのログインを追加する まずは、Gooelデベロッパーコンソールからプロジェクトを作成をします。Google Developer ConsoleからSupabaseのGoogle認証に使用するOAuthのClient IDを取得する手順は以下の通りです: ではSupabaseの認証タブでキーを登録します。 これだけで、OKです。素晴らしいですね。 ではGoogleでもログインできることを確認しましょう。 今日はコードの説明なしですが、次回詳しくSvelteのファイル構成と一緒に見ていきましょう。

Firebaseの代替バックエンド、Supabaseを使ってみよう

superbase

今日はSupabaseを紹介します。 「Supabase」は、オープンソースのプラットフォームで、バックエンドサーバー、データベース、認証、リアルタイムデータ、ストレージなどの機能を提供するBaaS(Backend as a Service)プロバイダーです。Supabaseは、アプリケーションの開発者がアプリケーションのバックエンド機能を迅速かつ簡単に構築および管理できるようにするために設計されています。 主な特徴と機能: Supabaseは、モダンなWebおよびモバイルアプリケーションのバックエンドを効率的に構築するための強力なツールとして広く利用されています。アプリケーションのバックエンドを設計、実装、デプロイするプロセスを簡素化し、開発者がフロントエンドに焦点を当てるのに役立ちます。 更にFirebaseではNoSQLしか提供していないのでPostgreSQLを使い方は必然的にこちらになりますね。 Supabaseのプロジェクトを始める では下記のサインインのページからSupabaseにサインインしましょう。 https://supabase.com/dashboard/sign-in? メールアドレスでサインアップしてもよいですし、GitGubのアカウントからサインインしてもOKですね。 サインイン後にダッシュボードからNew Projectを選択して新しいプロジェクトを作成しましょう。プロジェクトはOrganization(組織)に紐づくので組織を作成することになります。ここで無料のプランを選んでおきましょうね。 そのままDBのパスワードの設定の画面へ。 セットアップが完了するとダッシュボードのページにもどされ、APIキーやらが表示されます。 もちろん、公開しないこと! テーブルエディター 左側にあるメニューの上にテーブルエディターがあります。ここでUI上でPostgreSQLデータベースのテーブルを作成してデータを作成することもできますね。 Enable Row Level Security (RLS)とは Enable Row Level Security (RLS)は、テーブルへのアクセスを制限するためのセキュリティ機能です。RLSは行ベースのセキュリティ制御を提供し、データベース内の各行に対してアクセスポリシーを設定できます。この機能を有効にすることにより、データベースの安全性を向上させ、機密性の高いデータを保護できます。 RLSの利点は以下の通りです: RLSを有効にすると、ポリシーを設定してデータベースのセキュリティを強化できます。ポリシーは、特定のユーザーやロールに対するアクセス権を制御し、データのプライバシーとセキュリティを確保します。RLSは特に多くのユーザーやロールが存在し、データへの細かいアクセス制御が必要な場合に有用です。 データの挿入 次にInsertボタンを使って手動でデータを入力してみましょう。わかりやすいので説明不要ですね。 参考API 次に右上の<>APIのボタンをクリックします。 ここで使えるAPIの一覧が例で出てきます。

【LangChainドキュメンテーション・JS版】概要とインストール

この記事はLangChainのJavaScriptバージョンのドキュメンテーションを翻訳したものです。 LangChain は、言語モデルを活用したアプリケーションを開発するためのフレームワークです。私たちは、最も強力で差別化されたアプリケーションは、単に API 経由で言語モデルを呼び出すだけでなく、以下の特徴を備えると考えています。 LangChain フレームワークは、上記の原則を考慮して設計されています。 はじめに 以下のガイドをチェックして、LangChain を使用して言語モデルアプリケーションを作成する手順を確認してください。 コンポーネント LangChain は、いくつかの主要なモジュールのサポートを提供しています。各モジュールには、いくつかの例と概念に慣れるためのリンクがあります。各例は、使用されているモジュールの API ドキュメントにもリンクしています。 これらのモジュールは以下のとおりです(複雑さの順): API リファレンス LangChain のすべてのモジュールの API リファレンス、エクスポートされたクラスと関数の詳細なドキュメントは、以下からご覧いただけます。 API Reference 本番環境 プロトタイピングから本番環境への移行にあたり、以下のリソースを開発中です。 追加のリソース アプリケーションの開発に役立つと思われる追加のリソースのコレクションです。 サポートされている環境 LangChain は TypeScript で書かれており、次の環境で使用することができます。 クイックスタート もしも Node.js で LangChain を素早く始めたい場合は、このリポジトリをクローンして README の手順に従って依存関係が設定されたボイラープレートプロジェクトを作成してください。 もしくは、ご自身でセットアップを行いたい場合や他の環境で LangChain を実行したい場合は、以下の手順をご覧ください。 インストール LangChain をインストールするには、以下のコマンドを使用します。 または、以下のコマンドを使用してインストールすることもできます。 TypeScript LangChain は TypeScript で書かれており、すべての公開APIに対して型定義が提供されています。 ライブラリの読み込み ESM … Read more

【Node.js】ChatGPTに自分のデータに対して質問させる

前回の記事ではPythonで同じことを行いました。今回はNode.jsを使ってChatGPTに自分で準備したテキストファイルを読ませてそれに対して質問させるアプリのデモを作成します。 目的 ユーザーがChatGPTに質問をするとOpenAIが持っているデータベースを参照して回答してくれます。しかしこのデータは2021年までしか保存されていないため、それ以降のデータは質問しても回答してくれません。しかし自分で準備しておいたデータ(大量のファイルも可能)を読ませておくことで自分の好きな著者と会話をしたり、最新のデータから必要なデータを検索させるシステムを作成することが可能になります。 プログラムの完成イメージ このように通常ChatGPTが知らないデータでも事前に教えておくことでチャット形式でデータを参照することができるようになります。 使用するテクノロジー 今回はOpenAIのAPIキー(有料、カード登録が必要)が必要になります。先に下記の記事を読んで各フレームワークの理解とキーの取得をしておきましょう。 リポジトリのクローン ではこちらのGitHubのリポからコードをクローンしましょう。 ファイルの実行は下記のコマンドでできます。(APIキーを登録しないとエラーになります。) 下準備 テキストファイルの準備 では、ChatGPTに読み込ませたいファイルを準備しましょう。ファイル名はconst txtFilenameに格納しておきます。 APIキーを環境変数に登録 OpenAIのAPIキーを.envファイルに保存します。 コードの説明 ではindex.jsを見てください。 このコードは、Node.jsを使用してOpenAIのRetrieval-based Question Answering(質問応答)モデルを実装するものです。以下に、コードの主な機能を説明します。 このコードは、OpenAIのモデルとベクトルストアを使用してユーザーの質問に応答するシンプルな質問応答システムを作成しています。ユーザーが質問を入力すると、モデルが応答を生成し、それがコンソールに表示されます。 OpenAIモジュール OpenAIモジュールは、OpenAIの自然言語処理モデルを利用するためのモジュールです。このモジュールは、OpenAIのAPIとの通信やテキスト生成タスクの実行を簡素化するための機能を提供します。 OpenAIモジュールを使用すると、以下のようなことが可能です: OpenAIモジュールは、様々な自然言語処理タスクに対して利用されます。具体的には、文章生成、文章の意味理解、文章の分類、質問応答などのタスクに使用されます。 コードの例では、OpenAIモジュールが使用されています。OpenAIクラスをインスタンス化し、そのインスタンスを利用してOpenAIのモデルを初期化しています。このモジュールを使用することで、OpenAIのモデルを簡単に利用できます。 RetrievalQAChainモジュールとは RetrievalQAChainは、質問応答(Question Answering)タスクを処理するためのモジュールです。このモジュールは、与えられた質問に対して適切な回答を見つけるために使用されます。 具体的には、RetrievalQAChainは以下のような機能を提供します: RetrievalQAChainは、ベクトルストアを使用して質問と回答の類似性を計算し、最も適切な回答を見つけるための機能を提供します。このモジュールは、大規模なテキストデータセットから効率的に質問に対する回答を見つけることができます。 コードの例では、RetrievalQAChainモジュールがOpenAIのモデルとベクトルストアリトリーバーを使用して初期化され、質問が与えられると回答が取得されます。質問と回答の検索は、ベクトルストアの中から最も類似した文書を見つけることによって行われます。 HNSWLibモジュール HNSWLibモジュールは、高次元のベクトルデータの効率的なインデックス構築と検索を可能にするためのモジュールです。HNSWは、ハイブリッドネットワークスワップ(Hierarchical Navigable Small World)と呼ばれるアルゴリズムを使用して、高次元ベクトルの類似性検索を高速に実行します。 HNSWLibモジュールは、LangChainという自然言語処理ライブラリの一部として提供されています。このモジュールは、ベクトルストアの作成と操作を行うためのインターフェースを提供します。 具体的には、HNSWLibモジュールを使用すると、以下のようなことが可能です: HNSWLibは、高次元ベクトルの類似性検索において効率的でスケーラブルな解決策を提供するため、情報検索、機械学習、自然言語処理などの分野で広く利用されています。上記のコード例では、HNSWLibモジュールが使用されており、ベクトルストアのロードや作成に利用されています。 OpenAIEmbeddingsモジュールとは OpenAIEmbeddingsモジュールは、LangChainという自然言語処理ライブラリの一部として提供されているモジュールです。このモジュールは、テキストデータや文章をベクトル表現に変換するための機能を提供します。 具体的には、OpenAIEmbeddingsモジュールを使用すると、以下のようなことが可能です: OpenAIEmbeddingsモジュールは、自然言語処理タスクにおいてテキストデータの表現や解析に広く活用されます。テキストデータをベクトルに変換することで、機械学習モデルの入力や比較、検索などのさまざまなタスクを実行することができます。上記のコード例では、OpenAIEmbeddingsモジュールが使用されており、ドキュメントからベクトルストアを作成する際に利用されています。 ベクトルストアファイル ベクトルストアファイル(Vector Store file)は、テキストや文書の埋め込み(ベクトル化)を保存して管理するためのファイルです。ベクトルストアは、テキストデータを高次元の数値ベクトル空間にマッピングし、各文書をベクトルとして表現します。これにより、類似性の計算や検索などの情報検索タスクを効率的に実行できます。 ベクトルストアファイルは、一般的にデータベースや検索エンジンのバックエンドとして使用されます。ファイルには、テキストデータの埋め込みベクトルや関連するメタデータが格納されます。これにより、大規模な文書コレクションを効率的に管理し、特定の質問や検索クエリに対して迅速な検索結果を提供することができます。 ベクトルストアファイルは、一度作成されると、後続の検索や質問に対して再利用できます。これにより、テキストデータの埋め込み処理を繰り返し行う必要がなくなり、処理時間やリソースの節約につながります。 コードの例では、ベクトルストアファイルを使用してテキストデータを保存し、ユーザーの質問に対して迅速に応答するために利用しています。ファイルが存在しない場合は、テキストデータを埋め込み処理してベクトルストアファイルを作成し、次回以降の検索に使用します。ファイルが存在する場合は、ベクトルストアファイルをメモリに読み込んで再利用します。 OpenAIEmbeddingsモジュールとは OpenAIEmbeddingsは、テキストデータの埋め込み(ベクトル化)を行うためのクラスです。このクラスのメソッドは、与えられたテキストデータをOpenAIの埋め込みモデルを使用してベクトルに変換します。 具体的には、OpenAIEmbeddingsクラスの主要なメソッドは次のとおりです: … Read more

【Python】ChatGPTとLangChain使って自分のデータから検索させる

目的 ユーザーがChatGPTに質問をするとOpenAIが持っているデータベースを参照して回答してくれます。しかしこのデータは2021年までしか保存されていないため、それ以降のデータは質問しても回答してくれません。例として2022年にリリースされたLangChainのフレームワークのことをChatGPTに質問すると下記の画像のように知らないと回答されます。 また、自分でアップロードしたデータを参照させたい場合もファイルのサイズに制限があります。 しかし、今日紹介する、PyhotnフレームワークのLangChainとChatGPTを使用することで自分で指定したデータからクエリさせることが可能になります。例として同じLangChainについて質問をさせました。そしてChatGPTにLangChainのドキュメンテーション(英語)を読み取りさせています。ChatGPTに読ませたファイルはGitHubのdataディレクトリ内にあります。 このテクノロジーはアメリカの大企業のQ&Aやカスタマーサポートなどで使われ始めている機能で、すぐに当たり前の技術になってくるでしょう。(私がアメリカにいるので日本ではどれくらい復旧しているかは確認していません。) 完成したコードはGitHubから見てください。 先に準備(理解)しておくこと 今回のプロジェクトにはOpenAIのAPIキーが必要になります。このキーを取得するにはクレジットカードを登録する必要があります。テストくらいのリクエストのみであればジュース代だと思って使うのもありだと思います。※自己責任で進めてください。 chromaDBはオプショナルですが、ChatGPTに入力した記録を残しChatGPTがその会話をデータとして参照できるようにします。 LangChainは今回の主役になるフレームワークです。 プロジェクトのセットアップ では下記のコマンドでGitHubからリポジトリをクローンしましょう。 以下に手順を詳しく説明します: APIキーを貼り付ける constantsCOPY.pyのファイル名からCOPYを取り除き、constants.pyにします。次にChatGPTのAPIキーを貼り付けます。 ファイルを実行する ではdataディレクトリにchatGPTに読ませたいデータを入れておきます。.txtファイル、PDFファイル、CSVファイル、JSONファイルなどが読み込み可能です。 次に下記のコマンドでpyファイルを実行します。 では次にコードを詳しく説明します。 メソッドのインポート リポジトリになるように下記に必要なメソッドとモジュールをインポートします。 ChromaDBのコンフィグ この行は、モデルをディスクに保存して再利用するための設定を行っています。 PERSIST は、モデルをディスクに保存して再利用するかどうかを制御するためのブール値の変数です。現在は False に設定されていますので、モデルの永続化は無効になっています。 PERSIST を True に設定すると、モデルがディスクに保存され、同じデータに対して繰り返しクエリを実行する場合に、モデルを再作成する必要がありません。これにより、処理時間を節約できます。 ただし、モデルをディスクに保存すると、ディスク容量の使用量が増えることに注意する必要があります。また、ディスク上の保存データの管理や更新も考慮する必要があります。 クエリの作成 このコードは、query 変数を使用してインデックスを再利用するかどうかを判断し、その結果に応じてインデックスを作成します。 まず、query を None に初期化します。次に、条件 len(sys.argv) > 1 を使用して、コマンドライン引数の数が1つ以上あるかどうかをチェックします。もし引数が存在する場合、sys.argv[1] の値が query に代入されます。 その後、PERSIST が True かつ “persist” という名前のディレクトリが存在する場合、インデックスを再利用していることを示すメッセージが表示されます。Chroma クラスのインスタンスである vectorstore を作成し、VectorStoreIndexWrapper … Read more

【埋め込みデータベース】Chromaとは

埋め込みデータベースとは 埋め込みデータベース(Embedding Database)は、データの特徴表現を効率的に保存・検索するためのデータベースです。埋め込み(Embedding)は、データを低次元のベクトル空間に変換する手法であり、データの意味や特徴を抽出した表現を得ることができます。 埋め込みデータベースは、一般的に機械学習や自然言語処理のタスクにおいて特に有用です。例えば、顔認識システムでは、顔画像を埋め込みベクトルに変換してデータベースに格納し、そのベクトルとの距離を計算することで、特定の人物の顔を識別することができます。また、文書の類似性検索では、文書を埋め込みベクトルに変換し、ベクトル間の距離を計算して類似した文書を検索することができます。 埋め込みデータベースは、高速な検索やクエリ処理を実現するために最適化されています。特に、近傍探索(Nearest Neighbor Search)などの高度な検索アルゴリズムが使用され、大規模なデータセットに対しても効率的な操作が可能です。 Chromaとは Chromaはオープンソースの埋め込みデータベースです。Chromaは、知識、事実、スキルをLLM(Language Model)にプラグイン可能にすることで、LLMアプリケーションの構築を容易にします。 Chromaは、以下のような機能を提供します: Chromaは、以下の点を重視しています: Chromaには、PythonクライアントSDK、JavaScript/TypeScriptクライアントSDK、およびサーバーアプリケーションが含まれています。 Chromaのインストール Python Pythonでは、Chromaはメモリ内またはクライアント/サーバーモード(アルファ版)で実行することができます。 メモリ内モードでは、Chromaはデータベースをメモリ内に展開し、データを高速に処理することができます。これは小規模なデータセットや一時的な処理に適しています。 クライアント/サーバーモードでは、Chromaはクライアントとサーバーの役割を分けて動作します。クライアントはPythonのChromaクライアントSDKを使用してデータベースにアクセスし、サーバーはChromaサーバーアプリケーションを実行してデータの永続的な保存と検索を担当します。これにより、大規模なデータセットや分散環境での処理が可能となります。 ただし、クライアント/サーバーモードは現在アルファ版であり、開発中の機能です。 Chromadbインストールのエラー 上記のコマンドでchromadbをインストールするとエラーがでるかもしれません。 エラーの原因一つの理由として、Pythonのバージョンがあげられます。最新のPythonをインストールして再度試してみましょう。 次にpipのバージョンも最新のものに更新しておきます。 ウィンドウズのビルドツールからMicrosoftのC++ビルドツールをインストールする このエラーについてはGitHubの ではこのリンクからMicrosoftのビルドツールをダウンロードします。 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 実行ファイルを起動してVisual Studio Installerを起動します。Modifyをクリックします。 次にIndivisual Componentsのタブから、MSVCのツールを探します。これは自分のマシンによって選択するものが変わりますが、Windowsの場合はx64/x86になります。 次にwindows11(若しくは10)のSDKを探しチェックします。 ではこの2つを選択した状態で右下のModifyのボタンを押しましょう。 では再度pip install chromadbのコマンドを実行します。 私の場合はこれでうまくいきました! これでもまだうまくいかない場合はGitHubのIssueを確認しましょう。 https://github.com/chroma-core/chroma/issues/189

LangChainとは

LangChainとは LangChainは2022年にリリースされたライブラリになるのでChatGPTに聞いても教えてくれません。(ChatGPTは2021年までのデータまでしか把握していません。) 以下に、なぜLangChainがChatGPTを使用するうえで重要なライブラリになるかを説明します。 LangChainは、自然言語処理(NLP)のためのライブラリとツールセットです。LangChainは、様々なNLPタスクにおいて効率的かつ柔軟な開発を支援するために設計されています。 LangChainの主な機能とコンポーネントには以下があります: LangChainはこれらのコンポーネントを組み合わせて使用することで、自然言語処理のさまざまなタスクを効率的に実行することができます。 つまり、我々が提供するデータからChatGPTを使ってユーザーと対話側のコミュニケーションが取れるアプリケーションが作成できるライブラリになります。 PythonとJavaScript LangChainはPythonとJavaScriptの両方で使用することができます。PythonライブラリはこのGitHubリポを参照してください。JavaScriptGitHubリポはこちらから確認してください。 LangChainが正しい回答をクエリする流れ LangChainにおけるベクターデータベースから質問の回答に近い答えをクエリする一般的な流れは次のようになります: この流れに従ってLangChainを使用することで、ベクターデータベースから質問に近い回答を効率的にクエリすることができます。LangChainの機能とコンポーネントは、この流れをサポートするために設計されており、柔軟性と効率性を提供します。 つまり。。。 上記までの内容をもっと分かりやすくまとめます。 通常はユーザーがChatGPTに直接アクセスする流れになります。 しかしLangChainを使用することでChatGPTなどの言語モデルを介して、自分のデータを参照させることができます。 なぜこれがゲームチェンジャーかというと、このLangChainを使用することでほとんどすべての企業でベネフィットを得ることができるようになります。例えば社内でのドキュメントの検索、ユーザーがマニュアルやデータを参照する際のプラットフォームの作成など、使用方法は無限です。またGoogleに接続することでリアルタイムの情報(天気やニュースなど)を理解させることも可能になります。 LangChainのインストール(Python) 今回の記事ではPythonのライブラリに絞って解説をしていきます。 これでLangChainの最低限必要なライブラリがインストールされます。LangChainの強みは、さまざまなモデルプロバイダやデータストアなどと統合する際に生じます。ただし、そのために必要なモジュールはデフォルトではインストールされません。 一般的なLLMプロバイダに必要なモジュールをインストールするには、次のコマンドを実行してください。 環境の設定 LangChainを使用する場合、通常は1つ以上のモデルプロバイダ、データストア、APIなどとの統合が必要となります。この例では、OpenAIのモデルAPIを使用します。 まず、OpenAIのPythonパッケージをインストールします。 APIへのアクセスにはAPIキーが必要です。アカウントを作成し、こちらにアクセスすることでAPIキーを取得できます。キーを取得したら、環境変数として設定するために次のコマンドを実行します。 環境変数を設定したくない場合は、OpenAIのLLMクラスを初期化する際にopenai_api_keyという名前のパラメーターを直接渡すこともできます。 アプリケーションの構築 さて、言語モデルアプリケーションの構築を始めましょう。LangChainは、言語モデルアプリケーションの構築に使用できる多くのモジュールを提供しています。モジュールは単体で簡単なアプリケーションで使用することもできますし、より複雑なユースケースではモジュールを組み合わせることもできます。 LLMs 言語モデルから予測を取得する LangChainの基本的な構築ブロックはLLM(Language Model)であり、テキストを受け取り、さらなるテキストを生成します。 例として、企業の説明に基づいて企業名を生成するアプリケーションを構築しているとしましょう。これを行うために、OpenAIモデルのラッパーを初期化する必要があります。この場合、出力をよりランダムにしたいので、モデルを高いtemperatureで初期化します。 そして、テキストを渡して予測を取得できます。 チャットモデル チャットモデルは、対話型言語モデルです。チャットモデルは言語モデルを内部で使用しますが、公開するインターフェースは少し異なります。通常の「テキストの入力とテキストの出力」のAPIではなく、複数のメッセージを入力として受け取り、応答としてメッセージを返します。 チャットモデルには、1つ以上のメッセージをチャットモデルに渡すことでチャットの補完を取得できます。応答はメッセージとして返されます。LangChainで現在サポートされているメッセージの種類はAIMessage、HumanMessage、SystemMessage、ChatMessageであり、ChatMessageは任意の役割パラメータを受け取ります。ほとんどの場合、HumanMessage、AIMessage、SystemMessageの3つのメッセージを使用します。 チャットモデルが通常のLLMとどのように異なるかを理解することは役立ちますが、通常は同じように扱えると便利です。LangChainでは、チャットモデルと同様にLLMとやり取りするためのインターフェースも提供されています。これは、predictインターフェースを介してアクセスできます。 プロンプトテンプレート プロンプトテンプレート(Prompt Templates)は、ほとんどのLLMアプリケーションではユーザーの入力を直接LLMに渡さず、通常はユーザーの入力を追加の文脈情報を提供するより大きなテキスト、つまりプロンプトテンプレートに追加します。 先ほどの例では、モデルに渡したテキストには企業名を生成するための指示が含まれていました。アプリケーションでは、ユーザーが企業や製品の説明を提供するだけで、モデルに指示を与える必要はないと便利です。 Chains チェーン(Chains)を使用すると、モデル、プロンプトテンプレート、他のチェーンなど、複数のプリミティブをリンク(またはチェーン)して組み合わせることができます。 チェーンは、LangChainフレームワークにおいて、異なるプリミティブを連結して組み合わせるための仕組みです。これにより、モデルとテンプレートを結びつけて特定のタスクを実行することができます。 たとえば、モデルとプロンプトテンプレートを組み合わせて、特定のテキスト生成タスクを実行するチェーンを作成することができます。また、より複雑なアプリケーションを構築するために、複数のチェーンを結合して使用することもできます。 チェーンは、LangChainの柔軟性と拡張性を高める重要な要素であり、異なるプリミティブを組み合わせることで、さまざまなタスクに対応できるようになります。 Agents エージェント(Agents)は、入力に基づいて動的にアクションを選択する必要がある複雑なワークフローを処理するために使用されます。 エージェントは、言語モデルを使用して、どのアクションを取るか、どの順序で取るかを決定します。エージェントはツールにアクセス権があり、ツールを選択し、実行し、出力を観察して最終的な回答を導き出すまで、繰り返し動作します。 エージェントを読み込むには、次の要素を選択する必要があります: LLM/Chatモデル:エージェントのバックエンドとなる言語モデルです。 ツール:特定のタスクを実行するための関数です。例えば、Google検索、データベース検索、Python REPL、他のチェーンなどが含まれます。事前定義されたツールとその仕様については、ツールのドキュメントを参照してください。 エージェント名:サポートされているエージェントクラスを参照する文字列です。エージェントクラスは、言語モデルがどのアクションを選択するかを決定するために使用するプロンプトによって主にパラメータ化されます。 … Read more

【ChatGPT】Vue.jsを使ってAIチャットアプリを作成しよう

ChatGPTを使ってチャットアプリを作ろう

今日はVueフレームワークを使用した簡単なチャットアプリを紹介します。初めてChatGPTを使う人にも分かりやすく基本だけをまとめた簡単なものです。しかし、AIが今までの会話を記憶しているように構築できるので、過去の会話を参考にした質問も可能になります。 もちろん、記録を残したい場合は、別にデータベースなどを作成しないとブラウザがリロードした際にすべて初期化されてしまいます。 完成したコードはGitHubのリポジトリから見てください。 完成したものはこんな感じになります。 先に知っておくべきこと User-Agent エラー 上記の記事で紹介したNodeでChatGDPを使ったCLIではopenaiのライブラリを使いました。しかし、クライアント側で実行できるJavaScriptアプリでnpm i openaiでインストールしたライブラリを使ってOpenAIををコールをかけると下記のエラーが出ます。 これは前回の記事で使用したopenaiライブラリはより安全なNode.jsやPythonなどのサーバー側からのコールを許可したもののみになるからです。 今回はaxiosを使ってコールをかけますが、下記にopenAIのエンドポイントにHTTPリクエストを送るaxiosを使わないサンプルコードを紹介しておきます。 今日の記事では、axiosのライブラリを使って作業をするので自分の好みでコードを変えてください。 Vueのセットアップ ではViteを使ってVueのプロジェクトを作成します。 次にaxiosをインストールします。 では、テキストエディタを開いて、早速コードを書いていきます。 コードを書こう では以下のようにApp.vueにコードを書いていきます。 App.vue 補足: 最後にスタイルを追加して完了です。 アプリの検証とまとめ ではnpm run devのコマンドでアプリを起動してテストしてみましょう。 今日は基本のOpenAI APIの使い方を紹介しました。 OpenAIのAPIを使用すると、さまざまなタスクとアプリケーションを構築できます。以下にいくつかの例を挙げます: このように色々なことに活用できそうなので今後も注目が集まりそうです。

【10分でできる】Node.jsを使ってChatGPTのAPIを使用したチャットCLIを作成

Node.jsでChatGPTを使ってみよう

今日の記事で紹介するChatGPTのAPIキーの取得の仕方はこちらの記事を参考にしてください。 完成したコードはGitHubのリポジトリから見てください。 https://github.com/DanNakatoshi/Node-ChatGPT-CLI 初めに この記事では、Node.jsとChatGPTを使用してチャットアプリケーションを構築する基本的な方法を紹介します。Node.jsのCLIアプリとして動作するチャットアプリケーションを作成し、OpenAIのChatGPTを活用してAIとの対話を実現します。このチュートリアルに従えば、誰でも簡単に始めることができます。 このサンプルコードを利用して、メールの起案や他の文章作成、ドキュメントに関する質問への回答、対話エージェントの作成、ソフトウェアに自然言語インターフェースを与えること、さまざまな科目でのチュータリング、言語の翻訳など、様々な活用方法があります。 この記事では、チャットの完成機能を使ってチャットアプリケーションを構築する基本を学びます。プログラマーの方でも簡単に始められるような内容です。このチュートリアルに従って進めれば、自分でもできると思えるようになるでしょう。 このチュートリアルは、gpt-3.5-turboモデルをベースにしています。 前提条件として、JavaScript、CSS、Node.jsの基本的な知識が必要です。 また、chatGPTがホストされているOpenAIプラットフォームのアカウントも必要です。アカウントは無料で作成できますので、こちらから作成してください。 Node.jsを使用してCLIチャットAIアプリを作成する方法について、以下に焦点を当てて説明します。 まず、プロジェクトのためのディレクトリを作成します: これにより、プロジェクトの詳細を追跡するためにpackage.jsonファイルが作成されます。 以下のコードをファイルに追加します: これにより、ES6モジュールのimport文を使用することができるようになります。 次のコマンドを使用してOpenAIをインストールします: メインのコードが実行できるファァイルを作成します。ファイルの名前はindex.jsとしますt: OpenAIモジュールからConfigurationとOpenAIApiをimportし、readlineモジュールからreadlineをimportします: ※readlineモジュールは、Node.jsの組込みモジュールの1つであり、コンソールやターミナル上でのユーザーの入力を扱うためのインタラクティブな機能を提供します。 次のようにOpenAIの設定を構築します: ※APIKeyは他人とシェアしないこと!また.envファイルの環境変数から呼ぶようにしましょう。 このコードはConfigurationオブジェクトの新しいインスタンスを作成します。その中には、アカウントが組織の場合は企業コードとapiKeyの値を入力します。組織の詳細は「設定」で確認でき、apiKeyの情報は「APIキー」で確認できます。既存のAPIキーを持っていない場合は、新しく作成できます。個人アカウントで作成した場合は、組織のコードは不要になります。 次のコードを設定の後に入力して、OpenAI APIの新しいインスタンスを作成します: これをプロジェクト全体で使用します。 以下のコードを入力してcreateChatCompletion関数をテストします: このコードはcreateChatCompletion関数を呼び出し、エンドポイント(https://api.openai.com/v1/chat/completions)をトリガーします。この関数は、使用するchatGPTのモデルと、ユーザーとAIの間のメッセージの配列という引数のオブジェクトを受け取ります。次のセクションで、チャットの履歴を保持し、アプリを改善するためにメッセージ配列を使用する方法について見ていきます。 各メッセージは、送信者(つまり、メッセージがAIからのものであればassistant、人間からのものであればuserという値)と内容(送信される情報)を含むオブジェクトです。 最後に、以下のコマンドを使用してターミナルでファイルを実行します: 数秒後にAIからの応答が返されます。 これでチャットボットを作成するために必要なものがすべて揃いました! ただし、ユーザーがメッセージの内容をコードにハードコーディングするのではなく、ユーザーからの入力をリクエストしてアプリケーションをよりインタラクティブにすることが望ましいでしょう。readlineモジュールがそのために役立ちます。 インタラクティブにするために、最後に入力したコードを削除し、以下を追加します: このコードは、ユーザーが質問を入力できるようにターミナル上にUIを作成します。 次に、ユーザーにメッセージを入力するように促すために、以下のコードを追加します: 最後に、以下のコードを入力します: 上記のコードでは、 ファイルを実行してAIとの対話をしてみましょう。以下のような画像のようになります: これで対話型のCLIチャットが完成しました。 完成したコードはGitHubのリポジトリから見てください。 https://github.com/DanNakatoshi/Node-ChatGPT-CLI 私のPCはアメリカで設定されているので日本語を入力するとコマンドプロンプトがフリーズしてしまいましたが、環境が日本で設定されている場合は問題がないと思います。(もし分かれば教えてください。) これはエンジニアなど一部の人々にとって有用ですが、サーバーサイドにあるためセキュリティが良好です。 しかし、CLIアプリケーションの使用方法を理解できないかもしれない他のユーザーのために、もっと使いやすく、より良いユーザーインターフェース(UI)とユーザーエクスペリエンス(UX)を備えたアプリケーションが必要になることもあるかもしれません。 次回以降では、クライアント側のJavaScriptやVueを使用してより洗練されたチャットアプリケーションを作成する方法を見ていきます。 ではお疲れ様でした。