1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| import json from datetime import datetime, timedelta from openai import OpenAI
client = OpenAI(api_key="sk-xxx")
schedule_db = []
tools = [ { "type": "function", "function": { "name": "add_event", "description": "添加日程事件", "parameters": { "type": "object", "properties": { "title": {"type": "string", "description": "事件名称"}, "date": {"type": "string", "description": "日期,格式 YYYY-MM-DD"}, "time": {"type": "string", "description": "时间,格式 HH:MM,可选"}, "duration_minutes": {"type": "integer", "description": "持续分钟数"} }, "required": ["title", "date"] } } }, { "type": "function", "function": { "name": "query_schedule", "description": "查询指定日期的日程", "parameters": { "type": "object", "properties": { "date": {"type": "string", "description": "日期,YYYY-MM-DD 格式"} }, "required": ["date"] } } }, { "type": "function", "function": { "name": "delete_event", "description": "删除日程", "parameters": { "type": "object", "properties": { "title": {"type": "string", "description": "要删除的事件名称(支持模糊匹配)"} }, "required": ["title"] } } } ]
def add_event(title, date, time=None, duration_minutes=60): event = {"title": title, "date": date, "time": time or "全天", "duration": duration_minutes} schedule_db.append(event) return json.dumps({"status": "ok", "event": event})
def query_schedule(date): events = [e for e in schedule_db if e["date"] == date] if not events: return json.dumps({"date": date, "events": [], "message": "当天没有日程"}) return json.dumps({"date": date, "events": events})
def delete_event(title): global schedule_db before = len(schedule_db) schedule_db = [e for e in schedule_db if title not in e["title"]] deleted = before - len(schedule_db) return json.dumps({"status": "ok", "deleted": deleted})
available_functions = { "add_event": add_event, "query_schedule": query_schedule, "delete_event": delete_event, }
SYSTEM_PROMPT = """你是一个日程管理助手。根据用户描述,调用合适的函数管理日程。 - 如果用户说"明天下午",请计算出具体日期和时间 - 操作完成后简洁地告知用户结果 - 当前日期是 {}""".format(datetime.now().strftime("%Y-%m-%d"))
def chat(user_input): messages = [ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": user_input} ]
while True: response = client.chat.completions.create( model="gpt-4o", messages=messages, tools=tools, tool_choice="auto" ) message = response.choices[0].message if not message.tool_calls: return message.content messages.append(message) for tc in message.tool_calls: func = available_functions[tc.function.name] args = json.loads(tc.function.arguments) result = func(**args) messages.append({ "role": "tool", "tool_call_id": tc.id, "content": result })
print(chat("下周一上午9点开会,讨论项目进度,预计1.5小时")) print(chat("下周一下午3点去牙科复诊")) print(chat("告诉我下周一的日程"))
|