PythonでChatGPT APIを使用してリアルタイムデータを処理する方法

PythonでChatGPT APIを使用してリアルタイムデータを処理する方法

翻訳者 |李睿

レビュー | Chonglou

OpenAI が立ち上げた GPT は現在、世界で最も重要な人工知能ツールとなっており、トレーニング データに基づいてクエリを処理する能力に優れています。ただし、次のような未知のトピックに関する質問には回答できません。

  • 2021年9月以降の最近の出来事
  • 非公開文書
  • 過去の会話からの情報

ユーザーが頻繁に変更されるリアルタイム データを処理している場合、このタスクはさらに複雑になります。さらに、ユーザーは GPT に大量のコンテンツを投稿することはできず、またデータを長期間保持することもできません。この場合、回答プロセスのコンテキストを提供するために、カスタムの Large Language Model (LLM) アプリケーションを効率的に構築する必要があります。

この記事では、Python のオープンソース LLM App ライブラリを使用して、このようなアプリケーションを開発する手順について説明します。ソース コードは GitHub にあります (以下の「販売用 ChatGPT Python API の構築」セクションにリンクされています)。

学習目標

この記事では、以下の内容について学ぶことができます。

  • ChatGPT にカスタム データを追加する理由。
  • 埋め込み、プロンプト エンジニアリング、ChatGPT を使用して質問への回答を改善する方法。
  • ユーザーは、カスタム データを含む LLM アプリケーションを使用して独自の ChatGPT を構築します。
  • ChatGPT Python API を作成して、リアルタイムの割引価格やセール価格を見つけます。

ChatGPT にカスタム ナレッジ ベースが必要な理由は何ですか?

ChatGPT の機能を強化する方法について議論する前に、まず人工的なアプローチを検討し、それらが直面する課題を特定します。通常、ChatGPT はインスタントエンジニアリングを通じて拡張されます。ユーザーがさまざまなオンライン マーケットプレイスでリアルタイムの割引/お得情報/クーポンを見つけたいとします。

たとえば、ChatGPT に「今週の Adidas メンズ シューズの割引を見つけるのを手伝ってくれませんか?」と質問する場合、カスタム知識がなければ、ChatGPT UI インターフェースから取得できる標準的な回答は次のようになります。

明らかに、ChatGPT は割引を見つけるための通常のアドバイスを提供していますが、割引の場所や種類などの詳細に関する具体的な情報が欠けています。このモデルを支援するために、信頼できるデータ ソースからの割引情報を補足します。実際の質問を投稿する前に、最初のドキュメント コンテンツを追加して ChatGPT に参加する必要があります。このサンプル データは、Amazon 製品トランザクション データセットから収集され、1 つの JSON 項目のみを使用してプロンプトに挿入されます。

上の図に示すように、ユーザーは期待どおりの出力を得られますが、ChatGPT はコンテキストを認識するようになったため、これは簡単に実現できます。ただし、このアプローチの問題は、モデルのシナリオが限られていることです (GPT-4 の最大テキスト長は 8,192 トークンです)。この戦略は、入力データのサイズが非常に大きい場合、すぐに問題になります。ユーザーは販売されている何千ものアイテムを見つけたいかもしれませんが、そのような大量のデータを入力メッセージとして提供することは現実的ではありません。さらに、データが収集されたら、データの品質と関連性を確保するために、データをクリーニング、フォーマット、および前処理する必要がある場合もあります。

ユーザーが OpenAI チャット完了エンドポイントを使用したり、ChatGPT 用のカスタム プラグインを構築したりすると、次の追加の問題が発生します。

  • コストより詳細な情報と例を提供することで、大規模言語モデルのパフォーマンスが向上する可能性がありますが、コストは高くなります (10,000 トークンの入力と 200 トークンの出力を持つ GPT-4 の場合、予測ごとに 0.624 ドル)。ローカル キャッシュ システムを使用しない限り、同じリクエストを繰り返し送信するとコストが増加します。
  • レイテンシ ChatGPT API を本番環境で使用する場合の課題の 1 つは、その予測不可能な性質と、一貫したサービスが保証されないことです。
  • セキュリティ-カスタム プラグインを統合する場合、各 API エンドポイントは OpenAPI 仕様で機能を指定する必要があります。これは、ユーザーが内部 API 設定を ChatGPT に漏らしていることを意味し、多くの企業が懸念しているリスクです。
  • オフライン評価コードとデータ出力のオフライン テストを実行したり、データ フローをローカルで複製したりすることは、開発者にとって困難な場合があります。これは、システムへの各リクエストによって異なる応答が生成される可能性があるためです。

埋め込み、プロンプトエンジニアリング、ChatGPT を使用した質問応答

インターネット上で発見された有望なアプローチの 1 つは、大規模言語モデル (LLM) を活用して埋め込みを作成し、これらの埋め込みを使用して検索やクエリ システムなどのアプリケーションを構築することです。つまり、チャット完了エンドポイントを使用して ChatGPT をクエリする代わりに、次のクエリを実行します。

次の割引データ: {input_data} が与えられた場合、このクエリ: {user_query} に回答します。

コンセプトはシンプルです。このアプローチでは、質問を直接投稿する代わりに、まず OpenAI API を介して各入力ドキュメント (テキスト、画像、CSV、PDF、またはその他の種類のデータ) のベクトル埋め込みを作成し、次に生成された埋め込みにインデックスを付けて高速検索できるようにし、ベクトル データベースに保存し、ユーザーの質問を使用してベクトル データベースから関連ドキュメントを検索して取得します。これらのドキュメントは、プロンプトとして質問とともに ChatGPT に提示されます。この追加されたシナリオにより、ChatGPT は内部データセットでトレーニングされたかのように応答できます。

一方、Pathway LLM アプリを使用する場合は、ベクター データベースも必要ありません。これにより、リアルタイムのインメモリ データ インデックス作成が可能になり、ベクター ドキュメント データベースをクエリせずに互換性のあるストレージから直接データを読み取り、準備作業、インフラストラクチャ、複雑さなどのコストを追加せずに済みます。ソースとベクトルを同期させるのは面倒です。さらに、下線付きの入力データが時間の経過とともに変化し、再インデックス化する必要がある場合は、さらに困難になります。

LLM アプリを使用した ChatGPT カスタム データ

これらの簡単な手順では、LLM アプリを使用してデータ用の ChatGPT アプリケーションを構築するためのデータ パイプライン アプローチについて説明します。

  • 収集: パスが有効になっているストリーミング モードの場合、アプリケーションはさまざまなデータ ソース (CSV、JSON 行、SQL データベース、Kafka、Redpanda、Debezium など) からデータをリアルタイムで読み取りますまた、静的モードでデータの取り込みをテストすることもできますまた、各データ行を構造化ドキュメント スキーマにマッピングして、大規模なデータ セットをより適切に管理します。
  • 前処理: 回答の品質に影響を与える可能性のある重複データ、無関係な情報、ノイズの多いデータを削除し、さらに処理が必要なデータ フィールドを抽出することで、データ クリーニングを簡単に実行できます。さらに、この段階では、プライベート データが ChatGPT に送信されないようにマスクまたは非表示にすることができます。
  • 埋め込み: 各ドキュメントは OpenAI API を使用して埋め込まれ、埋め込みが取得されます。
  • インデックス作成: リアルタイムで生成された埋め込みの上にインデックスを構築します。
  • 検索: API 対応インターフェースからのユーザーの質問に基づいて、OpenAI API からのクエリの埋め込みを生成します。埋め込みを使用すると、クエリとの関連性に基づいてベクトル インデックスが動的に取得されます。
  • 質問する: 質問と最も関連性の高い部分をGPT メッセージ挿入します。回答を GPT (チャット完了エンドポイント) に返します。

セールス向け ChatGPT Python API の構築

LLM アプリの動作プロセスを明確に理解した後以下の手順に従って割引検索アプリの構築方法を理解できます。プロジェクトのソースコードは GitHub にあります。このアプリケーションをすぐに使い始めたい場合は、このセクションをスキップしてリポジトリを直接クローンし、README.md ファイルの指示に従ってコード例を実行してください。

プロジェクト目標の例

エンタープライズ検索に関する記事に触発されたこのサンプル アプリケーションは、Python で HTTP REST API エンドポイントを公開し、さまざまなソース (CSV、Jsonlines、API、メッセージ ブローカー、データベース) から最新の取引を取得して現在のセールに関するユーザーのクエリに回答し、OpenAI API 埋め込みとチャット完了エンドポイントを活用して AI アシスタントの応答を生成します。

ステップ 1: データ収集 (カスタム データの取り込み)

簡単にするために、任意の JSON 行をデータ ソースとして使用できます。このアプリケーションは、discounts.jsonl などの JSON Lines ファイルを受け取り、ユーザー クエリを処理するときにこのデータを使用します。データ ソースでは、行ごとに 1 つのドキュメント オブジェクトが必要です。まず入力データを Jsonline に変換してください。以下は、単一の raw を含む Jsonline ファイルの例です。

 {"doc": "{'position': 1, 'link': 'https://www.amazon.com/deal/6123cc9f', 'asin': 'B00QVKOT0U', 'is_lightning_deal': False, 'deal_type': 'DEAL_OF_THE_DAY', 'is_prime_exclusive': False, 'starts_at': '2023-08-15T00:00:01.665Z', 'ends_at': '2023-08-17T14:55:01.665Z', 'type': 'multi_item', 'title': 'Deal on Crocs, DUNLOP REFINED(\u30c0\u30f3\u30ed\u30c3\u30d7\u30ea\u30d5\u30a1\u30a4\u30f3\u30c9)', 'image': 'https://m.media-amazon.com/images/I/41yFkNSlMcL.jpg', 'deal_price_lower': {'value': 35.48, 'currency': 'USD', 'symbol': '$', 'raw': '35.48'}, 'deal_price_upper': {'value': 52.14, 'currency': 'USD', 'symbol': '$', 'raw': '52.14'}, 'deal_price': 35.48, 'list_price_lower': {'value': 49.99, 'currency': 'USD', 'symbol': '$', 'raw': '49.99'}, 'list_price_upper': {'value': 59.99, 'currency': 'USD', 'symbol': '$', 'raw': '59.99'}, 'list_price': {'value': 49.99, 'currency': 'USD', 'symbol': '$', 'raw': '49.99 - 59.99', 'name': 'List Price'}, 'current_price_lower': {'value': 35.48, 'currency': 'USD', 'symbol': '$', 'raw': '35.48'}, 'current_price_upper': {'value': 52.14, 'currency': 'USD', 'symbol': '$', 'raw': '52.14'}, 'current_price': {'value': 35.48, 'currency': 'USD', 'symbol': '$', 'raw': '35.48 - 52.14', 'name': 'Current Price'}, 'merchant_name': 'Amazon Japan', 'free_shipping': False, 'is_prime': False, 'is_map': False, 'deal_id': '6123cc9f', 'seller_id': 'A3GZEOQINOCL0Y', 'description': 'Deal on Crocs, DUNLOP REFINED(\u30c0\u30f3\u30ed\u30c3\u30d7\u30ea\u30d5\u30a1\u30a4\u30f3\u30c9)', 'rating': 4.72, 'ratings_total': 6766, 'page': 1, 'old_price': 49.99, 'currency': 'USD'}"}

最も素晴らしいのは、このアプリがデータ フォルダーの変更を常に認識していることです。別の JSON Lines ファイルを追加すると、LLM アプリが魔法のように動作し、AI モデルの応答を自動的に更新します。

ステップ2: データの読み込みとマッピング

Pathway の JSON Lines 入力コネクタを使用すると、ローカルの JSONlines ファイルが読み取られ、データ エントリがスキーマにマッピングされ、パスウェイ テーブルが作成されます。完全なソースコードは app.py で確認できます。

 ... sales_data = pw.io.jsonlines.read( "./examples/data", schema=DataInputSchema, mode="streaming" )

各データ行を構造化ドキュメント スキーマにマップします。完全なソースコードは App.py で確認できます。

 class DataInputSchema(pw.Schema): doc: str

ステップ3: データの埋め込み

各ドキュメントは OpenAI API で埋め込まれ、埋め込みが取得されます。完全なソースコードは app.py で確認できます。

 ... embedded_data = embeddings(cnotallow=sales_data, data_to_embed=sales_data.doc)

ステップ4: データのインデックス作成

次に、結果の埋め込みに即時インデックスを構築します。

 index = index_embeddings(embedded_data)

ステップ5: ユーザークエリの処理とインデックス作成

REST エンドポイントを作成して、API リクエスト ペイロードからユーザー クエリを取得し、そのユーザー クエリを OpenAI API に埋め込みます。

 ... query, response_writer = pw.io.http.rest_connector( host=host, port=port, schema=QueryInputSchema, autocommit_duration_ms=50, ) embedded_query = embeddings(cnotallow=query, data_to_embed=pw.this.query)

ステップ6: 類似性検索とヒントエンジニアリング

類似性検索は、インデックスを使用してクエリ埋め込みに最も関連性の高い一致を識別することによって実行されます。次に、ユーザーのクエリと取得された関連データ結果をマージしたプロンプトが作成され、メッセージが ChatGPT 完了エンドポイントに送信され、正確で詳細な応答が生成されます。

 responses = prompt(index, embedded_query, pw.this.query)

プロンプトを作成し、prompt.py で ChatGPT に内部知識を追加するときにも、同じシナリオ学習アプローチが採用されました。

 prompt = f"Given the following discounts data: \\n {docs_str} \\nanswer this query: {query}"

ステップ7: レスポンスを返す

最後のステップは、API 応答をユーザーに返すことです。

 # Build prompt using indexed data responses = prompt(index, embedded_query, pw.this.query)

ステップ8: すべてをまとめる

上記の手順をすべてまとめると、カスタム割引データ用の LLM 対応 Python API が作成され、app.py Python スクリプトに実装されていることがわかります。

 import pathway as pw from common.embedder import embeddings, index_embeddings from common.prompt import prompt def run(host, port): # Given a user question as a query from your API query, response_writer = pw.io.http.rest_connector( host=host, port=port, schema=QueryInputSchema, autocommit_duration_ms=50, ) # Real-time data coming from external data sources such as jsonlines file sales_data = pw.io.jsonlines.read( "./examples/data", schema=DataInputSchema, mode="streaming" ) # Compute embeddings for each document using the OpenAI Embeddings API embedded_data = embeddings(cnotallow=sales_data, data_to_embed=sales_data.doc) # Construct an index on the generated embeddings in real-time index = index_embeddings(embedded_data) # Generate embeddings for the query from the OpenAI Embeddings API embedded_query = embeddings(cnotallow=query, data_to_embed=pw.this.query) # Build prompt using indexed data responses = prompt(index, embedded_query, pw.this.query) # Feed the prompt to ChatGPT and obtain the generated answer. response_writer(responses) # Run the pipeline pw.run() class DataInputSchema(pw.Schema): doc: str class QueryInputSchema(pw.Schema): query: str

ステップ9(オプション):インタラクティブUIを追加する

アプリをよりインタラクティブでユーザーフレンドリーにするには、Streamlit を使用してフロントエンド アプリを構築できます。

アプリケーションを実行する

README.mdファイルの「プロジェクトの実行方法」セクションの指示に従って、割引に関する質問を開始できます。API は、追加した割引データ ソースに基づいて応答します。

UI (データ ソースの適用) を使用してこの知識を GPT にフィードした後、どのように応答するかを確認します。

このアプリケーションは、Rainforest API と割引 .csv ファイル ドキュメント (これらのソースからのデータを即座にマージ) を取り込み、リアルタイムでインデックスを作成し、クエリの処理時にこのデータを使用します。

さらなる改善

ChatGPT に割引の分野におけるドメイン固有の知識を追加することで、LLM アプリケーションのいくつかの機能が発見されました。他にもできることはたくさんあります:

  • 外部 API からの追加データ、さまざまなファイル (Jsonlines、PDF、Doc、HTML、テキスト形式など)、PostgreSQL や MySQL などのデータベース、Kafka、Redpanda、Debedizum などのプラットフォームからのストリーミング データを統合します。
  • Pathway には 2 つの変更の差を計算する組み込み関数が用意されているため、データ スナップショットを維持して、時間の経過に伴う販売価格の変化を観察できます。
  • LLM アプリでは、API を介してデータにアクセスするだけでなく、処理されたデータをビジネス インテリジェンス (BI) や分析ツールなどの他のダウンストリーム コネクタに中継することもできます。たとえば、価格の変化が検出されたときにアラートを受信するように設定します。

原題: Python でリアルタイムデータに ChatGPT API を使用する方法、著者: Bobur Umurzokov

<<: 

>>:  マスク氏の AI ツール Grok は ChatGPT のシェルですか?

ブログ    
ブログ    

推薦する

リー・ヤンがスマートシティ建設について語る:ハードウェアからプラットフォームまで、Terminusエコシステムが先導する

[51CTO.com からのオリジナル記事]質問:皆さんはスマート シティについて知っていますか? ...

研究者は人工知能を使ってSARS-CoV-2のような次のウイルスを見つける

ジョージタウン大学の科学者が率いる国際研究チームは、COVID-19パンデミックの原因ウイルスである...

...

人工知能時代のITサービスを変える8つのテクノロジー

サービスは人間が行う仕事だということを否定する人はいないでしょう。しかし、テクノロジーはサービスを強...

ByteDanceのLi Hang: 言語ビッグモデルに関するいくつかの観察と考察

この記事は、LLM に関する著者の見解を詳しく説明しています。主なポイントは次のとおりです。 Cha...

...

...

画像とテキストの認識 - 人工知能の知恵

序文人間が世界を認識する際の約 80% は視覚によって行われます。そのため、コンピューターが人間の視...

...

落とし穴を避けよう!ニューラルネットワークの欠点と短所を数え上げよう

最近、ディープラーニングが大々的に宣伝されており、人々はニューラル ネットワークをあらゆる場所で使用...

中国における産業用ロボットへの投資と発展の3つの効果

最近、工業情報化省は2020年の我が国のロボット産業の運営状況を発表しました。データによると、202...

...

世界の AI イベントのトップ 10 を見ると、AI ガバナンスはどのようにして利益を達成し、損害を回避できるのでしょうか?

はじめに:過去数年間を振り返ると、AIに関するネガティブな事件が頻繁に発生しており、政府は一連の政策...

...