【初心者】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