2024.12.24
ビジネスが急速に変化する現代は「OODAサイクル」と親和性が高い 流通卸売業界を取り巻く5つの課題と打開策
リンクをコピー
記事をブックマーク
大嶋勇樹氏:ここまでGitHub上でまずChatOpenAIクラスを探してソースコードを読んでみたわけなんですが、ChatOpenAIクラスの見つけ方自体は、ほかにもいろいろなやり方があります。
今はなんとなくLangChainのリポジトリのトップからたどって、がんばって「なんとなくここかな」と探してきたんですが、ほかの探し方としては、例えばGitHubの検索欄を使う方法が1つあります。
(画面を示して)検索欄に「ChatOpenAI」と入力して検索すると、リポジトリの中からヒットする箇所を見つけてくれます。
ただGitHub上の検索欄を使って検索する方法にはちょっと欠点があって、最新版のソースコードしか検索できないようになっています。
なんとなく「最新版だとここにあるから、自分が使っている過去のバージョンでもここにあるんじゃないかな」と推測する程度に使うことはできるんですが、見つけたものをそのまま読むと、自分の使っているバージョンは実装が違ってハマるようなこともあるので、その点はご注意ください。
目安として見つけたら、もう一度該当のバージョンに戻って、そのディレクトリを見にいくのがいいと思います。
ほかには、Pythonのプラグインが入っていないといけないかもしれませんが、「Visual Studio Code」や「PyCharm」でChatOpenAIをimport内で使っている箇所を右クリックして「定義へ移動」とすると、ソースコードを開くことができます。
すると、ChatOpenAIのローカルにインストールした、ダウンロードした実体が開かれて読むこともできます。これはローカルの.venvというディレクトリ以下に置いているわけですが、そこのファイルは開かれているわけですね。
ちなみに、ローカルでこんなふうに開いた場合、「なんとなくここの挙動が気になる」と思ったら、printを仕込んであげると、実際に挙動が変わって、内容を表示することもできます。
あとはgrepコマンドを使うとかですね。例えば「grep -rn ChatOpenAI」としてChatOpenAIというキーワードを、「.venv/lib/python3.11/site-packages/langchain」としてLangChainのパッケージ以下を検索してあげると、ヒットする行が見つかります。
おそらくクラスだから、さらに「| grep class」とかしてあげれば、このクラス、ChatOpenAIがopenai.pyの131行目に定義されていることを、検索して見つけることもできます。
ということで、ここまで最初の例として、ChatOpenAIクラスの2つの呼び出し方を見てきました。ここまでのポイントとしては、まずソースコードをGitHubで見る時は該当バージョンに切り替えるのはけっこう大事というか、特にLangChainのようにアップデートが激しいものについては、確実にやったほうがいいかなと思います。
あとはchat(messages)が、__call__という特殊メソッドの呼び出しであることや、「class ChatOpenAI(BaseChatModel)」が継承であるといったPythonの知識であったり、ローカルでエディタの定義の参照やgrepコマンドを使うのも役立つということを見てきました。
ということで、最初に簡単な例を見てきたんですが、この後もう少し、Chat APIについてLangChainで「ちゃんと」使うには、ということを見ていきます。
いくつか質問をもらっているので、いったん回答します。
1つもらったのが「そもそもの質問ですみません。『OpenAI Python』じゃなくてLangChainを使うメリットは何でしょうか?」ということです。今のサンプルコードであればOpenAI Pythonを使えばいいんですが、LangChainはOpenAI Pythonよりもはるかに多機能で、すごくいろいろなことができるようになっています。
なので、LLMを使ってアプリケーションを作りたい、例えば独自データにQ&Aするものを作りたいとかいろいろあると思いますが、そういう時はLangChainのほうが機能が充実していて、使えるものが多いです。
もう1つ質問をもらったのが、「なぜ同じ操作を行っているのにpredictを使用しているのでしょうか?」ということです。これはすみません、僕が呼び出し方が2つあるのを知って、「きっとこういうつながりになっているんだろうな」と想像してソースコードを見て、(それが)ちょうどこういう勉強会の題材として良かったから採用しただけですね。
あとは、LangChainの中のソースコードをいろいろ読んでいった時に、モデルの呼び出し方が場所によっていろいろ使い分けられたりしていると思うので、そういう時に「いろんな呼び出し方があるんだな」と気づくとかはありますね。質問ありがとうございます。
(次回につづく)
関連タグ:
大嶋勇樹氏が解説する「OpenAIの文書生成API」の基本 モデルの種類、APIの種類と違い、今使うべきもの
「chat(messages)」と「chat.predict」は同じ挙動を示すのか? ChatOpenAIクラスの2つの呼び出し方の互換性
「GitHub検索欄を使う」「定義から見る」「grepコマンドを使う」 「ソースコードを読む」以外のChatOpenAIクラスの見つけ方
LangChainの「Chain」や「Agent」を使う時は注意が必要 「Chat APIの形式を活かした実装かどうか」の確認方法
時間を溶かさないためにもLangChainの過去バージョンは確認しよう ネット上では公開されていないドキュメントの見つけ方
2025.01.09
マッキンゼーのマネージャーが「資料を作る前」に準備する すべてのアウトプットを支える論理的なフレームワーク
2025.01.08
職場にいる「嫌われた上司」がたどる末路 よくあるダメな嫌われ方・良い嫌われ方の違いとは
2025.01.07
資料は3日前に完成 「伝え方」で差がつく、マッキンゼー流プレゼン準備術
2025.01.10
プレゼンで突っ込まれそうなポイントの事前準備法 マッキンゼー流、顧客や上司の「意思決定」を加速させる工夫
2025.01.06
上司からの「ふわっとした指示」に対し、デキる人がやっていること 4タイプ別で見る、仕事を依頼された時に重要なスタンス
2025.01.08
どんなに説明しても話が伝わらない“マトリョーシカ現象”とは? マッキンゼー流、メッセージが明確になる構造的アプローチ
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.01.09
記憶力に自信がない人におすすめな「メモ」の取り方 無理に覚えようとせず、精神的にも楽になる仕事術
2025.01.09
職場に必要なのは「仲良し集団」ではなく「対立」 メンバーのやる気を引き出すチームビルディング理論
2025.01.10
職場にいる「できる上司」と「できない上司」の違いとは 優秀な人が辞めることも…マネジメントのNGパターン