Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat kami mentransisikan beberapa agen dari tahap eksperimental ke tahap kandidat rilis, kami telah memperbarui API untuk menyederhanakan dan memperlancar penggunaannya. Lihat panduan skenario tertentu untuk mempelajari cara memperbarui kode yang ada agar berfungsi dengan API terbaru yang tersedia.
API Umum untuk Pemanggilan Agen
Dalam versi 1.43.0 kami merilis API pemanggilan agen umum baru, yang akan memungkinkan semua jenis agen dipanggil melalui API umum.
Untuk mengaktifkan API baru ini, kami memperkenalkan gagasan AgentThread, yang mewakili utas percakapan dan menyederhanakan berbagai persyaratan manajemen utas untuk jenis-jenis agen yang berbeda. Untuk beberapa jenis agen, di masa depan juga akan memungkinkan implementasi utas yang berbeda menggunakan agen yang sama.
Metode Invoke umum yang kami perkenalkan memungkinkan Anda menyampaikan pesan yang ingin Anda berikan kepada agen dan AgentThreadopsional. Jika AgentThread disediakan, ini akan melanjutkan percakapan yang sudah ada di AgentThread. Jika AgentThread tidak disediakan, utas default baru akan dibuat dan dikembalikan sebagai bagian dari respons.
Dimungkinkan juga untuk membuat instans AgentThread secara manual, misalnya dalam kasus di mana Anda mungkin memiliki ID thread dari layanan agen dasar, dan Anda ingin melanjutkan thread tersebut. Anda mungkin juga ingin menyesuaikan opsi utas, misalnya alat yang terkait.
Berikut adalah contoh sederhana tentang bagaimana agen apa pun sekarang dapat digunakan dengan kode agnostik agen.
private async Task UseAgentAsync(Agent agent, AgentThread? agentThread = null)
{
// Invoke the agent, and continue the existing thread if provided.
var responses = agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "Hi"), agentThread);
// Output results.
await foreach (AgentResponseItem<ChatMessageContent> response in responses)
{
Console.WriteLine(response);
agentThread = response.Thread;
}
// Delete the thread if required.
if (agentThread is not null)
{
await agentThread.DeleteAsync();
}
}
Perubahan ini diterapkan di:
Opsi Proses Agen Azure AI
AzureAIAgent saat ini hanya mendukung utas jenis AzureAIAgentThread.
Selain memungkinkan thread dibuat secara otomatis untuk Anda saat pemanggilan agen, Anda juga dapat membuat instance AzureAIAgentThreadsecara manual.
AzureAIAgentThread mendukung pembuatan dengan menggunakan alat dan metadata yang disesuaikan, serta pesan untuk memulai percakapan.
AgentThread thread = new AzureAIAgentThread(
agentsClient,
messages: seedMessages,
toolResources: tools,
metadata: metadata);
Anda juga dapat membuat instans AzureAIAgentThread yang melanjutkan percakapan yang sudah ada.
AgentThread thread = new AzureAIAgentThread(
agentsClient,
id: "my-existing-thread-id");
Opsi Utas Agen Bedrock
BedrockAgent saat ini hanya mendukung utas jenis BedrockAgentThread.
Selain memungkinkan thread dibuat secara otomatis untuk Anda saat pemanggilan agen, Anda juga dapat membuat instance BedrockAgentThreadsecara manual.
AgentThread thread = new BedrockAgentThread(amazonBedrockAgentRuntimeClient);
Anda juga dapat membuat instans BedrockAgentThread yang melanjutkan percakapan yang sudah ada.
AgentThread thread = new BedrockAgentThread(
amazonBedrockAgentRuntimeClient,
sessionId: "my-existing-session-id");
Opsi Utas untuk Agen Penyelesaian Obrolan
ChatCompletionAgent saat ini hanya mendukung utas jenis ChatHistoryAgentThread.
ChatHistoryAgentThread menggunakan objek ChatHistory di dalam memori untuk menyimpan pesan di utas.
Selain memungkinkan thread dibuat secara otomatis untuk Anda saat pemanggilan agen, Anda juga dapat membuat instance ChatHistoryAgentThreadsecara manual.
AgentThread thread = new ChatHistoryAgentThread();
Anda juga dapat membuat instans ChatHistoryAgentThread yang melanjutkan percakapan yang ada dengan meneruskan objek ChatHistory dengan pesan yang ada.
ChatHistory chatHistory = new([new ChatMessageContent(AuthorRole.User, "Hi")]);
AgentThread thread = new ChatHistoryAgentThread(chatHistory: chatHistory);
Pengaturan Diskusi Asisten OpenAI
OpenAIAssistantAgent saat ini hanya mendukung utas jenis OpenAIAssistantAgentThread.
Selain memungkinkan thread dibuat secara otomatis untuk Anda saat pemanggilan agen, Anda juga dapat membuat instance OpenAIAssistantAgentThreadsecara manual.
OpenAIAssistantAgentThread mendukung pembuatan dengan menggunakan alat dan metadata yang disesuaikan, serta pesan untuk memulai percakapan.
AgentThread thread = new OpenAIAssistantAgentThread(
assistantClient,
messages: seedMessages,
codeInterpreterFileIds: fileIds,
vectorStoreId: "my-vector-store",
metadata: metadata);
Anda juga dapat membuat instans OpenAIAssistantAgentThread yang melanjutkan percakapan yang sudah ada.
AgentThread thread = new OpenAIAssistantAgentThread(
assistantClient,
id: "my-existing-thread-id");
Panduan Migrasi OpenAIAssistantAgent C#
Kami baru-baru ini menerapkan perubahan signifikan di sekitar OpenAIAssistantAgent di Kernel Semantik Agent Framework.
Perubahan ini diterapkan di:
Perubahan ini dimaksudkan untuk:
- Sesuaikan dengan pola penggunaan untuk
AzureAIAgentkami. - Perbaiki bug di sekitar pola inisialisasi statis.
- Hindari membatasi fitur berdasarkan abstraksi SDK yang mendasarinya.
Panduan ini menyediakan instruksi langkah demi langkah untuk memigrasikan kode C# Anda dari implementasi lama ke yang baru. Perubahan termasuk pembaruan untuk membuat asisten, mengelola siklus hidup asisten, menangani thread, file, dan penyimpanan berbasis vektor.
1. Instansiasi Pelanggan
Sebelumnya, OpenAIClientProvider diperlukan untuk membuat OpenAIAssistantAgentapa pun. Dependensi ini telah disederhanakan.
Cara Baru
OpenAIClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(new AzureCliCredential(), new Uri(endpointUrl));
AssistantClient assistantClient = client.GetAssistantClient();
Jalan Lama (Tidak Digunakan Lagi)
var clientProvider = new OpenAIClientProvider(...);
2. Siklus Hidup Asisten
Membuat sebuah Asisten
Anda sekarang dapat langsung menginisialisasi OpenAIAssistantAgent menggunakan definisi Asisten yang sudah ada atau yang baru dari AssistantClient.
Cara Baru
Assistant definition = await assistantClient.GetAssistantAsync(assistantId);
OpenAIAssistantAgent agent = new(definition, client);
Plugin dapat langsung disertakan selama inisialisasi:
KernelPlugin plugin = KernelPluginFactory.CreateFromType<YourPlugin>();
Assistant definition = await assistantClient.GetAssistantAsync(assistantId);
OpenAIAssistantAgent agent = new(definition, client, [plugin]);
Membuat definisi asisten baru menggunakan metode ekstensi:
Assistant assistant = await assistantClient.CreateAssistantAsync(
model,
name,
instructions: instructions,
enableCodeInterpreter: true);
Jalan Lama (Tidak Digunakan Lagi)
Sebelumnya, definisi asisten dikelola secara tidak langsung.
3. Memanggil Agen
Anda dapat menentukan RunCreationOptions secara langsung, memungkinkan akses penuh ke kemampuan SDK yang mendasar.
Cara Baru
RunCreationOptions options = new(); // configure as needed
var result = await agent.InvokeAsync(options);
Jalan Lama (Tidak Digunakan Lagi)
var options = new OpenAIAssistantInvocationOptions();
4. Penghapusan Asisten
Anda dapat langsung mengelola penghapusan asisten dengan AssistantClient.
await assistantClient.DeleteAssistantAsync(agent.Id);
5. Siklus Hidup Utas
Membuat (Thread)
Thread sekarang dikelola melalui AssistantAgentThread.
Cara Baru
var thread = new AssistantAgentThread(assistantClient);
// Calling CreateAsync is an optional step.
// A thread will be created automatically on first use if CreateAsync was not called.
// Note that CreateAsync is not on the AgentThread base implementation since not all
// agent services support explicit thread creation.
await thread.CreateAsync();
Jalan Lama (Tidak Digunakan Lagi)
Sebelumnya, manajemen utas tidak langsung atau dikelola oleh agen.
Penghapusan Utas
var thread = new AssistantAgentThread(assistantClient, "existing-thread-id");
await thread.DeleteAsync();
6. Siklus Hidup File
Pembuatan dan penghapusan file sekarang menggunakan OpenAIFileClient.
Unggahan File
string fileId = await client.UploadAssistantFileAsync(stream, "<filename>");
Penghapusan File
await client.DeleteFileAsync(fileId);
7. Siklus Hidup Toko Vektor
Penyimpanan vektor dikelola langsung melalui VectorStoreClient dengan metode ekstensi yang nyaman.
Pembuatan Toko Vektor
string vectorStoreId = await client.CreateVectorStoreAsync([fileId1, fileId2], waitUntilCompleted: true);
Penghapusan Penyimpanan Vektor
await client.DeleteVectorStoreAsync(vectorStoreId);
Kompatibilitas ke Belakang
Pola yang tidak digunakan lagi ditandai dengan [Obsolete]. Untuk menekan peringatan usang (CS0618), perbarui file proyek Anda sebagai berikut:
<PropertyGroup>
<NoWarn>$(NoWarn);CS0618</NoWarn>
</PropertyGroup>
Panduan migrasi ini membantu Anda bertransisi dengan lancar ke implementasi baru, menyederhanakan inisialisasi klien, manajemen sumber daya, dan integrasi dengan Kernel Semantik .NET SDK.
Penting
Untuk pengembang yang meningkatkan ke Kernel Semantik Python 1.26.1 atau yang lebih baru, pembaruan signifikan dan perubahan mendasar telah diperkenalkan untuk meningkatkan kerangka kerja agen kami saat kami mendekati peluncuran umum.
Perubahan ini diterapkan di:
Perubahan sebelumnya diterapkan di:
Panduan ini menyediakan instruksi langkah demi langkah untuk memigrasikan kode Python Anda dari implementasi lama ke implementasi baru.
Pengimpor Agen
Semua jalur impor agen telah dikonsolidasikan di bawah semantic_kernel.agents.
Gaya impor terbaru
from semantic_kernel.agents import (
AutoGenConversableAgent,
AzureAIAgent,
AzureAssistantAgent,
BedrockAgent,
ChatCompletionAgent,
OpenAIAssistantAgent,
)
Gaya impor sebelumnya (tidak digunakan lagi):
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.agents.autogen import AutoGenConversableAgent
from semantic_kernel.agents.azure_ai import AzureAIAgent
from semantic_kernel.agents.bedrock import BedrockAgent
from semantic_kernel.agents.open_ai import AzureAssistantAgent, OpenAIAssistantAgent
API Umum untuk Pemanggilan Agen
Pada Kernel Semantik Python 1.26.0 dan versi yang lebih baru, kami memperkenalkan abstraksi bersama baru untuk manajemen thread di semua agen. Untuk setiap agen, kami sekarang mengekspos kelas utas yang mengimplementasikan kelas dasar AgentThread, memungkinkan manajemen konteks melalui metode seperti create() dan delete().
Respons agen get_response(...), invoke(...), invoke_stream(...) sekarang mengembalikan AgentResponseItem[ChatMessageContent], yang memiliki dua atribut:
message: TMessage # Usually ChatMessageContent
thread: AgentThread # Contains the concrete type for the given agent
Menambahkan Pesan ke Utas
Pesan harus ditambahkan ke utas melalui argumen messages sebagai bagian dari metode-metode agen seperti get_response(...), invoke(...), atau invoke_stream(...).
Percakapan Agen Azure AI
Sebuah AzureAIAgentThread dapat dibuat sebagai berikut:
from semantic_kernel.agents import AzureAIAgentThread
thread = AzureAIAgentThread(
client: AIProjectClient, # required
messages: list[ThreadMessageOptions] | None = None, # optional
metadata: dict[str, str] | None = None, # optional
thread_id: str | None = None, # optional
tool_resources: "ToolResources | None" = None, # optional
)
Menyediakan thread_id (string) memungkinkan Anda untuk melanjutkan percakapan yang sudah ada. Jika dihilangkan, utas baru dibuat dan dikembalikan sebagai bagian dari respons agen.
Contoh implementasi lengkap:
import asyncio
from azure.identity.aio import DefaultAzureCredential
from semantic_kernel.agents import AzureAIAgent, AzureAIAgentSettings, AzureAIAgentThread
USER_INPUTS = [
"Why is the sky blue?",
"What are we talking about?",
]
async def main() -> None:
ai_agent_settings = AzureAIAgentSettings.create()
async with (
DefaultAzureCredential() as creds,
AzureAIAgent.create_client(credential=creds) as client,
):
# 1. Create an agent on the Azure AI agent service
agent_definition = await client.agents.create_agent(
model=ai_agent_settings.model_deployment_name,
name="Assistant",
instructions="Answer the user's questions.",
)
# 2. Create a Semantic Kernel agent for the Azure AI agent
agent = AzureAIAgent(
client=client,
definition=agent_definition,
)
# 3. Create a thread for the agent
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: AzureAIAgentThread = None
try:
for user_input in USER_INPUTS:
print(f"# User: {user_input}")
# 4. Invoke the agent with the specified message for response
response = await agent.get_response(messages=user_input, thread=thread)
print(f"# {response.content}: {response}")
thread = response.thread
finally:
# 6. Cleanup: Delete the thread and agent
await thread.delete() if thread else None
await client.agents.delete_agent(agent.id)
if __name__ == "__main__":
asyncio.run(main())
Utas Agen Bedrock
BedrockAgent menggunakan BedrockAgentThread untuk mengelola riwayat dan konteks percakapan. Anda dapat memberikan session_id untuk melanjutkan atau memulai konteks percakapan baru.
from semantic_kernel.agents import BedrockAgentThread
thread = BedrockAgentThread(
bedrock_runtime_client: Any,
session_id: str | None = None,
)
Jika tidak ada session_id yang disediakan, konteks baru dibuat secara otomatis.
Contoh implementasi lengkap:
import asyncio
from semantic_kernel.agents import BedrockAgent, BedrockAgentThread
async def main():
bedrock_agent = await BedrockAgent.create_and_prepare_agent(
"semantic-kernel-bedrock-agent",
instructions="You are a friendly assistant. You help people find information.",
)
# Create a thread for the agent
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: BedrockAgentThread = None
try:
while True:
user_input = input("User:> ")
if user_input == "exit":
print("\n\nExiting chat...")
break
# Invoke the agent
# The chat history is maintained in the session
response = await bedrock_agent.get_response(
input_text=user_input,
thread=thread,
)
print(f"Bedrock agent: {response}")
thread = response.thread
except KeyboardInterrupt:
print("\n\nExiting chat...")
return False
except EOFError:
print("\n\nExiting chat...")
return False
finally:
# Delete the agent
await bedrock_agent.delete_agent()
await thread.delete() if thread else None
if __name__ == "__main__":
asyncio.run(main())
Riwayat Percakapan Agen
ChatCompletionAgent menggunakan ChatHistoryAgentThread untuk mengelola riwayat percakapan. Ini dapat diinisialisasi sebagai berikut:
from semantic_kernel.agents import ChatHistoryAgentThread
thread = ChatHistoryAgentThread(
chat_history: ChatHistory | None = None,
thread_id: str | None = None
)
Menyediakan thread_id memungkinkan melanjutkan percakapan yang ada. Menghilangkannya akan membuat utas baru. Serialisasi dan rehidrasi status utas didukung untuk konteks percakapan yang berkelanjutan.
Contoh implementasi lengkap:
import asyncio
from semantic_kernel.agents import ChatCompletionAgent, ChatHistoryAgentThread
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
# Simulate a conversation with the agent
USER_INPUTS = [
"Hello, I am John Doe.",
"What is your name?",
"What is my name?",
]
async def main():
# 1. Create the agent by specifying the service
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="Assistant",
instructions="Answer the user's questions.",
)
# 2. Create a thread to hold the conversation
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread: ChatHistoryAgentThread = None
for user_input in USER_INPUTS:
print(f"# User: {user_input}")
# 3. Invoke the agent for a response
response = await agent.get_response(
messages=user_input,
thread=thread,
)
print(f"# {response.name}: {response}")
# 4. Store the thread, which allows the agent to
# maintain conversation history across multiple messages.
thread = response.thread
# 5. Cleanup: Clear the thread
await thread.delete() if thread else None
if __name__ == "__main__":
asyncio.run(main())
Percakapan Asisten OpenAI
AzureAssistantAgent dan OpenAIAssistantAgent menggunakan AssistantAgentThread untuk mengelola riwayat dan konteks percakapan:
from semantic_kernel.agents import ChatHistoryAgentThread
thread = AssistantAgentThread(
client: AsyncOpenAI,
thread_id: str | None = None,
messages: Iterable["ThreadCreateMessage"] | NotGiven = NOT_GIVEN,
metadata: dict[str, Any] | NotGiven = NOT_GIVEN,
tool_resources: ToolResources | NotGiven = NOT_GIVEN,
)
Jika thread_id disediakan, percakapan yang sudah ada akan dilanjutkan; jika tidak ada, utas baru akan dibuat.
Contoh implementasi lengkap:
# Copyright (c) Microsoft. All rights reserved.
import asyncio
from semantic_kernel.agents import AzureAssistantAgent
# Simulate a conversation with the agent
USER_INPUTS = [
"Why is the sky blue?",
"What is the speed of light?",
"What have we been talking about?",
]
async def main():
# 1. Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# 2. Create the assistant on the Azure OpenAI service
definition = await client.beta.assistants.create(
model=model,
instructions="Answer questions about the world in one sentence.",
name="Assistant",
)
# 3. Create a Semantic Kernel agent for the Azure OpenAI assistant
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
# 4. Create a new thread for use with the assistant
# If no thread is provided, a new thread will be
# created and returned with the initial response
thread = None
try:
for user_input in USER_INPUTS:
print(f"# User: '{user_input}'")
# 6. Invoke the agent for the current thread and print the response
response = await agent.get_response(messages=user_input, thread=thread)
print(f"# {response.name}: {response}")
thread = response.thread
finally:
# 7. Clean up the resources
await thread.delete() if thread else None
await agent.client.beta.assistants.delete(assistant_id=agent.id)
if __name__ == "__main__":
asyncio.run(main())
Input Pesan untuk Pemanggilan Agen
Implementasi sebelumnya hanya mengizinkan input pesan tunggal ke metode seperti get_response(...), invoke(...), dan invoke_stream(...). Kami sekarang telah memperbarui metode ini untuk mendukung beberapa messages (str | ChatMessageContent | list[str | ChatMessageContent]). Input pesan perlu diteruskan dengan messages argumen kata kunci, seperti agent.get_response(messages="user input") atau agent.invoke(messages="user input").
Metode pemanggilan agen memerlukan pembaruan sebagai berikut:
Cara Lama
response = await agent.get_response(message="some user input", thread=thread)
Cara Baru
response = await agent.get_response(messages=["some initial inputer", "other input"], thread=thread)
AzureAIAgent
Dalam Kernel Semantik Python 1.26.0+, pembuatan utas AzureAIAgent sekarang dikelola melalui objek AzureAIAgentThread, tidak langsung pada klien.
Cara Lama
thread = await client.agents.create_thread()
Cara Baru
from semantic_kernel.agents import AzureAIAgentThread
thread = AzureAIAgentThread(
client: AIProjectClient, # required
messages: list[ThreadMessageOptions] | None = None, # optional
metadata: dict[str, str] | None = None, # optional
thread_id: str | None = None, # optional
tool_resources: "ToolResources | None" = None, # optional
)
Jika thread_id tidak disediakan pada awalnya, maka utas baru akan dibuat dan dikembalikan dalam respons agen.
ChatCompletionAgent
ChatCompletionAgent telah diperbarui untuk menyederhanakan konfigurasi layanan, penanganan plugin, dan perilaku panggilan fungsi. Di bawah ini adalah perubahan utama yang harus Anda pertimbangkan saat bermigrasi.
1. Menentukan Layanan
Anda sekarang dapat menentukan layanan secara langsung sebagai bagian dari konstruktor agen:
Cara Baru
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="<name>",
instructions="<instructions>",
)
Catatan: Jika baik kernel maupun layanan disediakan, layanan akan diutamakan jika mereka memiliki service_id atau ai_model_id yang sama. Jika tidak, apabila terpisah, maka layanan AI pertama yang terdaftar di kernel akan digunakan.
Jalan Lama (Masih Valid)
Sebelumnya, Anda akan terlebih dahulu menambahkan layanan ke kernel dan kemudian meneruskan kernel ke agen:
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
kernel = Kernel()
kernel.add_service(AzureChatCompletion())
agent = ChatCompletionAgent(
kernel=kernel,
name="<name>",
instructions="<instructions>",
)
2. Menambahkan Plugin
Plugin sekarang dapat disediakan langsung melalui konstruktor:
Cara Baru
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="<name>",
instructions="<instructions>",
plugins=[SamplePlugin()],
)
Jalan Lama (Masih Valid)
Plugin sebelumnya harus ditambahkan ke kernel secara terpisah:
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
kernel = Kernel()
kernel.add_plugin(SamplePlugin())
agent = ChatCompletionAgent(
kernel=kernel,
name="<name>",
instructions="<instructions>",
)
Catatan: Kedua pendekatan tersebut valid, tetapi menentukan plugin secara langsung menyederhanakan inisialisasi.
3. Memanggil Agen
Anda sekarang memiliki dua cara untuk memanggil agen. Metode baru secara langsung mengambil satu respons, sementara metode lama mendukung streaming.
Cara Baru (Tanpa Utas/Konteks Percakapan)
response = await agent.get_response(messages="user input")
# response is of type AgentResponseItem[ChatMessageContent]
Catatan: jika respons berikutnya tidak menggunakan utas yang dikembalikan, percakapan akan menggunakan utas baru dan dengan demikian tidak akan dilanjutkan dengan konteks sebelumnya.
Cara Baru (Respons Tunggal dengan Konteks)
thread = ChatHistoryAgentThread()
for user_input in ["First user input", "Second User Input"]:
response = await agent.get_response(messages=user_input, thread=thread)
# response is of type AgentResponseItem[ChatMessageContent]
thread = response.thread
Cara Lama (Tidak Lagi Valid)
chat_history = ChatHistory()
chat_history.add_user_message("<user_input>")
response = agent.get_response(message="user input", chat_history=chat_history)
4. Mengontrol Pemanggilan Fungsi
Perilaku panggilan fungsi sekarang dapat dikontrol secara langsung saat menentukan layanan dalam konstruktor agen:
agent = ChatCompletionAgent(
service=AzureChatCompletion(),
name="<name>",
instructions="<instructions>",
plugins=[MenuPlugin()],
function_choice_behavior=FunctionChoiceBehavior.Auto(
filters={"included_functions": ["get_specials", "get_item_price"]}
),
)
Catatan: Sebelumnya, konfigurasi panggilan fungsi memerlukan penyiapan terpisah pada kernel atau objek layanan. Jika pengaturan eksekusi menentukan service_id atau ai_model_id yang sama dengan konfigurasi layanan AI, perilaku panggilan fungsi yang ditentukan dalam pengaturan eksekusi (melalui KernelArguments) akan lebih diutamakan daripada perilaku pilihan fungsi yang ditetapkan dalam konstruktor.
Pembaruan ini meningkatkan kesederhanaan dan konfigurasi, membuat ChatCompletionAgent lebih mudah diintegrasikan dan dikelola.
OpenAIAssistantAgent
Perubahan AzureAssistantAgent dan OpenAIAssistantAgent mencakup pembaruan untuk membuat asisten, membuat utas, menangani plugin, menggunakan alat penerjemah kode, bekerja dengan alat pencarian file, dan menambahkan pesan obrolan ke utas.
Menyiapkan Sumber Daya
Cara Lama
Klien AsyncAzureOpenAI dibuat sebagai bagian dari proses pembuatan objek Agen.
agent = await AzureAssistantAgent.create(
deployment_name="optional-deployment-name",
api_key="optional-api-key",
endpoint="optional-endpoint",
ad_token="optional-ad-token",
ad_token_provider=optional_callable,
default_headers={"optional_header": "optional-header-value"},
env_file_path="optional-env-file-path",
env_file_encoding="optional-env-file-encoding",
...,
)
Cara Baru
Agen menyediakan metode statis untuk membuat klien yang diperlukan untuk sumber daya yang ditentukan, di mana argumen kata kunci tingkat metode lebih diutamakan daripada variabel dan nilai lingkungan dalam file .env yang ada.
client, model = AzureAssistantAgent.setup_resources(
ad_token="optional-ad-token",
ad_token_provider=optional_callable,
api_key="optional-api-key",
api_version="optional-api-version",
base_url="optional-base-url",
default_headers="optional-default-headers",
deployment_name="optional-deployment-name",
endpoint="optional-endpoint",
env_file_path="optional-env-file-path",
env_file_encoding="optional-env-file-encoding",
token_scope="optional-token-scope",
)
1. Membuat Asisten
Cara Lama
agent = await AzureAssistantAgent.create(
kernel=kernel,
service_id=service_id,
name=AGENT_NAME,
instructions=AGENT_INSTRUCTIONS,
enable_code_interpreter=True,
)
atau
agent = await OpenAIAssistantAgent.create(
kernel=kernel,
service_id=service_id,
name=<name>,
instructions=<instructions>,
enable_code_interpreter=True,
)
Cara Baru
# Azure AssistantAgent
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<name>",
)
# Create the agent using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
atau
# OpenAI Assistant Agent
# Create the client using OpenAI resources and configuration
client, model = OpenAIAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<name>",
)
# Create the agent using the client and the assistant definition
agent = OpenAIAssistantAgent(
client=client,
definition=definition,
)
2. Membuat Utas
Cara Lama
thread_id = await agent.create_thread()
Cara Baru
from semantic_kernel.agents AssistantAgentThread, AzureAssistantAgent
client, model = AzureAssistantAgent.setup_resources()
# You may create a thread based on an existing thread id
# thread = AssistantAgentThread(client=client, thread_id="existing-thread-id")
# Otherwise, if not specified, a thread will be created during the first invocation
# and returned as part of the response
thread = None
async for response in agent.invoke(messages="user input", thread=thread):
# handle response
print(response)
thread = response.thread
3. Pengelolaan Plugin
Cara Lama
# Create the instance of the Kernel
kernel = Kernel()
# Add the sample plugin to the kernel
kernel.add_plugin(plugin=MenuPlugin(), plugin_name="menu")
agent = await AzureAssistantAgent.create(
kernel=kernel,
name="<name>",
instructions="<instructions>"
)
Catatan: Masih mungkin untuk mengelola plugin melalui kernel. Jika Anda tidak menyediakan kernel, kernel secara otomatis dibuat pada waktu pembuatan agen dan plugin akan ditambahkan ke instans tersebut.
Cara Baru
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="<instructions>",
name="<name>",
)
# Create the agent with plugins passed in as a list
agent = AzureAssistantAgent(
client=client,
definition=definition,
plugins=[MenuPlugin()],
)
Lihat implementasi sampel untuk detail selengkapnya.
4. Menggunakan Alat Penerjemah Kode
Cara Lama
csv_file_path = ...
agent = await AzureAssistantAgent.create(
kernel=kernel,
name="<name>",
instructions="<instructions>",
enable_code_interpreter=True,
code_interpreter_filenames=[csv_file_path],
)
Cara Baru
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
csv_file_path = ...
# Load the CSV file as a FileObject
with open(csv_file_path, "rb") as file:
file = await client.files.create(file=file, purpose="assistants")
# Get the code interpreter tool and resources
code_interpreter_tool, code_interpreter_tool_resource = AzureAssistantAgent.configure_code_interpreter_tool(file.id)
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
name="<name>",
instructions="<instructions>.",
tools=code_interpreter_tool,
tool_resources=code_interpreter_tool_resource,
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
Lihat implementasi sampel untuk detail selengkapnya.
5. Bekerja dengan Alat Pencarian File
Cara Lama
pdf_file_path = ...
agent = await AzureAssistantAgent.create(
kernel=kernel,
service_id=service_id,
name=AGENT_NAME,
instructions=AGENT_INSTRUCTIONS,
enable_file_search=True,
vector_store_filenames=[pdf_file_path],
)
Cara Baru
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
pdf_file_path = ...
# Load the employees PDF file as a FileObject
with open(pdf_file_path, "rb") as file:
file = await client.files.create(file=file, purpose="assistants")
# Create a vector store specifying the file ID to be used for file search
vector_store = await client.beta.vector_stores.create(
name="step4_assistant_file_search",
file_ids=[file.id],
)
file_search_tool, file_search_tool_resources = AzureAssistantAgent.configure_file_search_tool(vector_store.id)
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
instructions="Find answers to the user's questions in the provided file.",
name="FileSearch",
tools=file_search_tool,
tool_resources=file_search_tool_resources,
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
Lihat implementasi sampel untuk detail selengkapnya.
6. Menambahkan Pesan Obrolan ke Utas
Cara Lama
await agent.add_chat_message(
thread_id=thread_id,
message=ChatMessageContent(role=AuthorRole.USER, content=user_input)
)
Cara Baru
Catatan: Metode lama masih berfungsi jika Anda meneruskan ChatMessageContent, tetapi Anda sekarang juga dapat meneruskan string sederhana.
await agent.add_chat_message(
thread_id=thread_id,
message=user_input,
)
7. Membersihkan Sumber Daya
Cara Lama
await agent.delete_file(file_id)
await agent.delete_thread(thread_id)
await agent.delete()
Cara Baru
await client.files.delete(file_id)
await thread.delete()
await client.beta.assistants.delete(agent.id)
Menangani Output Terstruktur
Cara Lama
Tidak Lagi Tersedia dengan Cara Lama
Cara Baru
# Define a Pydantic model that represents the structured output from the OpenAI service
class ResponseModel(BaseModel):
response: str
items: list[str]
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()
# Create the assistant definition
definition = await client.beta.assistants.create(
model=model,
name="<name>",
instructions="<instructions>",
response_format=AzureAssistantAgent.configure_response_format(ResponseModel),
)
# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
client=client,
definition=definition,
)
Lihat implementasi sampel untuk detail selengkapnya.
Panduan migrasi ini akan membantu Anda memperbarui kode Anda ke implementasi baru, memanfaatkan konfigurasi berbasis klien, dan fitur yang ditingkatkan.
Agen tidak tersedia di Java.