目次

目次

LangChainまとめ

齋藤拓海
齋藤拓海
最終更新日2024/05/27 投稿日2024/05/27

NX開発推進部 次世代プロダクト開発Gの齋藤拓海です。

最近AIの発展が目まぐるしく、常に最新の動向に追随することが重要だと感じています。

今回は社内AIチャットツールの機能拡張で調査時に LangChainを使用したらもっと良くなるのではないかと思い、調べてみましたので説明します。

社内AIチャットツールは一部でOpenAIのAPIなどを使用して実装されていますが、 LangChainを使用すると同様の機能が実現できそうだなという部分がいくつもありました。

「LangChain」とは、言語モデルを活用するための開発フレームワークです。 これは、AIの自然言語処理能力を最大限に引き出すためのツールやAPIを提供し、 開発者が簡単にカスタマイズ可能なAIアプリケーションを構築できるように支援します。

今回はこのLangChain の6つの主な機能について紹介します。

LangChainの6つの機能

LangChainの主な機能は以下の6つです。

1. Model I/O

2. Retrieval

3. Chains

4. Memory

5. Agents

6. Callbacks

一つずつ簡単に説明していきます。

1. Model I/O

Model I/O機能は、言語モデルとのインターフェースを提供します。この機能により、開発者は任意の言語モデルへの入力データを送信し、生成された出力を受け取ることが可能です。 また、様々なLLMs(Large Language Models、大規模言語モデル)やチャットモデルの指定が可能で、例えばOpenAIのGPTだったり、Amazon Bedrock、Anthropic Claude 3にも対応可能です。

2. Retrieval

Retrieval機能は、外部の情報を読み込める機能です。この機能を使用すると、開発者は外部ファイルから関連情報を検索し、それを言語モデルに反映することができます。 例えば社内のpdfファイルを読み込んで、関連する情報をうまく抽出してもらいたいときなどに活用できます。

3. Chains

Chains機能では、複数の小さなタスクや操作を連結して、より複雑な処理を行うことができます。 これにより、開発者は個々の機能を単独で使用するのではなく、一連の処理として組み合わせることができるため、フロー制御やデータ処理の複雑さを管理することが可能になります。

4. Memory

Memory機能は、言語モデルが過去のインタラクションを「覚えて」参照できるようにするためのものです。 基本的にChatGPT APIなどはステートレスなので会話の流れなどは保存されません。なので、スムーズな会話として回答を得るにはそれまでの会話履歴をAPIに渡してあげる必要がありました。 Memory機能を使用することで、会話が進むにつれてモデルが以前の会話の内容を利用して、より一貫性のある応答を生成することができます。

5. Agents

Agents機能を使用すると、特定の目的や役割に応じたエージェントを定義して、それらをアプリケーション内で動作させることができます。 各エージェントは独自の行動パターンや目的を持ち、異なるタスクに対応することができます。これにより、複数のエージェントが協力してより複雑な問題を解決することが可能になります。

6. Callbacks

Callbacks機能は、大規模言語モデルのアプリケーションのロギング、モニタリング、非同期処理などを効率的に管理する機能です。 これにより、アプリケーションの柔軟性が向上し、開発者は特定のアクションに対して独自のロジックを実装できるようになります。 この機能は、ユーザーの行動に応じて動的に反応するアプリケーションを作成する際に特に有用です。

LangChainの上記の機能を使用することで、社内AIチャットツールをさらに快適に使用できるようにしていけそうです。


実際に動作を確認してみました。

以下のPythonコードは、LangChainを使用して天気予報ボットを実装しています。

OpenWeatherMap APIを使用して天気情報を取得し天気を教えてくれます。

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    streaming=True,
)
tools = load_tools(["openweathermap-api"], llm)
agent_chain = initialize_agent(tools=tools, llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

res = agent_chain.invoke({"input": "こんにちは、東京の今日の天気は?"})

print(res)

response

$python langchain_assistant.py
> Entering new AgentExecutor chain...
I should use the open_weather_map tool to fetch the current weather information for Tokyo.
Action: open_weather_map
Action Input: Tokyo,JP
Observation: In Tokyo,JP, the current weather is as follows:
Detailed status: few clouds
Wind speed: 3.09 m/s, direction: 160°
Humidity: 55%
Temperature: 
  - Current: 25.59°C
  - High: 28.19°C
  - Low: 22.59°C
  - Feels like: 25.64°C
Rain: {}
Heat index: None
Cloud cover: 20%
Thought:The current weather in Tokyo is few clouds, with a temperature of 25.59°C.
Final Answer: 今日の東京の天気は、晴れで、気温は25.59°Cです。

> Finished chain.
{'input': 'こんにちは、東京の今日の天気は?', 'output': '今日の東京の天気は、晴れで、気温は25.59°Cです。'}

OpenAI APIを直接使うよりかなり短いコードでチャットができそうでした。

実際にはさらに作り込みが必要だと思いますが、コード自体もシンプルになりそうなのでこれから社内AIチャットツールに取り込んでみるのが楽しみです。

参考 https://zenn.dev/umi_mori/books/prompt-engineer/viewer/langchain_overview https://python.langchain.com/docs/get_started/quickstart/ https://python.langchain.com/docs/integrations/tools/openweathermap/

齋藤拓海

目次