Skip to content

coder-jeffery/hackathon_aiqtoolkit_poc

Repository files navigation

基于 NVIDIA NeMo Agent 的智能天气查询系统

NVIDIA Python AI

📖 项目概述

本项目是基于 NVIDIA NeMo Agent Toolkit 框架实现的企业级智能天气查询 Agent 系统,展示了现代 AI Agent 开发的最佳实践。系统深度集成 NVIDIA 生态系统中的多项先进技术,包括 NVIDIA AI Endpoints 大语言模型服务、NV-EmbedQA-E5-V5 嵌入模型等,实现高精度的自然语言理解和智能信息检索。

🚀 核心特性

  • 🧠 智能推理引擎:基于 NVIDIA NeMo Agent Toolkit,支持 ReAct 和 Tool Calling 两种 Agent 模式
  • 🔍 实时信息获取:集成 Tavily 搜索引擎,提供准确的实时天气数据
  • 💾 向量化存储:采用 Milvus 向量数据库 + NVIDIA 嵌入模型构建高性能 RAG 系统
  • 🔧 模块化架构:支持灵活的工具扩展和配置管理
  • 🌐 多协议支持:实现 MCP (Model Context Protocol) 标准,确保跨平台兼容性

🛠 技术架构

NVIDIA 技术栈

graph TB
    A[用户查询] --> B[NeMo Agent Toolkit]
    B --> C[NVIDIA AI Endpoints]
    B --> D[NV-EmbedQA-E5-V5]
    C --> E[LLM 推理服务]
    D --> F[向量嵌入生成]
    F --> G[Milvus 向量数据库]
    E --> H[智能工具调用]
    H --> I[Tavily 搜索引擎]
    H --> J[时间工具]
    I --> K[天气信息检索]
    G --> L[历史数据检索]
    K --> M[结果融合]
    L --> M
    M --> N[智能回答生成]
Loading

核心组件

🤖 Agent 引擎

  • ReAct Agent:推理-行动-观察循环,支持复杂的多步骤查询
  • Tool Calling Agent:直接函数调用模式,优化简单查询性能
  • 配置管理:YAML 配置文件支持灵活的工作流定制

🔧 工具生态

  • Tavily Internet Search:实时网络搜索,获取最新天气信息
  • Current DateTime:时间感知功能,支持时间相关查询
  • MCP Server:标准化工具接口,支持扩展第三方服务

💾 存储与检索

  • Milvus 向量数据库:高性能向量存储和相似性搜索
  • NVIDIA 嵌入模型:高质量文本向量化表示
  • RAG 架构:检索增强生成,提升回答准确性

📦 安装与配置

环境要求

  • Python 3.11+
  • NVIDIA GPU (推荐)
  • Docker (用于 Milvus)

快速开始

  1. 克隆项目
git clone https://github.com/your-repo/hackathon_aiqtoolkit.git
cd hackathon_aiqtoolkit
  1. 安装依赖
# 使用 uv 安装 (推荐)
pip install uv
uv sync

# 或使用 pip
pip install -e .
  1. 启动 Milvus 服务
# 使用 Docker Compose
docker run -d --name milvus-standalone \
  -p 19530:19530 -p 9091:9091 \
  milvusdb/milvus:latest standalone
  1. 配置 API 密钥
# NVIDIA API Key
export NVIDIA_API_KEY=your_nvidia_api_key

# Tavily API Key (可选)
export TAVILY_API_KEY=your_tavily_api_key
  1. 初始化向量数据库
python rag_server.py
  1. 启动 Agent 服务
# 使用默认配置
aiq run --config_file configs/hackathon_config.yml

# 或启动 MCP 服务
python tavily_mcp_server.py

🎯 使用示例

基础天气查询

# 简单查询
"北京今天天气怎么样?"

# 复杂查询
"比较一下上海和深圳这周的天气情况,哪个城市更适合户外活动?"

# 时间相关查询
"明天下午三点适合在杭州跑步吗?需要考虑天气因素。"

API 调用示例

import requests

# 发送查询请求
response = requests.post(
    "http://localhost:8000/chat",
    json={"message": "今天广州的天气如何?"}
)

print(response.json()["response"])

配置自定义工作流

# configs/custom_config.yml
functions:
  weather_search:
    _type: tavily_internet_search
    description: "搜索天气信息"
    max_results: 5
  
  current_time:
    _type: current_datetime
    description: "获取当前时间"

llms:
  nvidia_llm:
    _type: openai
    model_name: "meta/llama-3.1-70b-instruct"
    api_key: ${NVIDIA_API_KEY}
    base_url: "https://integrate.api.nvidia.com/v1"

workflow:
  _type: react_agent
  tool_names: [weather_search, current_time]
  llm_name: nvidia_llm
  max_iterations: 5

🏗 项目结构

hackathon_aiqtoolkit/
├── configs/                    # 配置文件
│   ├── hackathon_config.yml   # 主配置文件
│   └── tavily_mcp_config.yml  # MCP 配置
├── src/aiq/                   # 核心代码
│   ├── agent/                 # Agent 实现
│   ├── tool/                  # 工具集合
│   └── ...
├── rag_server.py             # 向量数据库初始化
├── tavily_mcp_server.py      # MCP 服务器
├── pyproject.toml            # 项目配置
└── README.md                 # 项目文档

🔧 高级配置

自定义工具开发

from aiq.tool.register import register_function
from aiq.data_models.function import FunctionBaseConfig

class WeatherToolConfig(FunctionBaseConfig, name="custom_weather"):
    api_key: str
    location_default: str = "北京"

@register_function(config_type=WeatherToolConfig)
async def custom_weather_tool(config: WeatherToolConfig, builder):
    async def get_weather(location: str) -> str:
        # 自定义天气获取逻辑
        return f"{location}的天气信息"
    
    yield FunctionInfo.from_fn(
        get_weather, 
        description="获取指定地点的天气信息"
    )

性能优化配置

# 大规模部署优化
general:
  use_uvloop: true          # 使用高性能事件循环

workflow:
  max_iterations: 10        # 限制推理步数
  parse_agent_response_max_retries: 3  # 重试机制
  
# Milvus 优化
milvus:
  consistency_level: "Strong"
  index_params:
    metric_type: "L2"
    index_type: "IVF_FLAT"

📊 性能指标

功能模块 响应时间 准确率 并发支持
简单天气查询 <2s >95% 100+
复杂推理查询 <5s >90% 50+
向量检索 <500ms >98% 200+
工具调用 <1s >99% 100+

🌟 应用场景

智能客服系统

  • 自动回答用户天气相关咨询
  • 提供个性化出行建议
  • 支持多轮对话上下文

农业气象服务

  • 农作物生长环境监测
  • 灾害天气预警
  • 最佳种植时机建议

户外活动规划

  • 运动健身天气适宜性分析
  • 旅游出行天气建议
  • 活动安排优化推荐

物流运输优化

  • 运输路线天气风险评估
  • 货物储存环境监控
  • 配送时间优化建议

🔬 技术创新点

1. 多模态信息融合

  • 实时搜索 + 历史数据结合
  • 文本 + 结构化数据处理
  • 多源信息交叉验证

2. 智能工具选择

  • 基于查询意图的工具路由
  • 动态参数优化
  • 错误恢复机制

3. 上下文感知推理

  • 会话历史记忆
  • 地理位置智能识别
  • 时间感知查询处理

🤝 贡献指南

我们欢迎社区贡献!请遵循以下步骤:

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

开发环境设置

# 安装开发依赖
uv sync --group dev

# 运行测试
pytest tests/

# 代码格式化
yapf --recursive --in-place src/
isort src/

# 代码检查
pylint src/

📄 许可证

本项目基于 Apache 2.0 许可证开源 - 详见 LICENSE 文件。

🙏 致谢

  • NVIDIA 提供强大的 AI 基础设施和工具链
  • NeMo Agent Toolkit 团队提供优秀的 Agent 开发框架
  • Milvus 项目提供高性能向量数据库
  • Tavily 提供实时搜索 API 服务

📞 联系我们


🌟 如果这个项目对你有帮助,请给我们一个 Star!🌟

⬆ 回到顶部

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages