إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يدعم إطار عمل العامل البروتوكولات المتوافقة مع OpenAI لكل من وكلاء الاستضافة خلف واجهات برمجة التطبيقات القياسية والاتصال بأي نقطة نهاية متوافقة مع OpenAI.
ما هي بروتوكولات OpenAI؟
يتم دعم بروتوكولين OpenAI:
- واجهة برمجة تطبيقات إكمال الدردشة — تنسيق طلب/استجابة قياسي عديم الحالة لتفاعلات الدردشة
- واجهة برمجة تطبيقات الاستجابات - تنسيق متقدم يدعم المحادثات والتدفق وعمليات الوكيل طويلة الأمد
تعد واجهة برمجة تطبيقات الاستجابات الآن النهج الافتراضي والموصى به وفقا لوثائق OpenAI. يوفر واجهة أكثر شمولا وغنية بالميزات لبناء تطبيقات الذكاء الاصطناعي مع إدارة المحادثات المضمنة وقدرات الدفق ودعم العمليات طويلة الأمد.
استخدم واجهة برمجة تطبيقات الاستجابات عندما:
- إنشاء تطبيقات جديدة (افتراضي موصى به)
- تحتاج إلى إدارة المحادثات من جانب الخادم. ومع ذلك، هذا ليس شرطا: لا يزال بإمكانك استخدام واجهة برمجة تطبيقات الاستجابات في الوضع عديم الحالة.
- تريد محفوظات المحادثات المستمرة
- تقوم بإنشاء عمليات عامل طويلة الأمد
- تحتاج إلى قدرات دفق متقدمة مع أنواع أحداث مفصلة
- تريد تعقب الاستجابات الفردية وإدارتها (على سبيل المثال، استرداد استجابة معينة بواسطة المعرف، أو التحقق من حالتها، أو إلغاء استجابة قيد التشغيل)
استخدم واجهة برمجة تطبيقات إكمال الدردشة عندما:
- ترحيل التطبيقات الموجودة التي تعتمد على تنسيق "إكمال الدردشة"
- تحتاج إلى تفاعلات طلب/استجابة بسيطة عديمة الحالة
- تتم معالجة إدارة الحالة بالكامل من قبل العميل الخاص بك
- أنت تدمج مع الأدوات الموجودة التي تدعم إكمال الدردشة فقط
- تحتاج إلى أقصى قدر من التوافق مع الأنظمة القديمة
عوامل الاستضافة كنقاط نهاية OpenAI (.NET)
Microsoft.Agents.AI.Hosting.OpenAI تمكنك المكتبة من عرض وكلاء الذكاء الاصطناعي من خلال نقاط نهاية HTTP المتوافقة مع OpenAI، ما يدعم كل من واجهات برمجة تطبيقات إكمال الدردشة والاستجابات. يسمح لك هذا بدمج وكلائك مع أي عميل أو أداة متوافقة مع OpenAI.
حزمة NuGet:
واجهة برمجة تطبيقات إكمال الدردشة
توفر واجهة برمجة تطبيقات إكمال الدردشة واجهة بسيطة عديمة الحالة للتفاعل مع الوكلاء باستخدام تنسيق دردشة OpenAI القياسي.
إعداد عامل في ASP.NET Core مع تكامل ChatCompletions
فيما يلي مثال كامل يعرض وكيلا عبر واجهة برمجة تطبيقات إكمال الدردشة:
المتطلبات الأساسية
1. إنشاء مشروع واجهة برمجة تطبيقات ويب ASP.NET Core
إنشاء مشروع جديد ASP.NET Core Web API أو استخدام مشروع موجود.
2. تثبيت التبعيات المطلوبة
تثبيت الحزم التالية:
قم بتشغيل الأوامر التالية في دليل المشروع لتثبيت حزم NuGet المطلوبة:
# Hosting.A2A.AspNetCore for OpenAI ChatCompletions/Responses protocol(s) integration
dotnet add package Microsoft.Agents.AI.Hosting.OpenAI --prerelease
# Libraries to connect to Azure OpenAI
dotnet add package Azure.AI.OpenAI --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.AI
dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
# Swagger to test app
dotnet add package Microsoft.AspNetCore.OpenApi
dotnet add package Swashbuckle.AspNetCore
3. تكوين اتصال OpenAI Azure
يتطلب التطبيق اتصال OpenAI Azure. تكوين نقطة النهاية واسم النشر باستخدام dotnet user-secrets أو متغيرات البيئة.
يمكنك أيضا ببساطة تحرير appsettings.json، ولكن هذا غير مستحسن للتطبيقات المنشورة في الإنتاج حيث يمكن اعتبار بعض البيانات سرية.
dotnet user-secrets set "AZURE_OPENAI_ENDPOINT" "https://<your-openai-resource>.openai.azure.com/"
dotnet user-secrets set "AZURE_OPENAI_DEPLOYMENT_NAME" "gpt-4o-mini"
4. إضافة التعليمات البرمجية إلى Program.cs
استبدل محتويات Program.cs بالتعليمة البرمجية التالية:
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI.Hosting;
using Microsoft.Extensions.AI;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();
builder.Services.AddSwaggerGen();
string endpoint = builder.Configuration["AZURE_OPENAI_ENDPOINT"]
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = builder.Configuration["AZURE_OPENAI_DEPLOYMENT_NAME"]
?? throw new InvalidOperationException("AZURE_OPENAI_DEPLOYMENT_NAME is not set.");
// Register the chat client
IChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsIChatClient();
builder.Services.AddSingleton(chatClient);
builder.AddOpenAIChatCompletions();
// Register an agent
var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate.");
var app = builder.Build();
app.MapOpenApi();
app.UseSwagger();
app.UseSwaggerUI();
// Expose the agent via OpenAI ChatCompletions protocol
app.MapOpenAIChatCompletions(pirateAgent);
app.Run();
اختبار نقطة نهاية إكمال الدردشة
بمجرد تشغيل التطبيق، يمكنك اختبار العامل باستخدام طلبات OpenAI SDK أو HTTP:
استخدام طلب HTTP
POST {{baseAddress}}/pirate/v1/chat/completions
Content-Type: application/json
{
"model": "pirate",
"stream": false,
"messages": [
{
"role": "user",
"content": "Hey mate!"
}
]
}
ملاحظة: استبدل {{baseAddress}} بنقطة نهاية الخادم.
فيما يلي نموذج استجابة:
{
"id": "chatcmpl-nxAZsM6SNI2BRPMbzgjFyvWWULTFr",
"object": "chat.completion",
"created": 1762280028,
"model": "gpt-5",
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "Ahoy there, matey! How be ye farin' on this fine day?"
}
}
],
"usage": {
"completion_tokens": 18,
"prompt_tokens": 22,
"total_tokens": 40,
"completion_tokens_details": {
"accepted_prediction_tokens": 0,
"audio_tokens": 0,
"reasoning_tokens": 0,
"rejected_prediction_tokens": 0
},
"prompt_tokens_details": {
"audio_tokens": 0,
"cached_tokens": 0
}
},
"service_tier": "default"
}
تتضمن الاستجابة معرف الرسالة والمحتوى وإحصائيات الاستخدام.
يدعم إكمال الدردشة أيضا البث، حيث يتم إرجاع الإخراج في مجموعات بمجرد توفر المحتوى.
تتيح هذه الإمكانية عرض الإخراج تدريجيا. يمكنك تمكين الدفق عن طريق تحديد "stream": true.
يتكون تنسيق الإخراج من مجموعات أحداث Server-Sent (SSE) كما هو محدد في مواصفات OpenAI Chat Completions.
POST {{baseAddress}}/pirate/v1/chat/completions
Content-Type: application/json
{
"model": "pirate",
"stream": true,
"messages": [
{
"role": "user",
"content": "Hey mate!"
}
]
}
والإخراج الذي نحصل عليه هو مجموعة من مجموعات ChatCompletions:
data: {"id":"chatcmpl-xwKgBbFtSEQ3OtMf21ctMS2Q8lo93","choices":[],"object":"chat.completion.chunk","created":0,"model":"gpt-5"}
data: {"id":"chatcmpl-xwKgBbFtSEQ3OtMf21ctMS2Q8lo93","choices":[{"index":0,"finish_reason":"stop","delta":{"content":"","role":"assistant"}}],"object":"chat.completion.chunk","created":0,"model":"gpt-5"}
...
data: {"id":"chatcmpl-xwKgBbFtSEQ3OtMf21ctMS2Q8lo93","choices":[],"object":"chat.completion.chunk","created":0,"model":"gpt-5","usage":{"completion_tokens":34,"prompt_tokens":23,"total_tokens":57,"completion_tokens_details":{"accepted_prediction_tokens":0,"audio_tokens":0,"reasoning_tokens":0,"rejected_prediction_tokens":0},"prompt_tokens_details":{"audio_tokens":0,"cached_tokens":0}}}
تحتوي استجابة الدفق على معلومات مشابهة، ولكن يتم تسليمها كأحداث Server-Sent.
واجهة برمجة التطبيقات للردود
توفر واجهة برمجة تطبيقات الاستجابات ميزات متقدمة بما في ذلك إدارة المحادثات والتدفق والدعم لعمليات الوكيل طويلة الأمد.
إعداد عامل في ASP.NET Core مع تكامل واجهة برمجة تطبيقات الاستجابات
فيما يلي مثال كامل باستخدام واجهة برمجة تطبيقات الاستجابات:
المتطلبات الأساسية
اتبع نفس المتطلبات الأساسية مثل مثال إكمال الدردشة (الخطوات 1-3).
4. إضافة التعليمات البرمجية إلى Program.cs
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI.Hosting;
using Microsoft.Extensions.AI;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();
builder.Services.AddSwaggerGen();
string endpoint = builder.Configuration["AZURE_OPENAI_ENDPOINT"]
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = builder.Configuration["AZURE_OPENAI_DEPLOYMENT_NAME"]
?? throw new InvalidOperationException("AZURE_OPENAI_DEPLOYMENT_NAME is not set.");
// Register the chat client
IChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsIChatClient();
builder.Services.AddSingleton(chatClient);
builder.AddOpenAIResponses();
builder.AddOpenAIConversations();
// Register an agent
var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate.");
var app = builder.Build();
app.MapOpenApi();
app.UseSwagger();
app.UseSwaggerUI();
// Expose the agent via OpenAI Responses protocol
app.MapOpenAIResponses(pirateAgent);
app.MapOpenAIConversations();
app.Run();
اختبار واجهة برمجة تطبيقات الاستجابات
واجهة برمجة تطبيقات الاستجابات مشابهة لإكمال الدردشة ولكنها ذات حالة، مما يسمح لك بتمرير معلمة conversation .
مثل إكمال الدردشة، فإنه يدعم المعلمة stream ، التي تتحكم في تنسيق الإخراج: إما استجابة JSON واحدة أو دفق من الأحداث.
تحدد واجهة برمجة تطبيقات الاستجابات أنواع أحداث الدفق الخاصة بها، بما في ذلك response.createdو response.completedresponse.output_item.addedresponse.output_item.doneو و وغيرها.
متابعة الاستجابة
يوفر بروتوكول الاستجابات طريقتين حصريتين للمتابعة:
- تعيين
previous_response_idإلى المعرف الذيresp_*تم إرجاعه بواسطة الاستجابة السابقة. يغير هذا المعرف كل دور ويتبع سلسلة الاستجابة هذه. - تعيين
conversationإلىconv_*معرف. يظل معرف المحادثة مستقرا عبر المنعطفات، وتتم إضافة المدخلات والمخرجات إلى تلك المحادثة.
MapOpenAIResponses يدير تخزين واجهة برمجة تطبيقات الاستجابات لنقاط النهاية الخاصة به. إذا كان التطبيق الخاص بك يمتلك المسار بدلا من ذلك ويستخدم OpenAIResponses المساعدين مع AgentSessionStore، OpenAIResponses.GetSessionStoreId(...) يرجع previous_response_id عند وجوده أو غير ذلك معرف المحادثة. بالنسبة لسلسلة الاستجابة، قم بتحميل اللقطة السابقة واحفظ جلسة العمل المتقدمة ضمن معرف الاستجابة الجديد. بالنسبة للمحادثة، قم بتحميل جلسة العمل وحفظها ضمن معرف المحادثة نفسه.
Important
تعامل مع معرفات الاستجابة والمحادثة كبيانات استمرار مبهمة، وليس بيانات اعتماد التخويل. قبل قبول previous_response_id أو conversation من عميل، تحقق من أن المستخدم أو المستأجر المصادق عليه يمتلك هذا المعرف. بالنسبة للمسار المملوك للتطبيق الذي يستخدم AgentSessionStore، قم بتمكين عزل الجلسة.
إنشاء محادثة واستجابة
يمكنك إرسال طلب استجابات مباشرة، أو يمكنك أولا إنشاء محادثة باستخدام واجهة برمجة تطبيقات المحادثات ثم ربط الطلبات اللاحقة بتلك المحادثة.
للبدء، قم بإنشاء محادثة جديدة:
POST http://localhost:5209/v1/conversations
Content-Type: application/json
{
"items": [
{
"type": "message",
"role": "user",
"content": "Hello!"
}
]
}
تتضمن الاستجابة معرف المحادثة:
{
"id": "conv_E9Ma6nQpRzYxRHxRRqoOWWsDjZVyZfKxlHhfCf02Yxyy9N2y",
"object": "conversation",
"created_at": 1762881679,
"metadata": {}
}
بعد ذلك، أرسل طلبا وحدد معلمة المحادثة.
(لتلقي الاستجابة كأحداث دفق، قم بتعيين "stream": true في الطلب.)
POST http://localhost:5209/pirate/v1/responses
Content-Type: application/json
{
"stream": false,
"conversation": "conv_E9Ma6nQpRzYxRHxRRqoOWWsDjZVyZfKxlHhfCf02Yxyy9N2y",
"input": [
{
"type": "message",
"role": "user",
"content": [
{
"type": "input_text",
"text": "are you a feminist?"
}
]
}
]
}
يقوم العامل بإرجاع الاستجابة وحفظ عناصر المحادثة إلى التخزين للاسترداد لاحقا:
{
"id": "resp_FP01K4bnMsyQydQhUpovK6ysJJroZMs1pnYCUvEqCZqGCkac",
"conversation": "conv_E9Ma6nQpRzYxRHxRRqoOWWsDjZVyZfKxlHhfCf02Yxyy9N2y",
"object": "response",
"created_at": 1762881518,
"status": "completed",
"incomplete_details": null,
"output": [
{
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Arrr, matey! As a pirate, I be all about respect for the crew, no matter their gender! We sail these seas together, and every hand on deck be valuable. A true buccaneer knows that fairness and equality be what keeps the ship afloat. So, in me own way, I’d say I be supportin’ all hearty souls who seek what be right! What say ye?"
}
],
"type": "message",
"status": "completed",
"id": "msg_1FAQyZcWgsBdmgJgiXmDyavWimUs8irClHhfCf02Yxyy9N2y"
}
],
"usage": {
"input_tokens": 26,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 85,
"output_tokens_details": {
"reasoning_tokens": 0
},
"total_tokens": 111
},
"tool_choice": null,
"temperature": 1,
"top_p": 1
}
تتضمن الاستجابة معرفات المحادثة والرسائل والمحتوى وإحصائيات الاستخدام.
لاسترداد عناصر المحادثة، أرسل هذا الطلب:
GET http://localhost:5209/v1/conversations/conv_E9Ma6nQpRzYxRHxRRqoOWWsDjZVyZfKxlHhfCf02Yxyy9N2y/items?include=string
يؤدي هذا إلى إرجاع استجابة JSON تحتوي على كل من رسائل الإدخال والإخراج:
{
"object": "list",
"data": [
{
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Arrr, matey! As a pirate, I be all about respect for the crew, no matter their gender! We sail these seas together, and every hand on deck be valuable. A true buccaneer knows that fairness and equality be what keeps the ship afloat. So, in me own way, I’d say I be supportin’ all hearty souls who seek what be right! What say ye?",
"annotations": [],
"logprobs": []
}
],
"type": "message",
"status": "completed",
"id": "msg_1FAQyZcWgsBdmgJgiXmDyavWimUs8irClHhfCf02Yxyy9N2y"
},
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "are you a feminist?"
}
],
"type": "message",
"status": "completed",
"id": "msg_iLVtSEJL0Nd2b3ayr9sJWeV9VyEASMlilHhfCf02Yxyy9N2y"
}
],
"first_id": "msg_1FAQyZcWgsBdmgJgiXmDyavWimUs8irClHhfCf02Yxyy9N2y",
"last_id": "msg_lUpquo0Hisvo6cLdFXMKdYACqFRWcFDrlHhfCf02Yxyy9N2y",
"has_more": false
}
كشف عوامل متعددة
يمكنك عرض عوامل متعددة في وقت واحد باستخدام كلا البروتوكولين:
var mathAgent = builder.AddAIAgent("math", instructions: "You are a math expert.");
var scienceAgent = builder.AddAIAgent("science", instructions: "You are a science expert.");
// Add both protocols
builder.AddOpenAIChatCompletions();
builder.AddOpenAIResponses();
var app = builder.Build();
// Expose both agents via Chat Completions
app.MapOpenAIChatCompletions(mathAgent);
app.MapOpenAIChatCompletions(scienceAgent);
// Expose both agents via Responses
app.MapOpenAIResponses(mathAgent);
app.MapOpenAIResponses(scienceAgent);
سيتوفر الوكلاء في:
- إكمال الدردشة:
/math/v1/chat/completionsو/science/v1/chat/completions - الاستجابات:
/math/v1/responsesو/science/v1/responses
نقاط النهاية المخصصة
يمكنك تخصيص مسارات نقطة النهاية:
// Custom path for Chat Completions
app.MapOpenAIChatCompletions(mathAgent, path: "/api/chat");
// Custom path for Responses
app.MapOpenAIResponses(scienceAgent, responsesPath: "/api/responses");
الاتصال بنقاط النهاية OpenAI-Compatible (Python)
يدعم Python OpenAIChatCompletionClient وكلاهما OpenAIChatClient معلمةbase_url، ما يتيح لك الاتصال بأي نقطة نهاية متوافقة مع OpenAI — بما في ذلك العوامل المستضافة ذاتيا أو خوادم الاستدلال المحلية (Ollama أو LM Studio أو vLLM) أو واجهات برمجة التطبيقات المتوافقة مع OpenAI التابعة لجهة خارجية.
pip install agent-framework
عميل إكمال الدردشة
استخدم OpenAIChatCompletionClient مع base_url للإشارة إلى أي خادم متوافق مع إكمال الدردشة:
import asyncio
from agent_framework import Agent, tool
from agent_framework.openai import OpenAIChatCompletionClient
@tool(approval_mode="never_require")
def get_weather(location: str) -> str:
"""Get the weather for a location."""
return f"Weather in {location}: sunny, 22°C"
async def main():
# Point to any OpenAI-compatible endpoint
agent = Agent(
client=OpenAIChatCompletionClient(
base_url="http://localhost:11434/v1/", # e.g. Ollama
api_key="not-needed", # placeholder for local servers
model="llama3.2",
),
name="WeatherAgent",
instructions="You are a helpful weather assistant.",
tools=get_weather,
)
response = await agent.run("What's the weather in Seattle?")
print(response)
asyncio.run(main())
عميل الاستجابات
استخدم OpenAIChatClient مع base_url لنقاط النهاية التي تدعم واجهة برمجة تطبيقات الاستجابات:
import asyncio
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
async def main():
agent = Agent(
client=OpenAIChatClient(
base_url="https://your-hosted-agent.example.com/v1/",
api_key="your-api-key",
model="gpt-4o-mini",
),
name="Assistant",
instructions="You are a helpful assistant.",
)
# Non-streaming
response = await agent.run("Hello!")
print(response)
# Streaming
async for chunk in agent.run("Tell me a joke", stream=True):
if chunk.text:
print(chunk.text, end="", flush=True)
asyncio.run(main())
خوادم OpenAI-Compatible الشائعة
base_url يعمل الأسلوب مع أي خادم يعرض تنسيق OpenAI Chat Completions:
| الخادم | عنوان URL الأساسي | Notes |
|---|---|---|
| أولاما | http://localhost:11434/v1/ |
الاستدلال المحلي، لا حاجة إلى مفتاح واجهة برمجة التطبيقات |
| LM Studio | http://localhost:1234/v1/ |
الاستدلال المحلي باستخدام واجهة المستخدم الرسومية |
| vLLM | http://localhost:8000/v1/ |
خدمة عالية الإنتاجية |
| مايكروسوفت فاوندري | نقطة نهاية النشر الخاصة بك | يستخدم بيانات اعتماد Azure |
| وكلاء إطار عمل العامل المستضاف | نقطة نهاية الوكيل | .NET العوامل المكشوفة عبرMapOpenAIChatCompletions |
Note
يمكنك أيضا تعيين OPENAI_BASE_URL متغير البيئة بدلا من التمرير base_url مباشرة. سيستخدمه العميل تلقائيا.
استخدام عملاء Azure OpenAI
استخدم نفس عملاء OpenAI العامين Azure OpenAI عن طريق تمرير مدخلات توجيه Azure صريحة بدلا من base_url:
import os
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential
agent = Agent(
client=OpenAIChatClient(
model=os.environ["AZURE_OPENAI_CHAT_MODEL"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
credential=AzureCliCredential(),
),
name="Assistant",
instructions="You are a helpful assistant.",
)
تكوين مع متغيرات البيئة:
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_CHAT_MODEL="gpt-4o-mini"
export AZURE_OPENAI_API_VERSION="your-api-version"
OpenAIChatClient
AZURE_OPENAI_CHAT_MODELيفضل ؛ AZURE_OPENAI_MODEL يبقى الاحتياطي المشترك إذا كنت بحاجة إلى واحد.
يستخدم Go الحزمة provider/openaiprovider مع عميل OpenAI Go الرسمي. استخدم openaiprovider.NewChatCompletionsAgent لنقاط النهاية المتوافقة مع إكمال الدردشة وتكوين Azure OpenAI باستخدام خيارات Azure لعميل OpenAI.
import (
"github.com/microsoft/agent-framework-go/provider/openaiprovider"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/azure"
)
a := openaiprovider.NewChatCompletionsAgent(
openai.NewClient(
azure.WithEndpoint(endpoint, apiVersion),
azure.WithTokenCredential(token),
),
openaiprovider.AgentConfig{
Model: deployment,
Instructions: "You are a helpful assistant.",
},
)
Tip
راجع نموذج موفر OpenAI وعينةموفر OpenAI Azure للحصول على أمثلة كاملة قابلة للتشغيل.
انظر أيضاً
- نظرة عامة على عمليات التكامل
- استضافة A2A
- مرجع واجهة برمجة تطبيقات إكمال دردشة OpenAI
- مرجع واجهة برمجة تطبيقات استجابات OpenAI