🐷

【初心者】LangChain + OpenAIで頑張った

に公開

※ 本記事は作成したコードをもとに生成AIで作成しました。

🧠 きっかけ

最近よく聞く「LangChain」、名前は聞くけど実際どうなの?と思って、
OpenAI + LangChainでツールを使えるAIエージェントを作ってみました!

まずは「小中学生くらい知能を持ったAIエージェント」を目指して、
ツールを活用できるミニAIを作って遊んでみた感じです。

やってみたことはざっくりこんな感じ:

  • ✅ 足し算してくれる
  • ✅ 「東京の今の時刻は?」とか教えてくれる
  • ✅ DuckDuckGoでWeb検索してくれる
  • ✅ メモをファイルに保存してくれる

このへんがサクッとできたら楽しいよね、というノリです。


🔧 やったこと

LangChain の create_tool_calling_agent() を使って、GPT-3.5 Turboに
いくつかのツールを「これ使っていいよ〜」と渡してみました。

作ったツールたちはこんな感じ👇

ツール名 何してくれる?
add(a, b) 2つの数字を足す
get_current_time("東京") 指定した都市のいまの時刻を教えてくれる
duckduckgo_search("LangChainとは") Web検索してくれる
save_output("memo.txt:::内容") ファイルにメモを保存してくれる

💻 コードちょい見せ

ツールは @tool デコレーターをつけてサクッと定義します:

from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.agents import initialize_agent, create_tool_calling_agent, AgentType, AgentExecutor
from langchain.callbacks.base import BaseCallbackHandler
from langchain.schema import LLMResult
from langchain_core.prompts import ChatPromptTemplate

@tool
def add(a: int, b: int) -> int:
    """Adds a and b."""
    return a + b
例えば現在時刻を返すツールもこんな感じ:

python
コピーする
編集する
@tool
def get_current_time(inputs: str) -> str:
    city = inputs.strip()
    timezone_str = CITY_TIMEZONE_MAPPING.get(city)
    if not timezone_str:
        return f"対応していない都市です: {city}"
    tz = pytz.timezone(timezone_str)
    local_time = datetime.now(tz)
    return f"{city}の現在時刻は {local_time.strftime('%Y-%m-%d %H:%M:%S')} です。"
あとは create_tool_calling_agent() でエージェントを作って
AgentExecutor に渡すだけ!


agent = create_tool_calling_agent(llm=llm, tools=tools, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
🧪 実際に使ってみた
python
コピーする
編集する
prompt = "1 + 3は?"
agent_executor.invoke({"input": prompt})
実行するとこんな感じでログが出ます:

python-repl

実行結果

==============prompt=================
1 + 3は?

Entering new AgentExecutor chain...
...
ファイナルアンサー: 4
ちゃんと add() ツールを呼び出して答えてくれました!
(こういうの、地味に感動する笑)

💰 コストも見えるようにした
LangChainのコールバック機能を使って、トークン数とAPIコストも出るようにしています。

コスト

[使用トークン: 37] Cost: $0.000037 / ¥0.01
円換算が出るの、安心感あるんですよね〜。
(API課金、地味に怖いので)

🙋‍♂️ 感想

LangChain先生はさすがといった印象
ツール作って → エージェント作って → 実行、っていう流れがわかるとめっちゃ楽しい。
これをやるだけでエージェントが強くなる

なんか デジモン育ててる感あって良い…。

💡 つぎやってみたいこと
マインクラフトをエージェントで動かすとか、絶対おもしろいよね…?
LangGraphとかメモリ連携もそのうち試したい!

Discussion