feat(agent): 新增代码执行工具并切换模型配置

- 新增 code-executor-tool 工具,支持 JavaScript 代码同步执行
- 添加代码执行工具的系统提示词说明
- 切换模型提供商为小咪模型 (mimimo)
- 更新工具索引导出新工具
This commit is contained in:
dzq 2026-01-08 15:22:50 +08:00
parent 2431649079
commit 1334ad6baa
3 changed files with 70 additions and 6 deletions

View File

@ -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. ****使IDID
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]
- mode0- 1- 2- 3- 4- 5-
@ -54,6 +66,9 @@ export const multiFunctionAgent = new Agent({
- cellID和名称
- goodsID和名称
- cellusageStatus1- 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,
},
});

View File

@ -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,
};
}
},
});

View File

@ -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";