fix mcp
This commit is contained in:
@ -1,28 +1,118 @@
|
||||
## scripts/ask.py
|
||||
#import sys
|
||||
#import requests
|
||||
#from config import load_config
|
||||
#
|
||||
#def ask(prompt):
|
||||
# cfg = load_config()
|
||||
# if cfg["provider"] == "ollama":
|
||||
# payload = {"model": cfg["model"], "prompt": prompt, "stream": False}
|
||||
# response = requests.post(cfg["url"], json=payload)
|
||||
# print(response.json().get("response", "❌ No response"))
|
||||
# else:
|
||||
# headers = {
|
||||
# "Authorization": f"Bearer {cfg['api_key']}",
|
||||
# "Content-Type": "application/json"
|
||||
# }
|
||||
# payload = {
|
||||
# "model": cfg["model"],
|
||||
# "messages": [{"role": "user", "content": prompt}]
|
||||
# }
|
||||
# response = requests.post(cfg["url"], headers=headers, json=payload)
|
||||
# print(response.json().get("choices", [{}])[0].get("message", {}).get("content", "❌ No content"))
|
||||
#
|
||||
#if __name__ == "__main__":
|
||||
# if len(sys.argv) < 2:
|
||||
# print("Usage: python ask.py 'your message'")
|
||||
# sys.exit(1)
|
||||
# ask(sys.argv[1])
|
||||
|
||||
import sys
|
||||
import json
|
||||
import requests
|
||||
from datetime import datetime
|
||||
from config import load_config
|
||||
|
||||
def ask(prompt):
|
||||
def build_payload_mcp(message: str):
|
||||
return {
|
||||
"tool": "ask_message", # MCPサーバー側で定義されたツール名
|
||||
"input": {
|
||||
"message": message
|
||||
}
|
||||
}
|
||||
|
||||
def build_payload_openai(cfg, message: str):
|
||||
return {
|
||||
"model": cfg["model"],
|
||||
"messages": [
|
||||
{"role": "system", "content": "あなたは思いやりのあるAIです。"},
|
||||
{"role": "user", "content": message}
|
||||
],
|
||||
"temperature": 0.7
|
||||
}
|
||||
|
||||
def call_mcp(cfg, message: str):
|
||||
payload = build_payload_mcp(message)
|
||||
headers = {"Content-Type": "application/json"}
|
||||
response = requests.post(cfg["url"], headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
return response.json().get("output", {}).get("response", "❓ 応答が取得できませんでした")
|
||||
|
||||
def call_openai(cfg, message: str):
|
||||
payload = build_payload_openai(cfg, message)
|
||||
headers = {
|
||||
"Authorization": f"Bearer {cfg['api_key']}",
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
response = requests.post(cfg["url"], headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
return response.json()["choices"][0]["message"]["content"]
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: ask.py 'your message'")
|
||||
return
|
||||
|
||||
message = sys.argv[1]
|
||||
cfg = load_config()
|
||||
if cfg["provider"] == "ollama":
|
||||
payload = {"model": cfg["model"], "prompt": prompt, "stream": False}
|
||||
response = requests.post(cfg["url"], json=payload)
|
||||
print(response.json().get("response", "❌ No response"))
|
||||
|
||||
print(f"🔍 使用プロバイダー: {cfg['provider']}")
|
||||
|
||||
try:
|
||||
if cfg["provider"] == "openai":
|
||||
response = call_openai(cfg, message)
|
||||
elif cfg["provider"] == "mcp":
|
||||
response = call_mcp(cfg, message)
|
||||
else:
|
||||
raise ValueError(f"未対応のプロバイダー: {cfg['provider']}")
|
||||
|
||||
print("💬 応答:")
|
||||
print(response)
|
||||
|
||||
# ログ保存(オプション)
|
||||
save_log(message, response)
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 実行エラー: {e}")
|
||||
|
||||
def save_log(user_msg, ai_msg):
|
||||
from config import MEMORY_DIR
|
||||
date_str = datetime.now().strftime("%Y-%m-%d")
|
||||
path = MEMORY_DIR / f"{date_str}.json"
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if path.exists():
|
||||
with open(path, "r") as f:
|
||||
logs = json.load(f)
|
||||
else:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {cfg['api_key']}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
payload = {
|
||||
"model": cfg["model"],
|
||||
"messages": [{"role": "user", "content": prompt}]
|
||||
}
|
||||
response = requests.post(cfg["url"], headers=headers, json=payload)
|
||||
print(response.json().get("choices", [{}])[0].get("message", {}).get("content", "❌ No content"))
|
||||
logs = []
|
||||
|
||||
now = datetime.utcnow().isoformat() + "Z"
|
||||
logs.append({"timestamp": now, "sender": "user", "message": user_msg})
|
||||
logs.append({"timestamp": now, "sender": "ai", "message": ai_msg})
|
||||
|
||||
with open(path, "w") as f:
|
||||
json.dump(logs, f, indent=2, ensure_ascii=False)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: python ask.py 'your message'")
|
||||
sys.exit(1)
|
||||
ask(sys.argv[1])
|
||||
main()
|
||||
|
Reference in New Issue
Block a user