إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يدعم Microsoft Agent Framework وكلاء OpenAI في C# Python وGo. يدعم C# و Python نوعين من عملاء OpenAI — الاستجابات وإكمال الدردشة — بينما يستخدم Go حاليا موفر إكمال الدردشة. الاستجابات هي العميل الأساسي الموصى به عند توفرها: تستهدف واجهة برمجة تطبيقات استجابات OpenAI الأحدث وتدعم المجموعة الكاملة من الأدوات المستضافة (مترجم التعليمات البرمجية، والبحث في الملفات، والبحث على الويب، وMCP المستضاف، وإنشاء الصور). استخدم إكمال الدردشة عندما تحتاج إلى توافق نموذج واسع أو دعم Go أو لديك تكامل "إكمال الدردشة" موجود للاحتفاظ به.
| نوع العميل | API | أفضل ل |
|---|---|---|
| الاستجابات (مستحسن) | واجهة برمجة التطبيقات للردود | وكلاء كاملو الميزات مع أدوات مستضافة (مترجم التعليمات البرمجية، البحث عن الملفات، البحث على الويب، MCP المستضاف) |
| إكمال الدردشة | واجهة برمجة تطبيقات إكمال الدردشة | وكلاء بسيطون، دعم نموذج واسع |
Note
تم إهمال واجهة برمجة تطبيقات مساعدي OpenAI بواسطة OpenAI. يجب أن تستخدم التعليمات البرمجية الجديدة عميل الاستجابات. إذا كنت تقوم بالترحيل من تطبيق قائم على المساعدين موجود، فشاهد دليل الترحيل نواة دلالية.
الشروع في العمل
أضف حزم NuGet المطلوبة إلى مشروعك.
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
عميل الاستجابات
عميل الاستجابات هو العميل الأساسي الموصى به ويوفر أغنى دعم أداة بما في ذلك مترجم التعليمات البرمجية والبحث في الملفات والبحث على الويب وMCP المستضاف.
using Microsoft.Agents.AI;
using OpenAI;
OpenAIClient client = new OpenAIClient("<your_api_key>");
var responsesClient = client.GetResponsesClient();
AIAgent agent = responsesClient.AsAIAgent(
model: "gpt-4o-mini",
instructions: "You are a helpful coding assistant.",
name: "CodeHelper");
Console.WriteLine(await agent.RunAsync("Write a Python function to sort a list."));
الأدوات المدعومة: أدوات الوظيفة، والموافقة على الأدوات، ومترجم التعليمات البرمجية، والبحث في الملفات، والبحث على الويب، وMCP المستضاف، وأدوات MCP المحلية.
عميل إكمال الدردشة
يوفر عميل إكمال الدردشة طريقة مباشرة لإنشاء وكلاء باستخدام واجهة برمجة تطبيقات إكمال الدردشة. استخدمه عندما تحتاج إلى توافق نموذج واسع أو يكون لديك تكامل "إكمال الدردشة" الحالي.
using Microsoft.Agents.AI;
using OpenAI;
OpenAIClient client = new OpenAIClient("<your_api_key>");
var chatClient = client.GetChatClient("gpt-4o-mini");
AIAgent agent = chatClient.AsAIAgent(
instructions: "You are good at telling jokes.",
name: "Joker");
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));
الأدوات المدعومة: أدوات الدالة، البحث على الويب، أدوات MCP المحلية.
عميل المساعدين
Note
تم إهمال واجهة برمجة تطبيقات مساعدي OpenAI بواسطة OpenAI. لم يعد إطار عمل العامل يوثق عميل المساعدين — استخدم عميل الاستجابات أعلاه للتعليمات البرمجية الجديدة. لترحيل تطبيق موجود، راجع دليل الترحيل نواة دلالية.
استخدام العامل
ينتج كلا النوعين من العملاء معيارا AIAgent يدعم نفس عمليات العامل (الدفق ومؤشرات الترابط والبرامج الوسيطة).
لمزيد من المعلومات، راجع البرامج التعليمية بدء الاستخدام.
ادوات
يعرض عملاء OpenAI .NET أسطح أدوات مختلفة اعتمادا على واجهة برمجة التطبيقات التي يستهدفونها. تنطبق نفس المصفوفة على مطابقة عملاء OpenAI Azure على صفحة موفر OpenAI Azure.
| الأداة | الردود | إكمال الدردشة |
|---|---|---|
| أدوات الدالة | ✅ | ✅ |
| الموافقة على الأداة | ✅ | ✅ |
| مترجم شفرة | ✅ | ❌ |
| البحث عن الملفات | ✅ | ❌ |
| بحث الويب | ✅ | ✅ |
| أدوات MCP المستضافة | ✅ | ❌ |
| أدوات MCP المحلية | ✅ | ✅ |
Note
يتم توفير الموافقة على الأداة من قبل عميل الدردشة لاستدعاء الوظائف في إطار العمل، لذلك يعمل مع أي استدعاء أداة دالة بغض النظر عن واجهة برمجة التطبيقات الأساسية.
Note
تم إهمال واجهة برمجة تطبيقات مساعدي OpenAI بواسطة OpenAI، ولم يعد Python يشحن عميل/موفر توافق المساعدين. استخدم OpenAIChatClient للاستجابات أو OpenAIChatCompletionClient لإكمال الدردشة. إذا كنت تقوم بالترحيل من إصدار سابق من Agent Framework Python، فشاهد دليل التغييرات الهامة Python. إذا كنت تقوم بالترحيل من نواة دلالية، فشاهد دليل الترحيل نواة دلالية.
Tip
في Python، يستخدم Azure OpenAI الآن نفس agent_framework.openai العملاء الموضحين هنا. قم بتمرير مدخلات توجيه Azure صريحة مثل credential أو azure_endpoint عندما تريد توجيه Azure، ثم قم بتعيين api_version سطح واجهة برمجة التطبيقات Azure الذي تريد استخدامه. إذا OPENAI_API_KEY تم تكوينه، يبقى العملاء العامون على OpenAI حتى عندما AZURE_OPENAI_* تكون المتغيرات موجودة أيضا. إذا كان لديك بالفعل عنوان URL كامل .../openai/v1 ، فاستخدم base_url بدلا من azure_endpoint. للحصول على نقاط نهاية مشروع Microsoft Foundry وخدمة عامل Foundry، راجع صفحة موفر Microsoft Foundry. للحصول على أوقات التشغيل المحلية، راجع Foundry Local.
التثبيت
pip install agent-framework-openai
agent-framework-openaiهي حزمة موفر Python الاختيارية لكل من OpenAI المباشر واستخدام OpenAI Azure.
إعادة استخدام عميل الاستجابات بشكل متزامن
يمكن أن يخدم مثيل واحد OpenAIChatClient مكالمات متزامنة غير متزامنة على نفس حلقة الحدث، بما في ذلك الدفق المتداخل والمكالمات غير المتدفقة. لا ينطبق هذا الضمان على OpenAIChatCompletionClient.
إنشاء منفصل Agent و AgentSession لكل تشغيل متزامن، وتمرير رسائل وخيارات منفصلة. يجب أن تدعم البرامج الوسيطة والأدوات واسترجاعات الاتصال التي يوفرها المستخدم أيضا التزامن. لا تشارك العميل عبر مؤشرات ترابط نظام التشغيل أو حلقات الأحداث، أو قم بتحول تكوينه أثناء تنشيط المكالمات.
الإعداد
يستخدم عملاء الدردشة Python OpenAI أنماط متغير البيئة هذه:
OPENAI_API_KEY="your-openai-api-key"
OPENAI_CHAT_MODEL="gpt-4o-mini"
# Optional shared fallback:
# OPENAI_MODEL="gpt-4o-mini"
الميزات الشائعة
تدعم أنواع العملاء هذه ميزات الوكيل القياسية هذه:
أدوات الدالة
from agent_framework import Agent, tool
@tool
def get_weather(location: str) -> str:
"""Get the weather for a given location."""
return f"The weather in {location} is sunny, 25°C."
async def example():
agent = Agent(
client=OpenAIChatClient(),
instructions="You are a weather assistant.",
tools=get_weather,
)
result = await agent.run("What's the weather in Tokyo?")
print(result)
محادثات متعددة الأدوار
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
async def thread_example():
agent = Agent(
client=OpenAIChatClient(),
instructions="You are a helpful assistant.",
)
session = agent.create_session()
result1 = await agent.run("My name is Alice", session=session)
print(result1)
result2 = await agent.run("What's my name?", session=session)
print(result2) # Remembers "Alice"
البث المباشر
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
async def streaming_example():
agent = Agent(
client=OpenAIChatClient(),
instructions="You are a creative storyteller.",
)
print("Agent: ", end="", flush=True)
async for chunk in agent.run("Tell me a short story about AI.", stream=True):
if chunk.text:
print(chunk.text, end="", flush=True)
print()
التخزين المؤقت الفوري
على النماذج التي تدعم نقاط التوقف الصريحة لذاكرة التخزين المؤقت للمطالبة، OpenAIChatClient يمكن استخدام prompt_cache_keyprompt_cache_optionsو و Content.additional_properties["prompt_cache_breakpoint"] للتحكم في البادئة القابلة لإعادة الاستخدام. يمكن فوترة عمليات كتابة ذاكرة التخزين المؤقت بشكل منفصل على النماذج المدعومة.
يتم تسوية استخدام ذاكرة التخزين المؤقت OpenAI في response.usage_details:
-
cache_creation_input_token_count- الرموز المميزة للإدخال المكتوبة إلى ذاكرة التخزين المؤقت التي يديرها الموفر. -
cache_read_input_token_count- رموز الإدخال المميزة التي يتم تقديمها من ذاكرة التخزين المؤقت.
عند تمكين OpenTelemetry، تعين هذه القيم إلى gen_ai.usage.cache_creation.input_tokens و gen_ai.usage.cache_read.input_tokens.
import asyncio
import time
from agent_framework import Content, Message
from agent_framework.openai import OpenAIChatClient, OpenAIChatOptions
from dotenv import load_dotenv
load_dotenv()
# A stable block of context that is reused across requests, for example a product
# catalog, a policy document, or long system guidance. Repeated here to clear the
# 1024-token minimum a cache breakpoint requires.
STABLE_CONTEXT = (
"You are a support assistant for the Contoso appliance store. "
"Always answer briefly, quote the relevant catalog section, and never invent "
"model numbers. If a question is out of scope, say so and point the customer "
"to support@contoso.example. "
) * 40
def build_messages(question: str) -> list[Message]:
"""Build a request with a cache breakpoint at the end of the stable prefix."""
return [
Message(
role="user",
contents=[
Content.from_text(
STABLE_CONTEXT,
additional_properties={"prompt_cache_breakpoint": {"mode": "explicit"}},
)
],
),
Message(role="user", contents=[Content.from_text(question)]),
]
async def main() -> None:
print("\033[92m=== OpenAI Chat Client Prompt Caching Example ===\033[0m\n")
client = OpenAIChatClient[OpenAIChatOptions](model="gpt-5.6-luna")
options: OpenAIChatOptions = {
"prompt_cache_options": {"mode": "explicit"},
"prompt_cache_key": f"contoso_appliance_store-{time.time()}",
}
questions = ["Do you sell refrigerators?", "What is the return policy contact?"]
for turn, question in enumerate(questions, start=1):
response = await client.get_response(build_messages(question), options=options)
usage = response.usage_details or {}
cached = usage.get("cache_read_input_token_count", 0)
cached_write = usage.get("cache_creation_input_token_count", 0)
print(f"Turn {turn}: {question}")
print(f" Answer: {response.text}")
print(f" Cached input tokens (read): {cached}\n")
print(f" Cached input tokens (created): {cached_write}\n")
if turn < len(questions):
# A freshly written cache entry becomes readable shortly after the request
# completes; the brief pause keeps the next turn from racing this one.
await asyncio.sleep(2)
print("The first turn writes the prefix to the cache; later turns read it back.")
استخدام العامل
تنتج جميع أنواع العملاء معيارا Agent يدعم نفس العمليات.
لمزيد من المعلومات، راجع البرامج التعليمية بدء الاستخدام.
ادوات
يعرض عملاء Python OpenAI أسطح أدوات مختلفة اعتمادا على واجهة برمجة التطبيقات الأساسية.
OpenAIChatClient(الاستجابات) تشحن مصانع الأدوات المستضافة عبر client.get_*_tool(...) — get_code_interpreter_toolو get_file_search_toolوget_shell_toolget_web_search_toolget_image_generation_tool.get_mcp_tool
OpenAIChatCompletionClient يعرض get_web_search_toolفقط . يعمل كلاهما مع أدوات الدالة وخوادم MCP المحلية.
تنطبق نفس المصفوفة عند توجيه هؤلاء العملاء إلى Azure OpenAI — راجع Azure OpenAI.
| الأداة |
OpenAIChatClient (الاستجابات) |
OpenAIChatCompletionClient (إكمال الدردشة) |
|---|---|---|
| أدوات الدالة | ✅ | ✅ |
| الموافقة على الأداة | ✅ | ✅ |
| مترجم شفرة | ✅ | ❌ |
| البحث عن الملفات | ✅ | ❌ |
| بحث الويب | ✅ | ✅ |
| إنشاء الصور |
✅ (get_image_generation_tool) |
❌ |
| Hosted Shell |
✅ (get_shell_tool) |
❌ |
| أدوات MCP المستضافة | ✅ | ❌ |
| أدوات MCP المحلية | ✅ | ✅ |
Note
تتم معالجة الموافقة على الأداة من قبل عميل الدردشة لاستدعاء الوظائف في إطار العمل، لذلك يعمل مع أي استدعاء أداة دالة بغض النظر عن واجهة برمجة التطبيقات الأساسية.
اكتمال دردشة OpenAI
openaiprovider تنشئ الحزمة عوامل باستخدام واجهة برمجة تطبيقات OpenAI Chat Completions.
التثبيت
go get github.com/microsoft/agent-framework-go
Direct OpenAI
import (
"github.com/microsoft/agent-framework-go/agent"
"github.com/microsoft/agent-framework-go/provider/openaiprovider"
"github.com/openai/openai-go/v3"
)
a := openaiprovider.NewChatCompletionsAgent(
openai.NewClient(), // uses OPENAI_API_KEY env var
openaiprovider.AgentConfig{
Model: "gpt-4o-mini",
Instructions: "You are a helpful assistant.",
Config: agent.Config{
Name: "MyAgent",
},
},
)
resp, err := a.RunText(ctx, "Tell me a joke.").Collect()
Azure OpenAI
استخدم نفس openaiprovider الحزمة مع بيانات اعتماد Azure:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
openai "github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/azure"
)
token, _ := azidentity.NewDefaultAzureCredential(nil)
a := openaiprovider.NewChatCompletionsAgent(
openai.NewClient(
azure.WithEndpoint(endpoint, apiVersion),
azure.WithTokenCredential(token),
),
openaiprovider.AgentConfig{
Model: deployment,
Instructions: "You are a helpful assistant.",
Config: agent.Config{
},
},
)
تحذير
azidentity.NewDefaultAzureCredential مناسب للتنمية ولكنه يتطلب دراسة متأنية في الإنتاج. في الإنتاج، ضع في اعتبارك استخدام بيانات اعتماد معينة، مثل azidentity.NewManagedIdentityCredential، لتجنب مشكلات زمن الانتقال، وبحث بيانات الاعتماد غير المقصودة، والمخاطر الأمنية المحتملة من الآليات الاحتياطية.
خيارات مخصصة
قم بتمرير الخيارات الخاصة بموفر الخدمة باستخدام openaiprovider.ChatCompletionNewParams:
resp, err := a.RunText(ctx, "Hello!",
openaiprovider.ChatCompletionNewParams(openai.ChatCompletionNewParams{
Temperature: openai.Float(0.7),
}),
).Collect()
الأدوات المدعومة: أدوات الدالة، البحث على الويب، أدوات MCP المحلية.
Tip
راجع نموذج موفر OpenAIوعينة Azure OpenAI للحصول على أمثلة كاملة.