2025-12-11 15:18:09 +08:00
|
|
|
|
import { Agent } from "@mastra/core/agent";
|
|
|
|
|
|
import {
|
2025-12-12 10:48:12 +08:00
|
|
|
|
goodsTool,
|
2026-01-07 16:02:30 +08:00
|
|
|
|
cabinetTool,
|
|
|
|
|
|
shopTool,
|
|
|
|
|
|
dynamicInfoTool,
|
2026-01-08 15:22:50 +08:00
|
|
|
|
codeExecutorTool,
|
2026-01-08 17:03:31 +08:00
|
|
|
|
searchEntityTool,
|
2025-12-11 15:18:09 +08:00
|
|
|
|
} from "../tools";
|
|
|
|
|
|
import { createDeepSeek } from '@ai-sdk/deepseek';
|
2025-12-21 23:16:00 +08:00
|
|
|
|
import { createOpenAI } from '@ai-sdk/openai';
|
2025-12-16 11:10:08 +08:00
|
|
|
|
import { Memory } from "@mastra/memory";
|
|
|
|
|
|
import { LibSQLStore } from "@mastra/libsql";
|
2025-12-11 15:18:09 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-12-21 23:16:00 +08:00
|
|
|
|
// const deepseek = createDeepSeek({
|
|
|
|
|
|
// apiKey: 'sk-8603b08e1125422ca6238c8b4a1a40d8',
|
|
|
|
|
|
// });
|
2026-01-08 15:22:50 +08:00
|
|
|
|
const mimimo = createDeepSeek({
|
2025-12-21 23:16:00 +08:00
|
|
|
|
baseURL: 'https://api.xiaomimimo.com/v1',
|
|
|
|
|
|
apiKey: 'sk-cr54p8d2k20nppdzzwyfir4b4znxoh1py6ccxpkc8qt1ahij'
|
|
|
|
|
|
});
|
2026-01-08 15:22:50 +08:00
|
|
|
|
/* const minimax = createDeepSeek({
|
|
|
|
|
|
baseURL: 'https://api.minimaxi.com/v1',
|
|
|
|
|
|
apiKey: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiLmtbfonrrnlKjmiLdfMzk5OTkzOTAwNzMxMjk3ODAwIiwiVXNlck5hbWUiOiLmtbfonrrnlKjmiLdfMzk5OTkzOTAwNzMxMjk3ODAwIiwiQWNjb3VudCI6IiIsIlN1YmplY3RJRCI6IjE5NDM1NTIyOTIzNDcxOTE1MzgiLCJQaG9uZSI6IjE3NjkxMjMxOTI0IiwiR3JvdXBJRCI6IjE5NDM1NTIyOTIzNDI5OTcyMzQiLCJQYWdlTmFtZSI6IiIsIk1haWwiOiIiLCJDcmVhdGVUaW1lIjoiMjAyNS0xMC0yOCAwOTozNjozNiIsIlRva2VuVHlwZSI6MSwiaXNzIjoibWluaW1heCJ9.SBjpp3BoIhxPLgEjUxnTZvjFMlAQLeP_PNHc2sFvmNrjus3xb6oK8SAQAD2MfjgOaMmBRlNWONcdlSAwChcseRm_b4y6n4_-3alrwjstebETh4EblIXASFNNbLk0JC5Ha2ICIKdvkN4vLnLJwq-zNNvyPnCSqxeKVJQyOuwFkoFrtJThw0Wj_z7DMBo9edanzW_kPSwh15jBbzs289hOjFkv8ZFmpxh80-bNMEBqOJ3Af_zDPOR_Se-hr1z1TNL_aaociFyfyYXMrjRibmK49BifJeZdQ6q6EsSZg-z2rywXycsVOebW85a1sTslVEFrZjkYDb4CfbdudPg3k4Rcvw'
|
|
|
|
|
|
}); */
|
2025-12-21 23:16:00 +08:00
|
|
|
|
|
2026-01-08 15:22:50 +08:00
|
|
|
|
// const openai = createOpenAI({
|
|
|
|
|
|
// baseURL: 'https://api.xiaomimimo.com/v1',
|
|
|
|
|
|
// apiKey: 'sk-cr54p8d2k20nppdzzwyfir4b4znxoh1py6ccxpkc8qt1ahij'
|
|
|
|
|
|
// });
|
2025-12-11 15:18:09 +08:00
|
|
|
|
|
2025-12-16 11:10:08 +08:00
|
|
|
|
// 创建一个基本内存实例
|
|
|
|
|
|
const memory = new Memory({
|
|
|
|
|
|
storage: new LibSQLStore({
|
|
|
|
|
|
url: "file:./memory.db", // 相对于 `.mastra/output` 目录的相对路径
|
|
|
|
|
|
}),
|
|
|
|
|
|
options: {
|
|
|
|
|
|
lastMessages: 20,
|
|
|
|
|
|
},
|
|
|
|
|
|
});
|
2025-12-11 15:18:09 +08:00
|
|
|
|
|
|
|
|
|
|
export const multiFunctionAgent = new Agent({
|
|
|
|
|
|
name: "Multi-Function Agent",
|
2025-12-21 23:16:00 +08:00
|
|
|
|
instructions: {
|
|
|
|
|
|
role: 'system',
|
|
|
|
|
|
content: `
|
2025-12-16 11:10:08 +08:00
|
|
|
|
你是一个具有内存功能的多功能助手,具备以下能力:
|
2025-12-11 15:18:09 +08:00
|
|
|
|
|
2026-01-07 11:06:11 +08:00
|
|
|
|
1. **商品查询**:使用商品工具查询商品信息,支持分页查询商品列表或根据商品ID获取单个商品详情。
|
2026-01-08 17:03:31 +08:00
|
|
|
|
2. **柜机查询**:使用柜机工具根据柜机ID查询智能柜详细信息。
|
|
|
|
|
|
3. **门店查询**:使用门店工具查询门店相关信息,支持查询门店列表、模式列表以及根据门店ID获取门店详细信息(含下属柜机列表)。
|
2026-01-07 16:02:30 +08:00
|
|
|
|
4. **借还动态查询**:使用借还动态工具查询商品借还记录,支持按商品ID、格口ID、状态、动态类型筛选,可查询借出和归还记录。
|
2026-01-08 17:03:31 +08:00
|
|
|
|
5. **实体搜索**:使用实体搜索工具根据名称模糊查询店铺、柜机、商品等实体。
|
|
|
|
|
|
- 输入参数:
|
|
|
|
|
|
- name: 实体名称关键词
|
|
|
|
|
|
- entityType: 实体类型(shop=店铺/门店,cabinet=智能柜,goods=商品)
|
|
|
|
|
|
- 返回匹配的实体ID和名称列表
|
|
|
|
|
|
6. **代码执行**:使用代码执行工具运行 JavaScript 代码(同步执行)。对大段信息或数据进行处理时请不要直接输出,而应通过代码执行工具进行处理。
|
2026-01-08 15:22:50 +08:00
|
|
|
|
- 输入参数:
|
|
|
|
|
|
- code: 要执行的 JavaScript 代码(必须以 return 语句返回结果)
|
|
|
|
|
|
- context: 可选,上下文数据对象
|
|
|
|
|
|
- 示例:
|
|
|
|
|
|
- code: "return a + b", context: {a: 10, b: 20} → 返回 30
|
|
|
|
|
|
- code: "return data.filter(x => x > 5)", context: {data: [1,3,7,9]} → 返回 [7, 9]
|
2026-01-07 16:02:30 +08:00
|
|
|
|
|
|
|
|
|
|
各个概念层级关系如下:
|
|
|
|
|
|
- 模式(mode):表示门店和智能柜的运行模式,(0-支付模式 1-审批模式 2-借还模式 3-会员模式 4-耗材模式 5-暂存模式)。
|
|
|
|
|
|
- 归属类型(belongType 0-借还柜 1-固资通),表示智能柜的归属类型,固资通只能运行耗材模式,借还柜可以运行其他模式。
|
|
|
|
|
|
- 门店(shop):表示具体的门店实体,每个门店都有唯一的ID和名称、一个或多个智能柜、一种运行模式。
|
|
|
|
|
|
- 智能柜(cabinet):表示具体的智能柜实体,每个智能柜都有唯一的ID和名称,属于某个门店。
|
|
|
|
|
|
- 格口(cell):表示智能柜中的一个具体位置,每个格口都有唯一的ID和名称,属于某个智能柜,格口中可以存放商品,也可以用于租赁或暂存个人物品。
|
|
|
|
|
|
- 商品(goods):表示具体的商品实体,每个商品都有唯一的ID和名称、价格、库存数量等信息。
|
2025-12-11 15:18:09 +08:00
|
|
|
|
|
2026-01-08 15:22:50 +08:00
|
|
|
|
业务概念:
|
|
|
|
|
|
- 格口是否已被占用:格口(cell)的usageStatus(1-空闲 2-占用)。
|
|
|
|
|
|
|
2025-12-11 17:43:08 +08:00
|
|
|
|
请始终礼貌、乐于助人。如果用户询问超出你能力范围的事情,请礼貌解释你能做什么。
|
2025-12-16 11:10:08 +08:00
|
|
|
|
你可以记住之前的对话和用户偏好。
|
|
|
|
|
|
当用户分享关于他们自己的信息时,请确认并记住它以供将来参考。
|
|
|
|
|
|
如果被问及对话中 earlier 提到的事情,请准确地回忆它。
|
2025-12-11 17:43:08 +08:00
|
|
|
|
根据用户请求使用适当的工具。如果不确定,请询问澄清。
|
|
|
|
|
|
|
|
|
|
|
|
请使用中文回答用户的问题。
|
2025-12-21 23:16:00 +08:00
|
|
|
|
`},
|
|
|
|
|
|
// model: deepseek('deepseek-chat'),
|
2026-01-07 18:01:51 +08:00
|
|
|
|
// model: deepseek('deepseek-reasoner'),
|
2025-12-21 23:16:00 +08:00
|
|
|
|
// model: openai.chat('mimo-v2-flash'),
|
2026-01-08 15:22:50 +08:00
|
|
|
|
model: mimimo.chat('mimo-v2-flash'),
|
|
|
|
|
|
// model: minimax.chat('MiniMax-M2.1'),
|
2025-12-16 11:10:08 +08:00
|
|
|
|
memory: memory,
|
2025-12-11 15:18:09 +08:00
|
|
|
|
tools: {
|
2025-12-12 10:48:12 +08:00
|
|
|
|
goodsTool,
|
2026-01-07 16:02:30 +08:00
|
|
|
|
cabinetTool,
|
|
|
|
|
|
shopTool,
|
|
|
|
|
|
dynamicInfoTool,
|
2026-01-08 15:22:50 +08:00
|
|
|
|
codeExecutorTool,
|
2026-01-08 17:03:31 +08:00
|
|
|
|
searchEntityTool,
|
2025-12-11 15:18:09 +08:00
|
|
|
|
},
|
|
|
|
|
|
});
|