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

推薦する

李開復、胡宇、張亜琴の GMIC 2018 対談: AI 戦略と AI 人材育成における中国と米国の違いは何ですか?

[[227402]]人工知能が急成長を遂げている現在、AI人材の不足は中国だけでなく、世界全体が直...

金融分野における機械学習の4つの利点と5つの応用

[[198507]]誰の生活も金融から独立して存在することはできません。テクノロジーの発展により人々...

人工知能時代のデザイン業界の未来

人工知能 (AI) は設計の仕事を引き継ぐのでしょうか? 将来的にはデザイナーに取って代わるのでしょ...

気候変動と戦うには人工知能が重要

気候変動が世界中の環境、社会、政治、経済システムに大きな影響を与えることは否定できません。したがって...

2020 年の DevOps の 7 つのトレンド

[51CTO.com クイック翻訳] 権威ある調査によると、2017 年に DevOps は市場で ...

マイクロソフト、Bing Chat と Bing Search にダーク モードを導入開始

7月27日、Microsoft Bingエンジニアリングおよび製品責任者のJordi Ribas氏は...

4Paradigm、ビジネス担当者がAIアプリケーションを開発できるようにする新しいAIプラットフォームツールをリリース

9月18日、2018年世界人工知能会議中。 Fourth Paradigm は、自動機械学習プラット...

...

これら4つの業界は今後5年間で大きな利益を得るだろう

[[261735]] [51CTO.com クイック翻訳] アイリーン・リーはカウボーイ・ベンチャー...

2022 年のデータサイエンス、AI、機械学習の 5 つのトレンド

[[443145]] [51CTO.com クイック翻訳] 2022 年が近づくにつれ、人々は 20...

...

ハッカーの天敵! AI はサイバー攻撃の防御にどのように役立つのでしょうか?

最近、ハッカーがサイバー攻撃を仕掛けてデータ漏洩を引き起こしているというニュースをよく耳にすると思い...

...

...