天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

【増枠】プロンプトエンジニアリングから始めるLangChain入門に参加してきた

studyco.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

昨年末に公開されて以来、「ChatGPT」は一般にも知られるキーワードとなり、非常に盛り上がっています。

ChatGPTが使っているGPT-3.5やGPT-4などのモデルは大規模言語モデル(LLM:Large Language Model)と呼ばれます。

LLM周辺のトピックとして、とくにこの数ヶ月は日々新しい発表が話題になっています。

そんな中、LLMを使ったアプリケーションを開発するためのツールとして、「LangChain」が注目を集めています。

LangChainをキャッチアップするには、LLMに狙い通りの動きをさせるために内部で使われている「プロンプトエンジニアリング」から学ぶとスムーズです。

そこでこの勉強会では、プロンプトエンジニアリングから始めてLangChainに入門していきます。

※ 発表内容にLLMや機械学習の仕組みの話はありません。あくまで、LLMを使った「アプリケーション開発」がテーマです

会の様子

OpenAIのLLMの概要

最初に導入として、OpenAIとLLMの紹介がChatGPTであった後、OpenAIのモデルが紹介されました。

自然言語を生成するGPT-4, 音声をテキストに変換するWhisper, テキストを数値に変換するEmbeddingsの紹介が簡単にありました。
なお、今回はあくまでもLangChainの入門ということで、CompletionsのAPI(text-davinci-003)が説明に使われていたため、その前提でこの後の内容を読んでもらえるとありがたいです。

GPTの文章生成APIの使用

Pythonのrequestsモジュールを実例に、APIの使用方法が解説されていきました。

OpenAIのAPIキーを指定した、モデルの名前とプロンプトやパラメータを指定すると応答が返ってくるシンプルな形が基本になります。
そのため、プロンプトの工夫が結局大事になってくるということで、ここからプロンプトエンジニアリングの話になっていきました。

プロンプトエンジニアリング

先日日本語でも公開されたプロンプトエンジニアリングガイドを基に、プロンプトエンジニアリングで代表的なテクニックの説明がありました。以下、説明があった内容を記載します。

  • 命令と入力データを#などで分離する
  • 外部の情報など文脈を入れる
  • 出力形式を指定する
  • Zero-shot, Few-shotでデモンストレーションを与える
  • Zero-shot CoT(ステップ・バイ・ステップで処理するように指示)

プロンプトのテンプレート化

実際にLLMを活用したアプリケーションを使うときは、ユーザーにプロンプトエンジニアリングを意識して入力してもらうことは難しいため、プロンプトのテンプレート化をしていくという話がありました。

LangChainを使う時の注意点

LangChainは破壊的変更が入る可能性もあるため、現状で絶対LangChainを絶対に使え!というような主張はできないという話がありました。

LangChainの紹介

後半はLangChainの紹介がありました。

LangChainはLLMを使ったアプリケーション開発のFWで、Python, JS/TSの2つがあるという話や、ユースケース(要約アプリやChatBot、ドキュメントQA...)の説明、モジュールの紹介(Models, Prompts, Chains, Indexes, Memory, Agents)がありました。

モデルに関しては、どのようなことができるのかの簡単なデモを紹介しながら、それぞれのモデルが適したユースケースやモデルの特徴について説明をしてくれました。

会全体を通した感想

前半のプロンプトエンジニアリング周りは知っている話も多かったですが、デモではモデルの説明だけでは今ひとつピンときていなかったモジュールのユースケースやそれぞれのモデルの強みが理解できて、非常によかったです。