from smolagents import ( CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool, FinalAnswerTool, GradioUI, ) import datetime import pytz import yaml # ========================= # 自定义工具 1:示例工具 # ========================= @tool def my_custom_tool(arg1: str, arg2: int) -> str: """A simple custom tool example. Args: arg1: The first argument. arg2: The second argument. """ return f"You passed arg1={arg1}, arg2={arg2}." # ========================= # 自定义工具 2:查询指定时区当前时间 # ========================= @tool def get_current_time_in_timezone(timezone: str) -> str: """Fetch the current local time in a specified timezone. Args: timezone: A valid timezone string, for example 'Asia/Shanghai', 'Asia/Tokyo', or 'America/New_York'. """ try: tz = pytz.timezone(timezone) local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") return f"The current local time in {timezone} is: {local_time}" except Exception as e: return f"Error fetching time for timezone '{timezone}': {str(e)}" # ========================= # 最终答案工具 # ========================= final_answer = FinalAnswerTool() # ========================= # 模型配置 # ========================= model = HfApiModel( max_tokens=2096, temperature=0.5, model_id="Qwen/Qwen2.5-Coder-32B-Instruct", custom_role_conversions=None, ) # ========================= # 从 Hugging Face Hub 加载图片生成工具 # ========================= image_generation_tool = load_tool( "agents-course/text-to-image", trust_remote_code=True, ) # ========================= # 读取 prompts.yaml # ========================= with open("prompts.yaml", "r", encoding="utf-8") as stream: prompt_templates = yaml.safe_load(stream) # ========================= # 创建 Agent # ========================= agent = CodeAgent( model=model, tools=[ final_answer, image_generation_tool, get_current_time_in_timezone, my_custom_tool, DuckDuckGoSearchTool(), ], max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates, ) # ========================= # 启动 Gradio 页面 # ========================= GradioUI(agent).launch()