ในบทความนี้เราจะแสดงให้เห็นถึงวิธีการจัดระเบียบเซิร์ฟเวอร์แบบโปรโตคอลรูปแบบ (MCP) โดยใช้ ในแอปพลิเคชัน TypeScript จริง เราจะใช้ โครงการเป็นฐานของเราโดยมุ่งเน้นไปที่แนวทางปฏิบัติที่ดีที่สุดสําหรับการจัดนิทรรศการที่ปลอดภัยสามารถปรับขนาดและบํารุงรักษาได้ เพลิดเพลินไปกับการจัดนิทรรศการเพื่อรับทราบการเปลี่ยนแปลงล่าสุด ภาษาไทย ตัวแทนการเดินทาง Azure AI หากคุณสนใจในการดูภาพรวมของโครงการ Azure AI Travel Agents โปรดอ่านบล็อกประกาศของเรา! บล็อกประกาศ ทําไม llamaindex.TS และ MCP llamaindex.TS ให้โครงสร้างแบบโมดูลและคอมโพสิตสําหรับการสร้างแอปพลิเคชันที่ขับเคลื่อนด้วย LLM ใน TypeScript MCP ช่วยให้สามารถทํางานร่วมกับเครื่องมือและสตรีมมิ่งทําให้เหมาะสําหรับการจัดระเบียบบริการ AI หลายอย่าง โครงสร้างโครงการ The Llamaindex.TS orchestrator ชีวิตใน , มีโมดูลผู้ให้บริการสําหรับ LLM ที่แตกต่างกันและลูกค้า MCP ขณะนี้เราสนับสนุน: src/api/src/orchestrator/llamaindex Azure OpenAI แบบ Docker Azure AI Foundry พื้นที่ รูปแบบ GitHub อัลลัม รู้สึกอิสระในการสํารวจรหัสฐานและ . แนะนําผู้ให้บริการเพิ่มเติม การตั้งค่าลูกค้า MCP ด้วย HTTP ที่สามารถสตรีมได้ ในการโต้ตอบกับเซิร์ฟเวอร์ MCP โดยไม่ต้องใช้ Llamaindex.TS เราสามารถเขียนการใช้งานที่กําหนดเองโดยใช้ สําหรับการสื่อสารที่มีประสิทธิภาพการรับรองและสตรีมมิ่ง StreamableHTTPClientTransport // filepath: src/api/src/mcp/mcp-http-client.ts import EventEmitter from 'node:events'; import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; export class MCPClient extends EventEmitter { private client: Client; private transport: StreamableHTTPClientTransport; constructor(serverName: string, serverUrl: string, accessToken?: string) { this.transport = new StreamableHTTPClientTransport({ url: serverUrl, headers: accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, }); this.client = new Client(serverName, this.transport); } async connect() { await this.client.initialize(); } async listTools() { return this.client.listTools(); } async callTool(name: string, toolArgs: any) { return this.client.callTool(name, toolArgs); } async close() { await this.client.closeGracefully(); } } เสมอผ่าน header สําหรับการเข้าถึงที่ปลอดภัยตามที่แสดงไว้ข้างต้น Best Practice: Authorization การเรียกเครื่องมือ MCP แบบคู่มือ แสดงให้เห็นว่าคุณต้องการรับคําแนะนําเป้าหมายจากเซิร์ฟเวอร์ MCP: import { MCPClient } from '../../mcp/mcp-http-client'; const DESTINATION_SERVER_URL = process.env.MCP_DESTINATION_RECOMMENDATION_URL!; const ACCESS_TOKEN = process.env.MCP_DESTINATION_RECOMMENDATION_ACCESS_TOKEN; const mcpClient = new MCPClient('destination-recommendation', DESTINATION_SERVER_URL, ACCESS_TOKEN); await mcpClient.connect(); const tools = await mcpClient.listTools(); console.log('Available tools:', tools); const result = await mcpClient.callTool('getDestinationsByPreferences', { activity: 'CULTURAL', budget: 'MODERATE', season: 'SUMMER', familyFriendly: true, }); console.log('Recommended destinations:', result); await mcpClient.close(); ปิดลูกค้า MCP อย่างมีเสน่ห์เสมอเพื่อปล่อยทรัพยากร Tip: ออกแบบ LLMs และเครื่องมือ MCP ด้วย Llamaindex.TS โซ ลูกค้าจาก ทําให้การเชื่อมต่อกับเซิร์ฟเวอร์ MCP ง่ายขึ้นและเรียกดูการกําหนดค่าเครื่องมือแบบไดนามิก ด้านล่างเป็นตัวอย่างจากการตั้งค่า orchestrator ของโครงการแสดงวิธีใช้ ค้นหาเครื่องมือและสร้างตัวแทนสําหรับแต่ละเซิร์ฟเวอร์ MCP mcp @llamaindex/tools mcp นี่คือตัวอย่างของสิ่งที่ Object อาจดูเหมือนว่า: mcpServerConfig const mcpServerConfig = { url: "http://localhost:5007", // MCP server endpoint accessToken: process.env.MCP_ECHO_PING_ACCESS_TOKEN, // Secure token from env name: "echo-ping", // Logical name for the server }; จากนั้นคุณสามารถใช้ config นี้กับ ลูกค้า : mcp import { mcp } from "@llamaindex/tools"; import { agent, multiAgent, ToolCallLLM } from "llamaindex"; // ...existing code... const mcpServerConfig = mcpToolsConfig["echo-ping"].config; const tools = await mcp(mcpServerConfig).tools(); const echoAgent = agent({ name: "EchoAgent", systemPrompt: "Echo back the received input. Do not respond with anything else. Always call the tools.", tools, llm, verbose, }); agentsList.push(echoAgent); handoffTargets.push(echoAgent); toolsList.push(...tools); // ...other code... const travelAgent = agent({ name: "TravelAgent", systemPrompt: "Acts as a triage agent to determine the best course of action for the user's query. If you cannot handle the query, please pass it to the next agent. If you can handle the query, please do so.", tools: [...toolsList], canHandoffTo: handoffTargets .map((target) => target.getAgents().map((agent) => agent.name)) .flat(), llm, verbose, }); agentsList.push(travelAgent); // Create the multi-agent workflow return multiAgent({ agents: agentsList, rootAgent: travelAgent, verbose, }); คุณสามารถทําซ้ํารูปแบบนี้เพื่อสร้างกระบวนการทํางานหลายตัวแทนซึ่งแต่ละตัวแทนจะถูกขับเคลื่อนโดยเครื่องมือที่ค้นพบในเวลาทํางานจากเซิร์ฟเวอร์ MCP ดูโครงการสําหรับ . ตัวอย่างเต็มรูปแบบ จากนั้นคุณสามารถใช้ตัวอย่าง LLM นี้เพื่อจัดการการโทรไปยังเครื่องมือ MCP เช่นการวางแผนเส้นทางหรือคําแนะนําปลายทาง การพิจารณาด้านความปลอดภัย ใช้เครื่องหมายการเข้าถึงและหัวที่ปลอดภัยเสมอ อย่าใช้ความลับฮาร์ดโค้ดใช้ตัวแปรสภาพแวดล้อมและตัวจัดการความลับ เข้าร่วมชุมชน: เราขอแนะนําให้คุณเข้าร่วมชุมชนผู้พัฒนา Azure AI Foundry เพื่อแบ่งปันประสบการณ์ของคุณถามคําถามและได้รับการสนับสนุน: aka.ms/foundry/discord เข้าร่วมชุมชน Discord ของเราสําหรับการสนทนาและสนับสนุนในเวลาจริง aka.ms/foundry/forum - เยี่ยมชมฟอรั่มผู้พัฒนา Azure AI Foundry เพื่อถามคําถามและแบ่งปันความรู้ของคุณ ข้อสรุป โดยการรวม llamaindex.TS กับการถ่ายโอน HTTP แบบ Streamable ของ MCP คุณสามารถจัดระเบียบกระบวนการทํางาน AI ที่มีประสิทธิภาพปลอดภัยและสามารถปรับขนาดได้ใน TypeScript โครงการ Azure AI Travel Agents ให้เทมเพลตที่แข็งแกร่งสําหรับการสร้าง orchestrator ของคุณเอง References: llamaindex.TS เอกสาร MCP สตรีมมิ่ง HTTP Spec ตัวอย่าง Azure AI Travel Agents