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.
Menjelajahi Kernel Semantik
Penting
Fitur agen tunggal, seperti BedrockAgent
, saat ini dalam tahap eksperimental. Fitur-fitur ini sedang dalam pengembangan aktif dan dapat berubah sebelum mencapai ketersediaan umum.
Dokumentasi API terperinci yang terkait dengan diskusi ini tersedia di:
Dokumentasi API BedrockAgent segera hadir.
Dokumentasi API BedrockAgent segera hadir.
Fitur saat ini tidak tersedia di Java.
Apa itu BedrockAgent
?
Bedrock Agent adalah agen AI khusus dalam Semantic Kernel yang dirancang untuk berintegrasi dengan layanan Agen Amazon Bedrock. Seperti agen OpenAI dan Azure AI, Bedrock Agent memungkinkan kemampuan percakapan multi-giliran tingkat lanjut dengan integrasi alat (tindakan) yang mulus, tetapi beroperasi sepenuhnya di ekosistem AWS. Ini mengotomatiskan pemanggilan fungsi/alat (disebut grup tindakan di Bedrock), sehingga Anda tidak perlu mengurai dan menjalankan tindakan secara manual, dan mengelola status percakapan di AWS dengan aman melalui sesi, mengurangi kebutuhan untuk mempertahankan riwayat obrolan di aplikasi Anda.
Agen Bedrock berbeda dari jenis agen lain dalam beberapa cara utama:
Eksekusi Terkelola AWS: Tidak seperti Asisten OpenAI yang menggunakan cloud OpenAI atau Agen Azure AI yang menggunakan layanan Foundry Azure, Bedrock Agent berjalan di Amazon Bedrock. Anda harus memiliki akun AWS dengan akses ke Bedrock (dan izin IAM yang sesuai) untuk menggunakannya. Siklus hidup agen (pembuatan, sesi, penghapusan) dan eksekusi alat tertentu dikelola oleh layanan AWS, sementara alat panggilan fungsi dijalankan secara lokal dalam lingkungan Anda.
Pemilihan Model Fondasi: Saat membuat Bedrock Agent, Anda menentukan model fondasi mana (misalnya Amazon Titan atau model mitra) yang harus digunakannya. Hanya model yang telah Anda berikan akses yang dapat digunakan. Ini berbeda dari agen Chat Completion (yang Anda buat dengan titik akhir model langsung) - dengan Bedrock, model dipilih saat pembuatan agen sebagai kemampuan bawaan agen.
Persyaratan Peran IAM: Agen Bedrock memerlukan ARN peran IAM yang harus diberikan saat pembuatan. Peran ini harus memiliki izin untuk memanggil model yang dipilih (dan alat terintegrasi apa pun) atas nama Anda. Ini memastikan agen memiliki hak istimewa yang diperlukan untuk melakukan tindakannya (misalnya, menjalankan kode atau mengakses layanan AWS lainnya) di bawah akun AWS Anda.
Alat Bawaan (Grup Tindakan): Bedrock mendukung "grup tindakan" (alat) bawaan yang dapat dilampirkan ke agen. Misalnya, Anda dapat mengaktifkan grup tindakan Penerjemah Kode untuk memungkinkan agen menjalankan kode Python, atau grup tindakan Input Pengguna untuk memungkinkan agen meminta klarifikasi. Kemampuan ini serupa dengan plugin Code Interpreter OpenAI atau fungsi pemanggilan, tetapi di AWS, mereka dikonfigurasi secara eksplisit pada agen. Agen Bedrock juga dapat diperluas dengan plugin Kernel Semantik kustom (fungsi) untuk alat khusus domain, mirip dengan agen lain.
Thread berbasis sesi: Percakapan dengan Bedrock Agent berlangsung di thread yang terkait dengan sesi Bedrock di AWS. Setiap utas (sesi) diidentifikasi oleh ID unik yang disediakan oleh layanan Bedrock, dan riwayat percakapan disimpan oleh layanan daripada di dalam proses. Ini berarti dialog multi-giliran dipertahankan di AWS, dan Anda memperoleh konteks melalui ID sesi. Kelas Semantic Kernel
BedrockAgentThread
mengabstraksi detail ini – saat Anda menggunakannya, kelas ini akan membuat atau melanjutkan sesi Bedrock secara otomatis di belakang layar untuk agen.
Singkatnya, BedrockAgent
memungkinkan Anda memanfaatkan kerangka kerja agen dan alat Amazon Bedrock yang kuat melalui Semantic Kernel, menyediakan dialog yang diarahkan tujuan dengan model dan alat yang dihosting AWS. Ini mengotomatiskan seluk-beluk API Agen Bedrock (pembuatan agen, manajemen sesi, pemanggilan alat) sehingga Anda dapat berinteraksi dengannya dalam antarmuka SK lintas bahasa tingkat tinggi.
Menyiapkan lingkungan pengembangan Anda
Untuk mulai mengembangkan dengan BedrockAgent
, siapkan lingkungan Anda dengan paket Kernel Semantik yang sesuai dan pastikan prasyarat AWS terpenuhi.
Petunjuk / Saran
Lihat dokumentasi AWS tentang mengonfigurasi lingkungan Anda untuk menggunakan API Bedrock.
Tambahkan paket Semantic Kernel Bedrock Agents ke proyek .NET Anda:
dotnet add package Microsoft.SemanticKernel.Agents.Bedrock --prerelease
Ini akan menghadirkan dukungan SDK Kernel Semantik untuk Bedrock, termasuk ketergantungan pada AWS SDK untuk Bedrock. Anda mungkin juga perlu mengonfigurasi kredensial AWS (misalnya melalui variabel lingkungan atau konfigurasi AWS default). AWS SDK akan menggunakan kredensial yang sudah Anda konfigurasi; pastikan Anda memiliki AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, dan wilayah default diatur di lingkungan atau profil AWS Anda. (Lihat dokumentasi AWS tentang konfigurasi kredensial untuk detail selengkapnya.)
Instal paket Semantic Kernel dengan ekstra AWS:
pip install semantic-kernel[aws]
Ini memastikan bahwa pustaka AWS yang diperlukan (misalnya boto3) diinstal bersama Kernel Semantik. Sebelum menggunakan Bedrock Agent di Python, pastikan info masuk dan wilayah AWS Anda dikonfigurasi dengan benar (misalnya, dengan mengatur variabel lingkungan atau menggunakan AWS CLI). Anda harus mengatur AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, dan AWS_DEFAULT_REGION
(atau profil AWS) sehingga boto3 dapat mengautentikasi.
Fitur saat ini tidak tersedia di Java.
Membuat BedrockAgent
Membuat Bedrock Agent melibatkan dua langkah: pertama, menentukan agen dengan Amazon Bedrock (termasuk memilih model dan memberikan instruksi awal), lalu membuat instans objek agen Kernel Semantik untuk berinteraksi dengannya. Saat Anda membuat agen di AWS, agen dimulai dalam status tidak disiapkan, sehingga operasi "persiapan" tambahan dilakukan untuk menyiapkannya untuk digunakan.
using Amazon.Bedrock;
using Amazon.Bedrock.Model;
using Amazon.BedrockRuntime;
using Microsoft.SemanticKernel.Agents.Bedrock;
// 1. Define a new agent on the Amazon Bedrock service
IAmazonBedrock bedrockClient = new AmazonBedrockClient(); // uses default AWS credentials & region
var createRequest = new CreateAgentRequest
{
AgentName = "<foundation model ID>", // e.g., "anthropic.claude-v2" or other model
FoundationModel = "<foundation model ID>", // the same model, or leave null if AgentName is the model
AgentResourceArn = "<agent role ARN>", // IAM role ARN with Bedrock permissions
Instruction = "<agent instructions>"
};
CreateAgentResponse createResponse = await bedrockClient.CreateAgentAsync(createRequest);
// (Optional) Provide a description as needed:
// createRequest.Description = "<agent description>";
// After creation, the agent is in a "NOT_PREPARED" state.
// Prepare the agent to load tools and finalize setup:
await bedrockClient.PrepareAgentAsync(new PrepareAgentRequest
{
AgentId = createResponse.Agent.AgentId
});
// 2. Create a Semantic Kernel agent instance from the Bedrock agent definition
IAmazonBedrockRuntime runtimeClient = new AmazonBedrockRuntimeClient();
BedrockAgent agent = new BedrockAgent(createResponse.Agent, bedrockClient, runtimeClient);
Dalam kode di atas, pertama-tama kami menggunakan AWS SDK (AmazonBedrockClient
) untuk membuat agen di Bedrock, menentukan model fondasi, nama, instruksi, dan ARN peran IAM yang harus diasumsikan agen. Layanan Bedrock merespons dengan definisi agen (termasuk AgentId yang unik). Kami kemudian memanggil PrepareAgentAsync
untuk transisi agen ke status siap (agen akan berpindah dari status CREATING ke NOT_PREPARED, lalu ke SIAP setelah siap). Terakhir, kami membuat BedrockAgent
objek menggunakan definisi yang dikembalikan dan klien AWS. Instans inilah BedrockAgent
yang akan kita gunakan untuk mengirim pesan dan menerima respons.
import boto3
from semantic_kernel.agents import BedrockAgent
# 1. Define and prepare a new agent on Amazon Bedrock
agent = await BedrockAgent.create_and_prepare_agent(
name="<agent name>",
instructions="<agent instructions>",
foundation_model="<foundation model ID>",
agent_resource_role_arn="<agent role ARN>"
)
Dalam contoh di atas, BedrockAgent.create_and_prepare_agent
menangani alur pembuatan penuh: ia menggunakan konfigurasi AWS Anda (melalui boto3) untuk membuat agen di Bedrock dengan nama, model fondasi, dan instruksi yang diberikan, lalu secara otomatis menunggu agen mencapai status siap (melakukan langkah persiapan secara internal). Hasilnya adalah instans yang BedrockAgent
siap digunakan. Secara internal, metode ini membuat klien AWS (untuk Bedrock dan Bedrock Runtime) dengan menggunakan kredensial bawaan Anda, sehingga pastikan lingkungan AWS Anda telah disiapkan dengan benar. Jika Anda memerlukan konfigurasi kustom, Anda juga dapat membangun klien AWS secara manual dan meneruskannya sebagai parameter (misalnya client= boto3.client("bedrock")
dan runtime_client= boto3.client("bedrock-runtime")
) ke create_and_prepare_agent
panggilan.
Fitur saat ini tidak tersedia di Java.
Mengambil yang sudah ada BedrockAgent
Setelah agen dibuat di Bedrock, pengidentifikasi uniknya (ID Agen) dapat digunakan untuk mengambilnya nanti. Ini memungkinkan Anda untuk menginstansiasi kembali BedrockAgent
di Kernel Semantik tanpa harus membuatnya dari awal lagi.
Untuk .NET, pengidentifikasi agen Bedrock adalah string yang dapat diakses melalui agent.Id
. Untuk mengambil agen yang ada berdasarkan ID, gunakan klien AWS Bedrock dan kemudian buat BedrockAgent
baru.
string existingAgentId = "<your agent ID>";
var getResponse = await bedrockClient.GetAgentAsync(new GetAgentRequest { AgentId = existingAgentId });
BedrockAgent agent = new BedrockAgent(getResponse.Agent, bedrockClient, runtimeClient);
Di sini kita memanggil GetAgentAsync
pada klien IAmazonBedrock
dengan ID yang diketahui, yang mengembalikan definisi agen (nama, model, instruksi, dll.). Kami kemudian menginisialisasi yang baru BedrockAgent
dengan definisi tersebut dan klien yang sama. Instans agen yang satu ini akan ditautkan ke agen Bedrock yang ada.
Di Python, Anda juga dapat mengambil agen berdasarkan ID menggunakan klien BOTO3 AWS Bedrock, lalu membungkusnya dengan BedrockAgent
:
import asyncio, boto3
from semantic_kernel.agents import BedrockAgent
agent_id = "<your agent ID>"
bedrock_client = boto3.client("bedrock") # Bedrock service client
# Fetch the agent's definition from AWS
agent_info = await asyncio.to_thread(bedrock_client.get_agent, AgentId=agent_id)
# Create the BedrockAgent instance from the retrieved definition
agent = BedrockAgent(agent_model=agent_info["agent"])
Dalam cuplikan ini, kami menggunakan boto3 untuk memanggil get_agent
layanan Bedrock (menjalankannya di utas melalui asyncio.to_thread
karena boto3 memblokir). Yang dikembalikan agent_info["agent"]
berisi detail agen (id, nama, status, dll.), yang kami teruskan ke konstruktor BedrockAgent. Karena kami tidak secara eksplisit menyediakan klien AWS ke BedrockAgent
, itu akan secara internal membuat klien baru dengan pengaturan default. (Secara opsional, Anda dapat menyediakan client=
dan runtime_client=
untuk menggunakan kembali klien jika Anda memilikinya.)
Fitur saat ini tidak tersedia di Java.
Berinteraksi dengan BedrockAgent
Setelah Anda memiliki instans BedrockAgent, berinteraksi dengannya (mengirim pesan pengguna dan menerima respons AI) sangat mudah. Agen memakai thread untuk mengelola konteks percakapan. Untuk Agen Bedrock, utas sesuai dengan sesi AWS Bedrock. Kelas Kernel BedrockAgentThread
Semantik menangani pembuatan dan pelacakan sesi: saat Anda memulai percakapan baru, sesi Bedrock baru dimulai, dan saat Anda mengirim pesan, Bedrock mempertahankan riwayat pesan pengguna/asisten alternatif. (Bedrock mengharuskan riwayat obrolan bergantian antara pesan pengguna dan asisten; Logika saluran Kernel Semantik akan menyisipkan placeholder jika perlu untuk menerapkan pola ini.) Anda dapat memanggil agen tanpa menentukan utas (dalam hal ini SK akan secara otomatis membuat BedrockAgentThread
baru), atau Anda dapat secara eksplisit membuat atau memelihara utas jika Anda ingin melanjutkan percakapan di beberapa panggilan. Setiap pemanggilan mengembalikan satu atau beberapa respons, dan Anda dapat mengelola masa hidup utas (misalnya, menghapusnya ketika selesai untuk menyelesaikan sesi AWS).
Spesifikasi utas agen Bedrock diabstraksikan oleh kelas BedrockAgentThread
(yang mengimplementasikan antarmuka umum AgentThread
).
BedrockAgent
saat ini hanya mendukung utas jenis BedrockAgentThread
.
BedrockAgent agent = /* (your BedrockAgent instance, as created above) */;
// Start a new conversation thread for the agent
AgentThread agentThread = new BedrockAgentThread(runtimeClient);
try
{
// Send a user message and iterate over the response(s)
var userMessage = new ChatMessageContent(AuthorRole.User, "<your user input>");
await foreach (ChatMessageContent response in agent.InvokeAsync(userMessage, agentThread))
{
Console.WriteLine(response.Content);
}
}
finally
{
// Clean up the thread and (optionally) the agent when done
await agentThread.DeleteAsync();
await agent.Client.DeleteAgentAsync(new DeleteAgentRequest { AgentId = agent.Id });
}
Dalam contoh ini, kami menciptakan secara eksplisit BedrockAgentThread
(meneruskan runtimeClient
, yang digunakannya untuk berkomunikasi dengan layanan runtime Bedrock). Kami kemudian memanggil agent.InvokeAsync(...)
dengan ChatMessageContent
mewakili pesan pengguna.
InvokeAsync
mengembalikan aliran asinkron respons – dalam praktiknya, Agen Bedrock biasanya mengembalikan satu respons akhir per pemanggilan (karena tindakan alat perantara ditangani secara terpisah), sehingga Anda biasanya akan mendapatkan satu ChatMessageContent
dari perulangan. Kami mencetak balasan asisten (response.Content
). Di blok terakhir, kami menghapus utas, yang mengakhiri sesi Bedrock di AWS. Kami juga menghapus agen itu sendiri dalam hal ini (karena kami membuatnya hanya untuk contoh ini) - langkah ini bersifat opsional dan hanya diperlukan jika Anda tidak ingin menggunakan kembali agen lagi (lihat Menghapus BedrockAgent di bawah).
Anda dapat melanjutkan percakapan yang sudah ada dengan menggunakan kembali hal yang sama agentThread
untuk panggilan berikutnya. Misalnya, Anda dapat berulang kali membaca input pengguna dan memanggil InvokeAsync
setiap kali menggunakan utas yang sama untuk melakukan dialog multi-giliran. Anda juga dapat membuat BedrockAgentThread dengan ID sesi yang diketahui untuk melanjutkan percakapan yang disimpan sebelumnya:
string sessionId = "<existing Bedrock session ID>";
AgentThread thread = new BedrockAgentThread(runtimeClient, sessionId);
// Now `InvokeAsync` using this thread will continue the conversation from that session
Menggunakan Agen Bedrock di Python serupa, dengan BedrockAgentThread
mengelola sesi. Anda dapat memulai utas baru atau meneruskan utas yang sudah ada untuk melanjutkan percakapan:
from semantic_kernel.agents import BedrockAgentThread
# Assume `agent` is your BedrockAgent instance
USER_INPUTS = ["Hello", "What's your name?"]
thread = BedrockAgentThread() # start a new conversation thread (session)
try:
for user_input in USER_INPUTS:
response = await agent.get_response(messages=user_input, thread=thread)
print(response) # print the assistant's reply
thread = response.thread # update thread (BedrockAgentThread) for next turn
finally:
await thread.delete() if thread else None
Dalam kode ini, kita mengulangi beberapa input pengguna. Pada setiap perulangan, kita panggil agent.get_response(...)
dengan pesan pengguna dan utas yang sedang berlangsung. Panggilan pertama memulai sesi Bedrock dan mengembalikan AgentResponseItem
(atau ChatMessageContent
) yang berisi jawaban asisten. Kami mencetak respons, lalu mengambil response.thread
—yang merupakan BedrockAgentThread
yang sama tetapi telah diperbarui dengan konteks pesan baru—untuk digunakan pada giliran berikutnya. Setelah percakapan (dalam contoh ini, dua putaran), kami menghapus percakapan untuk mengakhiri sesi di AWS.
Jika Anda menghilangkan thread
parameter dalam panggilan, agent.get_response
atau agent.invoke
akan secara otomatis membuat utas baru untuk pemanggilan tersebut dan menyertakannya dalam respons.
Secara opsional, Anda juga dapat mengirim batch pesan sekaligus dengan meneruskan daftar pesan ke get_response
atau menggunakan pemanggilan streaming asinkron. Misalnya, untuk melakukan streaming respons asisten (token demi token) untuk satu perintah:
# Streaming a single response from the Bedrock agent
async for partial in agent.invoke_stream(messages="Tell me a joke.", thread=thread):
print(partial.content, end="")
Metode invoke_stream(...)
ini menghasilkan objek ChatMessageContent
saat respons dihasilkan. Dengan melakukan iterasi di atasnya, Anda dapat menghasilkan jawaban asisten secara bertahap (di sini kita mencetak karakter tanpa garis baru untuk membentuk respons penuh).
Fitur saat ini tidak tersedia di Java.
Menghapus BedrockAgent
Agen Bedrock adalah sumber daya persisten di akun AWS Anda - mereka akan tetap ada (dan berpotensi dikenakan biaya atau dihitung terhadap batas layanan) hingga dihapus. Jika Anda tidak lagi memerlukan agen yang telah Anda buat, Anda harus menghapusnya melalui API layanan Bedrock.
Gunakan klien Bedrock untuk menghapus berdasarkan ID agen. Contohnya:
await bedrockAgent.Client.DeleteAgentAsync(new() { AgentId = bedrockAgent.Id });
Setelah panggilan ini, status agen akan berubah dan tidak akan lagi dapat digunakan. (Mencoba memanggil agen yang dihapus akan mengakibatkan kesalahan.)
Panggil metode penghapusan milik agen. Misalnya:
await agent.delete_agent()
Ini akan memanggil layanan Bedrock untuk menghapus agen (dan secara internal menandai BedrockAgent
objek sebagai dihapus). Anda dapat memverifikasi dengan memeriksa agent.id
atau bendera jika disediakan (misalnya, _is_deleted
).
Nota: Menghapus agen Bedrock tidak secara otomatis mengakhiri sesi yang sedang berlangsung. Jika Anda memiliki sesi (utas) yang berjalan lama, Anda harus mengakhiri sesi tersebut dengan menghapus utas (yang memanggil EndSession dan DeleteSession Bedrock secara internal). Dalam praktiknya, menghapus utas (seperti yang ditunjukkan pada contoh di atas) mengakhiri sesi.
Fitur saat ini tidak tersedia di Java.
Menangani Pesan Perantara dengan BedrockAgent
Ketika Agen Bedrock memanggil alat (grup tindakan) untuk sampai pada jawaban, langkah-langkah perantara tersebut (panggilan fungsi dan hasil) secara default ditangani secara internal. Jawaban akhir agen akan mengacu pada hasil dari alat-alat tersebut tetapi tidak akan secara otomatis menyertakan detail yang terperinci langkah demi langkah. Namun, Semantic Kernel memungkinkan Anda untuk memanfaatkan pesan perantara tersebut untuk pengelogan atau penanganan kustom dengan memberikan panggilan balik.
Selama agent.invoke(...)
atau agent.invoke_stream(...)
, Anda dapat menyediakan fungsi callback on_intermediate_message
. Panggilan balik ini akan dipanggil untuk setiap pesan perantara yang dihasilkan dalam proses merumuskan respons akhir. Pesan menengah dapat mencakup FunctionCallContent
(ketika agen memutuskan untuk memanggil fungsi/alat) dan FunctionResultContent
(ketika alat mengembalikan hasil).
Misalnya, Bedrock Agent kami memiliki akses ke plugin sederhana (atau alat bawaan) untuk informasi menu, mirip dengan contoh yang digunakan dengan Asisten OpenAI:
from semantic_kernel.contents import ChatMessageContent, FunctionCallContent, FunctionResultContent
from semantic_kernel.functions import kernel_function
# Define a sample plugin with two functions
class MenuPlugin:
@kernel_function(description="Provides a list of specials from the menu.")
def get_specials(self) -> str:
return "Soup: Clam Chowder; Salad: Cobb Salad; Drink: Chai Tea"
@kernel_function(description="Provides the price of a menu item.")
def get_item_price(self, menu_item: str) -> str:
return "$9.99"
# Callback to handle intermediate messages
async def handle_intermediate_steps(message: ChatMessageContent) -> None:
for item in (message.items or []):
if isinstance(item, FunctionCallContent):
print(f"Function Call:> {item.name} with arguments: {item.arguments}")
elif isinstance(item, FunctionResultContent):
print(f"Function Result:> {item.result} for function: {item.name}")
else:
print(f"[Intermediate] {item}")
# Create the BedrockAgent with the plugin (assuming agent is not yet created above)
agent = await BedrockAgent.create_and_prepare_agent(
name="MenuAgent",
instructions="You are a restaurant assistant.",
foundation_model="<model ID>",
agent_resource_role_arn="<role ARN>",
plugins=[MenuPlugin()] # include our custom plugin
)
# Start a conversation with intermediate callback
thread = BedrockAgentThread()
user_queries = [
"Hello!",
"What are the specials today?",
"What is the special drink?",
"How much is that?"
]
try:
for query in user_queries:
print(f"# User: {query}")
async for response in agent.invoke(messages=query, thread=thread, on_intermediate_message=handle_intermediate_steps):
print(f"# Assistant: {response}")
thread = response.thread
finally:
await thread.delete() if thread else None
await agent.delete_agent()
Dalam kode ini, setiap kali agen perlu memanggil fungsi dari MenuPlugin
(misalnya, get_specials
atau get_item_price
), handle_intermediate_steps
panggilan balik akan mencetak baris untuk panggilan fungsi dan yang lain untuk hasil fungsi. Respons asisten akhir untuk setiap kueri pengguna kemudian dicetak seperti biasa. Dengan mengamati konten perantara, Anda dapat melacak bagaimana agen tiba pada jawabannya (alat mana yang digunakan, apa yang dikembalikannya, dll.).
Misalnya, output mungkin terlihat seperti:
# User: Hello!
# Assistant: Hello! How can I assist you today?
# User: What are the specials today?
Function Call:> MenuPlugin-get_specials with arguments: {}
Function Result:> Soup: Clam Chowder; Salad: Cobb Salad; Drink: Chai Tea for function: MenuPlugin-get_specials
# Assistant: The specials today include Clam Chowder for the soup, Cobb Salad, and Chai Tea as a special drink.
# User: What is the special drink?
# Assistant: The special drink is Chai Tea.
# User: How much is that?
Function Call:> MenuPlugin-get_item_price with arguments: {"menu_item": "Chai Tea"}
Function Result:> $9.99 for function: MenuPlugin-get_item_price
# Assistant: The special drink (Chai Tea) costs $9.99.
Dalam interaksi di atas, hasil cetakan sementara menunjukkan bahwa agen berhasil memanggil MenuPlugin.get_specials
dan MenuPlugin.get_item_price
pada waktu yang tepat, dan memakai hasilnya untuk menjawab pengguna. Detail perantara ini dapat dicatat atau digunakan dalam logika aplikasi Anda sesuai kebutuhan (misalnya, untuk menampilkan langkah-langkah yang diambil agen).
Dukungan panggilan balik untuk pesan menengah di BedrockAgent (C#) mengikuti pola serupa, tetapi API yang tepat sedang dikembangkan. (Rilis mendatang akan memungkinkan mendaftarkan delegasi untuk menangani FunctionCallContent
dan FunctionResultContent
selama InvokeAsync
.)
Fitur saat ini tidak tersedia di Java.
Menggunakan YAML Deklaratif untuk Menentukan Agen Bedrock
Kerangka kerja agen Semantic Kernel mendukung skema deklaratif untuk menentukan agen melalui YAML (atau JSON). Ini memungkinkan Anda menentukan konfigurasi agen - jenis, model, alat, dll. - dalam file dan kemudian memuat definisi agen tersebut pada runtime tanpa menulis kode imperatif untuk membangunnya.
Nota: Definisi agen berbasis YAML adalah fitur yang muncul dan mungkin bersifat eksperimental. Pastikan Anda menggunakan versi Kernel Semantik yang mendukung pemuatan agen YAML, dan lihat dokumen terbaru untuk perubahan format apa pun.
Menggunakan spesifikasi deklaratif dapat menyederhanakan konfigurasi, terutama jika Anda ingin dengan mudah beralih pengaturan agen atau menggunakan pendekatan file konfigurasi. Untuk Agen Bedrock, definisi YAML mungkin terlihat seperti:
type: bedrock_agent
name: MenuAgent
description: Agent that answers questions about a restaurant menu
instructions: You are a restaurant assistant that provides daily specials and prices.
model:
id: anthropic.claude-v2
agent_resource_role_arn: arn:aws:iam::123456789012:role/BedrockAgentRole
tools:
- type: code_interpreter
- type: user_input
- name: MenuPlugin
type: kernel_function
Dalam YAML (hipotetis) ini, kami mendefinisikan agen jenis bedrock_agent
, memberinya nama dan instruksi, menentukan model dasar berdasarkan ID, dan memberikan ARN peran yang harus digunakan. Kami juga mendeklarasikan beberapa alat: satu mengaktifkan Penerjemah Kode bawaan, yang lain yang mengaktifkan alat Input Pengguna bawaan, dan MenuPlugin kustom (yang akan didefinisikan secara terpisah dalam kode dan terdaftar sebagai fungsi kernel). File seperti itu merangkum pengaturan agen dalam bentuk yang dapat dibaca manusia.
Untuk menginstansiasi agen dari YAML, gunakan pemuat statis dengan faktori yang sesuai. Contohnya:
string yamlText = File.ReadAllText("bedrock-agent.yaml");
var factory = new BedrockAgentFactory(); // or an AggregatorAgentFactory if multiple types are used
Agent myAgent = await KernelAgentYaml.FromAgentYamlAsync(kernel, yamlText, factory);
Ini akan mengurai YAML dan menghasilkan BedrockAgent
instance (atau tipe lain, berdasarkan bidang type
) dengan kernel dan fabrik yang telah disediakan.
Pengelolaan Spesifikasi Deklaratif BedrockAgent akan segera tersedia.
Fitur saat ini tidak tersedia di Java.
Menggunakan skema deklaratif dapat sangat kuat untuk konfigurasi skenario dan pengujian, karena Anda dapat menukar model atau instruksi dengan mengedit file konfigurasi daripada mengubah kode. Perhatikan dokumentasi dan sampel Semantic Kernel untuk informasi selengkapnya tentang definisi agen YAML seiring berkembangnya fitur.
Sumber Daya Selengkapnya
- Dokumentasi AWS Bedrock: Untuk mempelajari selengkapnya tentang kemampuan agen Amazon Bedrock, lihat Amazon Bedrock Agents dalam dokumentasi AWS (misalnya, cara mengonfigurasi akses model fondasi dan peran IAM). Memahami layanan yang mendasar akan membantu dalam mengatur izin yang benar dan memanfaatkan alat bawaan sebaik-baiknya.
-
Sampel Kernel Semantik: Repositori Kernel Semantik berisi sampel konsep untuk Bedrock Agents. Misalnya, sampel obrolan dasar Bedrock Agent dalam sampel Python menunjukkan Tanya Jawab sederhana dengan
BedrockAgent
, dan sampel Bedrock Agent dengan Penerjemah Kode menunjukkan cara mengaktifkan dan menggunakan alat Penerjemah Kode. Sampel ini bisa menjadi titik awal yang bagus untuk melihatBedrockAgent
beraksi.
Dengan Amazon Bedrock Agent terintegrasi, Semantic Kernel memungkinkan solusi AI multi-platform yang benar-benar – baik Anda menggunakan OpenAI, Azure OpenAI, atau AWS Bedrock, Anda dapat membangun aplikasi percakapan yang kaya dengan integrasi alat menggunakan kerangka kerja yang konsisten. Memungkinkan terbukanya BedrockAgent
agar dapat memanfaatkan model fondasi terbaru AWS dan konsep agen yang aman dan dapat diperluas dalam proyek Kernel Semantik Anda.