本記事では、LangChainの基本概念、その開発の背景、そしてどのような問題を解決するために設計されたかについて解説します。また、LangChainを使って開発プロセスをどのように効率化し、拡張するかについても具体的な使用例を交えて紹介します。
LangChainとは?
LangChainとは、大規模言語モデルを活用したアプリケーション開発を加速するフレームワークです。LangChainは、PythonやJavaScript(TypeScript)をサポートするオープンソースのフレームワークであり、ChatGPTをはじめとする大規模言語モデル(LLM)を利用したアプリケーションの開発を容易にします。このフレームワークは、開発者がLLMの能力を最大限に活用できるように設計されており、長文入力のサポート、最新情報へのアクセス、複雑なタスクの自動化など、さまざまな機能を提供します。
開発の背景には、近年のAI技術の進歩と、特に自然言語処理に関する技術の急速な発展があります。LangChainは、これらの技術進歩を活かし、開発者がより簡単に、より高度な自然言語処理アプリケーションを構築できるようにすることを目的としています。LangChainを使用することで、開発者はAIの専門知識がなくても、強力なLLMを活用したアプリケーションを迅速に開発できるようになります。
LangChainが解決を目指す具体的な問題は、開発プロセスの複雑さと時間です。LangChainを利用することで、コーディングの手間が大幅に削減され、アプリケーションのプロトタイピングと開発をスピードアップすることが可能になります。これにより、開発者はアイデアをより早く形にし、ユーザーの手に届けることができるようになります。
LangChain活用事例1:WEB検索させ、最新情報を取得・回答させる
ChatGPT 3.5モデルでは2022年1月までのものしか学習されてないという欠点があります。(総理大臣を応えられないGPT↓)
この欠陥に対して、CyberAgentの李さんはLangChainを用いて以下のような構成でプログラムを書き、解決しました。
質問内容欄には「今年」と「総理大臣」の二つの文脈が含ませ、OpenAPIのキー、Google検索を行うためのSerperAPIキーを渡してLangChainを実行して結果を得ました。
llm = OpenAI(temperature=0, openai_api_key=openai_api_key, verbose=True)
tools = load_tools(["google-serper"], llm, serper_api_key=serper_api_key)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
result = agent.run(search_query)
この処理をすることによって従来LLMが抱えていた能力の制約を外し、機能拡張することができました。
LangChain活用事例2:WEB情報を取得し、要約させる
URLをPostすると、その内容を要約するプログラムになります。
今回もCyberAgentの李さんの記事を参考にさせていただいているのですが、例えば以下のYoutubeの動画のURLをLangChainにPostすると、LLMに対して要約プロンプトが渡され、結果が出力されるという処理を行っています。
動画でできるので、テキストデータだったら尚更容易に要約ができるようです。
# URlからデータの取得
if "youtube.com" in url:
loader = YoutubeLoader.from_youtube_url(url, add_video_info=True, language="ja")
else:
loader = UnstructuredURLLoader(urls=[url], ssl_verify=False, headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"})
data = loader.load()
# ChatOpenAI モジュールを初期化し、要約チェーンを実行します。
llm = ChatOpenAI(temperature=0, model='gpt-4', openai_api_key=openai_api_key)
prompt_template = """以下の内容を日本語で1000文字程度で要約してください。
{text}
"""
prompt = PromptTemplate(template=prompt_template, input_variables=["text"])
chain = load_summarize_chain(llm, chain_type="stuff", prompt=prompt)
summary = chain.run(data)
LangChainの開発背景
LangChainは、近年の人工知能と自然言語処理技術の急速な発展を背景に開発されました。特に、大規模言語モデルの登場により、人間のように自然なテキストを生成するAIの可能性が広がりました。しかし、これらの進歩にもかかわらず、AI技術を具体的な製品やサービスに組み込むことは依然として技術的な課題が多く、特に非技術者や小規模開発チームにとっては大きな障壁でした。
LangChainは、このギャップを埋めるために生まれました。開発者がAIの最新進歩を容易に、そして迅速に利用できるようにすることを目的としています。このフレームワークを通じて、ChatGPTなどの大規模言語モデルを活用したアプリケーション開発が、より手軽でアクセスしやすくなります。
LangChainの主な機能
LangChainは、大規模言語モデルを活用したアプリケーション開発をサポートするために、幅広い機能を提供しています。これらの機能には以下のものが含まれます:
- 長文入力のサポート:LangChainは、特に長文の入力を扱う際の処理を最適化することで、より複雑なテキストベースのタスクに対応します。
- 最新情報へのアクセス:LangChainを使用すると、開発者はChatGPTが学習していない最新の情報にアクセスし、それをアプリケーションに組み込むことができます。
- モジュールの組み合わせ:様々なモジュールを組み合わせることで、複雑なタスクを簡単に処理し、より洗練されたアプリケーションを開発することが可能になります。
これらの機能は、開発者がAIを使用して新しいアイデアを迅速にプロトタイプ化し、実際の製品に変換する過程を大幅に簡素化します。LangChainの提供する便利なAPIと組み込みモジュールにより、開発プロセスが加速され、創造性と生産性の向上が期待できます。
LangChainの使い方
LangChainを使用することで、PythonやJavaScript(TypeScript)を通じて、大規模言語モデルを簡単に活用することができます。以下はLangChainを使用した基本的なコード例です。
Pythonでの使用例
# LangChainのインストール
!pip install langchain
# LangChainを使用してChatGPTに質問する例
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)
print(llm.predict("LangChainを使って何ができますか?"))
JavaScriptでの使用例
// LangChainのインストール(Node.js環境)
npm install langchain
// LangChainを使用してChatGPTに質問する例
const { OpenAI } = require('langchain');
const llm = new OpenAI({temperature: 0.9});
console.log(await llm.predict("LangChainを使って何ができますか?"));
LangChainのメリットとデメリット
LangChainを使用することは、多くのメリットを提供しますが、いくつかの注意点もあります。
メリット
- 開発効率の向上:LangChainを使用することで、複雑な言語モデルの統合が簡単になり、開発プロセスが加速します。
- アクセシビリティ:PythonやJavaScriptといった一般的なプログラミング言語で利用できるため、多くの開発者にとってアクセスしやすいです。
- 柔軟性:さまざまな言語モデルや機能を組み合わせることで、多様なアプリケーションの開発が可能になります。
デメリット
- 学習曲線:LangChainの豊富な機能性は、初心者にとっては学習が必要な場合があります。
- 依存性:外部のAPIやライブラリに依存することで、そのサービスの変更や停止が直接影響を受ける可能性があります。
これらの点を踏まえることで、LangChainを効果的に利用し、そのポテンシャルを最大限に活用することができます。
LangChainの料金体系
LangChainをフルに活用するには、外部APIのキー取得が必要となります。主に、「OpenAI API」と「SerpAPI」の2つのサービスが関連しています。これらのAPIを利用することで、LangChainは強力な言語モデルとWeb検索機能を統合し、より高度なアプリケーションの開発を可能にします。ただし、無料範囲も用意されているので、費用をかけることなく使用することも可能です。
OpenAI API(GPT-3.5 Turbo)の費用
OpenAI APIは、使用したトークン数に基づいて課金される従量課金制を採用しています。具体的には以下の通りです。
- 4K context: $0.0015 / 1Kトークン(入力)、$0.002 / 1Kトークン(出力)
- 16K context: $0.003 / 1Kトークン(入力)、$0.004 / 1Kトークン(出力)
この料金体系により、開発者は自身のプロジェクトに必要な量だけのリソースを購入し、利用することが可能です。
SerpAPIの費用
SerpAPIでは、無料プランと有料プランが提供されています。無料プランでは毎月100検索が可能であり、開発初期段階での検証に適しています。さらに多くの検索が必要な場合は、以下の有料プランを選択することができます。
- Free Plan: 毎月100検索が無料
- DEVELOPER: $75/月〜
これにより、開発者はプロジェクトの規模やニーズに応じて最適なプランを選択することができます。
さらに、Meta社からリリースされている「Llama2」や、rinna社からリリースされているオープンソースモデルを活用することで、OpenAI APIやSerpAPIを使用せずにLangChainの機能の一部を利用することも可能です。これにより、開発コストの削減や、より幅広い技術選択肢を提供しています。
最後に
いかがだったでしょうか?
弊社では
明確に「生成AIで〇〇をしたい!」は無いけど、何か生成AIを使って取り組みたい!
というご要望にお応えしております。
これまでお取引させていただいた企業様も、ご相談時にはやりたいことが決まっていなかったことが多くあります。
ご相談を受け、一緒に考えさせていただく中で、生成AIとどこが相性が良いのか、それを構築するためにはどのようなデータが必要なのかを「無料お問い合わせ」にてお受けしております。
まずは、ページ右上の「無料お問い合わせ」にてご相談を承っておりますので、お気軽にご連絡ください。