构建智能天气机器人:Qwen-Agent实战教程

构建智能天气机器人:Qwen-Agent实战教程

【免费下载链接】Qwen-Agent Agent framework and applications built upon Qwen, featuring Code Interpreter and Chrome browser extension. 【免费下载链接】Qwen-Agent 项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen-Agent

引言:告别碎片化天气服务,打造你的智能助理

你是否还在为获取天气信息而切换多个应用?是否渴望一个能图文并茂、甚至为你配上应景诗词的个性化天气助手?本文将带你从零开始,基于Qwen-Agent框架构建一个集实时天气查询智能图像生成诗词匹配于一体的多模态天气机器人。通过本教程,你将掌握:

  • LLM工具调用与多模态整合的核心技术
  • Qwen-Agent的Agent初始化与工作流配置
  • 第三方API(高德地图)与本地资源(PDF文档)的协同使用
  • 图形化界面的快速部署与交互优化

环境准备:5分钟搭建开发环境

1. 核心依赖安装

Qwen-Agent提供了灵活的模块化安装方案,根据天气机器人需求,我们需要安装基础框架、GUI组件和RAG功能(用于PDF诗词文档解析):

# 基础安装(含LLM调用与工具链)
pip install "qwen-agent[gui,rag]"

# 如需从源码安装最新版本
git clone https://gitcode.com/GitHub_Trending/qw/Qwen-Agent
cd Qwen-Agent
pip install -e ."[gui,rag]"

2. 高德地图API密钥获取

天气查询功能依赖高德开放平台API,需完成以下步骤:

  1. 访问高德开放平台注册账号
  2. 创建应用并获取Web服务API密钥
  3. 设置环境变量:
    # Linux/Mac
    export AMAP_TOKEN="你的高德API密钥"
    
    # Windows PowerShell
    $env:AMAP_TOKEN="你的高德API密钥"
    

3. 开发环境验证

运行以下命令检查关键依赖版本:

# 验证Qwen-Agent安装
python -c "import qwen_agent; print('Qwen-Agent版本:', qwen_agent.__version__)"

# 验证RAG依赖
python -c "import pdfplumber; print('PDF解析模块就绪')"

核心功能实现:从0到1构建天气机器人

1. 项目结构设计

遵循Qwen-Agent的最佳实践,我们的天气机器人项目采用模块化结构:

weather-bot/
├── main.py          # 主程序入口
├── resource/        # 资源文件目录
│   └── poem.pdf     # 天气相关诗词文档
└── config.py        # 配置参数(可选)

2. 初始化Agent服务

Agent是Qwen-Agent的核心组件,负责协调LLM、工具和用户交互。以下代码完成天气机器人的基础配置:

from qwen_agent.agents import Assistant

def init_agent_service():
    # 1. 配置LLM参数(使用通义千问大模型)
    llm_cfg = {
        'model': 'qwen-max',  # 模型名称
        'model_type': 'qwen_dashscope',  # 使用阿里云DashScope服务
        'generate_cfg': {
            'top_p': 0.8,  # 采样参数,控制输出多样性
            'temperature': 0.7
        }
    }

    # 2. 定义系统提示(指导Agent行为)
    system_prompt = (
        '你扮演一个天气预报助手,具有以下能力:\n'
        '- 使用`amap_weather`工具查询指定地区实时天气\n'
        '- 使用`image_gen`工具根据天气生成城市景观图\n'
        '- 从用户提供的诗词文档中选择最匹配天气的诗句\n'
        '注意:必须严格使用文档中的诗词,不得编造'
    )

    # 3. 注册所需工具
    tools = ['amap_weather', 'image_gen']  # 内置天气查询和图像生成工具

    # 4. 创建Assistant实例
    bot = Assistant(
        llm=llm_cfg,
        name='智能天气助手',
        description='集成天气查询、图像生成和诗词推荐的多模态助手',
        system_message=system_prompt,
        function_list=tools
    )

    return bot
关键参数解析:
参数说明可选值示例
modelLLM模型名称qwen-max, qwen-plus, qwen-turbo
model_type模型服务类型qwen_dashscope, openai
function_list允许调用的工具列表amap_weather, image_gen, code_interpreter
system_message定义Agent行为准则和能力范围自然语言指令

3. 实现天气查询功能

天气查询功能通过amap_weather工具实现,该工具封装了高德地图天气API。核心代码位于qwen_agent/tools/amap_weather.py,关键逻辑包括:

# 工具核心实现(简化版)
class AmapWeather(BaseTool):
    description = '获取对应城市的天气数据'
    parameters = {
        'type': 'object',
        'properties': {
            'location': {
                'description': '城市/区具体名称,如"海淀区"',
                'type': 'string'
            }
        },
        'required': ['location']
    }

    def call(self, params):
        # 1. 解析参数
        location = params['location']
        
        # 2. 转换为行政区划代码(ADCode)
        adcode = self.get_city_adcode(location)
        
        # 3. 调用高德API
        response = requests.get(
            f'https://restapi.amap.com/v3/weather/weatherInfo?city={adcode}&key={self.token}'
        )
        
        # 4. 解析并返回结果
        return f'{location}的天气是{data["lives"][0]["weather"]},温度{data["lives"][0]["temperature"]}度。'
使用示例:
# 测试天气查询功能
bot = init_agent_service()
messages = [{'role': 'user', 'content': '查询北京市海淀区天气'}]
for response in bot.run(messages):
    print(response)  # 输出:海淀区的天气是晴,温度25度。

4. 集成多模态能力(图像生成+诗词匹配)

4.1 图像生成工具

image_gen工具通过文本描述生成图像,核心代码位于qwen_agent/tools/image_gen.py

class ImageGen(BaseTool):
    description = '根据文本描述生成图像URL'
    parameters = {
        'type': 'object',
        'properties': {
            'prompt': {
                'description': '图像内容详细描述(英文)',
                'type': 'string'
            }
        },
        'required': ['prompt']
    }

    def call(self, params):
        prompt = urllib.parse.quote(params['prompt'])
        return json.dumps({
            'image_url': f'https://image.pollinations.ai/prompt/{prompt}'
        })

⚠️ 注意:pollinations.ai为国外服务,国内用户可替换为阿里云图像生成API:

# 国内替代方案(需申请阿里云API密钥)
return json.dumps({
    'image_url': f'https://dashscope.aliyuncs.com/api/v1/services/aigc/image-generation/generation'
})
4.2 文档交互(诗词匹配)

通过向Agent传入PDF文档,实现天气与诗词的智能匹配:

def test_weather_with_poem():
    bot = init_agent_service()
    # 构造包含文件的用户消息
    messages = [
        {
            'role': 'user',
            'content': [
                {'text': '查询杭州天气并配图配诗'},
                {'file': 'resource/poem.pdf'}  # 诗词文档路径
            ]
        }
    ]
    # 执行Agent
    for response in bot.run(messages):
        print(response)

文档要求:poem.pdf需包含格式规范的诗词,建议每首诗标注适用天气(如[晴][雨]),便于Agent精准匹配。

5. 构建用户交互界面

Qwen-Agent提供Gradio GUI组件,快速搭建Web交互界面:

from qwen_agent.gui import WebUI

def launch_gui():
    bot = init_agent_service()
    # 配置WebUI
    chat_config = {
        'prompt.suggestions': [  # 预设用户问题
            '查询北京天气',
            '生成上海雨天的图片',
            '广州晴天配诗'
        ],
        'title': '智能天气助手',
        'description': '一站式天气查询、图像生成与诗词推荐服务'
    }
    # 启动Web界面
    WebUI(bot, chatbot_config=chat_config).run(
        server_name='0.0.0.0',  # 允许局域网访问
        server_port=7860         # 端口号
    )

if __name__ == '__main__':
    launch_gui()

运行后访问http://localhost:7860即可看到交互界面,包含:

  • 聊天输入框(支持文本和文件上传)
  • 预设问题快捷按钮
  • 多模态输出区域(文本+图像)

核心技术解析:Qwen-Agent工作原理解密

1. Agent工作流程图

mermaid

2. 工具调用机制详解

Qwen-Agent的工具调用基于JSON Schema规范,核心流程包括:

  1. 工具注册:通过@register_tool装饰器声明工具元数据

    @register_tool('amap_weather')
    class AmapWeather(BaseTool):
        description = '获取对应城市的天气数据'
        parameters = {
            'type': 'object',
            'properties': {
                'location': {'type': 'string', 'description': '城市名称'}
            },
            'required': ['location']
        }
    
  2. 参数验证:Agent自动校验工具调用参数完整性和格式

  3. 函数执行:通过call()方法执行具体逻辑并返回结果

  4. 结果解析:LLM将工具返回结果转换为自然语言回答

3. 多模态输出整合

Agent通过消息格式标准化实现多模态内容整合:

{
    "role": "assistant",
    "content": [
        {
            "text": "北京市当前天气晴朗,气温25°C...",
            "image": "https://image.pollinations.ai/prompt/Beijing+sunny+day"
        },
        {
            "text": "推荐诗句:「日出江花红胜火,春来江水绿如蓝」"
        }
    ]
}

功能扩展:打造个性化天气服务

1. 添加语音交互

集成Qwen-Audio模型实现语音输入输出:

# 安装音频依赖
# pip install qwen-agent[audio]

from qwen_agent.tools import audio_recognize, text_to_speech

def add_audio_support(bot):
    # 注册音频工具
    bot.add_tools(['audio_recognize', 'text_to_speech'])
    # 更新系统提示
    bot.system_message += '\n- 支持语音输入输出,用户发送语音时自动转换为文本'
    return bot

2. 实现天气预警功能

通过扩展amap_weather工具获取预警信息:

# 修改amap_weather.py的call方法
def call(self, params):
    # ...原有代码...
    # 新增预警信息提取
    warnings = data.get('warnings', [])
    if warnings:
        warning_info = '\n'.join([f"{w['type']}: {w['level']} - {w['content']}" for w in warnings])
        return f"{weather_info}\n天气预警:{warning_info}"

3. 多城市天气对比

扩展Agent能力实现批量查询:

system_prompt += '\n- 支持多城市查询,格式:"查询北京,上海,广州天气"'

# 在工具调用前解析多城市参数
def parse_multiple_cities(params):
    locations = params['location'].split(',')
    results = []
    for loc in locations:
        results.append(amap_weather.call({'location': loc.strip()}))
    return '\n'.join(results)

部署与测试:从开发到生产

1. 命令行测试

# 基础功能测试
python main.py --test "查询深圳天气"

# 带文档测试
python main.py --test "查询成都天气配诗" --file resource/poem.pdf

2. 生产环境部署

Docker容器化
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENV AMAP_TOKEN=your_token_here
EXPOSE 7860
CMD ["python", "main.py"]

构建并运行容器:

docker build -t weather-bot .
docker run -p 7860:7860 --env AMAP_TOKEN=xxx weather-bot
服务器部署注意事项
环境配置要求优化建议
CPU4核以上启用多线程处理请求
内存8GB以上设置适当的LLM缓存大小
网络稳定外网连接配置API请求超时重试机制
安全限制文件上传大小和类型仅允许PDF格式,大小<10MB

3. 性能优化

  1. 工具调用缓存:对重复查询结果进行缓存

    from functools import lru_cache
    
    @lru_cache(maxsize=100)  # 缓存100条结果
    def get_weather(location):
        return amap_weather.call({'location': location})
    
  2. 异步工具调用:并行执行天气查询和图像生成

    # 使用Qwen-Agent的并行执行工具
    from qwen_agent.utils.parallel_executor import parallel_call
    
    results = parallel_call([
        {'tool': 'amap_weather', 'params': {'location': '北京'}},
        {'tool': 'image_gen', 'params': {'prompt': 'Beijing sunny day'}}
    ])
    

总结与展望

通过本教程,你已掌握使用Qwen-Agent构建多模态智能天气机器人的完整流程,包括:

  1. 环境搭建:安装依赖、配置API密钥
  2. 核心开发:LLM配置、工具集成、系统提示设计
  3. 功能扩展:文档交互、多模态输出、界面开发
  4. 部署优化:容器化、性能调优、安全加固

进阶方向:

  • 个性化推荐:基于用户历史查询提供定制化天气服务
  • 行业适配:针对农业、旅游等行业开发专用天气助手
  • 多端部署:开发微信小程序、移动端App等客户端

学习资源:

🌟 行动清单

  1. 克隆项目仓库:git clone https://gitcode.com/GitHub_Trending/qw/Qwen-Agent
  2. 完成examples/assistant_weather_bot.py的扩展练习
  3. 尝试集成一个新工具(如空气质量查询)
  4. 在评论区分享你的扩展成果!

Qwen-Agent作为新一代LLM应用开发框架,正在不断进化。期待你基于本文构建的天气机器人基础上,创造出更多创新应用!

【免费下载链接】Qwen-Agent Agent framework and applications built upon Qwen, featuring Code Interpreter and Chrome browser extension. 【免费下载链接】Qwen-Agent 项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen-Agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值