news 2026/6/20 18:12:00

智能体:天气助手实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能体:天气助手实践

Langchain 1.2.0 版本,实现天气查询

from dataclasses import dataclass from langchain.agents import create_agent from langchain.chat_models import init_chat_model from langchain.tools import tool, ToolRuntime from langgraph.checkpoint.memory import InMemorySaver import os from dotenv import load_dotenv load_dotenv() # 定义系统提示 SYSTEM_PROMPT = """你是一位擅长用双关语表达的专家天气预报员。 你可以使用两个工具: - get_weather_for_location:用于获取特定地点的天气 - get_user_location:用于获取用户的位置 如果用户询问天气,请确保你知道具体位置。如果从问题中可以判断他们指的是自己所在的位置,请使用 get_user_location 工具来查找他们的位置。""" # 定义上下文模式 @dataclass class Context: """自定义运行时上下文模式。""" user_id: str # 定义工具 @tool def get_weather_for_location(city: str) -> str: """获取指定城市的天气。""" return f"{city}总是阳光明媚!" @tool def get_user_location(runtime: ToolRuntime[Context]) -> str: """根据用户 ID 获取用户信息。""" user_id = runtime.context.user_id return "Florida" if user_id == "1" else "SF" # 配置模型 model = init_chat_model( #anthropic:claude-sonnet-4-5", #temperature=0 model = "deepseek-chat", base_url = "https://api.deepseek.com/v1", api_key = os.getenv("deepseek_api_key"), temperature = 0.7 ) # 定义响应格式 @dataclass class ResponseFormat: """代理的响应模式。""" # 带双关语的回应(始终必需) punny_response: str # 天气的任何有趣信息(如果有) weather_conditions: str | None = None # 设置记忆 checkpointer = InMemorySaver() # 创建代理 agent = create_agent( model=model, system_prompt=SYSTEM_PROMPT, tools=[get_user_location, get_weather_for_location], context_schema=Context, response_format=ResponseFormat, checkpointer=checkpointer ) # 运行代理 # `thread_id` 是给定对话的唯一标识符。 config = {"configurable": {"thread_id": "1"}} response = agent.invoke( {"messages": [{"role": "user", "content": "外面的天气怎么样?"}]}, config=config, context=Context(user_id="1") ) print(response['structured_response']) # ResponseFormat( # punny_response="佛罗里达今天依然是'阳光灿烂'的一天!阳光正在播放'rey-dio'热门歌曲!我得说,这是进行'solar-bration'的完美天气!如果你希望下雨,恐怕这个想法已经'被冲走'了——预报仍然'清晰地'灿烂!", # weather_conditions="佛罗里达总是阳光明媚!" # ) # 注意,我们可以使用相同的 `thread_id` 继续对话。 response = agent.invoke( {"messages": [{"role": "user", "content": "谢谢!"}]}, config=config, context=Context(user_id="1") ) print(response['structured_response']) # ResponseFormat( # punny_response="你真是'雷'厉风行地欢迎!帮助你保持'当前'天气总是'轻而易举'。我只是'云'游四方,等待随时'淋浴'你更多预报。祝你在佛罗里达的阳光下度过'sun-sational'的一天!", # weather_conditions=None # )

ResponseFormat(punny_response='佛罗里达的天气总是阳光明媚,就像这里的橙子一样"橙"意满满!看来太阳在这里"佛"常热情,让整个州都"罗"罩在温暖的光芒中。这里的天气真是"达"到了完美的度假标准!', weather_conditions='Florida总是阳光明媚!')
ResponseFormat(punny_response='不客气!很高兴能为您"预报"天气,希望我的回答让您"心晴"愉快!如果还有什么天气问题,我随时准备为您"云"开雾散!', weather_conditions=None)

Enjoy!

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

YOLOv8结合GPS实现野外动物迁徙路径追踪

YOLOv8结合GPS实现野外动物迁徙路径追踪 在青藏高原的无人区,一只藏羚羊悄然穿过晨雾中的草甸。几公里外的一台太阳能摄像头捕捉到了这一幕,并在不到一秒内识别出它的身份——不是靠人工翻看录像,而是由嵌入式设备上的AI模型自动完成。与此同…

作者头像 李华
网站建设 2026/6/9 23:47:34

YOLOv8广告效果评估:品牌露出时长与观众视线关联分析

YOLOv8广告效果评估:品牌露出时长与观众视线关联分析 在短视频、直播带货和体育赛事转播日益成为主流传播渠道的今天,品牌方对广告“真实曝光”的关注已远超传统的收视率统计。他们更关心的问题是:我的Logo在画面中出现了多久?它…

作者头像 李华
网站建设 2026/6/15 12:30:08

YOLOv8虚拟试衣间应用:人体轮廓检测与服装贴合渲染

YOLOv8虚拟试衣间应用:人体轮廓检测与服装贴合渲染 在电商和新零售的激烈竞争中,用户不再满足于“看图购物”——他们想要的是沉浸式、个性化的体验。一个最典型的痛点就是买衣服:屏幕上的模特穿得好看,自己下单后却“买家秀”翻车…

作者头像 李华
网站建设 2026/6/15 18:21:00

数据权限怎么设计:看自己/看团队/看全量(附字段级权限清单)

前言 数据权限是权限设计的核心。很多系统只做了功能权限(能不能操作),没做数据权限(能看哪些数据),导致数据泄露。这篇给你数据权限的完整设计方法。 一、数据权限3个层级 层级范围SQL实现适用场景个人…

作者头像 李华
网站建设 2026/6/14 2:49:03

安全、高效、智能:RFID技术在工具管理与人员识别中的双效协同

在工业制造、建筑施工、医疗手术乃至航空航天等关键领域,工具的高效精准管理与人员的可靠身份识别,是保障安全、提升效率、控制成本的核心环节。传统依赖手工登记、目视检查或条码扫描的管理模式,日益暴露出效率低下、易出错、实时性差等痛点…

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

电机控制器FOC算法实现详解:从坐标变换讲起

从三相电流到转矩控制:FOC坐标变换的工程实现全解析 你有没有遇到过这样的情况?明明代码逻辑写得清清楚楚,PI参数也调得八九不离十,可电机一跑起来就是抖、效率上不去、噪音还特别大。排查半天发现——问题不在控制器本身&#xf…

作者头像 李华