تتطور تقنية الذكاء الاصطناعي بسرعة، وإن دمج الأدوات الخارجية مع نماذج اللغة يعتبر خطوة حاسمة نحو الأمام. OpenRouter يوفر واجهة برمجة تطبيقات موحدة API للوصول إلى العديد من نماذج اللغة، بينما تسمح MCP Servers (خوادم بروتوكول سياق النموذج) لهذه النماذج بتنفيذ أدوات خارجية والوصول إلى بيانات حية. إن دمجها creates نظامًا قويًا لبناء تطبيقات الذكاء الاصطناعي المتقدمة.
في هذا المنشور، سأرشدك عبر دمج MCP Servers مع OpenRouter. ستتعلم الوظائف الأساسية لهما، وعملية الدمج، وأمثلة عملية.
فهم خوادم MCP وOpenRouter
لدمج MCP Servers مع OpenRouter، تحتاج أولاً إلى فهم وظيفة كل مكون.
OpenRouter: الوصول الموحد إلى نماذج اللغة
OpenRouter هو منصة تُبسط التفاعل مع نماذج اللغة الكبيرة (LLMs) من مزودين مثل OpenAI وAnthropic وxAI. يوفر نقطة نهاية وحيدة لواجهة برمجة التطبيقات API https://openrouter.ai/api/v1/chat/completions متوافقة مع هيكل واجهة برمجة تطبيقات OpenAI. تشمل المميزات الرئيسية:
- تجميع النماذج: الوصول إلى المئات من LLMs من خلال واجهة واحدة.
- تحسين التكلفة: توجيه الطلبات إلى النماذج ذات التكلفة الفعالة بناءً على التوافر والتسعير.
- توازن الحمل: توزيع الطلبات لمنع الحمل الزائد على أي مزود واحد.
- الاحتياطات: التحويل إلى نماذج بديلة إذا فشل أحدها.
ستحتاج إلى حساب OpenRouter ومفتاح API للمضي قدمًا. احصل على مفتاحك من openrouter.ai.

MCP Servers: توسيع قدرات النموذج
MCP Servers تطبق بروتوكول سياق النموذج، مما يسمح لـ LLMs باستدعاء الأدوات الخارجية. على عكس النماذج المستقلة التي تقتصر على بيانات التدريب الخاصة بها، تتيح MCP Servers التفاعل في الوقت الحقيقي مع أنظمة مثل دلائل الملفات وقواعد البيانات أو APIs الخارجية. تشمل تعريفات أدوات MCP النموذجية:
- الاسم: يحدد الأداة (على سبيل المثال،
list_files). - الوصف: يشرح الغرض منها.
- المعلمات: يحدد المدخلات بتنسيق JSON Schema.
على سبيل المثال، قد يبدو تعريف أداة MCP لقائمة ملفات الدليل كما يلي:
{
"name": "list_files",
"description": "يُدرج الملفات في دليل محدد",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "مسار الدليل"}
},
"required": ["path"]
}
}
معًا، يوفر OpenRouter النموذج، وتقدم MCP Servers الأدوات، مما يشكل نظامًا بيئيًا قويًا للذكاء الاصطناعي.
لماذا دمج خوادم MCP مع OpenRouter؟
تقدم الجمع بين هذه التقنيات عدة مزايا فنية:
- مرونة النموذج: استخدم أي LLM مدعوم من OpenRouter مع قدرات استدعاء الأدوات.
- تخفيض التكلفة: اجمع بين النماذج الأقل تكلفة مع الأدوات الخارجية لتخفيف المهام المعقدة.
- تعزيز القدرات: تمكين النماذج من جلب البيانات الحية أو تنفيذ الإجراءات (مثل عمليات الملفات).
- قابلية التوسع: تبديل النماذج أو الأدوات دون إعادة كتابة منطقك الأساسي.
- الاستعداد للمستقبل: التكيف مع نماذج وأدوات LLM الجديدة مع ظهورها.
هذا الدمج مثالي للمطورين الذين يبنون أنظمة ذكاء اصطناعي تحتاج إلى تفاعل مع العالم الواقعي.
عملية الدمج خطوة بخطوة
الآن، دعنا ندخل في التفاصيل. إليك كيفية دمج MCP Servers مع OpenRouter.
المتطلبات السابقة
تأكد من أنك تمتلك:
- حساب OpenRouter ومفتاح API: من openrouter.ai.
- خادم MCP: يعمل محليًا (مثل
http://localhost:8000) أو عن بُعد. في هذا الدليل، سأستخدم خادم MCP لنظام الملفات. - بايثون 3.8+: مع مكتبة
requests(pip install requests). - Apidog: اختياري ولكن موصى به لاختبار API. قم بتحميله مجانًا.
الخطوة 1: تعريف وتحويل أدوات MCP
تستخدم OpenRouter تنسيق استدعاء الأدوات الخاص بـ OpenAI، لذا يجب عليك تحويل تعريفات أدوات MCP. ابدأ بتعريف MCP:
{
"name": "list_files",
"description": "يُدرج الملفات في دليل محدد",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "مسار الدليل"}
},
"required": ["path"]
}
}
حوِّلها إلى تنسيق OpenAI عن طريق إضافة حقل type وتداخل تفاصيل الوظيفة:
{
"type": "function",
"function": {
"name": "list_files",
"description": "يُدرج الملفات في دليل محدد",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "مسار الدليل"}
},
"required": ["path"]
}
}
}
هذا الهيكل JSON هو ما تتوقعه OpenRouter في الحمولة API الخاصة بها.
الخطوة 2: تكوين طلب API
أعد طلب API إلى OpenRouter. عرّف الرؤوس بمفتاح API الخاص بك وحمولة مع النموذج والرسائل والأدوات. إليك مثال باستخدام بايثون:
import requests
import json
# الرؤوس
headers = {
"Authorization": "Bearer your_openrouter_api_key",
"Content-Type": "application/json"
}
# الحمولة
payload = {
"model": "openai/gpt-4", # استبدل بنموذجك المفضل
"messages": [
{"role": "user", "content": "أدرج الملفات في الدليل الحالي."}
],
"tools": [
{
"type": "function",
"function": {
"name": "list_files",
"description": "يُدرج الملفات في دليل محدد",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "مسار الدليل"}
},
"required": ["path"]
}
}
}
]
}
استبدل your_openrouter_api_key بمفتاحك الفعلي.
الخطوة 3: إرسال طلب API الأولي
قم بعمل طلب POST إلى نقطة نهاية OpenRouter:
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
json=payload
)
response_data = response.json()
الخطوة 4: معالجة استدعاءات الأدوات
تحقق مما إذا كانت الاستجابة تحتوي على استدعاء أداة:
{
"choices": [
{
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_123",
"type": "function",
"function": {
"name": "list_files",
"arguments": "{\"path\": \".\"}"
}
}
]
}
}
]
}
استخرج تفاصيل استدعاء الأداة:
message = response_data["choices"][0]["message"]
if "tool_calls" in message:
tool_call = message["tool_calls"][0]
function_name = tool_call["function"]["name"]
arguments = json.loads(tool_call["function"]["arguments"])
الخطوة 5: استدعاء خادم MCP
أرسل طلب الأداة إلى MCP Server الخاص بك:
mcp_response = requests.post(
"http://localhost:8000/call",
json={
"name": function_name,
"arguments": arguments
}
)
tool_result = mcp_response.json()["result"] # على سبيل المثال، ["file1.txt", "file2.txt"]
الخطوة 6: إعادة نتيجة الأداة إلى OpenRouter
أضف استدعاء الأداة للمعاون ونتيجته إلى سجل الرسائل:
messages = payload["messages"] + [
{
"role": "assistant",
"content": null,
"tool_calls": [tool_call]
},
{
"role": "tool",
"tool_call_id": tool_call["id"],
"content": json.dumps(tool_result)
}
]
# تحديث الحمولة
payload["messages"] = messages
# إرسال طلب متابعة
final_response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
json=payload
)
final_output = final_response.json()["choices"][0]["message"]["content"]
print(final_output) # على سبيل المثال، "الملفات: file1.txt, file2.txt"
الخطوة 7: التعامل مع استدعاءات الأدوات المتعددة
إذا كان النموذج يتطلب استدعاءات أدوات متعددة، قم بالتكرار عبر العملية:
messages = payload["messages"]
while True:
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
json={"model": "openai/gpt-4", "messages": messages}
)
message = response.json()["choices"][0]["message"]
if "tool_calls" not in message:
print(message["content"])
break
for tool_call in message["tool_calls"]:
function_name = tool_call["function"]["name"]
arguments = json.loads(tool_call["function"]["arguments"])
mcp_response = requests.post(
"http://localhost:8000/call",
json={"name": function_name, "arguments": arguments}
)
tool_result = mcp_response.json()["result"]
messages.extend([
{"role": "assistant", "content": null, "tool_calls": [tool_call]},
{"role": "tool", "tool_call_id": tool_call["id"], "content": json.dumps(tool_result)}
])
هذا يضمن معالجة جميع استدعاءات الأدوات.
مثال عملي: تفاعل نظام الملفات
لنطبق هذا على سيناريو عملي لقائمة الملفات باستخدام MCP Server.
- تعريف الأداة: استخدم أداة
list_filesمن السابق. - خادم MCP: افترض أنه يعمل على
http://localhost:8000. - طلب API: أرسل "أدرج الملفات في الدليل الحالي" إلى OpenRouter.
- معالجة الاستجابة: يقوم النموذج باستدعاء
list_filesمع{"path": "."}. - تنفيذ MCP: يُرجع الخادم
["file1.txt", "file2.txt"]. - النتيجة النهائية: يرد النموذج، "تم العثور على الملفات: file1.txt، file2.txt."
إليك الكود الكامل:
import requests
import json
headers = {"Authorization": "Bearer your_openrouter_api_key", "Content-Type": "application/json"}
payload = {
"model": "openai/gpt-4",
"messages": [{"role": "user", "content": "أدرج الملفات في الدليل الحالي."}],
"tools": [{
"type": "function",
"function": {
"name": "list_files",
"description": "يُدرج الملفات في دليل محدد",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string", "description": "مسار الدليل"}},
"required": ["path"]
}
}
}]
}
response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload)
message = response.json()["choices"][0]["message"]
if "tool_calls" in message:
tool_call = message["tool_calls"][0]
function_name = tool_call["function"]["name"]
arguments = json.loads(tool_call["function"]["arguments"])
mcp_response = requests.post("http://localhost:8000/call", json={"name": function_name, "arguments": arguments})
tool_result = mcp_response.json()["result"]
messages = payload["messages"] + [
{"role": "assistant", "content": null, "tool_calls": [tool_call]},
{"role": "tool", "tool_call_id": tool_call["id"], "content": json.dumps(tool_result)}
]
final_response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json={"model": "openai/gpt-4", "messages": messages})
print(final_response.json()["choices"][0]["message"]["content"])
استكشاف الأخطاء الشائعة
إليك حلول للمشاكل الشائعة:
- لم يتم استدعاء الأداة: تحقق من صياغة تعريف الأداة ووضوح المطالبة.
- معلمات غير صالحة: تأكد من أن المعلمات تتطابق مع JSON Schema.
- فشل خادم MCP: تحقق من سجلات الخادم ونقطة النهاية (
http://localhost:8000/call). - التحقق من واجهة برمجة التطبيقات: تأكد من صحة مفتاح OpenRouter الخاص بك.
استخدم Apidog لتصحيح طلبات API والاستجابات بكفاءة.
توسيع الدمج
لتجاوز 2000 كلمة وإضافة عمق، ضع في اعتبارك هذه الإضافات:
مثال على استعلام قاعدة البيانات
حدد أداة MCP لاستعلام قاعدة البيانات:
{
"type": "function",
"function": {
"name": "query_db",
"description": "يستعلم عن قاعدة بيانات باستخدام SQL",
"parameters": {
"type": "object",
"properties": {"sql": {"type": "string", "description": "استعلام SQL"}},
"required": ["sql"]
}
}
}
أرسل "احصل على جميع المستخدمين من قاعدة البيانات" إلى OpenRouter، عالج استدعاء query_db، وعد النتائج مثل [{"id": 1, "name": "Alice"}].
معالجة الأخطاء
أضف معالجة أخطاء قوية:
try:
mcp_response = requests.post("http://localhost:8000/call", json={"name": function_name, "arguments": arguments})
mcp_response.raise_for_status()
except requests.RequestException as e:
tool_result = f"خطأ: {str(e)}"
هذا يضمن بقاء تطبيقك مستقرًا.
الخلاصة
يمكن أن يؤدي دمج MCP Servers مع OpenRouter إلى تمكين الذكاء الاصطناعي لديك للاستفادة من الأدوات الخارجية من خلال واجهة برمجة تطبيقات واحدة API. غطت هذه الدليل الإعداد، وتحويل الأدوات، واستدعاءات API، وأمثلة عملية مثل تفاعل نظام الملفات. مع فوائد مثل توفير التكاليف وتعزيز الوظائف، يعد هذا النهج تجربة يجب تجربتها للمطورين التقنيين.
ابدأ بالتجربة الآن، احصل على Apidog مجانًا هنا لاختبار APIs الخاصة بك. دعني أعرف كيف تسير الأمور!

