from openai import OpenAI import os import json import requests from dotenv import load_dotenv
load_dotenv() import pandas as pd from datetime import datetime
client = OpenAI()
def check_tick(date, start, end): url = 'https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format( date, start, end) headers = { "Accept": "*/*", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", "Cache-Control": "no-cache", "Connection": "keep-alive", "If-Modified-Since": "0", "Pragma": "no-cache", "Referer": "https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc", "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-origin", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36", "X-Requested-With": "XMLHttpRequest", "sec-ch-ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"macOS\"" } cookies = { "_uab_collina": "", "JSESSIONID": "", "BIGipServerotn": "", "BIGipServerpassport": "", "guidesStatus": "", "highContrastMode": "", "cursorStatus": "", "route": "", "_jc_save_fromStation": "", "_jc_save_toStation": "", "_jc_save_fromDate": "", "_jc_save_toDate": "", "_jc_save_wfdc_flag": "" } session = requests.session() res = session.get(url, headers=headers, cookies=cookies)
data = res.json()
result = data["data"]["result"] print('result:', result) lis = [] for index in result: index_list = index.replace('有', 'Yes').replace('无', 'No').split('|') print('index_list:',index_list) train_number = index_list[3] if 'G' in train_number: time_1 = index_list[8] time_2 = index_list[9] prince_seat = index_list[25] first_class_seat = index_list[31] second_class = index_list[30] dit = { '车次': train_number, '出发时间': time_1, '到站时间': time_2, "是否可以预定": index_list[11], } lis.append(dit) else: time_1 = index_list[8] time_2 = index_list[9] dit = { '车次': train_number, '出发时间': time_1, '到站时间': time_2, "是否可以预定": index_list[11],
} lis.append(dit) content = pd.DataFrame(lis) return content
def check_date(): today = datetime.now().date() return today
def get_completion(messages, model="gpt-3.5-turbo"): response = client.chat.completions.create( model=model, messages=messages, temperature=0, max_tokens=1024, tools=[ { "type": "function", "function": { "name": "check_tick", "description": "给定日期查询有没有票", "parameters": { "type": "object", "properties": { "date": { "type": "string", "description": "日期", }, "start": { "type": "string", "description": "出发站 北京是BJP", }, "end": { "type": "string", "description": "终点站 天津是TJP", } }, } } }, { "type": "function", "function": { "name": "check_date", "description": "返回当前的日期", "parameters": { "type": "object", "properties": { } } } } ] ) return response.choices[0].message
prompt = "查询明天北京到上海的票"
messages = [ {"role": "system", "content": "你是一个地图通,你可以找到任何地址"}, {"role": "user", "content": prompt} ] response = get_completion(messages)
if (response.content is None): response.content = "" messages.append(response) print("=====GPT回复=====") print(response)
while (response.tool_calls is not None): for tool_call in response.tool_calls: args = json.loads(tool_call.function.arguments) print("参数:", args)
if (tool_call.function.name == "check_tick"): print("Call: check_tick") result = check_tick(**args) elif (tool_call.function.name == "check_date"): print("Call: check_date") result = check_date()
print("=====函数返回=====") print(result)
messages.append({ "tool_call_id": tool_call.id, "role": "tool", "name": tool_call.function.name, "content": str(result) })
response = get_completion(messages) if (response.content is None): response.content = "" print("=====GPT回复2=====") print(response) messages.append(response)
print("=====最终回复=====") print(response.content)
|