from config import OPENAI_API_KEY from openai import OpenAI import requests def create_client(): return OpenAI(api_key=OPENAI_API_KEY, base_url="https://api.deepseek.com") # 通过api调用获得当前ip与位置 def get_addr(): res_ip = requests.get('https://ipapi.co/ip/').text res_city = requests.get('https://ipapi.co/city/').text return f'ip地址:{res_ip},所在城市:{res_city}' get_addr_func = { "name": "get_addr", # 函数名称 "description": "获取用户的ip地址与城市", # 对该函数的描述 "parameters": { "type": "object", "properties": {}, # 参数为空,那么这两个地方也是空的 "required": [] } } tools = [ { "type":"function", "function":get_addr_func } ] def chat_loop(agent_client,tools): messages = [ {"role": "system","content": "你是一个善解人意会热心回答人问题的助手。如果你感觉你回答不了当前问题,就会调用函数来回答。"}, {"role": "user", "content": "我现在在哪个城市,ip地址是多少?"} ] response = agent_client.chat.completions.create( model="deepseek-chat", messages=messages, tools=tools, tool_choice="auto" ) message = response.choices[0].message if message.tool_calls: for tool_call in message.tool_calls: if tool_call.function.name == "get_addr": # 解析参数 # args = json.loads(tool_call.function.arguments) # 获取用户关键词的参数 # location = args.get("location") # 调用真实参数 # your_info = get_weather(location) # 这里无参数,直接调用函数就行 your_info = get_addr() messages.append(message) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "name": tool_call.function.name, "content": your_info }) final_res = agent_client.chat.completions.create( model="deepseek-chat", messages=messages ) print('已调用工具...') print(f'回答:{final_res.choices[0].message.content}') else: # 模型没有要调用工具,直接返回 print('未调用工具...') print(f'回答:{response.choices[0].message.content}') if __name__ == '__main__': client = create_client() chat_loop(client, tools)