「Langchainのチャットボットソリューションで複数のウェブサイトを強化しましょう」
「Langchainのチャットボットソリューションであなたのウェブサイトをさらに強化しましょう」
イントロダクション
AIの革新的な時代において、会話エージェントまたはチャットボットは、さまざまなデジタルプラットフォーム上でユーザーの関与、支援、およびユーザーエクスペリエンスの向上に不可欠なツールとして登場しました。高度なAI技術によって動作するチャットボットは、人間の対話に似た自動化されたインタラクティブな対話を可能にします。ChatGPTの登場により、ユーザーの質問に対する能力は飛躍的に向上しました。ChatGPTのようなカスタムデータ上でのチャットボットの構築は、ビジネスにとってより良いユーザーフィードバックとエクスペリエンスを提供することができます。この記事では、LangchainのChatbotソリューションを構築し、ChatGPTのようなカスタムウェブサイトとRetrieval Augmented Generation(RAG)テクニックを使用します。プロジェクトを始める前に、このようなアプリケーションを構築するためのいくつかの重要なコンポーネントを理解します。
学習目標
このプロジェクトから以下のことを学びます:大規模な言語チャットモデル
- カスタムデータ上でChatGPTのようなチャットボットを構築する方法
- RAG(Retrieval Augmented Generation)の必要性
- ローダー、チャンキング、埋め込みなどのコアコンポーネントを使用してChatGPTのようなチャットボットを構築する方法
- Langchainを使用したインメモリベクトルデータベースの重要性
- ChatOpenAIチャットLLMを使用したRetrievalQAチェーンの実装方法
この記事はデータサイエンスブログマラソンの一環として公開されました。
- 「0人の従業員で250万ドルを稼ぐ(ジャスティン・ウェルシュのソロビジネスシステム)」
- FineShare Review 2023年の最高の人工知能仮想カメラは?
- サイバーセキュリティにおいてAIを活用して人間を補完する
Langchainとは何か、なぜ使うのか
ChatGPTのようなチャットボットを構築するために、Langchainのようなフレームワークがこのステップで必要です。応答を作成するために使用される大規模言語モデルを定義します。複数のデータソースを取り扱う際には、gpt-3.5-turbo-16kをモデルとして使用してください。これにより、トークンの数が増えます。このモデル名を使用して、便利なInvalidRequestErrorを避けてください。Langchainは、大規模言語モデル(LLM)によって駆動されるアプリケーションの開発を支援するオープンソースのフレームワークです。LangChainのコアとして、属性とコンテキストの理解を具備したアプリケーションの作成を容易にします。これらのアプリケーションは、プロンプトの指示、フューショットの例、およびコンテキストのコンテンツを含むカスタムデータソースにLLMを接続します。この重要な統合により、言語モデルは提供されたコンテキストに基づいて応答を行い、ユーザーとより微妙で情報のあるインタラクションを行うことができます。
LangChainは高レベルのAPIを提供し、言語モデルを他のデータソースに接続し、複雑なアプリケーションを構築することを容易にします。これにより、検索エンジン、高度な推薦システム、eBook PDFの要約、質問応答エージェント、コードアシスタントのチャットボットなどのアプリケーションを構築することができます。
RAG(Retrieval Augmented Generation)の理解
大規模な言語モデルは、従来のAIとして応答を生成する際に非常に優れています。コード生成、メールの作成、ブログ記事の生成など、さまざまなタスクを実行できます。しかし、ドメイン固有の知識に関しては、LLMsは通常、幻覚に陥りがちです。幻覚を減少させ、事前学習されたLLMsをドメイン特有のデータセットでトレーニングするという課題を克服するために、ファインチューニングという手法が使用されます。ファインチューニングは幻覚を減少させる上で効果的な方法であり、モデルにドメイン知識を学習させる最良の方法です。ただし、これには高いリスクが伴います。ファインチューニングにはトレーニング時間と計算リソースが多く必要とされ、コストがかかります。
RAGはその救世主となります。Retrieval Augmented Generation(RAG)は、LLMにドメインデータコンテンツを提供し、文脈に即した関連性のある事実に基づいた応答を生成することを保証します。RAGはLLMの再トレーニングを必要とせずに知識を取得します。このアプローチは計算要件を減らし、組織が限られたトレーニングインフラストラクチャ上で運用することを支援します。RAGはアプリケーションのスケーリングにも役立つベクトルデータベースを利用します。
複数のウェブサイトとのチャットのワークフロー
図は複数のウェブサイトとのチャットプロジェクトのワークフローを示しています。
ワークフローで使用されるコンポーネントを理解するために、コードに入りましょう。
インストール
pipコマンドを使用してLangChainをインストールできます。OpenAIをインストールしてAPIキーを設定することもできます。
pip install langchainpip install openaipip install chromadb tiktoken
OpenAIのAPIキーを設定しましょう。
このプロジェクトでは、ChatOpenAIとgpt-3.5-turbo-16kモデル、およびOpenAI embeddingsを使用します。これらのコンポーネントにはOpenAIのAPIキーが必要です。APIキーを入手するには、platform.openai.comにログインしてください。
1. アカウントにログインした後、プロフィールをクリックし、「View API keys」を選択します。
2. 「新しいシークレットキーを作成」を押して、APIキーをコピーします。
osライブラリを使用して環境変数を作成し、APIキーを貼り付けます。
import osos.environ['OPENAI_API_KEY'] = "sk-......zqBp" #キーを置換してください
データソース- ETL(抽出、変換、読み込み)
ChatGPTのようなチャットボットアプリケーションを構築するためには、カスタムデータが必要です。このプロジェクトでは複数のウェブサイトとチャットするため、ウェブサイトのURLを定義し、WebBaseLoaderを介してこのデータソースを読み込む必要があります。WebBaseLoaderなどのLangchainローダーは、各URLからデータコンテンツをスクラップします。
from langchain.document_loaders import WebBaseLoaderURLS = [ 'https://medium.com/@jaintarun7/getting-started-with-camicroscope-4e343429825d', 'https://medium.com/@jaintarun7/multichannel-image-support-week2-92c17a918cd6', 'https://medium.com/@jaintarun7/multi-channel-support-week3-2d220b27b22a' ]loader = WebBaseLoader(URLS)data = loader.load()
チャンキング
チャンキングとは、文の中で共通の文法的機能を果たす連続した重複しない単語(またはトークン)のグループを識別およびセグメント化する特定の言語タスクを指します。簡単に言えば、チャンキングは大きなテキストを小さなセグメントに分割するのに役立ちます。Langchainでは、テキストを文字に分割するCharacterTextSplitterなどのテキスト分割サポートを提供しています。
from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)websites_data = text_splitter.split_documents(data)
埋め込み
テキストを扱うディープラーニングモデルでは、テキストを埋め込みレイヤーに渡す必要があります。コンテキストを学習させるためには、チャンク化されたデータを埋め込みに変換する必要があります。埋め込みは、単語やトークンを数値ベクトルに変換する方法です。この変換は重要ですが、それによってテキストデータを連続的なベクトル空間で表現することができます。各単語またはトークンは、固有のベクトルで表されます。
from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()
ベクトルデータベース
実際のウェブサイトデータは、ベクトル形式の埋め込みに変換されます。ベクトルデータベースは、Chromaなどのデータベースに埋め込みを格納する一意の方法です。ベクトルデータベースは、検索技術と類似性検索のためにMLやAIの世界で人気が高まっている新しいタイプのデータベースです。ユーザーのクエリを取得した後、類似性検索と検索結果は通常、クエリベクトルと最も類似度スコアが高いベクトルのランク付けリストです。このメトリックを使用することで、アプリケーションは事実に基づいた応答を返すことが保証されます。
一部分常用且受欢迎的开源矢量数据库包括Chroma、Elastic Search、Milvus、Qdrant、Weaviate和FAISS。
from langchain.vectorstores import Chromawebsearch = Chroma.from_documents(websites_data, embeddings)
大型语言聊天模型
在这一步中,我们定义了用于生成响应的大型语言模型。在处理多个数据源时,请确保使用gpt-3.5-turbo-16k作为模型。这将占用更多的标记。使用该模型名称,并避免InvalidRequestError。
from langchain.chat_models import ChatOpenAImodel = ChatOpenAI(model='gpt-3.5-turbo-16k',temperature=0.7)
用户提示和检索
我们已经到达项目的最后一部分,即获取输入提示并使用矢量数据库检索器检索输入提示的相关上下文。RetrievalQA在链式结构中堆叠了大型语言模型和矢量数据库,从而提供更好的响应。
from langchain.chains import RetrievalQArag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())prompt = "Write code implementation for Multiple Tif image conversion into RGB"response = rag.run(prompt)print(response)
输出
整体运作
#installation!pip install langchain openai tiktoken chromadb#import required librariesimport osfrom getpass import getpassfrom langchain.document_loaders import WebBaseLoaderfrom langchain.text_splitter import CharacterTextSplitterfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain.chat_models import ChatOpenAI#set up OpenAI API Keyapi_key = getpass()os.environ['OPENAI_API_KEY'] = api_key#ETL=加载数据URLS = [ 'https://medium.com/@jaintarun7/getting-started-with-camicroscope-4e343429825d', 'https://medium.com/@jaintarun7/multichannel-image-support-week2-92c17a918cd6', 'https://medium.com/@jaintarun7/multi-channel-support-week3-2d220b27b22a' ]loader = WebBaseLoader(URLS)data = loader.load()#分块=分割成较小的令牌的文本分割器text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)websites_data = text_splitter.split_documents(data)#创建嵌入embeddings = OpenAIEmbeddings()#将嵌入和数据存储在Chroma-矢量数据库中websearch = Chroma.from_documents(websites_data, embeddings)#定义聊天大型语言模型-16K标记大小model = ChatOpenAI(model='gpt-3.5-turbo-16k',temperature=0.7)Is LangChain a library or framework?#检索链rag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())#检索相关的输出prompt = "Write code implementation for Multiple Tif image conversion into RGB"#运行查询response = rag.run(prompt)print(response)
结论
总结本文,我们成功使用Langchain构建了一个用于多个网站的Chatbot。这不仅仅是一个简单的Chatbot。相反,这是一个在您的数据上像ChatGPT一样回答问题的Chatbot。这篇文章的关键要点是:
- Langchain是最强大的开源大型语言模型框架,可帮助构建像ChatGPT的ChatBot来处理自定义数据。
- 我们讨论了预训练模型面临的不同挑战,以及检索增强生成方法比微调更适合的原因。还有一个免责声明:在大多数情况下,精细微调更适合以获得更多的事实回答。
- 要构建像ChatGPT一样的ChatBot,我们准备了一个项目工作流,其中包括加载器、分块、嵌入、矢量数据库和聊天语言模型等核心组件。
- 矢量数据库是RAG流水线的关键优势。本文还提到了一些流行的开源矢量数据库。
このプロジェクトのユースケースは、LangchainとRAGの潜在能力を探求することにあなたを鼓舞しました。
よくある質問
この記事に表示されているメディアは、Analytics Vidhyaによって所有されておらず、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles