ChatGPTのインテリジェンスと効率の向上:LangChainとMilvusのパワー

この記事はTheSequenceに掲載されたもので、許可を得てここに再掲載している。
ChatGPTは大きな人気を博しており、多くの個人がそのAPIを利用してチャットボットを開発したり、Langchainを探求したりしているが、課題がないわけではない。
ChatGPT](https://zilliz.com/learn/ChatGPT-Vector-Database-Prompt-as-code)は、しばしば知性の錯覚を引き起こす可能性があります。ユーザーは、複雑な専門用語を使用するチャットボットと関わるかもしれませんが、後でボットが無意味な応答を生成したり、存在しない404リンクを捏造したりすることに気づくだけです。
コンテキストの保存もハードルの一つです。ChatGPTは進行中のセッションの記録しか保持しないため、わずか数日前に訓練されたボットが、あたかもセッションの記憶がないかのように振る舞う可能性がある。この "健忘症 "は、データを保存・検索できるチャットボットの必要性を強調しています。
ChatGPTやさらに小さなオープンソースのモデルを推論に使用する場合、コストとパフォーマンスは重要な考慮事項です。多くの場合、これはコストがかかり、数台のA100とかなりの時間を必要とします。大規模な言語モデル(LLM)をリアルタイム・アプリケーションに導入する前に、パフォーマンスのボトルネックに対処する必要があります。
ChatGPTのインテリジェンスを強化することが、LangChainとMilvusの組み合わせの出番です。LangChainとMilvusの統合により、LLMはベクトルストアのパワーを活用し、インテリジェンスと効率を高めることができます。このすべてがどのように機能するのか?LLMアプリケーションにおけるLangChainとMilvusのパワーに飛び込み、あなた自身のAI生成コンテンツ(AIGC)アプリケーションを構築し、強化する方法を探ってみましょう。
LLM アプリケーションのためのLangChain
LangChainは、言語モデルを利用したアプリケーション開発のためのフレームワークです。LangChainフレームワークは、以下の原則に基づいて設計されています:
1.データ・アウェア:言語モデルを他のデータ・ソースに接続する。 2.Agentic: 言語モデルが環境と相互作用できるようにする。
LangChainの堅牢なフレームワークは、モデル、プロンプト、メモリ、インデックス、チェーン、エージェント、コールバックなどのモジュールで構成されています。各モジュールに対して、LangChainは拡張可能な標準インタフェースを提供します。また、LanghChainは外部との統合や、すぐに使えるエンドツーエンドの実装も提供します。
LLMラッパーはLangChainの機能の中心で、OpenAI, Cohere, Hugging FaceなどのLLMプロバイダのホストを提供します。すべてのLLMへの標準インタフェースを提供し、LLMを扱うための共通ツールも含まれています。
LLM用ベクトルデータベース
LangChainは多様なニーズに対応するため、印象的な大規模言語モデル(LLM)を提供しています。しかしそれだけではありません。LangChainはMilvusやFaissなどの様々なベクトルデータベースを統合することで、セマンティック検索機能を実現します。そのVectorStore Wrapperを通して、LangChainは必要なインターフェースを標準化し、データのロードと検索を簡素化します。例えば、LangChainはMilvusクラスを使って、from_textメソッドを使ってドキュメントを表す特徴ベクトルを格納することができる。similarity_search`メソッドはクエリ文のベクトルをフェッチし、埋め込み空間内でクエリに最も近い文書を見つける。
このテーマを深く掘り下げると、chatgpt-retrieval-pluginから明らかなように、ベクトル・データベースがLLMアプリケーションにおいて重要な役割を持っていることがわかります。しかし、ベクターデータベースの有用性はそれだけではありません。ベクターデータベースには他にも多くの使用例があり、LLMアプリケーションには欠かせないコンポーネントとなっています:
- ベクターデータベースは、Auto-GPTやBabyAGIのようなLLMプラットフォームで役立つ機能である、コンテキストベースのストレージを容易にする。この機能により、文脈の理解と記憶の保持が強化される。
- ベクターデータベースは、GPTCacheのようなLLMプラットフォームにセマンティックキャッシングを提供し、パフォーマンスを最適化し、コスト削減を可能にします。
- ベクターデータベースは、幻覚を解決するOSSChatのような文書知識機能を可能にします。
- そして、もっとたくさん。
MilvusとAuto-GPTについてもっと知りたい方は、How Milvus powers Auto-GPTをお読みください。次のセクションでは、LangChainとMilvusがどのように幻覚に対処できるかを学びます。
なぜLangChain + Milvusで幻覚を解決できるのか?
人工知能の世界では、システムが現実とは無関係な事実を捏造する「幻覚」を頻繁に生成するという言い伝えがある。ChatGPTを「非常に説得力のあるナンセンスを書ける自信家」と評する人もいるほどで、幻覚問題はChatGPTの信頼性を損なうものです。
下図に示すベクターデータベースは、幻覚の問題に対処します。まず、公式文書をテキストベクターとしてMilvusに格納し、質問に対して関連文書を検索します(図のオレンジの線)。Chatgptは正しい文脈に基づいて質問に答え、その結果、期待される回答が得られます(図の緑の線)。
Langchain、Milvus、ChatGPTの図](https://assets.zilliz.com/Diagram_showing_Langchain_Milvus_and_Chat_GPT_6380250d7c.png)
上の例はMilvusとChatGPTの組み合わせがとてもシンプルであることを示しています。テキストデータをベクトルデータに変換してMilvusに挿入するだけです。Langchain-Milvus-ChatGPTのコンボがテキストストレージを作成し、最終的な答えはドキュメントライブラリのコンテンツを参照して導き出されます。
これにより、チャットボットに正しい知識が与えられ、エラーの可能性を効果的に減らすことができる。例えば、コミュニティ管理者として、コミュニティ関連の質問に答える必要があるとき、Milvusの公式ドキュメントのすべてのドキュメントを保存することができます。
ユーザーから「Milvusを使ってチャットボットを作るにはどうすればいいか」と質問されたとき、チャットボットは公式ドキュメントに基づいて、アプリケーションの構築例や関連ドキュメントの抽出方法をユーザーに伝えながら回答します。この種の回答は信頼できる。要するに、すべてを再訓練したり処理したりする必要はなく、必要な文脈知識をChatGPTに送り込めばいいのだ。私たちがリクエストを送ると、ロボットは公式コンテンツに関連するコンテキストを提供することができる。
ChatGPTのためのMilvusとLangchainのパワーを発見した後、あなたは興奮を感じていますか?もしそうなら、アプリケーション開発の準備をしましょう。チームを組んで、LangChainとMilvusの素晴らしい機能を組み合わせて、強化されたチャットボットを作りましょう!
LangChainとMilvusでアプリケーションを作ろう
前提条件
まず、pip install langchainコマンドを使ってLangChainをインストールします。Milvusに関しては、2つの選択肢があります。オープンソースのMilvus](https://milvus.io/docs/install_standalone-operator.md)をローカルにインストールして起動するか、クラウドオプションのZillizを試すかです。Zillizは簡単で、アクセスしやすく、堅牢なサービスです。そこで、アプリケーションにZilliz Cloudを使用する方法について説明します。
1.ナレッジベースへのデータロード
まず、データを標準フォーマットにロードする必要があります。テキストをロードするだけでなく、それを小分けにする必要がある。これは、最もマイナーで、最も関連性の高いテキストだけを言語モデルに渡すために必要です。
パイソン from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import Milvus from langchain.document_loaders import TextLoader
loader = TextLoader('state_of_the_union.txt') documents = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(documents)
次に、小さなテキストの塊ができたので、各テキストの埋め込みを作成し、ベクトルストアに格納する必要があります。埋め込みを作成するのは、埋め込みを使って、言語モデルに送る最も関連性の高いテキストの断片だけを見つけられるようにするためです。これは以下の行で行われる。ここでは、OpenAIのエンベッディングとZilliz Cloudを使っています。
``python
embeddings = OpenAIEmbeddings()
vector_db = Milvus.from_documents(
docs、
embeddings、
connection_args={
"uri":"your_zilliz_cloud_uri"、
"user":ユーザー名": "your_zilliz_cloud_username"、
"password":パスワード": "your_zilliz_cloud_password"、
"secure":真
}
)
2.データを問い合わせる
データを読み込んだので、それを質問と回答の連鎖で使うことができます。
この記事のパート3「幻覚を解決する」に取り組む以下のコードスニペットをチェックしてください。コンセプトを完全に理解するのに役立ちます。
これは、知識ベースから与えられたクエリに関連する文書を検索することを含みます。これを達成するには、similarity_searchメソッドを使用してクエリの特徴ベクトルを生成し、Zilliz Cloudでベクトルを検索して、関連するドキュメントの内容とともに類似の一致を探します。
``python query = "ケタンジ・ブラウン・ジャクソンについて大統領は何と言ったか" docs = vector_db.similarity_search(query)
次に `load_qa_chain` を実行して最終的な答えを得る。これは質問に答えるための最も汎用的なインターフェースを提供します。入力ドキュメントに対してQAを行うことができるチェーンをロードし、ドキュメント内のすべてのテキストを使用します。
以下のコードはLLMとしてOpenAIを使用しています。QAChainは `input_documents` と `question` を入力として受け取る。input_documents` はデータベース内の `query` に関連する文書である。そして、LLM はこれらの文書の内容と質問に基づいて回答を整理する。
パイソン
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
chain = load_qa_chain(llm, chain_type="stuff")
chain.run(input_documents=docs, question=query)
なぜMilvusがAIGCアプリケーションに適しているのか?
人工知能生成コンテンツ(AIGC)アプリケーションの信頼性を高めたいのであれば、テキストを表現するベクターデータベースを持つことが必要です。しかし、なぜMilvusベクトルデータベースを選ぶのでしょうか?
セマンティック検索:Milvusは抽出された意味特徴ベクトルを保存し、従来のデータベースでは困難であったインテリジェントで便利な意味検索を可能にします。ベクトルデータベースは意味検索をよりインテリジェントで便利にします。
- スケーラビリティクラスタとクラウドのスケーリングをサポートすることで、数十億のエンティティの保存と検索が容易になります。スケーラビリティは、スピードと効率が最優先されるアプリケーションに不可欠です。
- ハイブリッド検索Milvusはベクトルデータとスカラーデータの混在検索をサポートしており、様々な検索シナリオや要件に対応することができます。
- 豊富なAPIMilvusは、Python、Java、Go、Restfulなどの多言語APIを提供します。
- LLMの統合**:OpenAI Plugin、Langchain、LLamaIndexを含む複数のLLMとの統合により、ユーザーはアプリケーションをさらにパーソナライズすることができます。
- ローカルのラップトップからMilvus-liteのようなクラウド製品、Dockerコンテナ、分散デプロイメント、クラウド利用まで、多くのユースケースをサポートするようにMilvusを設計しました。このため、Milvusは様々なアプリケーションの規模に容易に適応することができ、小規模なプロジェクトからエンタープライズレベルのデータ検索まですべてをサポートします。
アプリケーションの次のステップ
AIの領域では、常に新しい進歩やゲームチェンジャー的なテクノロジーが、あなたのアプリケーションを次のレベルに引き上げることができます。GPTCache](https://github.com/zilliztech/GPTCache)の実装と、埋め込みモデルとプロンプトのチューニングです。これにより、パフォーマンスと検索品質を向上させ、アプリケーションを際立たせ、より良いユーザーエクスペリエンスを提供することができます。
AIGC アプリケーションのパフォーマンスを向上させる - GPTCache
AIGCアプリケーションのパフォーマンスを最適化し、コストを削減したい場合は、GPTCacheをチェックしてください。この革新的なプロジェクトは、LLMレスポンスを保存するためのセマンティックキャッシュを作成するように設計されています。
では、これはどのように役立つのでしょうか?LLMへの回答をキャッシュし、ベクトルデータベースが類似の質問を検索してキャッシュされた回答を得ることで、アプリケーションは素早く正確にユーザーに回答することができます。GPTCacheを使えば、キャッシュされた回答へのアクセスが簡単になり、冗長な回答生成がなくなり、最終的に時間と計算リソースを節約できます。GPTCacheは、全体的なユーザーエクスペリエンスを向上させることで、さらに一歩進んでいます。より迅速で正確な回答を提供することで、回答者は満足し、アプリケーションはより成功するでしょう。
検索品質の向上 - 組み込みモデルとプロンプトのチューニング
GPTCacheの活用に加えて、埋め込みモデルとプロンプトを微調整することで、検索結果の品質を向上させることができます。 エンベッディング・モデルは、テキストをディープラーニングが処理できる数値ベクトルに変換するビルディング・ブロックであるため、AIアプリケーションの重要なコンポーネントです。埋め込みモデルをチューニングすることで、セマンティック検索結果の精度と関連性を向上させることができます。これには、特定のキーワードやフレーズを優先するようにモデルを調整したり、ターゲットオーディエンスのニーズや嗜好を反映するように重み付けやスコアリングの仕組みを調整したりすることが含まれます。よく訓練されたエンベッディング・モデルがあれば、AIGCアプリケーションはユーザーの入力を正確に解釈・分類し、より正確な検索結果を導き出すことができます。
それとは別に、アプリケーションで使用されるプロンプトは、検索結果の質を向上させる上で重要な役割を果たします。プロンプトとは、"How can I help you today? "や "What's on your mind? "など、AIがユーザーに入力を促すために使用するフレーズのことです。これらのプロンプトをテストして修正することで、検索結果の品質と関連性を向上させることができます。例えば、アプリケーションが特定の業界や層を対象としている場合、そのグループが使用する言語や用語を反映するようにプロンプトを調整することができます。これにより、ユーザーをより関連性の高い検索クエリに導くことができ、ユーザーのニーズをより正確に満たすことで、より満足度の高いエクスペリエンスにつながります。ユーザーの要求を満たすためにプロンプトを洗練させることで、検索をより成功に導くことができ、より満足度の高いユーザーベースにつながります。
最後に
まとめると、LangChainとMilvusはLLMを搭載したアプリケーションをゼロから作る開発者にとって完璧なレシピです。LangChainはLLMのための標準的で使いやすいインターフェイスを提供し、Milvusは驚くべき保存と検索の機能を提供します。LangChainとMilvusはChatGPTのインテリジェンスと効率を高めることができ、幻覚の障害を超えることができます。さらに、GPTCache、プロンプト、モデルチューニングテクノロジーを使えば、AIアプリケーションを思いもよらない方法で改善することができます。
AIの限界に挑戦し続ける私たちと、人工知能の無限の可能性を探求するAIGCが協力し合い、明るい未来を創造していきましょう。
読み続けて

Zilliz Cloud Delivers Better Performance and Lower Costs with Arm Neoverse-based AWS Graviton
Zilliz Cloud adopts Arm-based AWS Graviton3 CPUs to cut costs, speed up AI vector search, and power billion-scale RAG and semantic search workloads.

Optimizing Embedding Model Selection with TDA Clustering: A Strategic Guide for Vector Databases
Discover how Topological Data Analysis (TDA) reveals hidden embedding model weaknesses and helps optimize vector database performance.

Semantic Search vs. Lexical Search vs. Full-text Search
Lexical search offers exact term matching; full-text search allows for fuzzy matching; semantic search understands context and intent.
