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

ブログ    
ブログ    
ブログ    

推薦する

ネットユーザーたちは、顔認識技術の何が難しいのかと冗談を言っている。

今朝、ジャック・マーは自身の微博に「ドイツで開かれたCEBITカンファレンスの開幕式が終わったばかり...

2024年にIT業界は成長を遂げる:AIとサイバーセキュリティが最大のホットスポット

IDCは、2024年のIT市場はチャンスに満ちていると指摘した。インフレや経済などの要因が懸念材料と...

ニューラル ネットワーク モデルの構築に適した最適化アルゴリズムはどれですか? 35,000件の検査でわかる

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

完全武装したこの「アイアンマン」は、走ったり、人命を救ったり、さらには飛行可能な初のヒューマノイドロボットになるかもしれません。

ビッグデータダイジェスト制作著者: カレブトンガ火山の噴火により、洪水や地震などの自然災害に見舞われ...

RPA 導入が失敗する 7 つの理由

ロボティック・プロセス・オートメーションは現在、業界全体のデジタル化を推進するデジタル変革の中核とな...

...

...

1つのモデルが12種類のAI詐欺を打ち破り、あらゆる種類のGANとディープフェイクを打ち破り、オープンソース化

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

Baidu World 2020 | Baidu CTO 王海鋒が Baidu Brain 6.0 をリリース、AI の新インフラストラクチャが業界インテリジェンスを加速

もし20年前の自分に会って会話ができたら、何を話しますか?想像する必要はありません。まるでSF映画の...

...

AIの変革力:AI市場の探究

人工知能 (AI) は、急速に現代の最も変革的なテクノロジーの 1 つとなり、産業を再編し、生産性を...

アンドリュー・ン氏の新たな動き:「データ中心のAI」の拠点となる新たなMLリソースサイトを設立

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

顔認識に興味がありますか? JavaScriptで実装された顔検出方法

私はビデオや画像における顔のタグ付け、検出、顔認識技術に常に興味を持っています。顔認識ソフトウェアや...

推薦システムにおける大規模言語モデルの実用化

1. 背景と課題従来の推奨モデルのネットワークパラメータの影響は比較的小さく(埋め込みパラメータを除...