✨ feat(agent): 新增代码执行工具并切换模型配置
- 新增 code-executor-tool 工具,支持 JavaScript 代码同步执行 - 添加代码执行工具的系统提示词说明 - 切换模型提供商为小咪模型 (mimimo) - 更新工具索引导出新工具
This commit is contained in:
parent
2431649079
commit
1334ad6baa
|
|
@ -4,6 +4,7 @@ import {
|
|||
cabinetTool,
|
||||
shopTool,
|
||||
dynamicInfoTool,
|
||||
codeExecutorTool,
|
||||
} from "../tools";
|
||||
import { createDeepSeek } from '@ai-sdk/deepseek';
|
||||
import { createOpenAI } from '@ai-sdk/openai';
|
||||
|
|
@ -14,15 +15,19 @@ import { LibSQLStore } from "@mastra/libsql";
|
|||
// const deepseek = createDeepSeek({
|
||||
// apiKey: 'sk-8603b08e1125422ca6238c8b4a1a40d8',
|
||||
// });
|
||||
const deepseek = createDeepSeek({
|
||||
const mimimo = createDeepSeek({
|
||||
baseURL: 'https://api.xiaomimimo.com/v1',
|
||||
apiKey: 'sk-cr54p8d2k20nppdzzwyfir4b4znxoh1py6ccxpkc8qt1ahij'
|
||||
});
|
||||
/* 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'
|
||||
}); */
|
||||
|
||||
const openai = createOpenAI({
|
||||
baseURL: 'https://api.xiaomimimo.com/v1',
|
||||
apiKey: 'sk-cr54p8d2k20nppdzzwyfir4b4znxoh1py6ccxpkc8qt1ahij'
|
||||
});
|
||||
// const openai = createOpenAI({
|
||||
// baseURL: 'https://api.xiaomimimo.com/v1',
|
||||
// apiKey: 'sk-cr54p8d2k20nppdzzwyfir4b4znxoh1py6ccxpkc8qt1ahij'
|
||||
// });
|
||||
|
||||
// 创建一个基本内存实例
|
||||
const memory = new Memory({
|
||||
|
|
@ -45,6 +50,13 @@ export const multiFunctionAgent = new Agent({
|
|||
2. **柜机查询**:使用柜机工具查询智能柜信息,支持查询柜机详情。
|
||||
3. **门店查询**:使用门店工具查询门店相关信息,支持查询门店列表、模式列表。
|
||||
4. **借还动态查询**:使用借还动态工具查询商品借还记录,支持按商品ID、格口ID、状态、动态类型筛选,可查询借出和归还记录。
|
||||
5. **代码执行**:使用代码执行工具运行 JavaScript 代码(同步执行)。对大段信息或数据进行处理时请不要直接输出,而应通过代码执行工具进行处理。
|
||||
- 输入参数:
|
||||
- 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]
|
||||
|
||||
各个概念层级关系如下:
|
||||
- 模式(mode):表示门店和智能柜的运行模式,(0-支付模式 1-审批模式 2-借还模式 3-会员模式 4-耗材模式 5-暂存模式)。
|
||||
|
|
@ -54,6 +66,9 @@ export const multiFunctionAgent = new Agent({
|
|||
- 格口(cell):表示智能柜中的一个具体位置,每个格口都有唯一的ID和名称,属于某个智能柜,格口中可以存放商品,也可以用于租赁或暂存个人物品。
|
||||
- 商品(goods):表示具体的商品实体,每个商品都有唯一的ID和名称、价格、库存数量等信息。
|
||||
|
||||
业务概念:
|
||||
- 格口是否已被占用:格口(cell)的usageStatus(1-空闲 2-占用)。
|
||||
|
||||
请始终礼貌、乐于助人。如果用户询问超出你能力范围的事情,请礼貌解释你能做什么。
|
||||
你可以记住之前的对话和用户偏好。
|
||||
当用户分享关于他们自己的信息时,请确认并记住它以供将来参考。
|
||||
|
|
@ -65,12 +80,14 @@ export const multiFunctionAgent = new Agent({
|
|||
// model: deepseek('deepseek-chat'),
|
||||
// model: deepseek('deepseek-reasoner'),
|
||||
// model: openai.chat('mimo-v2-flash'),
|
||||
model: deepseek.chat('mimo-v2-flash'),
|
||||
model: mimimo.chat('mimo-v2-flash'),
|
||||
// model: minimax.chat('MiniMax-M2.1'),
|
||||
memory: memory,
|
||||
tools: {
|
||||
goodsTool,
|
||||
cabinetTool,
|
||||
shopTool,
|
||||
dynamicInfoTool,
|
||||
codeExecutorTool,
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import { createTool } from "@mastra/core/tools";
|
||||
import { z } from "zod";
|
||||
|
||||
export const codeExecutorTool = createTool({
|
||||
id: "code-executor",
|
||||
description:
|
||||
"执行 JavaScript 代码(同步),支持传入上下文数据。代码必须使用 return 语句返回结果。",
|
||||
inputSchema: z.object({
|
||||
code: z.string().describe("要执行的 JavaScript 代码,必须使用 return 语句返回结果"),
|
||||
context: z
|
||||
.record(z.string(), z.any())
|
||||
.optional()
|
||||
.describe("执行上下文数据,以键值对形式传入,可在代码中使用对应的变量名"),
|
||||
}),
|
||||
outputSchema: z.object({
|
||||
success: z.boolean().describe("是否执行成功"),
|
||||
result: z.any().optional().describe("代码执行结果(返回值)"),
|
||||
error: z.string().optional().describe("错误信息(执行失败时)"),
|
||||
executionTime: z.number().describe("执行耗时(毫秒)"),
|
||||
}),
|
||||
execute: async ({ context }) => {
|
||||
console.log("代码执行参数:", context);
|
||||
const startTime = Date.now();
|
||||
const { code, context: contextData } = context;
|
||||
|
||||
try {
|
||||
// 创建函数并执行
|
||||
const fn = new Function('context', code);
|
||||
const result = fn(contextData);
|
||||
|
||||
console.log("代码执行结果:", result);
|
||||
return {
|
||||
success: true,
|
||||
result,
|
||||
executionTime: Date.now() - startTime,
|
||||
};
|
||||
} catch (error: any) {
|
||||
console.error("代码执行错误:", error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.message || "执行失败",
|
||||
executionTime: Date.now() - startTime,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
@ -2,3 +2,4 @@ export { goodsTool } from "./goods-tool";
|
|||
export { cabinetTool } from "./cabinet-tool";
|
||||
export { shopTool } from "./shop-tool";
|
||||
export { dynamicInfoTool } from "./dynamic-info-tool";
|
||||
export { codeExecutorTool } from "./code-executor-tool";
|
||||
|
|
|
|||
Loading…
Reference in New Issue