基于 Mastra 框架和 Nosana 去中心化 GPU 网络构建的 AI 智能体示例项目。
本项目展示了如何使用 Mastra 框架构建一个功能完整的 AI 智能体,该智能体可以:
- 查询天气信息:通过调用天气工具获取全球任意城市的实时天气数据
- 执行数学计算:支持基本算术运算和高级数学函数计算
- 记忆对话上下文:通过持久化存储保存对话历史,支持多轮对话
| 技术 | 说明 |
|---|---|
| Mastra | TypeScript 智能体框架,用于构建生产就绪的 AI 智能体 |
| Nosana | 去中心化 GPU 市场,提供经济高效的 AI 推理服务 |
| GPT-OSS 20B | 部署在 Nosana 上的开源大语言模型 |
| TypeScript | 类型安全的 JavaScript 超集 |
| Zod | TypeScript 优先的模式验证库 |
src/mastra/
├── agents/
│ └── weather-agent.ts # 天气智能体定义
├── tools/
│ ├── weather-tool.ts # 天气查询工具
│ └── calculator-tool.ts # 计算器工具
├── workflows/
│ └── weather-workflow.ts # 天气工作流(获取天气 + 活动建议)
├── scorers/
│ └── weather-scorer.ts # 智能体评分器
└── index.ts # Mastra 入口文件
智能体是本项目的核心,它结合了:
- LLM 模型:使用 Nosana 上部署的 GPT-OSS 20B 模型
- 工具集成:天气查询工具和计算器工具
- 记忆系统:持久化对话历史
- 评分系统:监控智能体性能
- 通过 Open-Meteo API 获取实时天气数据
- 支持全球城市查询
- 返回温度、湿度、风速等详细信息
- 支持基本算术运算(加减乘除)
- 支持高级数学函数(sqrt、pow、sin、cos 等)
- 类型安全的输入输出验证
天气工作流包含两个步骤:
- 获取天气:根据城市名称获取天气预报
- 活动建议:基于天气条件生成活动建议
- 工具调用适当性评分器:评估智能体是否正确选择工具
- 完整性评分器:评估响应的完整程度
- 翻译评分器:评估非英文地名的翻译质量
- Node.js 20+
- npm 或 pnpm
- Nosana 账户(需要预充值积分)
- 克隆项目
git clone <repository-url>
cd nosana-mastra-ai-agent-cn- 安装依赖
npm install- 配置环境变量
复制 .env.example 为 .env 并填入你的 Nosana 端点:
cp .env.example .env编辑 .env 文件:
# Nosana Ollama 端点配置
OLLAMA_API_URL=https://YOUR_NOSANA_URL_ID.node.k8s.prd.nos.ci/api
MODEL_NAME_AT_ENDPOINT=gpt-oss:20b
⚠️ 重要:请确保在 Nosana URL 末尾添加/api
- 在 Nosana 上部署模型
- 登录 Nosana Dashboard
- 进入 Deploy 页面
- 选择 GPT-OSS 20B 模板
- 选择 GPU 配置(推荐 NVIDIA RTX 4090 或更高)
- 点击部署并复制 API 端点 URL
- 启动开发服务器
npm run dev- 访问 Playground
打开浏览器访问 http://localhost:4111/
"What's the weather in Tokyo?"
"北京今天天气怎么样?"
"Tell me the weather conditions in London"
"Calculate 25 * 4 + 10"
"What is sqrt(144)?"
"Compute 2^10"
- 在 Playground 中选择
weather-workflow - 输入城市名称(如 "Singapore")
- 观察工作流获取天气并生成活动建议
# 构建镜像
docker build -t mastra-agent .
# 运行容器
docker run -p 4111:4111 --env-file .env mastra-agent| 命令 | 说明 |
|---|---|
npm run dev |
启动开发服务器(包含 Playground) |
npm run build |
构建生产版本 |
npm run start |
启动生产服务器 |
ISC