python AIエージェント

# ai_agent_full.py
# Pythonだけで動く簡易AIエージェント
# 機能:
# – 会話
# – TODO管理
# – メモ保存
# – 記憶
# – 計算
# – ファイル保存
# – コマンド実行メニュー

import json
import os
import datetime

DATA_FILE = “agent_data.json”

class AIAgent:
def __init__(self):
self.data = {
“memory”: [],
“todos”: [],
“notes”: []
}
self.load_data()

def load_data(self):
if os.path.exists(DATA_FILE):
try:
with open(DATA_FILE, “r”, encoding=”utf-8″) as f:
self.data = json.load(f)
except:
print(“データ読み込みに失敗しました。新規データで開始します。”)

def save_data(self):
with open(DATA_FILE, “w”, encoding=”utf-8″) as f:
json.dump(self.data, f, ensure_ascii=False, indent=2)

def add_memory(self, text):
self.data[“memory”].append({
“text”: text,
“date”: str(datetime.datetime.now())
})
self.save_data()
return “記憶しました。”

def show_memory(self):
if not self.data[“memory”]:
return “記憶はまだありません。”

result = “=== 記憶一覧 ===\n”
for i, item in enumerate(self.data[“memory”], 1):
result += f”{i}. {item[‘text’]} ({item[‘date’]})\n”
return result

def add_todo(self, task):
self.data[“todos”].append({
“task”: task,
“done”: False,
“date”: str(datetime.datetime.now())
})
self.save_data()
return f”TODOを追加しました: {task}”

def show_todos(self):
if not self.data[“todos”]:
return “TODOはありません。”

result = “=== TODO一覧 ===\n”
for i, todo in enumerate(self.data[“todos”], 1):
mark = “完了” if todo[“done”] else “未完了”
result += f”{i}. [{mark}] {todo[‘task’]}\n”
return result

def done_todo(self, number):
try:
index = int(number) – 1
self.data[“todos”][index][“done”] = True
self.save_data()
return “TODOを完了にしました。”
except:
return “番号が正しくありません。”

def delete_todo(self, number):
try:
index = int(number) – 1
removed = self.data[“todos”].pop(index)
self.save_data()
return f”TODOを削除しました: {removed[‘task’]}”
except:
return “番号が正しくありません。”

def add_note(self, text):
self.data[“notes”].append({
“text”: text,
“date”: str(datetime.datetime.now())
})
self.save_data()
return “メモを保存しました。”

def show_notes(self):
if not self.data[“notes”]:
return “メモはありません。”

result = “=== メモ一覧 ===\n”
for i, note in enumerate(self.data[“notes”], 1):
result += f”{i}. {note[‘text’]} ({note[‘date’]})\n”
return result

def calculate(self, expression):
try:
allowed = “0123456789+-*/(). “
if not all(c in allowed for c in expression):
return “使えるのは数字と + – * / だけです。”

answer = eval(expression)
return f”計算結果: {answer}”
except:
return “計算できませんでした。”

def save_text_file(self, filename, text):
try:
with open(filename, “w”, encoding=”utf-8″) as f:
f.write(text)
return f”{filename} に保存しました。”
except:
return “ファイル保存に失敗しました。”

def chat(self, text):
if “こんにちは” in text:
return “こんにちは。今日は何を作りますか?”

if “疲れた” in text:
return “少し休みましょう。無理せず、5分だけでも休憩するといいです。”

if “Python” in text or “python” in text:
return “Pythonなら、AIエージェント、TODOアプリ、Webアプリ、自動化ツールが作れます。”

if “ゲーム” in text:
return “ゲーム開発なら、まずはキャラクター移動・HP・攻撃・敵AIから作るのがいいです。”

return “なるほど。続けてください。必要ならTODOやメモに保存できます。”

def help(self):
return “””
=== コマンド一覧 ===

会話:
そのまま文章を入力

記憶:
記憶 内容
記憶一覧

TODO:
TODO 内容
TODO一覧
完了 番号
削除 番号

メモ:
メモ 内容
メモ一覧

計算:
計算 1+2*3

ファイル保存:
保存 ファイル名 内容

その他:
ヘルプ
終了
“””

def run_command(self, command):
command = command.strip()

if command == “”:
return “何か入力してください。”

if command == “ヘルプ”:
return self.help()

if command == “終了”:
return “終了します。”

if command.startswith(“記憶 “):
text = command.replace(“記憶 “, “”, 1)
return self.add_memory(text)

if command == “記憶一覧”:
return self.show_memory()

if command.startswith(“TODO “):
task = command.replace(“TODO “, “”, 1)
return self.add_todo(task)

if command == “TODO一覧”:
return self.show_todos()

if command.startswith(“完了 “):
number = command.replace(“完了 “, “”, 1)
return self.done_todo(number)

if command.startswith(“削除 “):
number = command.replace(“削除 “, “”, 1)
return self.delete_todo(number)

if command.startswith(“メモ “):
text = command.replace(“メモ “, “”, 1)
return self.add_note(text)

if command == “メモ一覧”:
return self.show_notes()

if command.startswith(“計算 “):
expr = command.replace(“計算 “, “”, 1)
return self.calculate(expr)

if command.startswith(“保存 “):
try:
parts = command.split(” “, 2)
filename = parts[1]
text = parts[2]
return self.save_text_file(filename, text)
except:
return “使い方: 保存 ファイル名 内容”

return self.chat(command)

def main():
agent = AIAgent()

print(“================================”)
print(” AIエージェント 起動”)
print(“================================”)
print(“ヘルプ と入力するとコマンド一覧を表示”)
print(“終了 と入力すると終了”)
print()

while True:
user_input = input(“あなた: “)
response = agent.run_command(user_input)
print(“AI:”, response)

if user_input.strip() == “終了”:
break

if __name__ == “__main__”:
main()

投稿者: chosuke

趣味はゲームやアニメや漫画などです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です