news 2026/6/2 12:17:56

如何在本地搭建天气智能体项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在本地搭建天气智能体项目

如何在本地搭建天气智能体项目

项目概述

本文将介绍如何在本地搭建一个完整的天气智能体项目。项目主要分为两部分:

  1. 使用 Ollama 部署通义千问 3.5(Qwen 3.5)大模型并完成连接测试
  2. 实现天气查询功能,让大模型调用工具并给出智能回复

技术栈说明

根据 2026 年 Ollama 最新公告(v0.18.0),我们使用以下技术:

  • Ollama OpenAI 兼容 APIhttp://localhost:11434/v1/
  • LangChain Community 版的 OpenAI 接口:无需真实 API Key
  • 模型qwen3.5:4b(通义千问 3.5 4B 版本)

第一部分:本地大模型部署与测试

环境准备

首先,我们已经在本地部署了Ollama平台(v0.18.0 或更高版本)。Ollama 的优势在于:

  • 环境配置简单,无需复杂的 CUDA 配置
  • 模型管理方便,支持一键下载和运行
  • 提供标准的 OpenAI 兼容 API 接口
  • 支持工具调用、流式响应等高级特性

部署通义千问 3.5(Qwen 3.5)

通义千问 3.5 是阿里巴巴 2026 年推出的最新开源大模型系列,具有以下特点:

  • 原生多模态支持(文本、图像、视频)
  • 256K 超长上下文窗口
  • Apache 2.0 协议,可免费商用
  • 4B 版本仅需约 3.4GB 显存
  1. 确保 Ollama 服务已启动
  2. 下载通义千问 3.5 4B 模型:
ollama pull qwen3.5:4b

测试大模型连接(使用 OpenAI SDK)

在开始正式项目之前,我们先测试一下 OpenAI 兼容接口是否正常工作。

创建一个简单的测试脚本test_model.py

fromopenaiimportOpenAIdeftest_ollama_connection():# 初始化 OpenAI 客户端,指向本地 Ollamaclient=OpenAI(base_url="http://localhost:11434/v1/",api_key="ollama"# 任意字符串即可,本地不需要真实 API Key)try:# 调用聊天补全接口response=client.chat.completions.create(model="qwen3.5:4b",messages=[{"role":"user","content":"你好,请简单介绍一下你自己。"}],stream=False)print("大模型回复:")print(response.choices[0].message.content)returnTrueexceptExceptionase:print(f"连接失败:{e}")returnFalseif__name__=="__main__":test_ollama_connection()

运行这个脚本,如果看到大模型的自我介绍,说明连接成功!

第二部分:天气智能体实现

项目设计

我们的天气智能体需要以下功能:

  1. 用户输入所在城市
  2. 查询该城市的实时天气信息
  3. 根据天气信息给出智能建议

安装依赖

首先,安装所需的 Python 包:

pipinstalllangchain langchain-openai requests

天气 API 集成

我们使用公开的天气 API 接口来获取天气数据。创建weather_tool.py

importrequestsdefget_weather(city,api_key):""" 获取指定城市的天气信息 """base_url="https://api.openweathermap.org/data/2.5/weather"params={"q":city,"appid":api_key,"units":"metric",# 使用摄氏度"lang":"zh_cn"}try:response=requests.get(base_url,params=params)response.raise_for_status()data=response.json()# 解析天气数据weather_info={"城市":data["name"],"温度":f"{data['main']['temp']}°C","体感温度":f"{data['main']['feels_like']}°C","湿度":f"{data['main']['humidity']}%","风速":f"{data['wind']['speed']}m/s","天气描述":data["weather"][0]["description"],"气压":f"{data['main']['pressure']}hPa"}returnweather_infoexceptExceptionase:returnf"获取天气信息失败:{str(e)}"

使用 LangChain Community 版 OpenAI 接口

现在我们使用 LangChain Community 版的 OpenAI 兼容接口来构建智能体。创建weather_agent.py

fromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromlangchain_core.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromweather_toolimportget_weatherimportjson# 1. 定义天气查询工具@tooldefweather_tool(city:str)->str:"""查询指定城市的天气信息 Args: city: 城市名称,例如 "北京"、"上海"、"Tokyo" Returns: 天气信息的JSON字符串 """# 请替换为你自己的天气 API KeyWEATHER_API_KEY="your_api_key_here"weather_data=get_weather(city,WEATHER_API_KEY)ifisinstance(weather_data,str):returnweather_datareturnjson.dumps(weather_data,ensure_ascii=False)# 2. 初始化 LangChain ChatOpenAI,指向本地 Ollamallm=ChatOpenAI(base_url="http://localhost:11434/v1/",api_key="ollama",# 任意字符串即可model="qwen3.5:4b",temperature=0.7)# 3. 定义提示词模板prompt=ChatPromptTemplate.from_messages([("system","你是一个专业的天气助手。当用户询问天气时,请先调用天气查询工具获取天气信息,然后根据天气信息给出友好的回复,包括温度、湿度、风速等信息,并给出是否适合出游的建议。请用简洁、友好的语气回复用户。"),("user","{input}"),MessagesPlaceholder(variable_name="agent_scratchpad"),])# 4. 定义工具列表tools=[weather_tool]# 5. 创建智能体agent=create_tool_calling_agent(llm,tools,prompt)# 6. 创建执行器agent_executor=AgentExecutor(agent=agent,tools=tools,verbose=True# 显示详细执行过程)defmain():print("天气智能体已启动!")print("输入 'quit' 可退出程序\n")whileTrue:user_input=input("请输入要查询的城市或问题:")ifuser_input.lower()=="quit":breakprint("正在查询天气...")try:result=agent_executor.invoke({"input":user_input})print("\n"+"="*50)print(result["output"])print("="*50+"\n")exceptExceptionase:print(f"执行出错:{e}")if__name__=="__main__":main()

简化版本(不使用 Agent)

如果你想要更简单的实现(手动调用工具),可以使用以下版本:

fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromweather_toolimportget_weatherimportjson# 初始化 LangChain ChatOpenAIllm=ChatOpenAI(base_url="http://localhost:11434/v1/",api_key="ollama",model="qwen3.5:4b",temperature=0.7)# 定义提示词模板prompt=ChatPromptTemplate.from_messages([("system","你是一个专业的天气助手。请根据提供的天气信息给出友好的回复,包括温度、湿度、风速等信息,并给出是否适合出游的建议。请用简洁、友好的语气回复用户。"),("user","请查询{city}的天气。\n\n以下是获取到的天气信息:\n{weather_info}"),])# 创建链chain=prompt|llmclassWeatherAgent:def__init__(self,weather_api_key):self.weather_api_key=weather_api_keydefrun(self,city):# 1. 获取天气信息weather_data=get_weather(city,self.weather_api_key)ifisinstance(weather_data,str)andweather_data.startswith("获取天气信息失败"):returnweather_data# 2. 构建天气信息字符串weather_info_str=json.dumps(weather_data,ensure_ascii=False,indent=2)# 3. 调用大模型生成回复response=chain.invoke({"city":city,"weather_info":weather_info_str})returnresponse.contentdefmain():# 请替换为你自己的天气 API KeyWEATHER_API_KEY="your_api_key_here"agent=WeatherAgent(WEATHER_API_KEY)print("天气智能体已启动!")whileTrue:city=input("请输入要查询的城市(输入 'quit' 退出):")ifcity.lower()=="quit":breakprint("正在查询天气...")try:result=agent.run(city)print("\n"+"="*50)print(result)print("="*50+"\n")exceptExceptionase:print(f"执行出错:{e}")if__name__=="__main__":main()

使用说明

  1. 首先,你需要去天气 API 提供商(如 OpenWeatherMap)注册并获取你的 API Key
  2. 将 API Key 替换到代码中的WEATHER_API_KEY变量
  3. 确保 Ollama 服务正在运行,并且通义千问 3.5(qwen3.5:4b)模型已下载
  4. 安装依赖:pip install langchain langchain-openai requests
  5. 运行weather_agent.py,输入城市名称即可查询天气

项目效果

当你运行这个天气智能体后,输入一个城市名称,它会:

  1. 调用天气 API 获取实时数据
  2. 将天气信息传递给本地大模型
  3. 大模型会根据天气情况给出智能回复,包括温度、湿度等信息,以及是否适合出游的建议

Ollama 2026 最新特性说明

根据 Ollama v0.18.0 公告,OpenAI 兼容 API 支持以下特性:

  • ✅ 工具调用(Tool/Function Calling)
  • ✅ 流式响应
  • ✅ JSON 模式
  • ✅ 结构化输出
  • ✅ 多轮对话
  • ✅ 系统提示词
  • reasoning_effort参数(控制推理强度)

总结

通过这个项目,我们成功实现了:

  • 本地大模型的部署与测试(使用通义千问 3.5)
  • 使用 LangChain Community 版 OpenAI 接口
  • 工具调用的集成(两种实现方式:Agent 版和简化版)
  • 完整的智能对话体验

这个项目可以作为更复杂智能体应用的基础,你可以在此基础上添加更多工具,扩展更多功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/2 12:13:48

互联网营销中流量赛道选择与选品策略的量化分析

在数字营销中,常常遇到一个问题:100万的预算,花到哪条赛道,回报更高?这个问题困扰过每一个运营人。2026年,随着各平台算法持续升级,传统的“广撒网”投放模式已经彻底失效。本文将从量化视角&am…

作者头像 李华
网站建设 2026/6/2 12:13:47

微软翻译新架构:Z-code MoE模型如何实现高效精准的多语言翻译

1. 项目概述:当翻译遇上“专家委员会”如果你和我一样,在跨国协作、阅读前沿论文或者处理多语言客户支持时,深度依赖过机器翻译,那你一定对翻译质量的“天花板”有过切身体会。常规的翻译模型就像一个全科医生,什么病都…

作者头像 李华
网站建设 2026/6/2 12:13:47

手把手教你用ADB连接vivo云真机,解决BlueOS Studio调试环境配置难题

从零搭建vivo云真机调试环境:ADB配置全流程与避坑指南 在移动应用开发与测试过程中,真机调试是不可或缺的环节。vivo云真机平台为开发者提供了便捷的远程设备访问能力,而BlueOS Studio则是配套的集成开发环境。本文将聚焦于Windows系统下ADB环…

作者头像 李华
网站建设 2026/6/2 12:13:11

基于机器学习的共享单车需求预测与调度建议系统实战

摘要 本文记录一个可以直接运行的共享单车需求预测与调度建议项目。项目不再停留在随机生成样例,而是使用 UCI Bike Sharing Dataset 中 Capital Bikeshare 2011-2012 年的真实小时级 hour.csv 数据完成训练、评估和预测;站点库存部分使用项目内置的运营…

作者头像 李华
网站建设 2026/6/2 12:10:42

AgentRAG与ReAct推理链:从检索增强到推理增强

摘要:传统RAG通过"检索-生成"管线提升了LLM的准确性,但面对复杂查询时仍存在检索策略单一、缺乏推理规划、无法多步验证等问题。本文以JBoltAI平台为蓝本,深度拆解从传统RAG到AgentRAG的架构跃迁,重点分析AbstractReAct…

作者头像 李华