[{"data":1,"prerenderedAt":2465},["ShallowReactive",2],{"navigation_docs":3,"-advanced-evals":139,"-advanced-evals-surround":2460},[4,40,65,110],{"title":5,"path":6,"stem":7,"children":8,"page":39},"入门指南","\u002Fgetting-started","1.getting-started",[9,14,19,24,29,34],{"title":10,"path":11,"stem":12,"icon":13},"简介","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":15,"path":16,"stem":17,"icon":18},"安装","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"配置","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration","i-lucide-settings",{"title":25,"path":26,"stem":27,"icon":28},"MCP Inspector","\u002Fgetting-started\u002Finspector","1.getting-started\u002F4.inspector","i-lucide-circuit-board",{"title":30,"path":31,"stem":32,"icon":33},"连接","\u002Fgetting-started\u002Fconnection","1.getting-started\u002F5.connection","i-lucide-plug",{"title":35,"path":36,"stem":37,"icon":38},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F6.agent-skills","i-lucide-sparkles",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"核心概念","\u002Fcore-concepts","2.core-concepts",[45,50,55,60],{"title":46,"path":47,"stem":48,"icon":49},"工具","\u002Fcore-concepts\u002Ftools","2.core-concepts\u002F2.tools","i-lucide-wrench",{"title":51,"path":52,"stem":53,"icon":54},"资源","\u002Fcore-concepts\u002Fresources","2.core-concepts\u002F3.resources","i-lucide-package",{"title":56,"path":57,"stem":58,"icon":59},"提示词 (Prompts)","\u002Fcore-concepts\u002Fprompts","2.core-concepts\u002F4.prompts","i-lucide-message-square",{"title":61,"path":62,"stem":63,"icon":64},"处理器 (Handlers)","\u002Fcore-concepts\u002Fhandlers","2.core-concepts\u002F5.handlers","i-lucide-server",{"title":66,"path":67,"stem":68,"children":69,"page":39},"进阶主题","\u002Fadvanced","3.advanced",[70,75,80,85,90,95,100,105],{"title":71,"path":72,"stem":73,"icon":74},"自定义路径","\u002Fadvanced\u002Fcustom-paths","3.advanced\u002F1.custom-paths","i-lucide-folder",{"title":76,"path":77,"stem":78,"icon":79},"中间件","\u002Fadvanced\u002Fmiddleware","3.advanced\u002F2.middleware","i-lucide-shield",{"title":81,"path":82,"stem":83,"icon":84},"TypeScript","\u002Fadvanced\u002Ftypescript","3.advanced\u002F3.typescript","i-lucide-type",{"title":86,"path":87,"stem":88,"icon":89},"钩子","\u002Fadvanced\u002Fhooks","3.advanced\u002F4.hooks","i-lucide-webhook",{"title":91,"path":92,"stem":93,"icon":94},"MCP 评估","\u002Fadvanced\u002Fevals","3.advanced\u002F5.evals","i-lucide-flask-conical",{"title":96,"path":97,"stem":98,"icon":99},"会话 (Sessions)","\u002Fadvanced\u002Fsessions","3.advanced\u002F6.sessions","i-lucide-database",{"title":101,"path":102,"stem":103,"icon":104},"动态定义","\u002Fadvanced\u002Fdynamic-definitions","3.advanced\u002F7.dynamic-definitions","i-lucide-toggle-right",{"title":106,"path":107,"stem":108,"icon":109},"代码模式 (Code Mode)","\u002Fadvanced\u002Fcode-mode","3.advanced\u002F8.code-mode","i-lucide-code",{"title":111,"path":112,"stem":113,"children":114,"page":39},"示例","\u002Fexamples","4.examples",[115,120,125,130,135],{"title":116,"path":117,"stem":118,"icon":119},"身份验证","\u002Fexamples\u002Fauthentication","4.examples\u002F1.authentication","i-lucide-shield-check",{"title":121,"path":122,"stem":123,"icon":124},"API 集成","\u002Fexamples\u002Fapi-integration","4.examples\u002F2.api-integration","i-lucide-globe",{"title":126,"path":127,"stem":128,"icon":129},"常见模式","\u002Fexamples\u002Fcommon-patterns","4.examples\u002F3.common-patterns","i-lucide-lightbulb",{"title":131,"path":132,"stem":133,"icon":134},"文件操作","\u002Fexamples\u002Ffile-operations","4.examples\u002F4.file-operations","i-lucide-file",{"title":136,"path":137,"stem":138,"icon":59},"提示词示例","\u002Fexamples\u002Fprompt-examples","4.examples\u002F5.prompt-examples",{"id":140,"title":91,"body":141,"description":2453,"extension":2454,"links":2455,"meta":2456,"navigation":2457,"path":92,"seo":2458,"stem":93,"__hash__":2459},"docs\u002F3.advanced\u002F5.evals.md",{"type":142,"value":143,"toc":2435},"minimark",[144,148,160,163,257,268,271,285,288,1138,1141,1144,1194,1197,1246,1249,1298,1305,1308,1314,1322,1331,1334,1337,1340,1725,1728,1735,2106,2109,2112,2395,2398,2431],[145,146,147],"h2",{"id":147},"概述",[149,150,151,152,159],"p",{},"评估（Evals）可帮助您验证 LLM 是否正确调用了您的 MCP 工具。本指南展示了如何使用 AI SDK MCP 客户端配合 ",[153,154,158],"a",{"href":155,"rel":156},"https:\u002F\u002Fwww.evalite.dev\u002F",[157],"nofollow","Evalite"," 运行工具调用评估。",[149,161,162],{},"该方法保持库无关性，Evalite 仅作为示例运行器。您可以将这些模式适配到其他评估框架中。",[164,165,166],"code-collapse",{},[167,168,174],"pre",{"className":169,"code":170,"filename":171,"language":172,"meta":173,"style":173},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","使用 Evalite 为我的 Nuxt 应用 (@nuxtjs\u002Fmcp-toolkit) 设置 MCP 评估。\n\n1. 安装依赖：pnpm add -D evalite vitest @ai-sdk\u002Fmcp ai\n2. 在 package.json 中添加评估脚本：\"eval\": \"evalite\" 和 \"eval:ui\": \"evalite watch\"\n3. 在 .env 中设置 AI 提供商 API 密钥和 MCP_URL=http:\u002F\u002Flocalhost:3000\u002Fmcp\n4. 创建 test\u002Fmcp.eval.ts 并编写 evalite() 测试用例\n5. 每个测试用例包含一个输入（自然语言提示词）和预期的工具调用（例如 [{ toolName: 'my-tool', input: { ... } }]）\n6. 使用 @ai-sdk\u002Fmcp 中的 experimental_createMCPClient 连接到 MCP 服务器\n7. 使用 ai 中的 generateText 配合 MCP 工具测试工具选择\n8. 使用 evalite\u002Fscorers 中的 toolCallAccuracy 进行评分\n9. 先启动开发服务器 (pnpm dev)，然后运行 pnpm eval 或 pnpm eval:ui 打开可视化界面\n\n文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fevals\n","提示词","txt","",[175,176,177,185,192,198,204,210,216,222,228,234,240,246,251],"code",{"__ignoreMap":173},[178,179,182],"span",{"class":180,"line":181},"line",1,[178,183,184],{},"使用 Evalite 为我的 Nuxt 应用 (@nuxtjs\u002Fmcp-toolkit) 设置 MCP 评估。\n",[178,186,188],{"class":180,"line":187},2,[178,189,191],{"emptyLinePlaceholder":190},true,"\n",[178,193,195],{"class":180,"line":194},3,[178,196,197],{},"1. 安装依赖：pnpm add -D evalite vitest @ai-sdk\u002Fmcp ai\n",[178,199,201],{"class":180,"line":200},4,[178,202,203],{},"2. 在 package.json 中添加评估脚本：\"eval\": \"evalite\" 和 \"eval:ui\": \"evalite watch\"\n",[178,205,207],{"class":180,"line":206},5,[178,208,209],{},"3. 在 .env 中设置 AI 提供商 API 密钥和 MCP_URL=http:\u002F\u002Flocalhost:3000\u002Fmcp\n",[178,211,213],{"class":180,"line":212},6,[178,214,215],{},"4. 创建 test\u002Fmcp.eval.ts 并编写 evalite() 测试用例\n",[178,217,219],{"class":180,"line":218},7,[178,220,221],{},"5. 每个测试用例包含一个输入（自然语言提示词）和预期的工具调用（例如 [{ toolName: 'my-tool', input: { ... } }]）\n",[178,223,225],{"class":180,"line":224},8,[178,226,227],{},"6. 使用 @ai-sdk\u002Fmcp 中的 experimental_createMCPClient 连接到 MCP 服务器\n",[178,229,231],{"class":180,"line":230},9,[178,232,233],{},"7. 使用 ai 中的 generateText 配合 MCP 工具测试工具选择\n",[178,235,237],{"class":180,"line":236},10,[178,238,239],{},"8. 使用 evalite\u002Fscorers 中的 toolCallAccuracy 进行评分\n",[178,241,243],{"class":180,"line":242},11,[178,244,245],{},"9. 先启动开发服务器 (pnpm dev)，然后运行 pnpm eval 或 pnpm eval:ui 打开可视化界面\n",[178,247,249],{"class":180,"line":248},12,[178,250,191],{"emptyLinePlaceholder":190},[178,252,254],{"class":180,"line":253},13,[178,255,256],{},"文档：https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Fevals\n",[258,259,261,262,267],"callout",{"color":260,"icon":129},"primary","如需查看实际示例，请参阅 ",[153,263,266],{"href":264,"rel":265},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt.com\u002Fblob\u002Fmain\u002Ftest\u002Fmcp.eval.ts",[157],"nuxt.com MCP 评估","。",[145,269,270],{"id":270},"前置条件",[272,273,274,282],"ul",{},[275,276,277,278,281],"li",{},"本地运行的 MCP 服务器（例如，启用模块后运行 ",[175,279,280],{},"pnpm dev","）",[275,283,284],{},"模型提供商 API 密钥（AI Gateway、OpenAI 等）",[145,286,287],{"id":287},"设置",[289,290,291,295,298,400,403,410,493,496,503,545,548,555],"steps",{},[292,293,294],"h3",{"id":294},"安装依赖",[149,296,297],{},"安装 Evalite、Vitest 和 AI SDK 相关包：",[299,300,301,333,356,378],"code-group",{},[167,302,307],{"className":303,"code":304,"filename":305,"language":306,"meta":173,"style":173},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add -D evalite vitest @ai-sdk\u002Fmcp ai\n","pnpm","bash",[175,308,309],{"__ignoreMap":173},[178,310,311,314,318,321,324,327,330],{"class":180,"line":181},[178,312,305],{"class":313},"sBMFI",[178,315,317],{"class":316},"sfazB"," add",[178,319,320],{"class":316}," -D",[178,322,323],{"class":316}," evalite",[178,325,326],{"class":316}," vitest",[178,328,329],{"class":316}," @ai-sdk\u002Fmcp",[178,331,332],{"class":316}," ai\n",[167,334,337],{"className":303,"code":335,"filename":336,"language":306,"meta":173,"style":173},"npm install -D evalite vitest @ai-sdk\u002Fmcp ai\n","npm",[175,338,339],{"__ignoreMap":173},[178,340,341,343,346,348,350,352,354],{"class":180,"line":181},[178,342,336],{"class":313},[178,344,345],{"class":316}," install",[178,347,320],{"class":316},[178,349,323],{"class":316},[178,351,326],{"class":316},[178,353,329],{"class":316},[178,355,332],{"class":316},[167,357,360],{"className":303,"code":358,"filename":359,"language":306,"meta":173,"style":173},"yarn add -D evalite vitest @ai-sdk\u002Fmcp ai\n","yarn",[175,361,362],{"__ignoreMap":173},[178,363,364,366,368,370,372,374,376],{"class":180,"line":181},[178,365,359],{"class":313},[178,367,317],{"class":316},[178,369,320],{"class":316},[178,371,323],{"class":316},[178,373,326],{"class":316},[178,375,329],{"class":316},[178,377,332],{"class":316},[167,379,382],{"className":303,"code":380,"filename":381,"language":306,"meta":173,"style":173},"bun add -D evalite vitest @ai-sdk\u002Fmcp ai\n","bun",[175,383,384],{"__ignoreMap":173},[178,385,386,388,390,392,394,396,398],{"class":180,"line":181},[178,387,381],{"class":313},[178,389,317],{"class":316},[178,391,320],{"class":316},[178,393,323],{"class":316},[178,395,326],{"class":316},[178,397,329],{"class":316},[178,399,332],{"class":316},[292,401,402],{"id":402},"添加评估脚本",[149,404,405,406,409],{},"将以下脚本添加到您的 ",[175,407,408],{},"package.json"," 中：",[167,411,415],{"className":412,"code":413,"filename":408,"language":414,"meta":173,"style":173},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scripts\": {\n    \"eval\": \"evalite\",\n    \"eval:ui\": \"evalite watch\"\n  }\n}\n","json",[175,416,417,423,441,464,483,488],{"__ignoreMap":173},[178,418,419],{"class":180,"line":181},[178,420,422],{"class":421},"sMK4o","{\n",[178,424,425,428,432,435,438],{"class":180,"line":187},[178,426,427],{"class":421},"  \"",[178,429,431],{"class":430},"spNyl","scripts",[178,433,434],{"class":421},"\"",[178,436,437],{"class":421},":",[178,439,440],{"class":421}," {\n",[178,442,443,446,449,451,453,456,459,461],{"class":180,"line":194},[178,444,445],{"class":421},"    \"",[178,447,448],{"class":313},"eval",[178,450,434],{"class":421},[178,452,437],{"class":421},[178,454,455],{"class":421}," \"",[178,457,458],{"class":316},"evalite",[178,460,434],{"class":421},[178,462,463],{"class":421},",\n",[178,465,466,468,471,473,475,477,480],{"class":180,"line":200},[178,467,445],{"class":421},[178,469,470],{"class":313},"eval:ui",[178,472,434],{"class":421},[178,474,437],{"class":421},[178,476,455],{"class":421},[178,478,479],{"class":316},"evalite watch",[178,481,482],{"class":421},"\"\n",[178,484,485],{"class":180,"line":206},[178,486,487],{"class":421},"  }\n",[178,489,490],{"class":180,"line":212},[178,491,492],{"class":421},"}\n",[292,494,495],{"id":495},"配置环境变量",[149,497,498,499,502],{},"创建一个 ",[175,500,501],{},".env"," 文件，填入您的 AI 提供商密钥和 MCP 端点：",[167,504,506],{"className":303,"code":505,"filename":501,"language":306,"meta":173,"style":173},"# AI 提供商（AI Gateway 示例）\nAI_GATEWAY_API_KEY=your_key\n\n# 开发服务器暴露的 MCP 端点\nMCP_URL=http:\u002F\u002Flocalhost:3000\u002Fmcp\n",[175,507,508,514,526,530,535],{"__ignoreMap":173},[178,509,510],{"class":180,"line":181},[178,511,513],{"class":512},"sHwdD","# AI 提供商（AI Gateway 示例）\n",[178,515,516,520,523],{"class":180,"line":187},[178,517,519],{"class":518},"sTEyZ","AI_GATEWAY_API_KEY",[178,521,522],{"class":421},"=",[178,524,525],{"class":316},"your_key\n",[178,527,528],{"class":180,"line":194},[178,529,191],{"emptyLinePlaceholder":190},[178,531,532],{"class":180,"line":200},[178,533,534],{"class":512},"# 开发服务器暴露的 MCP 端点\n",[178,536,537,540,542],{"class":180,"line":206},[178,538,539],{"class":518},"MCP_URL",[178,541,522],{"class":421},[178,543,544],{"class":316},"http:\u002F\u002Flocalhost:3000\u002Fmcp\n",[292,546,547],{"id":547},"编写您的第一个评估",[149,549,550,551,554],{},"在 ",[175,552,553],{},"test\u002F"," 目录中创建一个评估文件：",[167,556,561],{"className":557,"code":558,"filename":559,"language":560,"meta":173,"style":173},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { experimental_createMCPClient as createMCPClient } from '@ai-sdk\u002Fmcp'\nimport { generateText } from 'ai'\nimport { evalite } from 'evalite'\nimport { toolCallAccuracy } from 'evalite\u002Fscorers'\n\n\u002F\u002F AI Gateway 模型格式：provider\u002Fmodel-name\nconst model = 'openai\u002Fgpt-4o-mini'\nconst MCP_URL = process.env.MCP_URL ?? 'http:\u002F\u002Flocalhost:3000\u002Fmcp'\n\nevalite('BMI Calculator', {\n  data: async () => [\n    {\n      input: 'Calculate BMI for someone who weighs 70kg and is 1.75m tall',\n      expected: [{ toolName: 'calculate-bmi', input: { weightKg: 70, heightM: 1.75 } }],\n    },\n  ],\n  task: async (input) => {\n    const mcp = await createMCPClient({ transport: { type: 'http', url: MCP_URL } })\n    try {\n      const result = await generateText({\n        model,\n        prompt: input,\n        tools: await mcp.tools(),\n      })\n      return result.toolCalls ?? []\n    }\n    finally {\n      await mcp.close()\n    }\n  },\n  scorers: [({ output, expected }) => toolCallAccuracy({ actualCalls: output, expectedCalls: expected })],\n})\n","test\u002Fmcp.eval.ts","typescript",[175,562,563,596,616,634,654,658,663,680,713,717,738,757,762,779,842,848,856,880,937,945,964,972,984,1006,1014,1033,1039,1047,1063,1068,1074,1131],{"__ignoreMap":173},[178,564,565,569,572,575,578,581,584,587,590,593],{"class":180,"line":181},[178,566,568],{"class":567},"s7zQu","import",[178,570,571],{"class":421}," {",[178,573,574],{"class":518}," experimental_createMCPClient",[178,576,577],{"class":567}," as",[178,579,580],{"class":518}," createMCPClient",[178,582,583],{"class":421}," }",[178,585,586],{"class":567}," from",[178,588,589],{"class":421}," '",[178,591,592],{"class":316},"@ai-sdk\u002Fmcp",[178,594,595],{"class":421},"'\n",[178,597,598,600,602,605,607,609,611,614],{"class":180,"line":187},[178,599,568],{"class":567},[178,601,571],{"class":421},[178,603,604],{"class":518}," generateText",[178,606,583],{"class":421},[178,608,586],{"class":567},[178,610,589],{"class":421},[178,612,613],{"class":316},"ai",[178,615,595],{"class":421},[178,617,618,620,622,624,626,628,630,632],{"class":180,"line":194},[178,619,568],{"class":567},[178,621,571],{"class":421},[178,623,323],{"class":518},[178,625,583],{"class":421},[178,627,586],{"class":567},[178,629,589],{"class":421},[178,631,458],{"class":316},[178,633,595],{"class":421},[178,635,636,638,640,643,645,647,649,652],{"class":180,"line":200},[178,637,568],{"class":567},[178,639,571],{"class":421},[178,641,642],{"class":518}," toolCallAccuracy",[178,644,583],{"class":421},[178,646,586],{"class":567},[178,648,589],{"class":421},[178,650,651],{"class":316},"evalite\u002Fscorers",[178,653,595],{"class":421},[178,655,656],{"class":180,"line":206},[178,657,191],{"emptyLinePlaceholder":190},[178,659,660],{"class":180,"line":212},[178,661,662],{"class":512},"\u002F\u002F AI Gateway 模型格式：provider\u002Fmodel-name\n",[178,664,665,668,671,673,675,678],{"class":180,"line":218},[178,666,667],{"class":430},"const",[178,669,670],{"class":518}," model ",[178,672,522],{"class":421},[178,674,589],{"class":421},[178,676,677],{"class":316},"openai\u002Fgpt-4o-mini",[178,679,595],{"class":421},[178,681,682,684,687,689,692,695,698,700,703,706,708,711],{"class":180,"line":224},[178,683,667],{"class":430},[178,685,686],{"class":518}," MCP_URL ",[178,688,522],{"class":421},[178,690,691],{"class":518}," process",[178,693,694],{"class":421},".",[178,696,697],{"class":518},"env",[178,699,694],{"class":421},[178,701,702],{"class":518},"MCP_URL ",[178,704,705],{"class":421},"??",[178,707,589],{"class":421},[178,709,710],{"class":316},"http:\u002F\u002Flocalhost:3000\u002Fmcp",[178,712,595],{"class":421},[178,714,715],{"class":180,"line":230},[178,716,191],{"emptyLinePlaceholder":190},[178,718,719,722,725,728,731,733,736],{"class":180,"line":236},[178,720,458],{"class":721},"s2Zo4",[178,723,724],{"class":518},"(",[178,726,727],{"class":421},"'",[178,729,730],{"class":316},"BMI Calculator",[178,732,727],{"class":421},[178,734,735],{"class":421},",",[178,737,440],{"class":421},[178,739,740,743,745,748,751,754],{"class":180,"line":242},[178,741,742],{"class":721},"  data",[178,744,437],{"class":421},[178,746,747],{"class":430}," async",[178,749,750],{"class":421}," ()",[178,752,753],{"class":430}," =>",[178,755,756],{"class":518}," [\n",[178,758,759],{"class":180,"line":248},[178,760,761],{"class":421},"    {\n",[178,763,764,768,770,772,775,777],{"class":180,"line":253},[178,765,767],{"class":766},"swJcz","      input",[178,769,437],{"class":421},[178,771,589],{"class":421},[178,773,774],{"class":316},"Calculate BMI for someone who weighs 70kg and is 1.75m tall",[178,776,727],{"class":421},[178,778,463],{"class":421},[178,780,782,785,787,790,793,796,798,800,803,805,807,810,812,814,817,819,823,825,828,830,833,835,837,840],{"class":180,"line":781},14,[178,783,784],{"class":766},"      expected",[178,786,437],{"class":421},[178,788,789],{"class":518}," [",[178,791,792],{"class":421},"{",[178,794,795],{"class":766}," toolName",[178,797,437],{"class":421},[178,799,589],{"class":421},[178,801,802],{"class":316},"calculate-bmi",[178,804,727],{"class":421},[178,806,735],{"class":421},[178,808,809],{"class":766}," input",[178,811,437],{"class":421},[178,813,571],{"class":421},[178,815,816],{"class":766}," weightKg",[178,818,437],{"class":421},[178,820,822],{"class":821},"sbssI"," 70",[178,824,735],{"class":421},[178,826,827],{"class":766}," heightM",[178,829,437],{"class":421},[178,831,832],{"class":821}," 1.75",[178,834,583],{"class":421},[178,836,583],{"class":421},[178,838,839],{"class":518},"]",[178,841,463],{"class":421},[178,843,845],{"class":180,"line":844},15,[178,846,847],{"class":421},"    },\n",[178,849,851,854],{"class":180,"line":850},16,[178,852,853],{"class":518},"  ]",[178,855,463],{"class":421},[178,857,859,862,864,866,869,873,876,878],{"class":180,"line":858},17,[178,860,861],{"class":721},"  task",[178,863,437],{"class":421},[178,865,747],{"class":430},[178,867,868],{"class":421}," (",[178,870,872],{"class":871},"sHdIc","input",[178,874,875],{"class":421},")",[178,877,753],{"class":430},[178,879,440],{"class":421},[178,881,883,886,889,892,895,897,899,901,904,906,908,911,913,915,918,920,922,925,927,930,932,934],{"class":180,"line":882},18,[178,884,885],{"class":430},"    const",[178,887,888],{"class":518}," mcp",[178,890,891],{"class":421}," =",[178,893,894],{"class":567}," await",[178,896,580],{"class":721},[178,898,724],{"class":766},[178,900,792],{"class":421},[178,902,903],{"class":766}," transport",[178,905,437],{"class":421},[178,907,571],{"class":421},[178,909,910],{"class":766}," type",[178,912,437],{"class":421},[178,914,589],{"class":421},[178,916,917],{"class":316},"http",[178,919,727],{"class":421},[178,921,735],{"class":421},[178,923,924],{"class":766}," url",[178,926,437],{"class":421},[178,928,929],{"class":518}," MCP_URL",[178,931,583],{"class":421},[178,933,583],{"class":421},[178,935,936],{"class":766},")\n",[178,938,940,943],{"class":180,"line":939},19,[178,941,942],{"class":567},"    try",[178,944,440],{"class":421},[178,946,948,951,954,956,958,960,962],{"class":180,"line":947},20,[178,949,950],{"class":430},"      const",[178,952,953],{"class":518}," result",[178,955,891],{"class":421},[178,957,894],{"class":567},[178,959,604],{"class":721},[178,961,724],{"class":766},[178,963,422],{"class":421},[178,965,967,970],{"class":180,"line":966},21,[178,968,969],{"class":518},"        model",[178,971,463],{"class":421},[178,973,975,978,980,982],{"class":180,"line":974},22,[178,976,977],{"class":766},"        prompt",[178,979,437],{"class":421},[178,981,809],{"class":518},[178,983,463],{"class":421},[178,985,987,990,992,994,996,998,1001,1004],{"class":180,"line":986},23,[178,988,989],{"class":766},"        tools",[178,991,437],{"class":421},[178,993,894],{"class":567},[178,995,888],{"class":518},[178,997,694],{"class":421},[178,999,1000],{"class":721},"tools",[178,1002,1003],{"class":766},"()",[178,1005,463],{"class":421},[178,1007,1009,1012],{"class":180,"line":1008},24,[178,1010,1011],{"class":421},"      }",[178,1013,936],{"class":766},[178,1015,1017,1020,1022,1024,1027,1030],{"class":180,"line":1016},25,[178,1018,1019],{"class":567},"      return",[178,1021,953],{"class":518},[178,1023,694],{"class":421},[178,1025,1026],{"class":518},"toolCalls",[178,1028,1029],{"class":421}," ??",[178,1031,1032],{"class":766}," []\n",[178,1034,1036],{"class":180,"line":1035},26,[178,1037,1038],{"class":421},"    }\n",[178,1040,1042,1045],{"class":180,"line":1041},27,[178,1043,1044],{"class":567},"    finally",[178,1046,440],{"class":421},[178,1048,1050,1053,1055,1057,1060],{"class":180,"line":1049},28,[178,1051,1052],{"class":567},"      await",[178,1054,888],{"class":518},[178,1056,694],{"class":421},[178,1058,1059],{"class":721},"close",[178,1061,1062],{"class":766},"()\n",[178,1064,1066],{"class":180,"line":1065},29,[178,1067,1038],{"class":421},[178,1069,1071],{"class":180,"line":1070},30,[178,1072,1073],{"class":421},"  },\n",[178,1075,1077,1080,1082,1084,1087,1090,1092,1095,1098,1100,1102,1104,1106,1109,1111,1113,1115,1118,1120,1123,1126,1129],{"class":180,"line":1076},31,[178,1078,1079],{"class":766},"  scorers",[178,1081,437],{"class":421},[178,1083,789],{"class":518},[178,1085,1086],{"class":421},"({",[178,1088,1089],{"class":871}," output",[178,1091,735],{"class":421},[178,1093,1094],{"class":871}," expected",[178,1096,1097],{"class":421}," })",[178,1099,753],{"class":430},[178,1101,642],{"class":721},[178,1103,724],{"class":518},[178,1105,792],{"class":421},[178,1107,1108],{"class":766}," actualCalls",[178,1110,437],{"class":421},[178,1112,1089],{"class":518},[178,1114,735],{"class":421},[178,1116,1117],{"class":766}," expectedCalls",[178,1119,437],{"class":421},[178,1121,1122],{"class":518}," expected ",[178,1124,1125],{"class":421},"}",[178,1127,1128],{"class":518},")]",[178,1130,463],{"class":421},[178,1132,1134,1136],{"class":180,"line":1133},32,[178,1135,1125],{"class":421},[178,1137,936],{"class":518},[145,1139,1140],{"id":1140},"运行评估",[149,1142,1143],{},"首先确保您的 MCP 服务器正在运行：",[299,1145,1146,1158,1172,1183],{},[167,1147,1149],{"className":303,"code":1148,"filename":305,"language":306,"meta":173,"style":173},"pnpm dev\n",[175,1150,1151],{"__ignoreMap":173},[178,1152,1153,1155],{"class":180,"line":181},[178,1154,305],{"class":313},[178,1156,1157],{"class":316}," dev\n",[167,1159,1161],{"className":303,"code":1160,"filename":336,"language":306,"meta":173,"style":173},"npm run dev\n",[175,1162,1163],{"__ignoreMap":173},[178,1164,1165,1167,1170],{"class":180,"line":181},[178,1166,336],{"class":313},[178,1168,1169],{"class":316}," run",[178,1171,1157],{"class":316},[167,1173,1175],{"className":303,"code":1174,"filename":359,"language":306,"meta":173,"style":173},"yarn dev\n",[175,1176,1177],{"__ignoreMap":173},[178,1178,1179,1181],{"class":180,"line":181},[178,1180,359],{"class":313},[178,1182,1157],{"class":316},[167,1184,1186],{"className":303,"code":1185,"filename":381,"language":306,"meta":173,"style":173},"bun dev\n",[175,1187,1188],{"__ignoreMap":173},[178,1189,1190,1192],{"class":180,"line":181},[178,1191,381],{"class":313},[178,1193,1157],{"class":316},[149,1195,1196],{},"然后在另一个终端中运行您的评估：",[299,1198,1199,1211,1224,1235],{},[167,1200,1202],{"className":303,"code":1201,"filename":305,"language":306,"meta":173,"style":173},"pnpm eval\n",[175,1203,1204],{"__ignoreMap":173},[178,1205,1206,1208],{"class":180,"line":181},[178,1207,305],{"class":313},[178,1209,1210],{"class":316}," eval\n",[167,1212,1214],{"className":303,"code":1213,"filename":336,"language":306,"meta":173,"style":173},"npm run eval\n",[175,1215,1216],{"__ignoreMap":173},[178,1217,1218,1220,1222],{"class":180,"line":181},[178,1219,336],{"class":313},[178,1221,1169],{"class":316},[178,1223,1210],{"class":316},[167,1225,1227],{"className":303,"code":1226,"filename":359,"language":306,"meta":173,"style":173},"yarn eval\n",[175,1228,1229],{"__ignoreMap":173},[178,1230,1231,1233],{"class":180,"line":181},[178,1232,359],{"class":313},[178,1234,1210],{"class":316},[167,1236,1238],{"className":303,"code":1237,"filename":381,"language":306,"meta":173,"style":173},"bun eval\n",[175,1239,1240],{"__ignoreMap":173},[178,1241,1242,1244],{"class":180,"line":181},[178,1243,381],{"class":313},[178,1245,1210],{"class":316},[149,1247,1248],{},"或者启动 Evalite UI 以使用可视化界面：",[299,1250,1251,1263,1276,1287],{},[167,1252,1254],{"className":303,"code":1253,"filename":305,"language":306,"meta":173,"style":173},"pnpm eval:ui\n",[175,1255,1256],{"__ignoreMap":173},[178,1257,1258,1260],{"class":180,"line":181},[178,1259,305],{"class":313},[178,1261,1262],{"class":316}," eval:ui\n",[167,1264,1266],{"className":303,"code":1265,"filename":336,"language":306,"meta":173,"style":173},"npm run eval:ui\n",[175,1267,1268],{"__ignoreMap":173},[178,1269,1270,1272,1274],{"class":180,"line":181},[178,1271,336],{"class":313},[178,1273,1169],{"class":316},[178,1275,1262],{"class":316},[167,1277,1279],{"className":303,"code":1278,"filename":359,"language":306,"meta":173,"style":173},"yarn eval:ui\n",[175,1280,1281],{"__ignoreMap":173},[178,1282,1283,1285],{"class":180,"line":181},[178,1284,359],{"class":313},[178,1286,1262],{"class":316},[167,1288,1290],{"className":303,"code":1289,"filename":381,"language":306,"meta":173,"style":173},"bun eval:ui\n",[175,1291,1292],{"__ignoreMap":173},[178,1293,1294,1296],{"class":180,"line":181},[178,1295,381],{"class":313},[178,1297,1262],{"class":316},[149,1299,1300,1301,1304],{},"UI 界面位于 ",[175,1302,1303],{},"http:\u002F\u002Flocalhost:3006","，显示每次评估的追踪信息、评分、输入和输出。",[145,1306,1307],{"id":1307},"项目结构",[149,1309,1310,1311,1313],{},"我们建议将评估文件放在项目根目录的 ",[175,1312,553],{}," 目录中：",[167,1315,1320],{"className":1316,"code":1318,"language":1319},[1317],"language-text","your-project\u002F\n├── server\u002F\n│   └── mcp\u002F\n│       ├── tools\u002F\n│       │   └── calculate-bmi.ts\n│       ├── resources\u002F\n│       └── prompts\u002F\n├── test\u002F\n│   └── mcp.eval.ts          # Your MCP eval tests\n├── nuxt.config.ts\n└── package.json\n","text",[175,1321,1318],{"__ignoreMap":173},[258,1323,1326,1327,1330],{"color":1324,"icon":1325},"neutral","i-lucide-info","默认情况下，Evalite 会查找带有 ",[175,1328,1329],{},".eval.ts"," 扩展名的文件。",[145,1332,1333],{"id":1333},"编写高效的评估",[292,1335,1336],{"id":1336},"测试工具选择",[149,1338,1339],{},"验证模型是否选择了正确的工具：",[167,1341,1343],{"className":557,"code":1342,"filename":559,"language":560,"meta":173,"style":173},"evalite('Tool Selection', {\n  data: async () => [\n    {\n      input: 'List all available documentation pages',\n      expected: [{ toolName: 'list-pages' }],\n    },\n    {\n      input: 'Show me the installation guide',\n      expected: [{ toolName: 'get-page', input: { path: '\u002Fgetting-started\u002Finstallation' } }],\n    },\n  ],\n  task: async (input) => {\n    const mcp = await createMCPClient({ transport: { type: 'http', url: MCP_URL } })\n    try {\n      const result = await generateText({\n        model,\n        prompt: input,\n        tools: await mcp.tools(),\n      })\n      return result.toolCalls ?? []\n    }\n    finally {\n      await mcp.close()\n    }\n  },\n  scorers: [({ output, expected }) => toolCallAccuracy({ actualCalls: output, expectedCalls: expected })],\n})\n",[175,1344,1345,1362,1376,1380,1395,1422,1426,1430,1445,1493,1497,1503,1521,1567,1573,1589,1595,1605,1623,1629,1643,1647,1653,1665,1669,1673,1719],{"__ignoreMap":173},[178,1346,1347,1349,1351,1353,1356,1358,1360],{"class":180,"line":181},[178,1348,458],{"class":721},[178,1350,724],{"class":518},[178,1352,727],{"class":421},[178,1354,1355],{"class":316},"Tool Selection",[178,1357,727],{"class":421},[178,1359,735],{"class":421},[178,1361,440],{"class":421},[178,1363,1364,1366,1368,1370,1372,1374],{"class":180,"line":187},[178,1365,742],{"class":721},[178,1367,437],{"class":421},[178,1369,747],{"class":430},[178,1371,750],{"class":421},[178,1373,753],{"class":430},[178,1375,756],{"class":518},[178,1377,1378],{"class":180,"line":194},[178,1379,761],{"class":421},[178,1381,1382,1384,1386,1388,1391,1393],{"class":180,"line":200},[178,1383,767],{"class":766},[178,1385,437],{"class":421},[178,1387,589],{"class":421},[178,1389,1390],{"class":316},"List all available documentation pages",[178,1392,727],{"class":421},[178,1394,463],{"class":421},[178,1396,1397,1399,1401,1403,1405,1407,1409,1411,1414,1416,1418,1420],{"class":180,"line":206},[178,1398,784],{"class":766},[178,1400,437],{"class":421},[178,1402,789],{"class":518},[178,1404,792],{"class":421},[178,1406,795],{"class":766},[178,1408,437],{"class":421},[178,1410,589],{"class":421},[178,1412,1413],{"class":316},"list-pages",[178,1415,727],{"class":421},[178,1417,583],{"class":421},[178,1419,839],{"class":518},[178,1421,463],{"class":421},[178,1423,1424],{"class":180,"line":212},[178,1425,847],{"class":421},[178,1427,1428],{"class":180,"line":218},[178,1429,761],{"class":421},[178,1431,1432,1434,1436,1438,1441,1443],{"class":180,"line":224},[178,1433,767],{"class":766},[178,1435,437],{"class":421},[178,1437,589],{"class":421},[178,1439,1440],{"class":316},"Show me the installation guide",[178,1442,727],{"class":421},[178,1444,463],{"class":421},[178,1446,1447,1449,1451,1453,1455,1457,1459,1461,1464,1466,1468,1470,1472,1474,1477,1479,1481,1483,1485,1487,1489,1491],{"class":180,"line":230},[178,1448,784],{"class":766},[178,1450,437],{"class":421},[178,1452,789],{"class":518},[178,1454,792],{"class":421},[178,1456,795],{"class":766},[178,1458,437],{"class":421},[178,1460,589],{"class":421},[178,1462,1463],{"class":316},"get-page",[178,1465,727],{"class":421},[178,1467,735],{"class":421},[178,1469,809],{"class":766},[178,1471,437],{"class":421},[178,1473,571],{"class":421},[178,1475,1476],{"class":766}," path",[178,1478,437],{"class":421},[178,1480,589],{"class":421},[178,1482,16],{"class":316},[178,1484,727],{"class":421},[178,1486,583],{"class":421},[178,1488,583],{"class":421},[178,1490,839],{"class":518},[178,1492,463],{"class":421},[178,1494,1495],{"class":180,"line":236},[178,1496,847],{"class":421},[178,1498,1499,1501],{"class":180,"line":242},[178,1500,853],{"class":518},[178,1502,463],{"class":421},[178,1504,1505,1507,1509,1511,1513,1515,1517,1519],{"class":180,"line":248},[178,1506,861],{"class":721},[178,1508,437],{"class":421},[178,1510,747],{"class":430},[178,1512,868],{"class":421},[178,1514,872],{"class":871},[178,1516,875],{"class":421},[178,1518,753],{"class":430},[178,1520,440],{"class":421},[178,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565],{"class":180,"line":253},[178,1524,885],{"class":430},[178,1526,888],{"class":518},[178,1528,891],{"class":421},[178,1530,894],{"class":567},[178,1532,580],{"class":721},[178,1534,724],{"class":766},[178,1536,792],{"class":421},[178,1538,903],{"class":766},[178,1540,437],{"class":421},[178,1542,571],{"class":421},[178,1544,910],{"class":766},[178,1546,437],{"class":421},[178,1548,589],{"class":421},[178,1550,917],{"class":316},[178,1552,727],{"class":421},[178,1554,735],{"class":421},[178,1556,924],{"class":766},[178,1558,437],{"class":421},[178,1560,929],{"class":518},[178,1562,583],{"class":421},[178,1564,583],{"class":421},[178,1566,936],{"class":766},[178,1568,1569,1571],{"class":180,"line":781},[178,1570,942],{"class":567},[178,1572,440],{"class":421},[178,1574,1575,1577,1579,1581,1583,1585,1587],{"class":180,"line":844},[178,1576,950],{"class":430},[178,1578,953],{"class":518},[178,1580,891],{"class":421},[178,1582,894],{"class":567},[178,1584,604],{"class":721},[178,1586,724],{"class":766},[178,1588,422],{"class":421},[178,1590,1591,1593],{"class":180,"line":850},[178,1592,969],{"class":518},[178,1594,463],{"class":421},[178,1596,1597,1599,1601,1603],{"class":180,"line":858},[178,1598,977],{"class":766},[178,1600,437],{"class":421},[178,1602,809],{"class":518},[178,1604,463],{"class":421},[178,1606,1607,1609,1611,1613,1615,1617,1619,1621],{"class":180,"line":882},[178,1608,989],{"class":766},[178,1610,437],{"class":421},[178,1612,894],{"class":567},[178,1614,888],{"class":518},[178,1616,694],{"class":421},[178,1618,1000],{"class":721},[178,1620,1003],{"class":766},[178,1622,463],{"class":421},[178,1624,1625,1627],{"class":180,"line":939},[178,1626,1011],{"class":421},[178,1628,936],{"class":766},[178,1630,1631,1633,1635,1637,1639,1641],{"class":180,"line":947},[178,1632,1019],{"class":567},[178,1634,953],{"class":518},[178,1636,694],{"class":421},[178,1638,1026],{"class":518},[178,1640,1029],{"class":421},[178,1642,1032],{"class":766},[178,1644,1645],{"class":180,"line":966},[178,1646,1038],{"class":421},[178,1648,1649,1651],{"class":180,"line":974},[178,1650,1044],{"class":567},[178,1652,440],{"class":421},[178,1654,1655,1657,1659,1661,1663],{"class":180,"line":986},[178,1656,1052],{"class":567},[178,1658,888],{"class":518},[178,1660,694],{"class":421},[178,1662,1059],{"class":721},[178,1664,1062],{"class":766},[178,1666,1667],{"class":180,"line":1008},[178,1668,1038],{"class":421},[178,1670,1671],{"class":180,"line":1016},[178,1672,1073],{"class":421},[178,1674,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717],{"class":180,"line":1035},[178,1676,1079],{"class":766},[178,1678,437],{"class":421},[178,1680,789],{"class":518},[178,1682,1086],{"class":421},[178,1684,1089],{"class":871},[178,1686,735],{"class":421},[178,1688,1094],{"class":871},[178,1690,1097],{"class":421},[178,1692,753],{"class":430},[178,1694,642],{"class":721},[178,1696,724],{"class":518},[178,1698,792],{"class":421},[178,1700,1108],{"class":766},[178,1702,437],{"class":421},[178,1704,1089],{"class":518},[178,1706,735],{"class":421},[178,1708,1117],{"class":766},[178,1710,437],{"class":421},[178,1712,1122],{"class":518},[178,1714,1125],{"class":421},[178,1716,1128],{"class":518},[178,1718,463],{"class":421},[178,1720,1721,1723],{"class":180,"line":1041},[178,1722,1125],{"class":421},[178,1724,936],{"class":518},[292,1726,1727],{"id":1727},"测试多步骤工作流",[149,1729,1730,1731,1734],{},"对于需要多次工具调用的工作流，请增加 ",[175,1732,1733],{},"maxSteps","：",[167,1736,1738],{"className":557,"code":1737,"filename":559,"language":560,"meta":173,"style":173},"evalite('Multi-Step Workflows', {\n  data: async () => [\n    {\n      input: 'Find the installation page and show me its content',\n      expected: [\n        { toolName: 'list-pages' },\n        { toolName: 'get-page', input: { path: '\u002Fgetting-started\u002Finstallation' } },\n      ],\n    },\n  ],\n  task: async (input) => {\n    const mcp = await createMCPClient({ transport: { type: 'http', url: MCP_URL } })\n    try {\n      const result = await generateText({\n        model,\n        prompt: input,\n        tools: await mcp.tools(),\n        maxSteps: 5, \u002F\u002F 允许多次工具调用\n      })\n      return result.toolCalls ?? []\n    }\n    finally {\n      await mcp.close()\n    }\n  },\n  scorers: [({ output, expected }) => toolCallAccuracy({ actualCalls: output, expectedCalls: expected })],\n})\n",[175,1739,1740,1757,1771,1775,1790,1798,1816,1852,1859,1863,1869,1887,1933,1939,1955,1961,1971,1989,2004,2010,2024,2028,2034,2046,2050,2054,2100],{"__ignoreMap":173},[178,1741,1742,1744,1746,1748,1751,1753,1755],{"class":180,"line":181},[178,1743,458],{"class":721},[178,1745,724],{"class":518},[178,1747,727],{"class":421},[178,1749,1750],{"class":316},"Multi-Step Workflows",[178,1752,727],{"class":421},[178,1754,735],{"class":421},[178,1756,440],{"class":421},[178,1758,1759,1761,1763,1765,1767,1769],{"class":180,"line":187},[178,1760,742],{"class":721},[178,1762,437],{"class":421},[178,1764,747],{"class":430},[178,1766,750],{"class":421},[178,1768,753],{"class":430},[178,1770,756],{"class":518},[178,1772,1773],{"class":180,"line":194},[178,1774,761],{"class":421},[178,1776,1777,1779,1781,1783,1786,1788],{"class":180,"line":200},[178,1778,767],{"class":766},[178,1780,437],{"class":421},[178,1782,589],{"class":421},[178,1784,1785],{"class":316},"Find the installation page and show me its content",[178,1787,727],{"class":421},[178,1789,463],{"class":421},[178,1791,1792,1794,1796],{"class":180,"line":206},[178,1793,784],{"class":766},[178,1795,437],{"class":421},[178,1797,756],{"class":518},[178,1799,1800,1803,1805,1807,1809,1811,1813],{"class":180,"line":212},[178,1801,1802],{"class":421},"        {",[178,1804,795],{"class":766},[178,1806,437],{"class":421},[178,1808,589],{"class":421},[178,1810,1413],{"class":316},[178,1812,727],{"class":421},[178,1814,1815],{"class":421}," },\n",[178,1817,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850],{"class":180,"line":218},[178,1819,1802],{"class":421},[178,1821,795],{"class":766},[178,1823,437],{"class":421},[178,1825,589],{"class":421},[178,1827,1463],{"class":316},[178,1829,727],{"class":421},[178,1831,735],{"class":421},[178,1833,809],{"class":766},[178,1835,437],{"class":421},[178,1837,571],{"class":421},[178,1839,1476],{"class":766},[178,1841,437],{"class":421},[178,1843,589],{"class":421},[178,1845,16],{"class":316},[178,1847,727],{"class":421},[178,1849,583],{"class":421},[178,1851,1815],{"class":421},[178,1853,1854,1857],{"class":180,"line":224},[178,1855,1856],{"class":518},"      ]",[178,1858,463],{"class":421},[178,1860,1861],{"class":180,"line":230},[178,1862,847],{"class":421},[178,1864,1865,1867],{"class":180,"line":236},[178,1866,853],{"class":518},[178,1868,463],{"class":421},[178,1870,1871,1873,1875,1877,1879,1881,1883,1885],{"class":180,"line":242},[178,1872,861],{"class":721},[178,1874,437],{"class":421},[178,1876,747],{"class":430},[178,1878,868],{"class":421},[178,1880,872],{"class":871},[178,1882,875],{"class":421},[178,1884,753],{"class":430},[178,1886,440],{"class":421},[178,1888,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931],{"class":180,"line":248},[178,1890,885],{"class":430},[178,1892,888],{"class":518},[178,1894,891],{"class":421},[178,1896,894],{"class":567},[178,1898,580],{"class":721},[178,1900,724],{"class":766},[178,1902,792],{"class":421},[178,1904,903],{"class":766},[178,1906,437],{"class":421},[178,1908,571],{"class":421},[178,1910,910],{"class":766},[178,1912,437],{"class":421},[178,1914,589],{"class":421},[178,1916,917],{"class":316},[178,1918,727],{"class":421},[178,1920,735],{"class":421},[178,1922,924],{"class":766},[178,1924,437],{"class":421},[178,1926,929],{"class":518},[178,1928,583],{"class":421},[178,1930,583],{"class":421},[178,1932,936],{"class":766},[178,1934,1935,1937],{"class":180,"line":253},[178,1936,942],{"class":567},[178,1938,440],{"class":421},[178,1940,1941,1943,1945,1947,1949,1951,1953],{"class":180,"line":781},[178,1942,950],{"class":430},[178,1944,953],{"class":518},[178,1946,891],{"class":421},[178,1948,894],{"class":567},[178,1950,604],{"class":721},[178,1952,724],{"class":766},[178,1954,422],{"class":421},[178,1956,1957,1959],{"class":180,"line":844},[178,1958,969],{"class":518},[178,1960,463],{"class":421},[178,1962,1963,1965,1967,1969],{"class":180,"line":850},[178,1964,977],{"class":766},[178,1966,437],{"class":421},[178,1968,809],{"class":518},[178,1970,463],{"class":421},[178,1972,1973,1975,1977,1979,1981,1983,1985,1987],{"class":180,"line":858},[178,1974,989],{"class":766},[178,1976,437],{"class":421},[178,1978,894],{"class":567},[178,1980,888],{"class":518},[178,1982,694],{"class":421},[178,1984,1000],{"class":721},[178,1986,1003],{"class":766},[178,1988,463],{"class":421},[178,1990,1991,1994,1996,1999,2001],{"class":180,"line":882},[178,1992,1993],{"class":766},"        maxSteps",[178,1995,437],{"class":421},[178,1997,1998],{"class":821}," 5",[178,2000,735],{"class":421},[178,2002,2003],{"class":512}," \u002F\u002F 允许多次工具调用\n",[178,2005,2006,2008],{"class":180,"line":939},[178,2007,1011],{"class":421},[178,2009,936],{"class":766},[178,2011,2012,2014,2016,2018,2020,2022],{"class":180,"line":947},[178,2013,1019],{"class":567},[178,2015,953],{"class":518},[178,2017,694],{"class":421},[178,2019,1026],{"class":518},[178,2021,1029],{"class":421},[178,2023,1032],{"class":766},[178,2025,2026],{"class":180,"line":966},[178,2027,1038],{"class":421},[178,2029,2030,2032],{"class":180,"line":974},[178,2031,1044],{"class":567},[178,2033,440],{"class":421},[178,2035,2036,2038,2040,2042,2044],{"class":180,"line":986},[178,2037,1052],{"class":567},[178,2039,888],{"class":518},[178,2041,694],{"class":421},[178,2043,1059],{"class":721},[178,2045,1062],{"class":766},[178,2047,2048],{"class":180,"line":1008},[178,2049,1038],{"class":421},[178,2051,2052],{"class":180,"line":1016},[178,2053,1073],{"class":421},[178,2055,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098],{"class":180,"line":1035},[178,2057,1079],{"class":766},[178,2059,437],{"class":421},[178,2061,789],{"class":518},[178,2063,1086],{"class":421},[178,2065,1089],{"class":871},[178,2067,735],{"class":421},[178,2069,1094],{"class":871},[178,2071,1097],{"class":421},[178,2073,753],{"class":430},[178,2075,642],{"class":721},[178,2077,724],{"class":518},[178,2079,792],{"class":421},[178,2081,1108],{"class":766},[178,2083,437],{"class":421},[178,2085,1089],{"class":518},[178,2087,735],{"class":421},[178,2089,1117],{"class":766},[178,2091,437],{"class":421},[178,2093,1122],{"class":518},[178,2095,1125],{"class":421},[178,2097,1128],{"class":518},[178,2099,463],{"class":421},[178,2101,2102,2104],{"class":180,"line":1041},[178,2103,1125],{"class":421},[178,2105,936],{"class":518},[292,2107,2108],{"id":2108},"分组相关评估",[149,2110,2111],{},"按功能或工具类别组织评估：",[167,2113,2115],{"className":557,"code":2114,"filename":559,"language":560,"meta":173,"style":173},"\u002F\u002F 文档工具\nevalite('Documentation Tools', {\n  data: async () => [\n    { input: 'List all docs', expected: [{ toolName: 'list-pages' }] },\n    { input: 'Get the intro page', expected: [{ toolName: 'get-page' }] },\n  ],\n  \u002F\u002F ...\n})\n\n\u002F\u002F API 工具\nevalite('API Tools', {\n  data: async () => [\n    { input: 'Fetch user data', expected: [{ toolName: 'get-user' }] },\n    { input: 'Create a new post', expected: [{ toolName: 'create-post' }] },\n  ],\n  \u002F\u002F ...\n})\n",[175,2116,2117,2122,2139,2153,2197,2238,2244,2249,2255,2259,2264,2281,2295,2337,2379,2385,2389],{"__ignoreMap":173},[178,2118,2119],{"class":180,"line":181},[178,2120,2121],{"class":512},"\u002F\u002F 文档工具\n",[178,2123,2124,2126,2128,2130,2133,2135,2137],{"class":180,"line":187},[178,2125,458],{"class":721},[178,2127,724],{"class":518},[178,2129,727],{"class":421},[178,2131,2132],{"class":316},"Documentation Tools",[178,2134,727],{"class":421},[178,2136,735],{"class":421},[178,2138,440],{"class":421},[178,2140,2141,2143,2145,2147,2149,2151],{"class":180,"line":194},[178,2142,742],{"class":721},[178,2144,437],{"class":421},[178,2146,747],{"class":430},[178,2148,750],{"class":421},[178,2150,753],{"class":430},[178,2152,756],{"class":518},[178,2154,2155,2158,2160,2162,2164,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2194],{"class":180,"line":200},[178,2156,2157],{"class":421},"    {",[178,2159,809],{"class":766},[178,2161,437],{"class":421},[178,2163,589],{"class":421},[178,2165,2166],{"class":316},"List all docs",[178,2168,727],{"class":421},[178,2170,735],{"class":421},[178,2172,1094],{"class":766},[178,2174,437],{"class":421},[178,2176,789],{"class":518},[178,2178,792],{"class":421},[178,2180,795],{"class":766},[178,2182,437],{"class":421},[178,2184,589],{"class":421},[178,2186,1413],{"class":316},[178,2188,727],{"class":421},[178,2190,583],{"class":421},[178,2192,2193],{"class":518},"] ",[178,2195,2196],{"class":421},"},\n",[178,2198,2199,2201,2203,2205,2207,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236],{"class":180,"line":206},[178,2200,2157],{"class":421},[178,2202,809],{"class":766},[178,2204,437],{"class":421},[178,2206,589],{"class":421},[178,2208,2209],{"class":316},"Get the intro page",[178,2211,727],{"class":421},[178,2213,735],{"class":421},[178,2215,1094],{"class":766},[178,2217,437],{"class":421},[178,2219,789],{"class":518},[178,2221,792],{"class":421},[178,2223,795],{"class":766},[178,2225,437],{"class":421},[178,2227,589],{"class":421},[178,2229,1463],{"class":316},[178,2231,727],{"class":421},[178,2233,583],{"class":421},[178,2235,2193],{"class":518},[178,2237,2196],{"class":421},[178,2239,2240,2242],{"class":180,"line":212},[178,2241,853],{"class":518},[178,2243,463],{"class":421},[178,2245,2246],{"class":180,"line":218},[178,2247,2248],{"class":512},"  \u002F\u002F ...\n",[178,2250,2251,2253],{"class":180,"line":224},[178,2252,1125],{"class":421},[178,2254,936],{"class":518},[178,2256,2257],{"class":180,"line":230},[178,2258,191],{"emptyLinePlaceholder":190},[178,2260,2261],{"class":180,"line":236},[178,2262,2263],{"class":512},"\u002F\u002F API 工具\n",[178,2265,2266,2268,2270,2272,2275,2277,2279],{"class":180,"line":242},[178,2267,458],{"class":721},[178,2269,724],{"class":518},[178,2271,727],{"class":421},[178,2273,2274],{"class":316},"API Tools",[178,2276,727],{"class":421},[178,2278,735],{"class":421},[178,2280,440],{"class":421},[178,2282,2283,2285,2287,2289,2291,2293],{"class":180,"line":248},[178,2284,742],{"class":721},[178,2286,437],{"class":421},[178,2288,747],{"class":430},[178,2290,750],{"class":421},[178,2292,753],{"class":430},[178,2294,756],{"class":518},[178,2296,2297,2299,2301,2303,2305,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2329,2331,2333,2335],{"class":180,"line":253},[178,2298,2157],{"class":421},[178,2300,809],{"class":766},[178,2302,437],{"class":421},[178,2304,589],{"class":421},[178,2306,2307],{"class":316},"Fetch user data",[178,2309,727],{"class":421},[178,2311,735],{"class":421},[178,2313,1094],{"class":766},[178,2315,437],{"class":421},[178,2317,789],{"class":518},[178,2319,792],{"class":421},[178,2321,795],{"class":766},[178,2323,437],{"class":421},[178,2325,589],{"class":421},[178,2327,2328],{"class":316},"get-user",[178,2330,727],{"class":421},[178,2332,583],{"class":421},[178,2334,2193],{"class":518},[178,2336,2196],{"class":421},[178,2338,2339,2341,2343,2345,2347,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2371,2373,2375,2377],{"class":180,"line":781},[178,2340,2157],{"class":421},[178,2342,809],{"class":766},[178,2344,437],{"class":421},[178,2346,589],{"class":421},[178,2348,2349],{"class":316},"Create a new post",[178,2351,727],{"class":421},[178,2353,735],{"class":421},[178,2355,1094],{"class":766},[178,2357,437],{"class":421},[178,2359,789],{"class":518},[178,2361,792],{"class":421},[178,2363,795],{"class":766},[178,2365,437],{"class":421},[178,2367,589],{"class":421},[178,2369,2370],{"class":316},"create-post",[178,2372,727],{"class":421},[178,2374,583],{"class":421},[178,2376,2193],{"class":518},[178,2378,2196],{"class":421},[178,2380,2381,2383],{"class":180,"line":844},[178,2382,853],{"class":518},[178,2384,463],{"class":421},[178,2386,2387],{"class":180,"line":850},[178,2388,2248],{"class":512},[178,2390,2391,2393],{"class":180,"line":858},[178,2392,1125],{"class":421},[178,2394,936],{"class":518},[145,2396,2397],{"id":2397},"提示",[272,2399,2400,2407,2413,2419,2425],{},[275,2401,2402,2406],{},[2403,2404,2405],"strong",{},"保持提示词具体明确","，以便模型选择预期的工具",[275,2408,2409,2412],{},[2403,2410,2411],{},"使用真实的输入","，匹配用户提出请求的实际表达方式",[275,2414,2415,2418],{},[2403,2416,2417],{},"先从正常路径（happy-path）用例开始","，然后再添加边界情况",[275,2420,2421,2424],{},[2403,2422,2423],{},"测试参数提取","，在提示词中包含具体的值",[275,2426,2427,2430],{},[2403,2428,2429],{},"在部署前运行评估","，以捕获工具行为中的回归问题",[2432,2433,2434],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":173,"searchDepth":187,"depth":187,"links":2436},[2437,2438,2439,2445,2446,2447,2452],{"id":147,"depth":187,"text":147},{"id":270,"depth":187,"text":270},{"id":287,"depth":187,"text":287,"children":2440},[2441,2442,2443,2444],{"id":294,"depth":194,"text":294},{"id":402,"depth":194,"text":402},{"id":495,"depth":194,"text":495},{"id":547,"depth":194,"text":547},{"id":1140,"depth":187,"text":1140},{"id":1307,"depth":187,"text":1307},{"id":1333,"depth":187,"text":1333,"children":2448},[2449,2450,2451],{"id":1336,"depth":194,"text":1336},{"id":1727,"depth":194,"text":1727},{"id":2108,"depth":194,"text":2108},{"id":2397,"depth":187,"text":2397},"使用 Evalite 和 AI SDK MCP 客户端评估 MCP 工具和工作流。","md",null,{},{"icon":94},{"title":91,"description":2453},"P9-efkm6Nu-PSZCWINQwsiJ9bMunt5VBZGtYYXmy7do",[2461,2463],{"title":86,"path":87,"stem":88,"description":2462,"icon":89,"children":-1},"使用 Nuxt 钩子来扩展和自定义 MCP 模块。",{"title":96,"path":97,"stem":98,"description":2464,"icon":99,"children":-1},"使用 useMcpSession() 在工具调用之间持久化每个会话的状态。",1775615721144]