AIエージェントを無料で簡単に作成する方法

 AIエージェントを無料で作成し、簡単に実行する方法

目的:お金をかけず(無料)・手早く(数十分)・確実に動く「最小エージェント」を作って実行する方法を検討しました。おすすめは“ローカルLLM+小さなPythonスクリプト”です。クラウドの無料枠に依存せず、PCだけで完結します。

概要(3通り)

  • 最短おすすめ:Ollama(無料・ローカルLLM)+60行Pythonでミニエージェント
  • ノーコード系:Flowise(無料・GUI)+Ollamaでドラッグ&ドロップ
  • 自動化系:n8n Desktop(無料)+Ollamaで「トリガー→LLM→通知」

まずは「最短おすすめ」の手順から。

手順A:Ollama+Pythonで“無料・最小エージェント”を作る

  1. 準備(macOS / Windows / Linux)
  • macOS: brew install ollama; ollama serve
  • Windows: インストーラー実行後、Ollamaアプリを起動(サービスが立ち上がります)
  • Linux: curl -fsSL 🔗 https://ollama.com/install.sh | sh
  • モデル取得(軽量でOK):
    • ollama pull llama3.2
    • 代替: ollama pull qwen2.5:3b など(PC性能に応じて)
  • 動作確認:
    • ollama run llama3.2
    • 対話できれば準備完了(Ctrl+Cで終了)
  1. 最小エージェントのコード(約70行)
  • ツール(電卓・現在時刻JST)をホワイトリストで用意
  • LLMには「必ずJSONで返す」指示
  • “思考→ツール実行→結果を再観測→次の一手”を最大8手で反復
mini_agent_ollama.py
import json, re, requests
from datetime import datetime
from zoneinfo import ZoneInfo

# -------- ツール定義(安全のためホワイトリスト) --------
def tool_calculator(expression: str) -> str:
    if not re.fullmatch(r"[0-9+\-*/().\s]+", expression):
        return "安全のため数式以外は不可。"
    try:
        return str(eval(expression, {"__builtins__": {}}, {}))
    except Exception as e:
        return f"計算エラー: {e}"

def tool_time_jst() -> str:
    return datetime.now(ZoneInfo("Asia/Tokyo")).strftime("%Y-%m-%d %H:%M:%S")

TOOLS = {
    "calculator": tool_calculator,
    "time_jst": tool_time_jst,
}

# -------- LLM(Ollamaのchat API, モデルはllama3.2想定) --------
OLLAMA_URL = "http://localhost:11434/api/chat"
MODEL = "llama3.2"

SYSTEM_PROMPT = (
    "あなたは小さなAIエージェントです。必ずJSONで返答してください。"
    '形式は {"action":"tool","name":"<tool_name>","args":{...}} '
    'または {"action":"final","output":"..."}。'
    f"利用可能ツール: {list(TOOLS.keys())}。"
    "複数手順が必要なら、適切な順にtoolを呼び、最後にfinalを返してください。"
)

def call_llm(messages):
    payload = {"model": MODEL, "messages": messages, "stream": False}
    r = requests.post(OLLAMA_URL, json=payload, timeout=120)
    r.raise_for_status()
    data = r.json()
    # Ollamaは data['message']['content'] に応答が入る
    content = (data.get("message") or {}).get("content", "")
    # モデルがJSON以外を返す保険
    try:
        return json.loads(content)
    except Exception:
        # JSONでない場合は、再度JSON形式を促す
        return {"action": "final", "output": f"JSON以外の応答を受信: {content[:200]}"}

def main():
    goal = input("エージェントへの依頼を入力してください: ").strip()
    messages = [
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": goal},
    ]

    for _ in range(8):  # 最大8手で打ち切り(無限ループ防止)
        resp = call_llm(messages)
        if resp.get("action") == "final":
            print("最終回答:", resp.get("output", ""))
            break
        if resp.get("action") == "tool":
            name = resp.get("name")
            args = resp.get("args", {}) or {}
            if name not in TOOLS:
                tool_result = f"未許可のツール: {name}"
            else:
                try:
                    tool = TOOLS[name]
                    tool_result = tool(**args) if args else tool()
                except TypeError:
                    tool_result = "引数が不正です。"
                except Exception as e:
                    tool_result = f"ツール実行エラー: {e}"
            # ツール結果を“観測”として再入力
            messages.append({"role": "user", "content": f"ツール結果: {tool_result}\n続けて。JSONで。"})
        else:
            messages.append({"role": "user", "content": "必ず指定のJSON形式で返答してください。"})
    else:
        print("手数上限に達しました。")

if __name__ == "__main__":
    main()
  1. 実行
  • Python 3.10以上を用意(Windows/macOS/Linuxいずれも可)
  • python mini_agent_ollama.py
  • 例の依頼:
    • 「3*(4+5)を計算してから、日本時間も教えて」
    • 「家計の計算: (1250+980)*3 を計算後、時刻を教える」
  • 期待動作:
    • LLMがJSONで“calculator”→結果取得→“time_jst”→最終回答 という反復を自動で行い、最後に人間向けの出力を返します
  1. よくあるつまずき(対処)
  • JSONで返ってこない: SYSTEM_PROMPTで“必ずJSON”を強調。上記コードは保険あり
  • 応答が遅い/CPUが重い: さらに小さいモデルへ変更(例: qwen2.5:1.8b 等)。タスク難易度を下げる
  • 日本語の指示が苦手: 先頭に「以後、日本語で回答」と1行追加
  • ループが長引く: 反復上限(8手)を厳しめに、あるいは目的を具体化(例: “計算→時刻→完了と宣言”)


手順B:ノーコード/ローコードで無料エージェント

  • Flowise(無料・GUI)
    1. Node.js環境で npx flowise start
    2. ブラウザでFlowiseを開く→“LLMノード”に“Local (Ollama)”を選択→モデルに llama3.2
    3. “Tools”ノードに「計算(Code Executor)」「JST時刻(Function)」を配置
    4. “Agent”ノード(ReAct/Tool Calling)で接続→チャットUIで実行
  • n8n Desktop(無料・GUI)
    1. n8n Desktopを起動→“HTTP Request”で Ollama /api/chat を呼び出すノードを作成
    2. “Function”ノードでツール(計算/時刻)を実装
    3. “If”ノードで action=="tool" を分岐→実行→再度HTTPへ戻すループを構成
    4. Slack/メール通知ノードをつないで“結果を届ける”まで自動化

無料で作るときのコツ

  • 完全ローカルで始める: 料金・鍵管理・利用規約を気にせず検証できる
  • ツールは最小限+ホワイトリスト: “電卓/時刻/メモ保存”の3つ程度から
  • 出力形式を固定: “必ずJSON”とし、パースできなければ再要求
  • 手数上限・タイムアウトを設定: 迷走や外部API停止に強くなる
  • ログを残す: 入出力・ツール実行・例外をprint→慣れたらファイル保存


このブログの人気の投稿

片貝の四尺玉は世界一を連呼する『片貝賛歌~希望の花~』を作詞・作曲しました!!

論文 排泄ケアにおける尊厳の保持と社会システムの課題 ~「おむつ」をめぐる心理的・文化的考察~

解説 羞恥心や抵抗感が強く、失禁がある方に、オムツや尿取りパッドを勧める方法