見出し画像

【LangChain】英語解説を日本語で読む【2023年4月21日|@Dave Ebbelaar】

LangChainの解説です。
⏱️ タイムスタンプ
00:00 はじめに
00:26 LangChainとは
01:19 採用情報
02:55 LangChainのモジュールについて
03:47 モデル
05:37 プロンプト
06:43 メモリ
08:21 インデックス
08:58 チェインズ
11:06 エージェント
14:32 ユースケース:YouTubeビデオアシスタント
27:45 私がこれに全力投球する理由
28:15 データフリーランサーって何?
公開日:2023年4月21日
※動画を再生してから読むのがオススメです。


I really believe this is one of the best opportunities for data scientists and AI engineers right now.

データサイエンティストやAIエンジニアにとって、今、最高の機会の一つだと本気で思っています。

In this video, I will give you an introduction to the LangChain library using Python.

このビデオでは、Pythonを使ったLangChainライブラリの紹介をします。

LangChain is a framework for developing applications using large language models.

LangChainは、大規模な言語モデルを使ったアプリケーションを開発するためのフレームワークです。

I will walk you through all the modules, then the quick start guide, and then finally, we will create our first app which will be a personal assistant that can answer questions about any YouTube video that you provided with.

すべてのモジュール、クイックスタートガイド、そして最後に、あなたが提供した任意のYouTubeビデオに関する質問に答えることができるパーソナルアシスタントとなる、最初のアプリを作成します。

So what is it?

YouTubeとは何でしょう?

It's a framework for developing applications powered by large language models, like OpenAI's GPT models.

OpenAIのGPTモデルのような大規模な言語モデルを利用したアプリケーションを開発するためのフレームワークです。

And instead of just interacting with these models using an API, so basically you ask a question, for example, this is what you do when you interact with ChatGPT, but in the background is just an API that you send a message to and then get the message back.

APIを使ってこれらのモデルと対話するのではなく、例えば、基本的には質問をするのですが、これはChatGPTと対話するときに行うことで、バックグラウンドでは、メッセージを送信し、メッセージを返してもらうだけのAPIになっています。

That's how you normally interact with large language models.

これが、大規模な言語モデルとの通常の対話の仕方です。

LangChain is a framework around that that also allows your application to become data aware and agentic.

LangChainは、それを支えるフレームワークで、アプリケーションをデータアウェアやエージェントにすることも可能です。

So data aware means that you can connect a language model to other data sources.

データアウェアとは、言語モデルを他のデータソースに接続できることです。

So for example, your own data, company data that you can build on and agentic means allow a language model to interact with its environment.

また、エージェンティックとは、言語モデルがその環境と相互作用できるようにすることです。

So it's not just asking a question and then getting information back, no, it's also acting on that information by using various tools, for example, that we will get into in a bit.

つまり、単に質問して情報が返ってくるだけでなく、例えば、これから紹介するさまざまなツールを使って、その情報に基づいて行動することができるのです。

Now, why would you want to learn a framework like LangChain?

さて、なぜLangChainのようなフレームワークを学ぼうと思ったのでしょうか?

And I really want to get deep into this because I believe there will be so many opportunities if you understand this correctly.

というと、これを正しく理解すれば多くのチャンスがあると思うので、どうしても深入りしたいのです。

So I work as a freelance data scientist and up until this point, basically my job as a data scientist is to help companies, usually larger companies that have a lot of historical data and use that to train machine learning models on.

私はフリーランスのデータサイエンティストとして働いていますが、ここまでは基本的にデータサイエンティストとしての私の仕事は、企業、通常は過去のデータをたくさん持っている大企業を助け、それを使って機械学習モデルを訓練することです。

But what we're seeing right now with these pre-trained large language models like OpenAI models is that also smaller companies without huge amounts of historical data can start to leverage the power of AI.

しかし、OpenAIモデルのような事前に訓練された大規模な言語モデルによって、膨大な量の履歴データを持たない中小企業でもAIの力を活用し始めることができるようになったのです。

And now me working as a freelancer, this provides me with a lot of opportunities actually to also work with smaller businesses, doing smaller projects while also still being able to make great impact for that company and also with really large machine learning projects using lots of historical data.

私は今フリーランスとして働いていますが、そのおかげで、中小企業と仕事をする機会が多く、小さなプロジェクトをこなしながら、その企業に大きなインパクトを与えることができますし、多くの履歴データを使った大規模な機械学習プロジェクトもこなせます。

You also never really quite know what you're going to get.

また、何が出てくるかわからないということもあります。

So actually a lot of data science projects fail.

ですから、データサイエンス・プロジェクトの多くは失敗しています。

And I believe using these large language models for small businesses or even for large businesses will be a much more predictable way of doing AI projects because the model is already there, you know what it can do and now you just have to provide it with extra information and tune it to a specific use case.

そして、このような大規模な言語モデルを、小規模企業や大規模企業で利用することは、AIプロジェクトを行う上でより予測可能な方法になると思います。なぜなら、モデルはすでに存在しており、その機能が分かっているからです。あとは、追加情報を提供し、特定の用途に合わせて調整するだけなのです。

So if you learn this, if you understand LangChain and more specifically the underlying principles basically of this particular framework, then I think you will set yourself up for many great opportunities to come.

ですから、もしあなたがこれを学び、LangChainを理解し、より具体的にはこの特定のフレームワークの基本原理を理解すれば、今後多くの素晴らしい機会を得ることができるようになると思います。

You can really make a lot of money here if you understand this correctly.

これを正しく理解すれば、本当に多くのお金を稼ぐことができるのです。

So let's get into this.

では、さっそく本題に入りましょう。

So I will start off by explaining all the different modules to you, all the different building blocks of the LangChain library that you can use to start building your intelligent apps.

まず、LangChainライブラリのモジュール、つまりインテリジェントなアプリを作るのに使えるビルディングブロックの説明から始めます。

And after briefly explaining each of the core components, I will give you an example from the quick start guide within VSCode.

そして、各コアコンポーネントを簡単に説明した後、VSCodeのクイックスタートガイドから例を挙げます。

So you also have an idea of what it looks like in code and how you can use it.

コード上でどのように見えるか、どのように使うことができるかというアイデアも持っているわけです。

And there is also a GitHub page available for this project that you can go to link is in the description so you can clone it and you can follow along.

また、このプロジェクトにはGitHubページが用意されており、説明文にあるリンクにアクセスすれば、クローンして一緒に進めることができます。

Here I also explain how to set this up and what kind of API keys you need and how to set up the environment and install the keys in your.env file.

ここでは、このプロジェクトの設定方法、必要なAPIキーの種類、環境の設定方法、.envファイルにキーをインストールする方法についても説明しています。

So if you're not familiar with that, I would suggest checking out this GitHub page so that way you can follow along.

もし慣れていないのであれば、このGitHubのページをチェックすることをお勧めします。

But coming back to the getting started page over here.

でも、この「はじめに」のページに戻ってください。

So these are all the modules in increasing order of complexity.

ここでは、すべてのモジュールを複雑な順に並べています。

So we will start simple and we will start off with the models.

まずはシンプルに、モデルから始めましょう。

So these are the model integrations that LangChain supports.

LangChainがサポートしているモデル統合を紹介します。

And there is a whole list over here that you can check out.

ここに全リストがありますので、チェックしてみてください。

But you have the models from OpenAI, you have, for example, hugging face and a whole lot of other different models that are supported right now.

OpenAIのモデルもありますし、例えば、ハグする顔など、現在サポートされている様々なモデルもあります。

So that is the first module.

これが最初のモジュールです。

So now let's see what it looks like in VSCode.

では、VSCodeでどのように見えるか見てみましょう。

So I have an example over here where I load the OpenAI model from the LangChain library.

ここでは、LangChainライブラリからOpenAIのモデルをロードする例を示します。

And I can basically define my model by providing a specific parameter here for the model name.

モデル名を指定することで、基本的にモデルを定義することができます。

So for this example, we are going to use the text da Vinci three model.

この例では、ダヴィンチ3というモデルを使用します。

And if you go to the API reference for OpenAI, you can see there are a lot of models that you can pick a lot of models that you can choose from.

OpenAIのAPIリファレンスを見ると、たくさんのモデルがあり、その中から選ぶことができることがわかります。

I am currently on the wait list for GPT four.

私は現在、GPT 4のウェイティングリストに載っています。

So once you get access to that, it will become even better.

ですから、それにアクセスできるようになれば、さらに良くなると思います。

But coming back to the example over here.

しかし、ここで例に戻ってみましょう。

So we load our model and then we can basically provide it with a prompt.

モデルを読み込んで、基本的にはプロンプトを与えることができます。

So let's say write a poem about Python and AI.

例えば、PythonとAIに関する詩を書くとします。

So let's first initialize the model, then say store our prompt.

まずモデルを初期化し、次にプロンプトを保存します。

And now we are going to call the model and put in the prompt.

そして、モデルを呼び出してプロンプトを入力します。

So it will now send out a connection to the OpenAI API with our prompt.

すると、プロンプトとともにOpenAI APIへの接続が送信されます。

And then it will give us back the result.

そして、その結果を返してくれます。

So this is just a general way of interacting with these large language models and something that I can also do in ChatGPT.

これは大規模な言語モデルと対話する一般的な方法であり、ChatGPTでも行えることです。

So here you can see the poem that we get back from the API.

APIから返された詩をご覧ください。

So this is nothing new up until this point.

この時点では、何も新しいことはありません。

But this is the starting point that we need in order to interact with these language models.

しかし、これは言語モデルと対話するために必要な出発点なのです。

Then next on the list is prompts and this you can use to manage your prompts, optimize them and also serialize them.

次に、プロンプトの管理、プロンプトの最適化、プロンプトのシリアライズを行うためのものです。

So coming back to our project, we have the prompt template over here that we can also import from the LangChain library and the prompt template.

プロジェクトに戻ると、ここにプロンプト・テンプレートがあり、LangChainライブラリとプロンプト・テンプレートからインポートすることができます。

What we can do, we can provide it with an input variable and then a template.

このテンプレートには入力変数とテンプレートが用意されています。

So what we can do with this is we can basically ask user information or get some kind of variable information and then put it into a prompt similar to how you would use F strings, for example, in Python.

これでできることは、PythonでF文字列を使うのと同じように、ユーザの情報を聞いたり、変数の情報を取得したりして、それをプロンプトに反映させることです。

And this is just a nice class that you can use and there are more things you can do with it.

このクラスを使って、もっといろいろなことができるようになります。

But this is just a basic example.

しかし、これはあくまで基本的な例です。

So we can provide the prompt template over here.

ですから、プロンプトのテンプレートはこちらで用意できます。

Let me clear this up for you.

これをはっきりさせましょう。

So what is a good name for a company that makes and then between curly brackets product and then we see the input variables is product over here.

このように、入力変数がproductであることを確認した上で、中括弧の間にproductを入力します。

And now we can call prompt.format and then we can provide the product.

そして、prompt.formatを呼び出すと、productを入力することができます。

So after running this, what you can see is that we now have the prompt.

これを実行すると、プロンプトが表示されることがわかります。

What is a good name for a company that makes smart apps using large language models?

大規模な言語モデルを使ってスマートなアプリを作る会社の名前は何が良いでしょうか?

And then the third component is memory.

そして、3つ目のコンポーネントはメモリです。

So we can provide our intelligent app with both long term and short term memory to make it smarter basically so it does not forget the previous interaction that it has had with the user.

つまり、インテリジェントなアプリに長期記憶と短期記憶の両方を持たせることで、ユーザーとの以前のやりとりを忘れないように、より賢くすることができるのです。

So coming back to our example over here, we can import the conversation chain.

ここで例に戻って、会話チェーンをインポートしてみましょう。

So that is also from length chain import conversation chain.

これもlength chainからconversation chainをインポートしています。

So how this works is we can initialize a model again and then start a conversation.

この仕組みは、モデルを再び初期化し、会話を開始するものです。

And then we are going to call the.predict method on the conversation and provide it with an input.

そして、その会話に対してpredictメソッドを呼び出し、入力を与えます。

So right now the conversation is empty, but we can send this over and predict it.

今、会話は空ですが、これを送信して予測することができます。

And what you can then see is that we will have a conversation.

すると、会話が成立することがわかります。

So there is a general prompt here.

ここには一般的なプロンプトがあるわけです。

So the following is a friendly conversation between a human and an AI.

つまり、以下は人間とAIのフレンドリーな会話です。

The AI is talkative and provides lots of specific details from its context, etc.

AIは饒舌で、その文脈から具体的なディテールをたくさん提供する、などです。

So this is already engineered within the library and then the human says hi there.

つまり、これはすでにライブラリの中でエンジンがかかっていて、そして人間がそこにこんにちはと言う。

And then the AI provides us with a response.

そして、AIが応答を提供してくれる。

And that is the output.

そして、それが出力されます。

So we can print that and that is hi there.

それを印刷すると、「こんにちは。

Nice to meet you.

よろしくお願いします。

What can I do for you?

ご用件は何でしょうか?

And now what we can do next is we have that output and we are going to make another prediction by saying I'm doing well.

そして次にできることは、この出力を使って、「私はうまくいっています」という別の予測をすることです。

Just having a conversation with an AI.

AIと会話しているようなものです。

So let's run this.

では、これを実行してみましょう。

Here you can see the history.

ここに履歴が表示されています。

So first we have the hi there, then we have the response from the AI and then you see our response here again.

まず「こんにちは」があり、次にAIからの応答があり、そしてまたここに私たちの応答が表示されています。

So what we've just entered and now we can print that again and you can see that now the AI is responding by it's great to be having a conversation with you.

今入力したものをもう一度印刷すると、AIが「あなたと会話できてうれしいです」と応答しているのがわかります。

What would you like to talk about?

どんな話をしたいですか?

Alright and then next up is indexes.

さて、次はインデックスです。

So language models are often more powerful when combined with your own text data.

言語モデルは、自分のテキストデータと組み合わせることで、より強力になることが多いのです。

This module covers best practices for doing exactly that.

このモジュールでは、まさにそれを行うためのベストプラクティスについて説明します。

So this is where it gets really exciting.

ここが本当にエキサイティングなところなんです。

So this was the example that I was talking about previously where you can build smart applications for companies using their own data, their existing data.

これは、以前お話しした例ですが、自社のデータ、つまり既存のデータを使って、企業向けのスマートなアプリケーションを構築することができるのです。

And we will get more into this in the example that I will provide at the end of this video.

このビデオの最後に紹介する例で、さらに詳しく説明します。

But for now just know that there are document loaders, text splitters and vector stores and also retrievers.

しかし今は、ドキュメントローダー、テキストスプリッター、ベクターストア、そしてリトリーバーがあることを知っておいてください。

So this is really exciting when we start to work with our own data.

このように、自分たちのデータを扱うようになると、本当にわくわくします。

But for now let's continue to chains which is another core component of the LangChain model.

しかし今は、LangChainモデルのもう一つのコアコンポーネントであるチェーンに話を進めましょう。

So chains go beyond just a single large language model call and are sequences of calls.

チェーンとは、単に一つの大きな言語モデルの呼び出しにとどまらず、一連の呼び出しのことです。

LangChain provides a standard interface for chains, lots of integrations with other tools and end to end chains for common applications.

LangChainはチェーン用の標準インターフェイスを提供し、他のツールとの統合や一般的なアプリケーションのためのエンド・トゥ・エンドチェーンを数多く提供しています。

So this is really where we start to bring things together.

つまり、ここが本当に物事をまとめ始める場所なのです。

So the models and the prompts and the memory, it's nothing that new right?

モデルやプロンプト、メモリは、それほど新しいものではありませんね。

We've seen it, we can use it in ChatGPT.

ChatGPTでも使っていますし、見たこともあります。

But now when we start to chain things together is when it gets really exciting.

しかし、これらを連鎖させ始めると、本当にエキサイティングになるのです。

So what does this look like in code?

では、コードではどうなっているのでしょうか?

So let's look at the LLM chain clause that we can import from LangChain.chains.

LangChain.chainsからインポートできるLLMチェーン節を見てみましょう。

So given our previous model setup and the prompt that we've provided.

先ほどのモデルの設定とプロンプトがあれば、会社名、会社名、会社名、会社名、会社名、会社名、会社名、会社名、会社名、会社名、会社名

So coming up with a company name, we can now actually start to run this chain.

会社名が決まったら、実際にこのチェーンを走らせることができます。

So the prompt template was just for engineering your prompt.

プロンプトテンプレートは、プロンプトを作成するためのものです。

The model is just for making a connection with the API.

モデルはAPIとの接続を行うためのものです。

And now we can chain this together.

そして今、私たちはこれを連鎖させることができます。

So let's quickly store this then set up this chain.

では、早速これを保存して、このチェーンをセットアップしてみましょう。

So we provide the model and the prompt as input parameters.

入力パラメータとして、モデルとプロンプトを用意します。

And now we can run this.

そして、これを実行することができます。

So let's try another example.

では、別の例を試してみましょう。

What is a good name for a company that makes AI chat bots for dental offices, AI DENTEC.

歯科医院向けのAIチャットボットを作る会社の名前として、「AI DENTEC」はいかがでしょうか。

Love it.

大好きです。

Alright, so now you start to get a sense of how you can turn this into an application.

さて、これで、これをアプリケーションにする方法が見えてきましたね。

You predefined the prompt over here, and then you combine it with user input and run that using a chain.

プロンプトをあらかじめ定義しておき、それをユーザーの入力と組み合わせて、チェーンを使って実行するのです。

So you could already turn this into a web app, for example, company name generator.AI.

ですから、たとえば「会社名ジェネレーター.AI」のようなウェブアプリにすることができます。

This is it basically.

これが基本です。

And now the trick here, the key is being really smart about what you put into these templates.

ここで重要なのは、このテンプレートに何を入れるかについて、本当に賢くなることです。

So this is a very straightforward example, what is a good name for a company, but you can get really specific here and provide it with lots of information really tailored to a specific use case to get the result that you are looking for given the user's input.

これは非常にわかりやすい例で、会社の名前は何がいいかというものです。しかし、ここでは本当に具体的に、特定のユースケースに合わせた多くの情報を提供し、ユーザーの入力から求めている結果を得ることができます。

And I will give you a good example of this once we start to develop the YouTube AI assistant later in this video.

このビデオの後半で、YouTubeのAIアシスタントの開発を始めたら、この良い例をお見せします。

And then the last component, agents.

そして、最後のコンポーネントであるエージェントです。

So agents involve a large language model making decisions about which actions to take, taking that action, seeing an observation and repeating that until it's done.

エージェントは、大規模な言語モデルによって、どの行動を取るべきかを決定し、その行動を取り、観察し、それが完了するまで繰り返します。

So this is really where you get to build your own AutoGPT BabyAGI kind of applications by using these agents and these agents can use tools.

このエージェントを使って、AutoGPT BabyAGIのような独自のアプリケーションを構築することができます。

So there are tools, agents, toolkits and executors and tools, for example, we have all kinds of tools that are already supported straight out of the box.

ツール、エージェント、ツールキット、エグゼキュータがあり、ツールは、例えば、箱から出してすぐに使えるあらゆる種類のツールがあります。

So we have Google searches, we have Wikipedia, we have Google searches via the SERP API, all kinds of stuff that we can use.

Google検索、Wikipedia、SERP APIによるGoogle検索など、あらゆるものが利用できます。

And if we use these agents, they will use the large language model.

また、これらのエージェントを使用する場合、大規模な言語モデルを使用することになります。

So for example, the GPT model to assess which tool to use and then use the tool to get the information and then provide that back to the large language model.

例えば、GPTモデルは、どのツールを使うべきかを評価し、そのツールを使って情報を取得し、それを大規模言語モデルにフィードバックします。

There is even a Pandas data frame agent that you can use and it's mostly optimized for question answering.

Pandasのデータフレームエージェントもありますが、これは質問応答用に最適化されています。

So here you can see a quick example and you can basically ask it how many rows are there and then it knows that it can interact with the Pandas data frame called the length function to get the length of the data frame and then provide that as a result.

ここでは簡単な例を示しますが、基本的に何行あるかと尋ねると、Pandasのデータフレームと対話し、length関数でデータフレームの長さを取得し、それを結果として提供することができることを知っています。

So let's look at another example from the quick start guide.

クイックスタートガイドにある別の例を見てみましょう。

So if I want to start using agents, what I can do is I can import the initialize agent, agent type and the load tools to also provide it with some tools.

エージェントを使い始めたい場合、エージェントの初期化、エージェントタイプ、ロードツールをインポートして、エージェントにツールを提供することができます。

And then coming back over here, I can first list all the tools.

そして、ここに戻ってくると、まずすべてのツールをリストアップすることができます。

So these are also on the website that was just showing you in the documentation, but here you can see the specific name that you have to use in order to provide the agent with that tool.

これらは、先ほどドキュメントで紹介したウェブサイトにもありますが、ここでは、エージェントにそのツールを提供するために使用しなければならない特定の名前を見ることができます。

And now let's say, for example, we want to create an agent and give it access to Wikipedia and it should be able to do some math.

例えば、エージェントを作成し、ウィキペディアにアクセスできるようにし、数学もできるようにしたいとします。

We can set up the tools like this, then initialize the agent provided with the tools, the model that is defined over here.

このようにツールを設定し、ツールで提供されたエージェント、つまりこちらで定義されたモデルを初期化することができます。

And then the agent type is zero shot reacts description, which basically means that based on the prompt that we give to the agent, it will pick the best tool to solve the problem.

エージェントのタイプは、ゼロショット反応記述で、基本的には、エージェントに与えるプロンプトに基づいて、問題を解決するために最適なツールを選択します。

So it will basically pick the tool on its own.

つまり、基本的にはエージェントが自分でツールを選びます。

And this is where it gets really interesting because now you can provide an agent with a set of tools and then it will figure out on its own which tool to use to come up with the best answer.

このように、エージェントにツールのセットを提供すると、エージェントが自分でどのツールを使えば最適な答えが得られるかを判断してくれるようになるのです。

So let's try this query over here in what year was Python released and who's the original creator multiply the year by three, and we only give it access to Wikipedia and math.

では、このクエリを試してみましょう。Pythonがリリースされたのは何年か、オリジナルの作者は誰か、年を3倍して、Wikipediaと数学にだけアクセスできるようにします。

All right.

なるほど。

So now let's first run this.

では、まずこれを実行してみましょう。

So let's see what it will do.

何をするのか見てみましょう。

So new executor, okay.

新しい実行者は、わかりました。

So it understands that it needs the action Wikipedia and then you can see the input Python programming language.

Wikipediaというアクションが必要なことを理解し、Pythonというプログラミング言語が入力されていることがわかります。

So it understands that that is the query that you have to search for in Wikipedia.

Wikipediaで検索するクエリであることが理解できます。

Then it will get the history of Python summary.

そして、Pythonの要約の履歴を取得します。

All right, so I have enough information to answer the question.

よし、これで質問に答えるのに十分な情報が得られた。

So the final answer, Python was created in 1991 by Guido van Rossem and the year multiplied by three is 5,763.

最終的な答えは、Pythonは1991年にGuido van Rossemによって作られ、年を3つ掛けると5,763になるということですね。

All right.

なるほど。

So this is really awesome, right?

これは本当にすごいことですよね?

And this is beyond what ChatGPT or the GPT models are capable of because we can get live information from the internet.

ChatGPTやGPTのモデルにはない、インターネットから生きた情報を得ることができます。

And then also the results are stored as well.

そして、その結果も保存されているのです。

So here you can just see the plain text string.

ここではプレーンテキストの文字列を見ることができます。

We now have that available.

これが使えるようになったのです。

And now if we start to combine everything together, so multiple chains, multiple prompts, and then use agents to get information, also use memory to store everything.

さらに、複数のチェーン、複数のプロンプト、エージェントによる情報の取得、メモリによる保存など、すべてを組み合わせていくことができます。

Now we can actually build some really cool stuff.

これで、本当にクールなものを作ることができるようになりました。

All right.

なるほど。

So I'm now going to show you how you can create an assistant that can answer questions about the specific YouTube video.

では、特定のYouTubeビデオに関する質問に答えるアシスタントを作成する方法をお見せします。

So coming back to the indexes, I've previously explained how these large language models become really powerful when you combine them with your own data and your own data in this scenario in this use case will be a YouTube transcript that we are going to download automatically.

インデックスの話に戻りますが、大規模な言語モデルを自分のデータと組み合わせると、本当に強力になることは以前説明しました。このシナリオでは、この使用例では、YouTubeのトランスクリプトを自動的にダウンロードします。

But you can basically replace that transcript with any other information and this approach will still work.

しかし、基本的にこのトランスクリプトを他の情報に置き換えても、このアプローチは機能します。

So the LangChain library has document loaders, text splitters, and vector stores, and we are going to use all of these.

LangChainライブラリにはドキュメントローダー、テキストスプリッター、ベクターストアがあり、これらすべてを使うことになります。

So let's first talk about document loaders and these are basically little helper tools basically that make it easy to load certain documents.

まずドキュメント・ローダーについてですが、これは基本的に小さなヘルパー・ツールで、特定のドキュメントを簡単に読み込めるようにするものです。

And here you can see everything that is supported right now.

現在サポートされているものはすべてこちらで確認できます。

So we have things like Discord, we have Figma, we have Git, we have Notion, we have Obsidian, PDFs, PowerPoints, but also YouTube.

Discord、Figma、Git、Notion、Obsidian、PDF、PowerPoint、そしてYouTubeなどがあります。

So let's first see how we can get the YouTube transcript given a video URL using this document loader.

ではまず、このドキュメント・ローダーを使って、ビデオのURLからYouTubeのトランスクリプトを取得する方法を紹介しましょう。

Alright, so coming back to VSCode, we have the following video URL over here, which is a podcast from the Lex Friedman podcast where he talks to Sam Altman, the CEO of OpenAI and I thought this would be a nice video to use as an example.

さて、VSCodeに戻ると、ここにビデオURLがあります。それは、Lex Friedmanのポッドキャストで、彼がOpenAIのCEOであるSam Altmanと話しているポッドキャストです。このビデオは例として使うのに適していると思いました。

So we are going to first read the transcript of this podcast, this two and a half hour long video using the document loader.

そこでまず、ドキュメントローダーを使って、このポッドキャスト、2時間半のビデオのトランスクリプトを読みます。

So for that, we're going to import first the YouTube loader from document loaders and we're going to input the video URL.

そのために、まずドキュメントローダーからYouTubeローダーをインポートして、ビデオのURLを入力します。

So let's run this and see what we get.

では、これを実行し、何が得られるか見てみましょう。

So now we have the loader and to get the transcript, then we call the loader.load method.

これでローダーができました。トランスクリプトを取得するには、loader.loadメソッドを呼び出します。

So we call this method over here and then run that and then that will run for a while and now we can have a look at the transcript over here, which is basically a very long string over here with all the text in here.

では、ここでこのメソッドを呼び出し、実行します。それがしばらく実行された後、こちらのトランスクリプトを見ることができます。これは、ここにあるすべてのテキストを含む、非常に長い文字列です。

Alright, so now we have the full transcript and it is within a list and we can access that using the page content to get the actual string, the actual transcript.

さて、これで完全なトランスクリプトが得られ、それはリスト内にあり、ページコンテンツを使って実際の文字列、トランスクリプトを得るためにアクセスすることができます。

But now we have the following problem.

しかし、ここで次のような問題が発生しました。

If I run this to see how long the transcript is, we can see how many tokens there are in there.

トランスクリプトの長さを確認するためにこれを実行すると、そこに含まれるトークンの数を確認することができます。

So this is the total amount of characters and we can see that it's over 100,000.

これが総文字数で、100,000文字以上あることがわかります。

Now this was really a aha moment for me because you cannot just provide this full transcript with over 100,000 characters to the API of these large language models.

10万文字以上の完全なトランスクリプトを、大規模な言語モデルのAPIに提供することはできないからです。

It's just too large.

あまりにも大きすぎるのです。

So if you want the model to be able to answer questions about this transcript, we have to find a workaround to provide it with the information it needs to answer the questions without sending the transcript in full.

ですから、このトランスクリプトに関する質問にモデルが答えられるようにするには、トランスクリプトを完全に送信せずに、質問に答えるために必要な情報を提供するための回避策を見つけなければなりません。

And that is where the text splitters come in, because if you go to the API documentation, you can see the max tokens over here per model for OpenAI models.

そこでテキストスプリッターの出番です。APIドキュメントを見ると、OpenAIモデルのモデルごとの最大トークンを見ることができます。

And if you use the latest model that I can use right now, so the GPT 3.5 Turbo, it's 4096 tokens that you can input to the API.

今使える最新のモデル、つまりGPT 3.5 Turboを使うと、APIに入力できるトークンは4096個になります。

If you're already on GPT-4, you can basically increase the token size, but for now we're stuck to around 4000 tokens.

すでにGPT-4を使っている場合は、基本的にトークン・サイズを大きくすることができますが、今のところ4000トークン程度にとどまっています。

So how do we deal with that if we have a transcript of over 100,000 tokens?

では、10万トークンを超えるトランスクリプトがある場合、どう対処すればいいのでしょうか。

We can use the text splitter to first split this up in several chunks.

テキストスプリッターを使って、まずこれをいくつかのチャンクに分割することができます。

So what this basically will do is I say, Hey, we have this transcript over here, this size, but I want to split it up in chunk sizes of 1000 character each.

つまり、「この原稿はこのサイズだが、1000文字ずつのチャンクサイズに分割したい」ということです。

And here you can also specify if you want there to be a bit of overlap.

ここで、少し重なりを持たせるかどうかを指定することもできます。

And if I run this, so let's run the text splitter and then, sorry, first define the text splitter and then call the text splitter split documents and then put in the transcript that we've just created.

これを実行すると、テキストスプリッターを実行し、まずテキストスプリッターを定義して、テキストスプリッターの分割ドキュメントを呼び出し、先ほど作成したトランスクリプトを挿入してみましょう。

So that is the object over here, the list with the document and the page content in here.

これがこのオブジェクトで、ドキュメントとページのコンテンツが入ったリストがここにあります。

And if I run that, so let's do that.

そして、これを実行すると、こうなります。

I now have the docs and what we can now do if we have a look at what docs is, we can now see that is just a list with a bunch of split up documents.

これでdocsができました。docsの中身を見てみると、分割されたドキュメントの束が入ったただのリストであることがわかります。

So it has taken the very large transcript over 100,000 tokens and split it up into chunks of 1000.

10万トークンを超える非常に大きなトランスクリプトを、1000個の塊に分割しているのです。

Okay.

なるほど。

So that is the first step.

これが最初のステップです。

Okay.

なるほど。

So now you might wonder, okay, so we've split up the transcript, but we can still not provide it to the API, right?

では、トランスクリプトを分割したけれども、APIに提供することはできないのでは?

Correct.

そうです。

And that is where the next part comes in.

そこで、次のパートが登場します。

And that is embeddings and factor databases.

それがエンベッディングとファクター・データベースです。

So this is quite technical and I won't go into the details in this video.

これはかなり技術的な話なので、このビデオでは詳しく説明しません。

I will make future videos about this because for now I want to give you a brief demonstration and overview of how to use this and then later we can get more specific.

なぜなら、今はこの使い方の簡単なデモと概要を説明し、後でもっと具体的に説明したいと思うからです。

But first we use the embeddings from OpenAI to basically convert the text, the splits that we have just created of the 1000 tokens long to convert them into vectors and vectors are basically a, in this case, a numerical representation of the text itself.

しかし、まず最初に、OpenAIからの埋め込みを使用して、基本的にテキストを変換します。つまり、作成したばかりの1000トークンの分割をベクターに変換します。この場合、ベクターはテキスト自体の数値的な表現になります。

So we convert the text to a vector of numbers.

つまり、テキストを数値のベクトルに変換するのです。

Then we will use the face library, which is an library developed by Facebook that you can use for efficient similarity search.

そして、Facebookが開発した、効率的な類似性検索に利用できるライブラリである顔ライブラリを利用します。

We will combine that to basically create a database of all these documents that you see over here.

これを組み合わせて、基本的にはここにあるようなすべての文書のデータベースを作成します。

And when a user wants to ask a question with regards to this YouTube transcript, we will first perform a similarity search to find the chunks that are most similar to the prompts that the user is asking.

そして、ユーザーがこのYouTubeのトランスクリプトに関して質問をしたい場合、まず類似性検索を行い、ユーザーが質問しているプロンプトに最も似ているチャンクを見つけます。

So what this means is that we have this database with all these factors and we can do a similarity search on that to find the relevant pieces of information that we need.

つまり、すべての要素を含むデータベースがあり、それを類似性検索して、必要な情報の関連部分を見つけることができるということです。

And now this is the critical key to working with these large language models and your own data.

そして、これが大規模な言語モデルと自分のデータを扱う際の重要なポイントです。

First, create a filter, a lookup table of some sort to get just the information that you want and then provide that to the large language model with your question.

まず、フィルターやルックアップテーブルを作成して、必要な情報だけを取得し、それを質問とともに大規模言語モデルに提供します。

So if we bring all of that together in this function, create DB from YouTube video URL, we can for any given video URL, load the transcript, then split it up into chunks of 1000 tokens and then put it into a vector database object that we can return using this function.

この関数「YouTubeの動画URLからDBを作成」ですべてをまとめると、任意の動画URLに対してトランスクリプトを読み込み、それを1000トークンの塊に分割して、この関数で返すベクトルデータベースオブジェクトに格納することができます。

Now what we can then do next is we can provide this to another function, the get response from query, where we use this database that we've just created to answer specific questions.

次にできることは、これを別の関数、get response from queryに渡して、先ほど作成したデータベースを使用して特定の質問に答えることです。

So how does this work?

では、これはどのように動作するのでしょうか?

Well, we provide the database and the query.

データベースとクエリを提供します。

So the question you want to ask about the video to this function get response from query and then we also have a parameter K over here, which defaults to four.

ビデオについて尋ねたい質問をget response from queryという関数に渡し、さらにKというパラメータを用意します(デフォルトは4です)。

And here you can see the reasoning behind it, but it's basically to maximize the amount of tokens that we send to the API.

これは、APIに送信するトークンの量を最大化するためのものです。

And then this is where it gets really interesting is we perform a similarity search on the database using the query and we return K documents.

そして、ここからが本当に面白いのですが、クエリを使ってデータベースの類似性検索を行うと、K個のドキュメントが返ってきます。

So given our question, it will go through all of these documents and it will find the most similar ones.

つまり、質問を与えると、これらの文書をすべて調べ、最も似ているものを見つけます。

So it will do a similarity search.

つまり、類似性検索を行うのです。

And then what we do once we have all the documents, so four by default, we join them into one single string and then we create a model over here and now we use the GPT three and a half turbo model.

そして、すべてのドキュメント(デフォルトでは4つ)が揃ったら、それらを1つの文字列に結合し、モデルを作成します。

And next you define a template for your prompt.

そして次に、プロンプトのテンプレートを定義します。

Like we've seen earlier in this video, and this is where you can get really creative.

このビデオで先に見たように、ここは本当にクリエイティブになれる場所です。

So in this example, you are a helpful assistant that can answer questions about YouTube videos based on the videos transcript.

この例では、YouTubeの動画に関する質問に、動画のトランスクリプトに基づいて回答する親切なアシスタントを想定しています。

And then we provide the input parameter docs, which we will replace by the string that we've just created.

そして、入力パラメータdocsを用意し、先ほど作成した文字列に置き換えます。

So all of the document information only use factual information from the transcript to answer the question.

つまり、ドキュメント情報はすべてトランスクリプトの事実情報のみを使用して質問に答えているのです。

If you feel like you don't have enough information to answer the question, say, I don't know.

質問に答えるのに十分な情報がないと感じたら、I don't knowと答えてください。

Your answer should be verbose and details.

回答は冗長で詳細であるべきです。

So like I've said, this is really where you can get creative and based on the kind of applications that you want to create, design your template over here.

このように、どのようなアプリケーションを作りたいかに応じて、テンプレートをデザインすることができます。

And basically by creating minor changes within this template, you can create entirely different apps for all kinds of industries.

このテンプレートの中でちょっとした変更を加えることで、あらゆる業界向けのまったく異なるアプリを作成することができます。

All right.

なるほど。

And then the next step is to chain all of this together.

そして、次のステップは、これらをすべて連鎖させることです。

And since we are now using the chat function, using the GPT three and a half turbo model, this is slightly different, but you can find everything in the quick start.

今回はチャット機能を使い、GPT3.5ターボモデルを使用しているため、少し異なりますが、クイックスタートにすべて記載されています。

So first it explains how you can use the general models and then it continues with the chat models.

まず、一般的なモデルの使い方を説明し、次にチャットモデルについて説明しています。

So the syntax is a little different because here we have the system message prompt and the human message prompt.

ここでは、システムメッセージプロンプトとヒューマンメッセージプロンプトがあるので、構文が少し違います。

So this is nice to first define a message, a prompt for the system basically.

これは、基本的にシステム用のメッセージやプロンプトを最初に定義するのに適しています。

So that is the description over here, the template explaining the AI, the agent, basically what it should do.

これは、AIやエージェントが何をすべきかを説明するテンプレートで、この上に説明があります。

And then we have a prompt to alter the question or the input that the human is providing.

そして、人間が提供する質問や入力を変更するためのプロンプトを用意します。

So I, for example, edit answer the following question and then put in the question over here.

例えば、私は次の質問に答えてから、ここにある質問を入力します。

So I'm not sure if this is necessary right now, but you can alter the input from the user as well.

このように、今必要かどうかはわかりませんが、ユーザーからの入力も変更することができます。

So that is how you would do it.

そうすると、そのようになります。

And then it combines all of that into a chat prompt.

そして、そのすべてをチャットプロンプトに統合します。

And then like we've seen earlier, we can put that into a chain, the chat and the prompt.

そして、先ほど見たように、チャットとプロンプトを連鎖させることができるのです。

And then we can run that chain again, also like we've seen before.

そして、先ほど見たように、その連鎖を再び実行することができます。

And then we just put in a query and the docs that we have defined earlier.

そして、クエリーと先ほど定義したドキュメントを入れるだけです。

All right.

なるほど。

So now we have all the building blocks that we need and we can actually start to call these functions.

これで必要な構成要素がすべて揃ったので、実際にこれらの関数を呼び出すことができます。

So again, let's define the video URL and let's first create a database from this video.

では、ビデオのURLを定義して、まずこのビデオからデータベースを作成しましょう。

So let's see what that will do.

これで何ができるかを見てみましょう。

So it goes quite quickly, so it gets the transcript and then converts it.

トランスクリプトを取得し、それを変換するという流れです。

So now we have the database object and now we can fill in a query over here and then call the get response from query function to answer a specific question about this video transcript.

これでデータベース・オブジェクトができたので、ここでクエリを入力し、クエリからの応答取得関数を呼び出して、このビデオのトランスクリプトに関する特定の質問に答えることができます。

So let's actually see what they are talking about.

では、実際に何を話しているのか見てみましょう。

And let's say I don't have time to watch all of this, but I'm pretty interested in what they have to say about AGI over here.

このビデオを全部見る時間はないけれど、AGIについての話にはかなり興味があるとします。

So I can come over here and listen to what they have to say, but I can now also come to this application over here or this function, so to say, and then fill in what are they saying about AGI.

そこで、私はここに来て彼らの話を聞くことができます。しかし、このアプリケーション、つまりこの機能にも来て、彼らがAGIについて何を言っているのかを記入することができます。

So that is the query and now let's get the response and let's print it.

これが問い合わせで、次はその回答をプリントしてみましょう。

So there we go.

これで完了です。

In the video transcript, they are discussing AGI, artificial general intelligence and the work being done by OpenAI to develop it, Sam Altman, the CEO and so on.

ビデオでは、AGI、人工知能、そしてそれを開発するためにOpenAIが行っている仕事、CEOのSam Altmanなどについて議論しています。

So it's answering the question based on the transcript, awesome.

というわけで、トランスクリプトをもとに質問に答えてくれています。

So let's ask it another question, who are the hosts of this podcast?

では、別の質問をしてみましょう。このポッドキャストのホストは誰でしょう?

So let's run it all at once.

一度に全部やってみましょう。

So it will do some thinking first, get the response and then based on the transcript is not clear who the host of the podcast are.

このポッドキャストのホストが誰なのかは、トランスクリプトではわかりません。

However, it is mentioned that the podcast features conversations with guests such as Sam Altman, Jordan Peterson, and is hosted by someone named Lex Friedman.

しかし、このポッドキャストはサム・アルトマンやジョーダン・ピーターソンといったゲストとの会話を収録しており、レックス・フリードマンという人物がホストを務めていることが記されています。

Okay, so this is really interesting.

なるほど、これは実に興味深い。

It is admitting that it doesn't have all the information, but it is recognizing all the entities and it is correct.

すべての情報を持っているわけではないが、すべての実体を認識し、それが正しいことを認めているのだ。

It's a podcast by Lex Friedman.

これはLex Friedmanのポッドキャストです。

Alright, so let's try another one.

では、別のものを試してみましょう。

What are they saying about Microsoft?

マイクロソフトについて何を言っているのでしょうか。

In the transcript, the speakers are discussing their partnership with Microsoft and how they have been amazing partner to them.

このトランスクリプトでは、スピーカーがマイクロソフトとのパートナーシップについて、そして彼らがいかに素晴らしいパートナーであったかを語っています。

Alright, awesome.

なるほど、素晴らしいですね。

And now also this function, get response from query not only returns the response, but also the docs.

この関数、get response from queryはレスポンスだけでなく、ドキュメントも返します。

So it's actually quite cool.

実にクールです。

You can also have a look at the documents for in this case that it's using to get this answer.

この場合、答えを得るために使っているドキュメントを見ることもできます。

So for this, you also get the reference to the original content, which is very convenient if you want to do additional research or fact check your models to see if it's actually giving you answers that are correct.

この場合、元のコンテンツへの参照も得られるので、追加調査やモデルの事実確認を行い、実際に正しい答えを出しているかどうかを確認したい場合に非常に便利です。

Alright, so now we basically have a working app and all you have to do is create a simple webpage around this, post it on a server or web app somewhere and people can interact with this.

さて、これで基本的に動作するアプリができました。あとは、このアプリの周りに簡単なウェブページを作り、どこかのサーバーやウェブアプリに投稿するだけで、人々がこのアプリと対話することができます。

It will send YouTube URL, ask questions and it will do that for you.

YouTubeのURLを送ったり、質問をしたり、あなたの代わりにやってくれるのです。

And really when I look at all of this stuff, my head really starts to spin.

このようなものを見ていると、本当に頭がクラクラしてきます。

I have so many ideas because for example, what you can do with this approach alone, let's say you create a list of all the channels that talk about a specific topic.

例えば、このアプローチだけでできることとして、ある特定のトピックについて話しているチャンネルのリストを作るとします。

So for example, you want to stay up to date on AI.

例えば、AIについて最新の情報を得たいとします。

You list all the podcast channel, all the popular channels, and then you create a little script that every now and then checks if they have a new video public on their page, scrapes all the URLs and then process all of those videos with these functions and then really engineer your prompt in such a way that you can extract useful information from that that you can use, for example, to do research or create a social media account, for example, a Twitter account where you tweet about the latest updates in AI or even a YouTube channel where you want to talk about AI.

ポッドキャスト・チャンネルや人気のあるチャンネルをすべてリストアップし、小さなスクリプトを作成して、そのページで新しいビデオが公開されているかどうかを時々チェックし、すべてのURLをスクレイピングして、これらの関数ですべてのビデオを処理します。このようにして、プロンプトから有用な情報を抽出し、例えば、研究するために使用したり、ソーシャルメディアのアカウント、例えば、AIに関する最新情報をつぶやくTwitterアカウントやAIについて話すYouTubeチャンネルを作成したりできるように、本当に設計することができるのです。

You can really scout everything and then ask, okay, what is the Lex Friedman postcards saying about AGI?

本当にすべてをスカウトして、よし、レックス・フリードマンのポストカードはAGIについて何を言っているんだろう?

What is Joe Rogan saying about AGI?

ジョー・ローガンはAGIについてどう言っているのか?

And you can do that all automatically and then you can combine this chaining it together with different agents to store this information in files on your.

そして、それをすべて自動で行い、さまざまなエージェントと組み合わせて、その情報をファイルとして保存することができます。

You can see you can really the possibilities are endless.

このように、可能性は無限大なのです。

So like I've said, I am really going to dive deep into this because there are so many opportunities right now.

というわけで、今言ったように、私は本当にこの分野に深く潜り込んでいくつもりだ、なぜなら今とても多くのチャンスがあるからだ。

And as I will learn, I will keep you guys up to date on my YouTube channel.

そして、学びながら、私のYouTubeチャンネルで皆さんに最新情報をお伝えしていきます。

So if you're interested in this, make sure to subscribe so you don't miss any future videos on this.

もし興味があれば、今後の動画を見逃さないように購読しておいてください。

And really, it's been amazing how many requests I'm already getting from companies to help them implement these tools, help them with AI.

そして、本当に驚いたことに、企業から、これらのツールの導入やAIの活用を手伝ってほしいという依頼をすでにたくさん受けているんだ。

I've been getting tons of messages, so it's really exciting.

メッセージも大量に届いていて、本当にエキサイティングです。

So for me as a freelancer, this is a really exciting opportunity, a really exciting moment to basically also start to work with smaller clients, smaller companies and implement these tools.

フリーランサーである私にとって、これは本当にエキサイティングな機会であり、小さなクライアントや小さな会社と仕事を始め、これらのツールを実装するために、本当にエキサイティングな瞬間です。

And now if you also feel like you want to do more with this, you want to exploit this opportunity and start to work on your own freelance projects, but don't really know where to start, then you should really check out Data Freelancer, which is a mastermind that I host specifically created for data professionals that want to kickstart launch their freelance career in data, but don't really know where to start.

もし、あなたがこの機会を利用して、フリーランスとして仕事を始めたいけど、何から始めたらいいかわからないと感じたら、ぜひ、データフリーランサーをチェックしてみてください!これは、データでフリーランスとしてのキャリアをスタートさせたいけど、何から始めたらいいかわからないというデータ専門家のために、私が特別に企画したマスターマインドです。

So in this mastermind, you will literally learn everything you need to get started to start landing your first paid projects.

このマスターマインドでは、初めて報酬を得られるプロジェクトを立ち上げるために必要なことを、文字通りすべて学ぶことができます。

I share all my systems and models that I've developed over the years to basically systemize freelancing in data to make sure you never run out of clients and you will become part of a community of other data professionals that are working on their freelancing career.

私はこれまでに開発したすべてのシステムとモデルを共有しており、データ分野のフリーランスをシステム化して、クライアントが途切れることがないようにしています。そして、皆さんは他のデータ専門家がフリーランスキャリアに取り組むコミュニティの一員になることでしょう。

And we are all here together to work on the same goals of making more money, working on fun projects and creating freedom.

そして、より多くのお金を稼ぎ、楽しいプロジェクトに取り組み、自由を生み出すという同じ目標に取り組むために、私たちは皆ここに集まっているのです。

That's what we're trying to do here.

それが、私たちがここでやろうとしていることです。

Just like hanging out with friends, but with real business results.

友達と遊ぶように、でも実際のビジネスで結果を出すために。

So if you consider freelancing or want to take advantage of all the amazing opportunities that are out there right now in the world of AI, but don't really know where to start, then check out Data Freelancer, first link in the description and sign up for the waitlist.

もしあなたがフリーランスを考えていたり、AIの世界で今ある素晴らしい機会を利用したいと思っていても、何から始めたらいいのかよくわからないなら、Data Freelancerをチェックして、説明にある最初のリンクから、ウェイティングリストに登録してみてください。


いいなと思ったら応援しよう!