现有项目智能体加持:从天气查询功能到大模型工具封装

发布时间:2026/6/3 4:36:02

现有项目智能体加持:从天气查询功能到大模型工具封装 现有项目智能体加持从天气查询功能到大模型工具封装前言假设你已经有一个简单的天气查询功能如何把它变成大模型可以调用的工具本文将带你完成从普通函数到大模型工具的完整封装过程。第一步实现天气查询功能首先我们有一个简单的天气查询函数# weather_service.pyimportrequestsdefget_weather(city:str)-str: 查询指定城市的天气信息 Args: city: 城市名称中文或拼音 Returns: 天气信息字符串 # 使用公开的天气API这里模拟实现api_urlfhttps://api.example.com/weather?city{city}try:responserequests.get(api_url)dataresponse.json()# 提取关键信息weather_info{城市:data.get(city,city),温度:f{data.get(temp,未知)}°C,湿度:f{data.get(humidity,未知)}%,天气:data.get(weather,未知),风速:f{data.get(wind_speed,未知)}m/s}# 格式化输出result\n.join([f{k}:{v}fork,vinweather_info.items()])returnresultexceptExceptionase:returnf查询天气失败{str(e)}# 测试功能if__name____main__:print(get_weather(北京))输出示例城市: 北京 温度: 26°C 湿度: 65% 天气: 晴 风速: 3.2 m/s第二步封装成大模型工具要让大模型能够调用这个函数需要添加工具描述信息。在 LangChain 中这非常简单# weather_tool.pyfromlangchain_core.toolsimporttoolimportrequeststooldefget_weather(city:str)-str: 查询指定城市的实时天气信息 Args: city: 城市名称可以是中文如北京或拼音如beijing Returns: 包含城市、温度、湿度、天气状况、风速的详细信息字符串 api_urlfhttps://api.example.com/weather?city{city}try:responserequests.get(api_url)dataresponse.json()weather_info{城市:data.get(city,city),温度:f{data.get(temp,未知)}°C,湿度:f{data.get(humidity,未知)}%,天气:data.get(weather,未知),风速:f{data.get(wind_speed,未知)}m/s}return\n.join([f{k}:{v}fork,vinweather_info.items()])exceptExceptionase:returnf查询天气失败{str(e)}关键变化添加了tool装饰器函数文档字符串变得更详细大模型需要这些信息来理解工具第三步创建智能体并绑定工具现在让大模型知道这个工具并学会调用它# weather_agent.pyfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromweather_toolimportget_weather# 1. 初始化大模型使用本地 OllamallmChatOpenAI(base_urlhttp://localhost:11434/v1/,api_keyollama,modelqwen3.5:4b)# 2. 定义工具列表tools[get_weather]# 3. 定义系统提示词promptChatPromptTemplate.from_messages([(system,你是一个专业的天气助手。当用户询问天气时请调用 get_weather 工具获取天气信息然后用友好的语言总结给用户。),(user,{input}),MessagesPlaceholder(variable_nameagent_scratchpad),])# 4. 创建智能体agentcreate_tool_calling_agent(llm,tools,prompt)# 5. 创建执行器agent_executorAgentExecutor(agentagent,toolstools,verboseTrue)# 测试智能体if__name____main__:resultagent_executor.invoke({input:北京今天天气怎么样})print(\n 最终回复 )print(result[output])第四步运行效果演示用户输入北京今天天气怎么样智能体执行过程verbose 模式 我需要调用 get_weather 工具来查询北京的天气。 正在调用工具: get_weather(city北京) 工具返回: 城市: 北京 温度: 26°C 湿度: 65% 天气: 晴 风速: 3.2 m/s 我已经获取到北京的天气信息可以总结给用户了。最终回复北京今天天气晴朗温度26°C湿度65%风速3.2 m/s。天气不错适合外出活动工具封装的核心要素工具描述三要素一个好的工具描述需要包含功能说明工具能做什么参数定义需要什么输入格式是什么返回说明输出是什么格式tooldefyour_tool(param1:str,param2:int)-str: 工具功能的详细描述大模型会阅读这段文字来决定是否调用 Args: param1: 参数1的说明包括格式要求 param2: 参数2的说明包括取值范围 Returns: 返回值的格式和内容说明 # 函数实现pass工具的作用和意义作用说明扩展能力边界让大模型能做它本身做不到的事如查询实时数据获取实时信息大模型的知识是固定的工具可以获取最新数据执行具体操作调用外部API、数据库查询、文件操作等保证准确性关键数据通过工具获取避免幻觉实现自动化智能体可以自动决定何时调用哪个工具完整项目结构weather_agent/ ├── weather_service.py # 原始天气服务 ├── weather_tool.py # 封装后的工具 ├── weather_agent.py # 智能体主程序 └── requirements.txt # 依赖配置requirements.txtlangchain langchain-openai requests进阶多个工具组合当你有多个工具时智能体会自动选择合适的工具# 新增工具示例tooldefget_news(topic:str)-str:获取指定主题的最新新闻# 实现...passtooldefcalculate(expression:str)-str:计算数学表达式# 实现...pass# 更新工具列表tools[get_weather,get_news,calculate]# 测试resultagent_executor.invoke({input:上海明天天气怎么样还有最近的科技新闻有哪些})智能体会自动识别需要调用两个工具先调用 get_weather(“上海”)再调用 get_news(“科技”)综合两个结果回复用户封装流程总结普通函数 → 添加 tool 装饰器 → 编写详细文档 → 绑定到智能体 → 大模型自动调用工具调用的价值从只能说到能做事大模型不再只是聊天而是可以执行实际操作连接虚拟与现实把AI的推理能力和现实世界的数据、服务连接起来构建智能工作流多个工具组合可以实现复杂的自动化任务

相关新闻