MyScale を使用して知識ベースを OpenAI の GPT にインポートする方法

MyScale を使用して知識ベースを OpenAI の GPT にインポートする方法

翻訳者 |李睿

レビュー | Chonglou

2023年11月6日、OpenAIはChatGPTをリリースしました。このコード不要のプラットフォームでは、プロの(またはアマチュアの)開発者がツールとプロンプトを使用してカスタム GPT またはチャットボットを構築し、OpenAI GPT とのやり取りを効果的に変革できます。以前のインタラクション( LangChain または LlamaIndex )では、GPT から応答を取得するために動的プロンプトを使用する必要がありました。現在、OpenAI GPT は外部 API またはツールを呼び出して動的プロンプトを処理します。

これにより、MyScale での開発者による RAG システムの構築方法も、サーバー側のシナリオを使用してプロンプトを構築する方法から、それらのシナリオを GPT モデルに取り込む方法に変更されます。

MyScale を使用すると、シーンを GPT に取り込む方法が簡単になります。たとえば、OpenAI のアプローチは、Web UI を介してファイルを GPT プラットフォームにアップロードすることです。同時に、MyScale を使用すると、開発者は SQL WHERE 句を使用して構造化データ フィルタリングとセマンティック検索を組み合わせ、より低コストで大規模なナレッジ ベースを処理および保存し、複数の GPT 間でナレッジ ベースを共有できるようになります。

今すぐ GPT ストアで MyScaleGPT を試すか、Hugging Face でホストされている API を使用して MyScale のオープン ナレッジ ベースをアプリケーションに統合してください。

BYOK: 自分の知識を取り入れる

GPT は過去 1 年間で大幅に成長し、最初にリリースされたときよりも共有知識スペースではるかに多くの知識を獲得しました。ただし、ドメイン固有の知識や時事問題など、GPT がまったく知らない、または不確実な特定のトピックがまだあります。そのため、前回の記事で説明したように、MyScale に保存されている外部ナレッジベースを GPT に統合して、その信頼性と有用性を向上させる必要があります。

開発者が MyScale を使用して RAG を構築する場合、チェーン (またはスタック) に LLM を導入します。今回は、MyScale データベースを GPT プラットフォームに移行する必要があります。残念ながら、GPT と MyScale 間の直接接続を確立することはまだできません。そのため、クエリ インターフェースが調整され、REST API として公開されました。

OpenAI 関数呼び出しのこれまでの成功のおかげで、GPT が SQL のようなフィルター文字列を使用してベクトル検索クエリを記述できる同様のインターフェースを設計できるようになりました。 OpenAPI のパラメータは次のとおりです。

 "parameters": [ { "name": "subject", "in": "query", "description": "A sentence or phrase describes the subject you want to query.", "required": true, "schema": { "type": "string" } }, { "name": "where_str", "in": "query", "description": "a SQL-like where string to build filter", "required": true, "schema": { "type": "string" } }, { "name": "limit", "in": "query", "description": "desired number of retrieved documents", "schema": { "type": "integer", "default": 4 } } ]

このようなインターフェースを使用すると、GPT は SQL で記述されたフィルターを使用してキーワードを抽出し、目的のクエリを記述できます。

異なるテーブルにクエリエントリを提供する

場合によっては、異なるテーブルをクエリする必要があることがあります。これは、別の API エントリを使用して実現できます。各 API エントリには、そのドキュメントの下に独自のモードとヒントがあります。 GPT は該当する API ドキュメントを読み取り、対応するテーブルに正しいクエリを書き込みます。

以前に導入された方法 (セルフクエリ リトリーバーやベクター SQL など) はすべて、テーブル構造を記述するために動的または半動的ヒントを必要とすることに注意してください。対照的に、GPT は LangChain の会話エージェントと同様に機能し、エージェントはさまざまなツールを使用してテーブルを照会します。

たとえば、OpenAPI 3.0 では API エントリは次のように記述できます。

 JSON "paths": { // query entry to arxiv table "/get_related_arxiv": { "get": { // descriptions will be injected into the tool prompt // so that GPT will know how and when to use this query tool "description": "Get some related papers." "You should use schema here:\n" "CREATE TABLE ArXiv (" " `id` String," " `abstract` String," " `pubdate` DateTime," " `title` String," " `categories` Array(String), -- arxiv category" " `authors` Array(String)," " `comment` String," "ORDER BY id", "operationId": "get_related_arxiv", "parameters": [ // parameters mentioned above ], } }, // query entry to wiki table "/get_related_wiki": { "get": { "description": "Get some related wiki pages. " "You should use schema here:\n\n" "CREATE TABLE Wikipedia (" " `id` String," " `text` String," " `title` String," " `view` Float32," " `url` String, -- URL to this wiki page" "ORDER BY id\n" "You should avoid using LIKE on long text columns.", "operationId": "get_related_wiki", "parameters": [ // parameters mentioned above ] } } }

このコード スニペットに基づいて、GPT はユーザーの質問に答えるのに役立つ知識ベースが 2 つあることを認識します。

ナレッジ ベース取得用の GPT アクションを構成したら、指示を入力して、ナレッジ ベースをクエリしてユーザーの質問に答える方法を GPT に指示するだけです。

注:できる限り質問に回答してください。関連情報を見つけるために、利用可能なツールを自由に使用してください。検索機能を呼び出すと、クエリの詳細がすべて保持されます。 MyScale ナレッジ ベースを使用して文字列配列をクエリする場合は、has(column, value) を使用して一致させます。発行日については、parsedatetime32bestefort() を使用して、タイムスタンプ値を文字列形式から datetime オブジェクトに変換します。この関数を使用して datetime 型の列を変換しないでください。開発者は、使用するドキュメントへの参照リンクを常に追加する必要があります。

データベースをOpenAPIとしてホストする

GPT は OpenAI 3.0 標準の API を使用します。一部のアプリケーション (データベースなど) には OpenAPI インターフェースがありません。したがって、GPT を MyScale と統合するにはミドルウェアが必要です。

開発者はすでに、Hugging Face 上で OpenAI 互換インターフェースのデータベースをホストしています。 flask-restx app.py、funcs.pyを使用して実装を簡素化および自動化すると、コードが小さく、クリーンで読みやすくなります。

これを行う利点は、プロンプトと関数が結合されることです。したがって、プロンプト、機能性、拡張性の組み合わせについてはあまり考えず、人間が読める形式で記述してください。 GPT はダンプされた OpenAI JSON ファイルからこのドキュメントを読み取ります。

注意: flask-restx は Swagger 2.0 形式の API のみを生成します。まず、Swagger エディターを使用して OpenAPI 3.0 形式に変換する必要があります。 Hugging Faceの JSON API を参考にすることができます

GPTはAPIのシーンを使用して実行されます

適切なガイダンスがあれば、GPT は特殊な関数を使用してさまざまなデータ型を慎重に処理します。これらのデータ型の例には、配列列の has(column, value) やタイムスタンプ列の parsedatetime32bestefort(value) などの ClickHouse SQL 関数が含まれます。

正しいクエリを API に送信すると、API は WHERE 句の文字列内のフィルターを使用してベクトル検索クエリを構築します。返される値は、データベースから取得された追加の知識を含む文字列としてフォーマットされます。次のコード例が示すように、実装は非常にシンプルです。

 Python 1 class ArXivKnowledgeBase: 2 def __init__(self, embedding: SentenceTransformer) -> None: 3 # This is our open knowledge base that contains default.ChatArXiv and wiki.Wikipedia 4 self.db = clickhouse_connect.get_client( 5 host='msc-4a9e710a.us-east-1.aws.staging.myscale.cloud', 6 port=443, 7 username='chatdata', 8 password='myscale_rocks' 9 ) 10 self.embedding: SentenceTransformer = INSTRUCTOR('hkunlp/instructor-xl') 11 self.table: str = 'default.ChatArXiv' 12 self.embedding_col = "vector" 13 self.must_have_cols: List[str] = ['id', 'abstract', 'authors', 'categories', 'comment', 'title', 'pubdate'] 14 15 16 def __call__(self, subject: str, where_str: str = None, limit: int = 5) -> Tuple[str, int]: 17 q_emb = self.embedding.encode(subject).tolist() 18 q_emb_str = ",".join(map(str, q_emb)) 19 if where_str: 20 where_str = f"WHERE {where_str}" 21 else: 22 where_str = "" 23 # Simply inject the query vector and where_str into the query 24 # And you can check it if you want 25 q_str = f""" 26 SELECT dist, {','.join(self.must_have_cols)} 27 FROM {self.table} 28 {where_str} 29 ORDER BY distance({self.embedding_col}, [{q_emb_str}]) 30 AS dist ASC 31 LIMIT {limit} 32 """ 33 docs = [r for r in self.db.query(q_str).named_results()] 34        return '\n'.join([str(d) for d in docs]), len(docs)

結論は

GPT は確かに OpenAI の開発者インターフェースの大きな改善点です。開発者はチャットボットを構築するために多くのコードを書く必要がなくなり、ツールには独自のプロンプトが付属するようになりました。 GPT のエコシステムを構築しているの素晴らしいことです。一方、オープンソース コミュニティでは、LLM とツールを組み合わせる既存の方法を再考することが推奨されています。

外部知識ベースを外部データベースに保存すると、LLM の信頼性と有用性が向上すると考えられるためです多くの人が、MyScale のようなベクター データベースを LLM と統合する新しい方法を見つけています。

原題: MyScale で知識ベースを OpenAI の GPT に取り込む、著者: Fangrui Liu

<<: 

>>:  AIはデジタル変革の失敗から学ぶ必要がある

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

正義がアルゴリズムを採用したとき、最後に笑うのは正義か、それともテクノロジーか?

2017年4月11日、米国のロバーツ最高裁判所長官は、ニューヨークのレンセラー工科大学の学長との会...

機械学習によるディープラーニングが企業の今後の方向性となる理由

機械アルゴリズムのディープラーニングは、ビジネスの世界に多くの変化をもたらしました。定義上、これは人...

機械学習のコンテナ化: TensorFlow、Kubernetes、Kubeflow

[[253678]] [51CTO.com クイック翻訳] 機械学習 (ML) は、パターンを識別...

ディープラーニングと機械学習を混同しないでください。

[[313942]] [51CTO.com クイック翻訳] ご存知のとおり、ディープラーニングは人...

人工知能は優れたサイバーセキュリティツールだが、諸刃の剣でもある

[[245793]]セキュリティにおける AI の役割は、ホワイトハットハッカーとサイバー犯罪者の両...

人工知能を活用して機密情報を保護する 5 つの方法

研究者たちは、人工知能技術が機密情報のセキュリティを確保するための非常に優れたツールであることを発見...

無人運転と公共交通機関の標準仮想トラックで安全性を確保

深セン初の無人バスの試験運行が始まり、我が国の科学技術力に対する信頼が高まっています。ほぼ同時期に、...

...

機械学習に基づくユーザーエンティティ行動分析技術のアカウント異常検知への応用

企業ビジネスの継続的な拡大と電子化の発展に伴い、企業独自のデータや負荷データが急増し始めています。し...

...

...

AIが無人車両群を指揮、中国が世界最大の3Dプリント建物を建設

サウスチャイナ・モーニング・ポストとインサイダー誌が報じたところによると、中国はチベット高原のダム建...

自動運転車は生後7か月の赤ちゃんよりも賢いのでしょうか?

生後 7 か月までに、ほとんどの子供は、物体は見えなくても存在するということを学びます。おもちゃを毛...

アルトマンがOpenAIに復帰、イリヤはどこへ行くのか、内部抗争の理由は信じられない

OpenAI シリーズは終わりに近づいていますが、イースターエッグがあるとは思っていませんでした。ま...

自動運転ユニコーンは詐欺的すぎて、ルカン氏でさえ確信している

これは普通の自動運転ビデオだと思いますか?写真いいえ、いいえ、いいえ...これは実際には AI によ...