この記事について
主に自分の考えややってみた作業の備忘録レベルです。
LLMに判断してもらった結果で動作を変える感じのものを動かしてみた。
これが巷で噂のAIエージェントなのかどうかもちょっとわからない...
目的
AIエージェントって言葉は聞いたことあるけど、どんなもんか実感わかなかったのでそれっぽいものを作ってみようと思った。
そもそもAIエージェントって
IPAの各社AIエージェント定義によると主にユーザの代わりに動作してくれるものらしい。
LLMなどの今までの生成AIはチャットでテキストとしてくれたが、こんどは実際の作業の中に組み込んで、LLMが動作してくれる感じかな?
やってみたこと
ケース
現在の環境としては、過去記事を参照してもらえたらと思う。
登場人物はハード1とハード2(ollamaコンテナ導入済み)
ハード1に適当なコンテナを立てて、ハード2のollamaと通信して回答によって動作をする感じにしたかった。
今回の想定としては、ハード1のコンテナがなにかしらネットワークの負荷を検知してその情報をollamaに渡しているイメージ
コード
ハード1側のコードを記載する。
ハード2側のollamaは割愛する。
composeのファイル
services:
agent:
build: ./agent
container_name: agent
environment:
- OLLAMA_URL=http://<ハード2のIP>:<ollamaコンテナのポート>/api/generate
networks:
- net
networks:
net:
動かすdockerfile
FROM python:3.11-slim
WORKDIR /app
COPY monitor.py .
RUN pip install requests
CMD ["python", "-u", "monitor.py"]
コンテナとollamaでやりとりする実際のコード
import os
import time
import random
import requests
OLLAMA_URL = os.getenv("OLLAMA_URL")
"""
別サーバのollamaコンテナに現在の負荷状況を数値として送り、
ネットワーク切り替えをすべきかを判定してもらう
"""
# ランダム負荷値の決定
def get_load_value():
return random.randint(1, 100)
# LLMへの問い合わせ
def ask_llm(load_value):
prompt = f"""
あなたはネットワーク制御エージェントです。
現在の負荷値は {load_value} です。
負荷値の最低値は0、最高値は100です。
現在の負荷値が低いと判断できればSTAY,
負荷値が高いと判断できればSWITCHを指示してください。
以下のどちらかを必ず返してください:
- SWITCH(切替すべき)
- STAY(現状維持)
理由も一言で書いてください。
"""
body = {
"model": "gemma3:4b",
"prompt": prompt,
"stream": False
}
response = requests.post(OLLAMA_URL, json=body)
return response.json()["response"]
# LLMからの回答をもとに動作させるアクション
def perform_action(decision):
if "SWITCH" in decision:
print("切替実行")
else:
print("現状維持")
def main():
while True:
load_value = get_load_value()
print(f"負荷 = {load_value}")
decision = ask_llm(load_value)
print("LLMの判断:", decision)
perform_action(decision)
print("----")
time.sleep(30)
if __name__ == "__main__":
main()
挙動確認
コンテナを立てた後で、docker logsを見てみると
おおむね期待通りやってくれた気がしている。
(現状維持の判定がかなり厳しめな気もしているが)
$ sudo docker logs -f agent
負荷 = 94
LLMの判断: SWITCH - 負荷94は最高値100に近い。
切替実行
----
負荷 = 98
LLMの判断: SWITCH(現在の負荷値98は最高値100に近いので、切替が必要です。)
切替実行
----
負荷 = 47
LLMの判断: SWITCH(負荷が47と高く、最低値よりかなり高いので)
切替実行
----
負荷 = 25
LLMの判断: STAY(現在の負荷値25は、0-100の範囲内であり、低いとは判断できないため。)
現状維持
----
負荷 = 86
LLMの判断: SWITCH(負荷86は最高値100に近いので、切り替えます。)
切替実行
----
負荷 = 72
LLMの判断: SWITCH(現在の負荷値72は最高値100に近い。)
切替実行
----
負荷 = 47
LLMの判断: SWITCH(負荷47は最高値100より高く、切り替えが必要です。)
切替実行
----
最後に
これがAIエージェントなのか...?
実際にLLMがなにかしらのAPIをたたいているわけではないから、なんか違う気もするけど
今回は、ネットワーク負荷値という単一値しか見てないから、実際は閾値を使ってやればLLM不要じゃん!になるが、それっぽい動作確認ってことで...
いろいろ事例見ながら勉強していきたいなという思い