零基础30分钟实战:用LazyLLM在硅基流动平台打造天气查询Agent

窗外暴雨突至时,你是否想过让AI自动提醒带伞?地铁通勤路上,是否希望手机能主动播报当日天气?现在,任何人都能通过硅基流动平台和LazyLLM快速实现这些智能场景。本文将带你用最简步骤,完成从注册到部署的全流程——无需机器学习基础,不用理解神经网络原理,甚至不需要本地开发环境。

1. 环境准备:10分钟快速入门

1.1 硅基流动账号注册

打开硅基流动官网(建议使用Chrome或Edge浏览器),点击右上角"免费注册"。只需准备邮箱和手机号,三步即可完成:

  1. 输入邮箱获取验证码
  2. 设置8位以上含大小写的密码
  3. 绑定手机号完成实名认证

提示:个人开发者选择"基础版"即可,新用户赠送50万token的免费额度,足够完成本教程所有实验。

注册成功后,在控制台"安全设置"中生成API Key,建议命名为weather_demo_key以便管理。复制时注意不要包含前后空格,密钥格式通常为sk-开头的32位字符串。

1.2 LazyLLM环境配置

打开终端(Windows用户使用PowerShell或CMD),执行以下命令安装基础工具包:

pip install lazyllm --upgrade
pip install python-dotenv requests

创建项目文件夹并设置环境变量:

mkdir weather_agent && cd weather_agent
echo "LAZYLLM_SILICONFLOW_API_KEY=你的实际API_KEY" > .env

验证安装是否成功:

import lazyllm
print(lazyllm.__version__)  # 应输出类似0.2.3的版本号

2. 构建天气查询核心功能

2.1 获取实时天气数据

我们使用和风天气的免费API(每日1000次免费调用),首先注册获取key:

import requests

def get_weather(city):
    api_key = "你的和风天气KEY"  # 替换为实际值
    url = f"https://devapi.qweather.com/v7/weather/now?location={city}&key={api_key}"
    response = requests.get(url).json()
    return {
        "temp": response["now"]["temp"],
        "text": response["now"]["text"],
        "wind": response["now"]["windDir"]
    }

# 测试调用
print(get_weather("北京"))  # 输出:{'temp': '22', 'text': '晴', 'wind': '东南风'}

2.2 设计Agent对话逻辑

在项目根目录创建weather_agent.py,实现自然语言交互:

from lazyllm import Agent

class WeatherAgent(Agent):
    def __init__(self):
        super().__init__(
            role="天气助手",
            instruction="用友好简洁的语气回答天气问题"
        )
    
    def respond(self, query):
        if "天气" in query:
            city = extract_city(query)  # 需要实现城市提取函数
            data = get_weather(city)
            return f"{city}当前{data['text']},气温{data['temp']}℃,{data['wind']}"
        return "请问您想查询哪个城市的天气?"

def extract_city(text):
    # 简单实现:提取"北京天气"中的"北京"
    return text.replace("天气", "").strip()

3. 部署与交互测试

3.1 本地调试运行

添加启动脚本main.py

from weather_agent import WeatherAgent

agent = WeatherAgent()
while True:
    question = input("用户输入 > ")
    print("AI回复 >", agent.respond(question))

启动服务:

python main.py

测试对话示例:

用户输入 > 北京天气怎么样
AI回复 > 北京当前晴,气温22℃,东南风

3.2 发布到LazyCraft平台

  1. 登录硅基流动控制台,进入LazyCraft服务
  2. 点击"新建应用" → 选择"空白模板"
  3. 上传weather_agent.py文件
  4. 在"环境变量"设置中添加HEWEATHER_KEY

部署完成后,即可通过API端点调用你的Agent:

curl -X POST https://api.siliconflow.cn/your-app-id \
-H "Content-Type: application/json" \
-d '{"query":"上海天气"}'

4. 功能扩展与优化建议

4.1 增强城市识别能力

改进extract_city函数,使用正则表达式支持更多表达方式:

import re

def extract_city(text):
    patterns = [
        r"(.+?)的?天气",       # "北京天气"或"北京的天气"
        r"查询(.+?)的天气",     # "查询纽约的天气"
        r"(.+?)现在天气如何"    # "东京现在天气如何"
    ]
    for pattern in patterns:
        match = re.search(pattern, text)
        if match: return match.group(1)
    return None

4.2 添加多日预报功能

扩展天气API调用:

def get_forecast(city, days=3):
    url = f"https://devapi.qweather.com/v7/weather/{days}d?location={city}&key={api_key}"
    data = requests.get(url).json()["daily"]
    return [
        {
            "date": day["fxDate"],
            "day": day["textDay"],
            "night": day["textNight"],
            "temp": f"{day['tempMin']}~{day['tempMax']}℃"
        } for day in data
    ]

4.3 异常处理机制

完善API调用的健壮性:

def safe_get_weather(city):
    try:
        data = get_weather(city)
        if not data: raise ValueError
        return data
    except Exception as e:
        print(f"天气查询失败: {str(e)}")
        return {"temp": "N/A", "text": "数据暂不可用"}

实际项目中,我会为每个API调用添加重试机制和fallback方案。比如当主天气服务不可用时,自动切换到备用数据源。这些细节往往决定了产品的用户体验——记得监控日志中的错误率,超过阈值时触发告警。

更多推荐