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はデジタル変革の失敗から学ぶ必要がある

ブログ    
ブログ    
ブログ    

推薦する

...

アルゴリズム調整、難易度がさらに7.3%上昇、ビットコイン採掘難易度は「回復」継続

ルールによれば、ビットコインは2016ブロックごと、つまり約2週間ごとにマイナーの難易度をリセットし...

AIと5Gの相乗効果:デジタル時代の潜在能力を最大限に引き出す

進化するテクノロジーの世界では、人工知能 (AI) と第 5 世代無線ネットワーク (5G) という...

スマートテクノロジーは小売業界にどのような影響を与えるでしょうか?

過去数年間、小売業界はテクノロジーによって革命を起こしてきました。店舗の日々の運営方法から、消費者の...

国産のハイエンドチップはどれくらい強いのか?業界関係者6人がこう考えている

[[440057]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

ハーバード大学のロボット魚は、知的に協力し、集団で「泳ぎ」、サイエンス誌の表紙に登場しました。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

人工知能によるデータ管理の変革

企業は人工知能 (AI) を適用する新しい方法を見つけています。 AI プロジェクトの主な障害の 1...

LK-99は今もメロンを生産中:元のサンプルは韓国エネルギー技術研究所に届けられ、薄膜プロセスは最後の懸案

中国科学院物理研究所とプリンストン大学による2本の否定的な論文の発表により、LK-99に対する人々の...

スマートホームとは何ですか?そしてそれは必要ですか?

スマートホームのコンセプトを最も簡単に説明すると、それは家の自然な進化であるということです。スマート...

人工知能を活用してビジネスを拡大するための 5 つの戦略

現時点では、インテリジェント技術の期待とリターンはまだ不明確であり、製品の創造性と投資を強化するため...

ジェフ・ディーンが2020年の機械学習のトレンドについて語る:マルチタスクとマルチモダリティが大きく進歩する

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ゼロサンプルに主眼が置かれています! ReSimAD: 自動運転で 3D ドメイン適応を実現するには?

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

Google の家庭用ロボットがスタンフォード大学のエビ揚げロボットに挑む!猫と遊ぶためにお茶と水を出し、3回続けてフリックして猫と遊ぶ

インターネット上で話題となったスタンフォード大学のエビ揚げロボットは、1日で人気が急上昇した。結局の...

3つの側面での共同の取り組みにより、人工知能はスマート交通の発展に貢献します。

[[442361]]都市化の継続的な進展と自動車保有数の急速な増加により、我が国の交通発展は困難な...

セマンティクスと機械学習が融合するとき

人工知能は歴史的に、やや相反する2つの陣営の間を揺れ動いてきました。一方では、ノーム・チョムスキー、...