LoginSignup
1
1

LangChainを使ってChatGPTのFunction Callingを超簡単にやってみる

Posted at

はじめに

LangchainはLLMを利用したアプリケーションを開発するためのフレームワークです。BingAIの要約は以下。

LangChainは、言語モデルを利用したアプリケーションを開発するためのフレームワークです。1言語モデルをAPI経由で呼び出すだけでなく、他のデータソースと連携したり、環境とやりとりしたりできるような、より強力で差別化されたアプリケーションが可能になると考えています。

LangChainフレームワークは、次の2つの価値提案を提供します。

コンポーネント: LangChainは、言語モデルを扱うために必要なコンポーネントのモジュール化された抽象化を提供します。また、これらの抽象化の実装も集めています。これらのコンポーネントは、LangChainフレームワークの他の部分を使っているかどうかに関係なく、使いやすく設計されています。

ユースケース特化型チェーン: チェーンとは、特定のユースケースを最適に達成するために、これらのコンポーネントを特定の方法で組み合わせることを意味します。これらは、特定のユースケースに簡単に取り組めるようにするための高レベルなインターフェイスとして考えられます。また、これらのチェーンはカスタマイズ可能に設計されています。

したがって、以下のドキュメントでは、これら2つの価値提案に分けて説明します。このドキュメントでは、コンポーネントとユースケースを高レベルで言語に依存しない形で説明します。言語に依存した方法でこれらのコンポーネントやユースケースに取り組む方法については、ページ上部にリンクされている言語別セクションをご覧ください。

多数のAgent機能が提供されていてニーズがハマればすごく簡単にLLMを利用したアプリが開発できるのがウリです。

今回はLangChainでOpenAI API のFunction Callingを利用してみます。

やってみた

コードと結果は以下。こちらを参考にWeb検索と計算を行う機能を追加しました。

function_calling.py
import os
from langchain import LLMMathChain, OpenAI, SerpAPIWrapper
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain.chat_models import ChatOpenAI

# set api key
os.environ["OPENAI_API_KEY"] = "[YOUR OPENAI API KEY]"
os.environ["SERPAPI_API_KEY"] = "[YOUR SERPAPI API KEY]"

llm = ChatOpenAI(temperature=0, model="gpt-4")
search = SerpAPIWrapper()
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)
tools = [
    Tool(
        name="search",
        func=search.run,
        description="Googleで検索して結果を返します"
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="数理計算の結果を返します",
    )
]

agent =  initialize_agent(tools, llm, AgentType.OPENAI_FUNCTIONS, verbose=True)

# run 
result = agent.run("SpaceX社の創業者の誕生日を検索してその年齢を算出してください。本日は2023年7月8日です。")
print(result)

実行結果

$ python function-calling.py

> Entering new  chain...

Invoking: `search` with `SpaceX founder's birthday`

Elon Reeve Musk (/ˈiːlɒn/ EE-lon; born June 28, 1971) is a business magnate and investor. He is the founder, CEO and chief engineer of SpaceX; ...
Invoking: `Calculator` with `2023 - 1971`

> Entering new  chain...
2023 - 1971``text
2023 - 1971
``
...numexpr.evaluate("2023 - 1971")...

Answer: 52
> Finished chain.
Answer: 52SpaceXの創業者であるElon Muskの誕生日は1971年6月28日です。したがって、2023年7月8日現在で彼の年齢は52歳です。

> Finished chain.
SpaceXの創業者であるElon Muskの誕生日は1971年6月28日です。したがって、2023年7月8日現在で彼の年齢は52歳です。

当たった。 ログを見るとsearchCalculatorが呼ばれているのがわかります。AgentType.OPENAI_FUNCTIONSでFunction Callingを利用するエージェントになります。

おわりに

まだ詳しくドキュメントを読んでないけどかなりスッキリと実装できそうな印象でいい感じです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1