في هذه المقالة ، سنقوم بإظهار كيفية تركيب خادمات بروتوكول نموذج الاتصال (MCP) باستخدامالـمـنـتـدىفي تطبيق TypeScript في العالم الحقيقي. سوف نستخدمخدمة Azure Travel Agentsالمشروع كأساس لدينا، تركز على أفضل الممارسات لتوجيه الأقمار الصناعية آمنة، قابلة للتوسع، ومستدامة.
إذا كنت مهتمًا بتصوير مشروع Azure AI Travel Agents، يرجى قراءة مدونة إعلاننا!
المدونة الإعلانيةلماذا llamaindex.TS و MCP؟
- يوفر llamaindex.TS إطارًا متكاملًا متكاملًا لإنشاء التطبيقات التي تعمل على LLM في TypeScript.
- يتيح MCP التفاعلية بين الأدوات والإنترنت، مما يجعلها مثالية لتصميم خدمات AI متعددة.
هيكل المشروع
الأكاديمية Llamaindex.TS تعيش فيsrc/api/src/orchestrator/llamaindex
، مع وحدات الموردين لعدد مختلف من خيارات LLM والعملاء MCP. نحن حاليا تدعم:
- Azure OpenAI
- نموذج Docker
- Azure AI Foundry المحلي
- نموذج GitHub
- الألوان
تشعر بالحرية لاستكشاف قاعدة الكود ودعونا نقدم المزيد من الموردين.
إعداد ملف MCP باستخدام HTTP Streamable
للتفاعل مع خادمات 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();
}
}
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();
Tip:ابدأ دائمًا في إغلاق ملف MCP بسهولة لإطلاق الموارد.
تصميم أدوات LLM و MCP مع Llamaindex.TS
ذاكmcp
عميل من@llamaindex/tools
يجعل من السهل الانضمام إلى خادمات MCP وتتلقى تعريفات الأدوات بشكل ديناميكي. أدناه نموذج من إعداد المتصفح للمشروع، والذي يوضح كيفية استخدامmcp
الحصول على أدوات وتصنيع العمالة لكل خادم MCP.
إليك مثال على ما هو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
};
يمكنك بعد ذلك استخدام هذه التوصية مع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 Developer لتبادل تجربتك، وإرسال الأسئلة، وإيجاد الدعم:
- aka.ms/foundry/discord الانضمام إلى مجتمع Discord لدراسة في الوقت الحقيقي ودعم.
- aka.ms/foundry/forum - زيارة منتدى Azure AI Foundry Developer Forum لتقديم الأسئلة وتبادل المعرفة الخاصة بك.
النتيجة
من خلال الجمع بين llamaindex.TS و MCP Streamable HTTP Transport، يمكنك تركيب تدفقات عمل الذكاء الاصطناعي القوية، آمنة ومتوسطة في TypeScript.
References:
- كلمات متعلقة llamaindex.TS
- ملف MCP Streamable HTTP Spec
- Azure AI خدمة السفر نموذج