""" 更简单的单参数输入工具实现,用于查询现在天气的情况 """ import json import re from pydantic import BaseModel, Field import requests from configs.kb_config import SENIVERSE_API_KEY from server.chat import utils def weather(location: str, api_key: str): url = f"https://api.seniverse.com/v3/weather/daily.json?key={api_key}&location={location}&language=zh-Hans&unit=c&start=0&days=5" response = requests.get(url) if response.status_code == 200: data = response.json() weather = { "today": json.dumps(data["results"][0]["daily"][0]), "others": json.dumps(data["results"][0]["daily"][1:]) } weather_info = json.dumps(weather) return weather_info else: raise Exception( f"Failed to retrieve weather: {response.status_code}") def weathercheck(query: str): """获取到uid并拆分query""" try: matches = re.findall(r'\{.*?\}', query) if len(matches)>=2: query = matches[0] else: return "<关键指令>不需要再调用该工具了" location = json.loads(query)["location"] time_based_uuid = json.loads(matches[1])["uuid"] # sources = utils.get_shared_variable(time_based_uuid) # sources["source_docs"]=["天气 预报"] # sources["num"]+=1 # sources["END"] = "ok" # utils.set_shared_variable(time_based_uuid,sources) return weather(location, SENIVERSE_API_KEY) except Exception as e: return f"Failed to retrieve weather.{e}" class WeatherInput(BaseModel): location: str = Field(description="City name,include city and county")