Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Anlam Çekirdeği Keşfi
Önemli
gibi BedrockAgenttek aracılı özellikler şu anda deneysel aşamadadır. Bu özellikler etkin geliştirme aşamasındadır ve genel kullanıma ulaşmadan önce değişebilir.
Bu tartışmayla ilgili ayrıntılı API belgelerine şu adreste ulaşabilirsiniz:
BedrockAgent API belgeleri yakında sunulacak.
BedrockAgent API belgeleri yakında sunulacak.
Özellik şu anda Java'da kullanılamıyor.
BedrockAgentnedir?
Bedrock Agent, Amazon Bedrock'un Agent hizmetiyle tümleştirmek için tasarlanmış Semantik Çekirdek içinde özel bir yapay zeka aracısıdır. OpenAI ve Azure AI aracıları gibi Bedrock Agent da sorunsuz araç (eylem) tümleştirmesi ile gelişmiş çok aşamalı konuşma özellikleri sağlar, ancak tamamen AWS ekosisteminde çalışır. İşlev/araç çağırmayı (Bedrock'ta eylem grupları olarak adlandırılır) otomatikleştirir, böylece eylemleri el ile ayrıştırıp yürütmeniz gerekmez ve aws'deki konuşma durumunu oturumlar aracılığıyla güvenli bir şekilde yöneterek uygulamanızda sohbet geçmişini koruma gereksinimini azaltır.
Bir Bedrock Aracısı, diğer aracı türlerinden birkaç temel yolla farklıdır:
AWS Yönetilen Yürütmesi: OpenAI'nin bulutunu veya Azure'ın Foundry hizmetini kullanan Azure AI Aracısı'nı kullanan OpenAI Yardımcısı'nın aksine, Bedrock Aracısı Amazon Bedrock üzerinde çalışır. Kullanmak için Bedrock erişimine (ve uygun IAM izinlerine) sahip bir AWS hesabınız olmalıdır. Aracının yaşam döngüsü (oluşturma, oturumlar, silme) ve belirli araç yürütmeleri AWS hizmetleri tarafından yönetilirken işlev çağırma araçları ortamınızda yerel olarak yürütülür.
Temel Model Seçimi: Bedrock Agent oluştururken, hangi temel modeli (amazon titan veya iş ortağı modeli gibi) kullanması gerektiğini belirtirsiniz. Yalnızca size erişim verilmiş modeller kullanılabilir. Bu, Sohbet Tamamlama aracılarından (doğrudan model uç noktasıyla örnek oluşturduğunuz) farklıdır. Bedrock ile model, aracı oluşturma zamanında aracının varsayılan özelliği olarak seçilir.
IAM Rol Gereksinimi: Bedrock Agentleri, oluşturulurken bir IAM rolü ARN'si sağlamanızı gerektirir. Bu rol, seçtiğiniz modeli (ve tüm tümleşik araçları) sizin yerinize çağırma izinlerine sahip olmalıdır. Bu, aracının AWS hesabınız altında eylemlerini gerçekleştirmek için gerekli ayrıcalıklara (örneğin kod çalıştırma veya diğer AWS hizmetlerine erişme) sahip olmasını sağlar.
Yerleşik Araçlar (Eylem Grupları): Bedrock, bir aracıya bağlanabilen yerleşik "eylem gruplarını" (araçlar) destekler. Örneğin, aracının Python kodunu yürütmesine izin vermek için bir Kod Yorumlayıcı eylem grubunu veya aracının açıklama istemesine izin vermek için bir Kullanıcı Girişi eylem grubunu etkinleştirebilirsiniz. Bu özellikler OpenAI'nin Kod Yorumlayıcı eklentisine veya işlev çağrısına benzer ancak AWS'de aracı üzerinde açıkça yapılandırılır. Bedrock Aracısı, diğer aracılara benzer şekilde etki alanına özgü araçlar için özel Anlam Çekirdeği eklentileri (işlevler) ile de genişletilebilir.
Oturum Tabanlı İş Parçacıkları: Bedrock Agent ile yapılan konuşmalar AWS'deki Bedrock oturumlarına bağlı yazışmalarda gerçekleşir. Her iş parçacığı (oturum), Bedrock hizmeti tarafından sağlanan benzersiz bir kimlikle tanımlanır ve konuşma geçmişi işlem içi değil hizmet tarafından depolanır. Bu, çok aşamalı diyalogların AWS'de kalıcı olduğu ve bağlamı oturum kimliği üzerinden elde ettiğiniz anlamına gelir. Semantik Çekirdek
BedrockAgentThreadsınıfı bu ayrıntıyı soyutlar; kullandığınızda aracı için arka planda bir Bedrock oturumu oluşturur veya devam eder.
Özetle, BedrockAgent Amazon Bedrock'un güçlü aracı ve araçlar çerçevesinden Anlam Çekirdeği aracılığıyla yararlanarak AWS tarafından barındırılan model ve araçlarla hedefe yönelik diyalog sağlamanızı sağlar. Bedrock'un Aracı API'sinin (aracı oluşturma, oturum yönetimi, araç çağırma) karmaşıklıklarını otomatikleştirir, böylece üst düzey, çapraz dil SK arabiriminde etkileşim kurabilirsiniz.
Geliştirme Ortamınızı Hazırlama
ile BedrockAgentgeliştirmeye başlamak için ortamınızı uygun Anlam Çekirdeği paketleriyle ayarlayın ve AWS önkoşullarının karşılandığından emin olun.
Tavsiye
Ortamınızı Bedrock API'sini kullanacak şekilde yapılandırmaya ilişkin AWS belgelerine göz atın.
.NET projenize Semantik Çekirdek Bedrock Agents paketini ekleyin:
dotnet add package Microsoft.SemanticKernel.Agents.Bedrock --prerelease
Bu, Bedrock için AWS SDK'sı bağımlılıkları da dahil olmak üzere Bedrock için Anlam Çekirdeği SDK'sı desteğini getirir. Ayrıca AWS kimlik bilgilerini (örneğin, ortam değişkenleri veya varsayılan AWS yapılandırması aracılığıyla) yapılandırmanız gerekebilir. AWS SDK yapılandırılan kimlik bilgilerinizi kullanır; ortamınızda veya AWS profilinizde AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEYve varsayılan bölgenizin ayarlandığından emin olun. (Daha fazla ayrıntı için AWS'nin kimlik bilgisi yapılandırması belgelerine bakın.)
AWS ek özellikleriyle Anlam Çekirdeği paketini yükleyin:
pip install semantic-kernel[aws]
Bu, gerekli AWS kitaplıklarının (örneğin boto3) Anlam Çekirdeği ile birlikte yüklenmesini sağlar. Python'da Bedrock Agent kullanmadan önce AWS kimlik bilgilerinizin ve bölgenizin düzgün yapılandırıldığından emin olun (örneğin, ortam değişkenlerini ayarlayarak veya AWS CLI kullanarak). Boto3'ün kimlik doğrulaması yapabilmesi için AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY ve AWS_DEFAULT_REGION (veya AWS profili) ayarlanmış olmalıdır.
Özellik şu anda Java'da kullanılamıyor.
Bir BedrockAgent oluşturmak
Bedrock Aracısı oluşturmak için iki adım gerekir: önce aracıyı Amazon Bedrock ile tanımlama (model seçme ve ilk yönergeler sağlama dahil) ve ardından etkileşim kurmak için AnlamSal Çekirdek aracı nesnesinin örneğini oluşturma. AWS'de aracıyı oluşturduğunuzda, hazır olmayan bir durumda başlar, bu nedenle kullanıma hazır hale getirmek için ek bir "hazırlama" işlemi gerçekleştirilir.
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);
Yukarıdaki kodda öncelikle Temel modeli, adı, yönergeleri ve aracının varsayması gereken IAM rolünün ARN'sini belirterek Bedrock'ta bir aracı oluşturmak için AWS SDK'sını (AmazonBedrockClient) kullanacağız. Bedrock hizmeti, benzersiz bir AgentId içeren bir aracı tanımıyla yanıt verir. Ardından aracıyı hazır duruma geçmeye çağırıyoruz PrepareAgentAsync (aracı, OLUŞTURMA durumundan NOT_PREPARED'e, ardından hazır olduğunda PREPARED'a geçer). Son olarak, döndürülen tanımı ve AWS istemcilerini kullanarak bir BedrockAgent nesne oluştururuz. Bu BedrockAgent örnek, ileti göndermek ve yanıt almak için kullanacağımız örnektir.
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>"
)
Yukarıdaki örnekte tam BedrockAgent.create_and_prepare_agent oluşturma akışını işler: Aws yapılandırmanızı (boto3 aracılığıyla) kullanarak Bedrock'ta verilen ad, temel model ve yönergelere sahip bir aracı oluşturur ve ardından otomatik olarak aracının hazır duruma gelmesini bekler (hazırlama adımını dahili olarak gerçekleştirir). Sonuç, kullanıma hazır bir BedrockAgent örnektir. Bu yöntem, varsayılan kimlik bilgilerinizi kullanarak AWS istemcileri (Bedrock ve Bedrock Runtime için) oluşturmaktır, bu nedenle AWS ortamınızın ayarlandığından emin olun. Özel yapılandırmaya ihtiyacınız varsa AWS istemcilerini manuel olarak oluşturabilir ve bu istemcileri, örneğin client= boto3.client("bedrock") ve runtime_client= boto3.client("bedrock-runtime") olmak üzere, create_and_prepare_agent çağrısına parametre olarak geçirebilirsiniz.
Özellik şu anda Java'da kullanılamıyor.
Mevcut BedrockAgent öğesini alma
Bedrock'ta bir ajan oluşturulduktan sonra, benzersiz tanımlayıcısı (Ajan Kimliği) daha sonra geri çağırmak için kullanılabilir. Bu, Semantic Kernel'deki bir BedrockAgent örneğini sıfırdan yeniden oluşturmadan yeniden başlatmanıza olanak tanır.
.NET için, Bedrock aracısının tanımlayıcısı aracılığıyla agent.Iderişilebilen bir dizedir. Mevcut bir aracıyı kimliğe göre almak için AWS Bedrock istemcisini kullanın ve ardından yeni bir BedrockAgent oluşturun.
string existingAgentId = "<your agent ID>";
var getResponse = await bedrockClient.GetAgentAsync(new GetAgentRequest { AgentId = existingAgentId });
BedrockAgent agent = new BedrockAgent(getResponse.Agent, bedrockClient, runtimeClient);
Burada, bilinen kimlikle GetAgentAsync çağrısını IAmazonBedrock istemcisine yaparız, bu da aracının tanımını (ad, model, yönergeler vb.) döndürür. Ardından, bu tanım ve aynı istemcilerle yeni bir BedrockAgent başlatıyoruz. Bu temsilci örneği mevcut Bedrock temsilcisine bağlanacak.
Python'da, AWS Bedrock boto3 istemcisini kullanarak kimliğine göre bir aracıyı benzer şekilde alabilir ve bir içinde BedrockAgentsarmalayabilirsiniz:
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"])
Bu kod parçacığında, Bedrock hizmetini çağırmak get_agent için boto3 kullanıyoruz (boto3 engellendiğinden bunu asyncio.to_thread bir iş parçacığında çalıştırmak). Döndürülen agent_info["agent"] , BedrockAgent oluşturucusuna aktardığımız aracının ayrıntılarını (kimlik, ad, durum vb.) içerir. AWS istemcilerini açıkça 'a sağlamadığımız için BedrockAgent, varsayılan ayarlarla dahili olarak yeni istemciler oluşturur. (İsteğe bağlı olarak, istemcileri yeniden kullanmak için client= ve runtime_client= sağlayabilirsiniz.)
Özellik şu anda Java'da kullanılamıyor.
BedrockAgent ile etkileşim kurma
BedrockAgent örneğine sahip olduğunuzda, bu örnekle etkileşimde (kullanıcı iletileri gönderme ve yapay zeka yanıtları alma) basit bir işlemdir. Aracı, konuşma bağlamını yönetmek için iş parçalarını kullanır. Bedrock Agent için iş parçacığı AWS Bedrock oturumuna karşılık gelir. AnlamSal Çekirdek BedrockAgentThread sınıfı oturum oluşturmayı ve izlemeyi işler: yeni bir konuşma başlattığınızda yeni bir Bedrock oturumu başlatılır ve siz ileti gönderirken Bedrock alternatif kullanıcı/yardımcı ileti geçmişini korur. (Bedrock, sohbet geçmişinin kullanıcı ve yardımcı iletileri arasında geçiş yapılmasını gerektirir; Semantik Çekirdeğin kanal mantığı, bu düzeni zorunlu kılmak için gerekirse yer tutucu ekler.) Bir iş parçacığı belirtmeden aracıyı çağırabilirsiniz (bu durumda SK otomatik olarak yeni BedrockAgentThread bir iş parçacığı oluşturur) veya bir konuşmaya birden çok çağrıda devam etmek istiyorsanız açıkça iş parçacığı oluşturabilir/koruyabilirsiniz. Her çağrı bir veya daha fazla yanıt döndürür ve iş parçacığının yaşam süresini yönetebilirsiniz (örneğin, AWS oturumunu sonlandırmak için tamamlandığında iş parçacığını silme).
Bedrock aracı iş parçacığının ayrıntıları, ortak AgentThread arabirimini uygulayan BedrockAgentThread sınıfı tarafından soyutlanır.
BedrockAgent halihazırda yalnızca BedrockAgentThreadtüründe iş parçacıklarını destekler.
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 });
}
Bu örnekte, runtimeClient değerini geçirerek açıkça bir BedrockAgentThread oluştururuz (bu, bedrock çalışma zamanı hizmetiyle iletişim kurmak için kullanılır). Daha sonra kullanıcının iletisini temsil eden bir ChatMessageContent ile çağrısı agent.InvokeAsync(...) yapıyoruz.
InvokeAsync zaman uyumsuz bir yanıt akışı döndürür. Uygulamada, Bedrock Aracısı genellikle çağrı başına son bir yanıt döndürür (araçlar arası eylemler ayrı bir şekilde işlenir), bu nedenle genellikle döngüden tek bir ChatMessageContent yanıt alırsınız. Yardımcının yanıtını (response.Content ) yazdırıyoruz. Son blokta, AWS'de Bedrock oturumunu sona erdiren yazışmayı sileceğiz. Bu durumda aracıyı da sileriz (yalnızca bu örnek için oluşturduğumuz için) – bu adım isteğe bağlıdır ve yalnızca aracıyı yeniden kullanmayı düşünmüyorsanız gereklidir (aşağıdaki BedrockAgent'ı silme bölümüne bakın).
Sonraki aramalar için aynı agentThread işlemi yeniden kullanarak mevcut bir konuşmaya devam edebilirsiniz. Örneğin, kullanıcı girdisini okuma ve döngüye sokarak, her seferinde aynı iş parçacığıyla InvokeAsync çağırarak çok turlu bir diyaloğu sürdürebilirsiniz. Daha önce kaydedilmiş bir konuşmayı sürdürmek için bilinen oturum kimliğine sahip bir BedrockAgentThread de oluşturabilirsiniz:
string sessionId = "<existing Bedrock session ID>";
AgentThread thread = new BedrockAgentThread(runtimeClient, sessionId);
// Now `InvokeAsync` using this thread will continue the conversation from that session
Python'da Bedrock Aracısı kullanımı, BedrockAgentThread tarafından oturumun yönetilmesine benzer. Konuşmaya devam etmek için yeni bir konu başlatabilir veya var olan bir konuyu devam ettirebilirsiniz.
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
Bu kodda, birkaç kullanıcı girişi arasında döngü yapacağız. Her yinelemede, kullanıcı iletisi ve geçerli iş parçacığı ile agent.get_response(...) çağırıyoruz. İlk çağrı Bedrock oturumunu başlatır ve yardımcının yanıtını içeren bir AgentResponseItem (veya ChatMessageContent) döndürür. Yanıtı yazdırıp sonraki dönüşte response.thread kullanmak üzere yeni ileti bağlamıyla aynı BedrockAgentThread şekilde güncelleştirilen öğesini alıveriyoruz. Konuşmadan sonra (bu örnekte iki kez), AWS'de oturumu sonlandırmak için yazışmayı sileriz.
Çağrıda thread parametresini atlarsanız, agent.get_response veya agent.invoke otomatik olarak bu çağrı için yeni bir iş parçacığı oluşturur ve yanıt içinde bunu ekler.
İsteğe bağlı olarak, iletilerin bir listesini get_response öğesine geçirerek veya zaman uyumsuz akış çağrısını kullanarak bir kerede bir grup ileti gönderebilirsiniz. Örneğin, tek bir istem için yardımcının yanıtını belirtçik belirtçik yayınlamak için:
# 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="")
invoke_stream(...) yöntemi, yanıt oluşturulurken ChatMessageContent nesnelerini verir. Bunun üzerinde yineleme yaparak, yardımcının yanıtını artımlı olarak çıktı alabilirsiniz (burada tam yanıtı oluşturmak için yeni satır olmadan karakterler yazdırıyoruz).
Özellik şu anda Java'da kullanılamıyor.
Bir BedrockAgent silme
AWS hesabınızdaki Bedrock Agent'lar kalıcı kaynaklardır; silinene kadar kalırlar (ve maliyet oluşturabilir veya hizmet sınırlarına takılabilirler). Oluşturduğunuz bir aracıya artık ihtiyacınız yoksa Bedrock hizmet API'sini kullanarak aracıyı silmeniz gerekir.
Aracı kimliğine göre silmek için Bedrock istemcisini kullanın. Örneğin:
await bedrockAgent.Client.DeleteAgentAsync(new() { AgentId = bedrockAgent.Id });
Bu çağrıdan sonra temsilcinin durumu değişecek ve artık kullanılamayacak. (Silinen aracıyı çağırmaya çalışmak hataya neden olur.)
Temsilcinin silme yöntemini çağırın. Örneğin:
await agent.delete_agent()
Bu, aracıyı silmek için Bedrock hizmetini çağırır (ve BedrockAgent nesnesini dahili olarak silindi olarak işaretler). Denetleyerek agent.id veya varsa bir bayrak (örneğin, _is_deleted) ile doğrulayabilirsiniz.
Not: Bedrock aracısını silmek, devam eden oturumlarını otomatik olarak sonlandırmaz. Uzun süre çalışan oturumlarınız (iş parçacıkları) varsa, iş parçacıklarını silerek bu işlemleri sonlandırmanız gerekir (bu, Bedrock'un arka planda "EndSession" ve "DeleteSession" fonksiyonlarını çağırır). Pratikte, bir iş parçacığını silme (yukarıdaki örneklerde gösterildiği gibi) oturumu sonlandırır.
Özellik şu anda Java'da kullanılamıyor.
Bir BedrockAgent ile Ara Mesajları İşleme
Bedrock Aracısı bir yanıta ulaşmak için araçları (eylem grupları) çağırdığında, bu ara adımlar (işlev çağrıları ve sonuçları) varsayılan olarak dahili olarak işlenir. Temsilcinin son yanıtı bu araçların sonuçlarına referans verecek fakat otomatik olarak detaylı adım adım bilgileri içermeyecektir. Ancak Anlam Çekirdeği, bir geri çağırma sağlayarak günlüğe kaydetme veya özel işleme için bu ara iletileri kullanmanıza olanak tanır.
agent.invoke(...) veya agent.invoke_stream(...) sırasında bir on_intermediate_message geri çağırma işlevi sağlayabilirsiniz. Bu geri çağırma, son yanıtı formüle etme işleminde oluşturulan her ara ileti için çağrılır. Ara iletiler FunctionCallContent (ajan bir işlevi/aracı çağırmaya karar verdiğinde) ve FunctionResultContent (bir araç bir sonuç döndürdüğünde) içerebilir.
Örneğin, Bedrock Aracımızın OpenAI Yardımcısı ile kullanılan örneklere benzer şekilde menü bilgileri için basit bir eklentiye (veya yerleşik araca) erişimi olduğunu varsayalım:
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()
Bu kodda, ajan MenuPlugin'dan bir işlev çağırması gerektiğinde (örneğin, get_specials veya get_item_price), handle_intermediate_steps geri çağırım işlevi işlev çağrısı için bir satır ve işlev sonucu için başka bir satır yazdırır. Her kullanıcı sorgusu için son yardımcı yanıtı normal şekilde yazdırılır. Ara içeriği gözlemleyerek, aracının yanıtına nasıl ulaştığını izleyebilirsiniz (hangi araç kullanıldı, ne döndürdü, vb.).
Örneğin, çıkış şöyle görünebilir:
# 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.
Yukarıdaki etkileşimde ara yazdırmalar, aracın MenuPlugin.get_specials ve MenuPlugin.get_item_price'i uygun zamanlarda başarıyla çağırdığını ve sonuçlarını kullanarak kullanıcıya yanıt verdiğini gösterir. Bu ara ayrıntılar gerektiğinde günlüğe kaydedilebilir veya uygulama mantığınızda kullanılabilir (örneğin, aracının uyguladığı adımları görüntülemek için).
BedrockAgent'da (C#) ara iletiler için geri çağırma desteği benzer bir desen izler, ancak tam API geliştirme aşamasındadır. (Gelecekteki sürümler, InvokeAsync sırasında FunctionCallContent ve FunctionResultContent'i işleyecek bir temsilci kaydedilmesini sağlayacaktır.)
Özellik şu anda Java'da kullanılamıyor.
Bedrock Aracısı Tanımlamak için Bildirim temelli YAML Kullanma
Semantik Çekirdeğin aracı çerçevesi YAML (veya JSON) aracılığıyla aracıları tanımlamak için bildirim temelli bir şemayı destekler. Bu, bir aracının yapılandırmasını (türü, modelleri, araçları vb.) bir dosyada belirtmenize ve ardından aracı tanımını oluşturmak için kesinlik temelli kod yazmadan çalışma zamanında yüklemenize olanak tanır.
Not: YAML tabanlı aracı tanımları yeni ortaya çıkan bir özelliktir ve deneysel olabilir. YAML aracı yüklemesini destekleyen bir Anlam Çekirdeği sürümü kullandığınızdan emin olun ve biçim değişiklikleri için en son belgelere bakın.
Bildirimsel bir tanım kullanmak, özellikle ajan kurulumlarını kolayca değiştirmek veya bir yapılandırma dosyası yaklaşımı kullanmak istiyorsanız, yapılandırmayı basitleştirebilir. Bedrock Aracısı için YAML tanımı şöyle görünebilir:
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
Bu (varsayımsal) YAML'de, türünde bedrock_agentbir aracı tanımlarız, bir ad ve yönergeler verir, temel modeli kimliğe göre belirtir ve kullanması gereken rolün ARN'sini sağlarız. Ayrıca birkaç araç bildiririz: biri yerleşik Kod Yorumlayıcı'yı etkinleştirirken, diğeri yerleşik Kullanıcı Girişi aracını etkinleştirirken ve özel bir MenuPlugin (kodda ayrı olarak tanımlanır ve çekirdek işlevi olarak kaydedilir). Böyle bir dosya, aracının kurulumunu insan tarafından okunabilir bir biçimde kapsüller.
YAML'den bir aracı örneği oluşturmak için uygun bir fabrikayla statik yükleyici kullanın. Örneğin:
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);
Bu, sağlanan çekirdek ve fabrikayı kullanarak YAML'yi ayrıştıracak ve bir BedrockAgent örneği (veya type alanına göre başka bir tür) oluşturacaktır.
BedrockAgent Bildirimsel Özellik işleme yakında geliyor.
Özellik şu anda Java'da kullanılamıyor.
Kod değiştirmek yerine yapılandırma dosyasını düzenleyerek modelleri veya yönergeleri değiştirebildiğiniz için bildirim temelli şema kullanmak senaryo yapılandırması ve testi için özellikle güçlü olabilir. Özellik geliştikçe YAML aracı tanımları hakkında daha fazla bilgi için Anlam Çekirdeği'nin belgelerine ve örneklerine göz atın.
Diğer Kaynaklar
- AWS Bedrock Belgeleri: Amazon Bedrock'un aracı özellikleri hakkında daha fazla bilgi edinmek için AWS belgelerinde (örneğin, temel model erişimini ve IAM rollerini yapılandırma) Amazon Bedrock Agents bölümüne bakın. Altyapısındaki hizmeti anlamak, doğru izinleri ayarlamaya ve yerleşik araçlardan en iyi şekilde yararlanmaya yardımcı olacaktır.
-
Semantik Çekirdek Örnekleri: Semantik Çekirdek deposu, Bedrock Aracıları için kavram örnekleri içerir. Örneğin, Python örneklerinde yer alan Bedrock Agent temel sohbet örneği,
BedrockAgentile basit bir soru-cevap uygulamasını gösterirken, Kod Yorumlayıcılı Bedrock Aracısı örneği ise Kod Yorumlayıcı aracını etkinleştirip nasıl kullanılacağını gösterir. Uygulama içindeBedrockAgent'yi görmek için bu örnekler harika bir başlangıç noktası olabilir.
Amazon Bedrock Agent'in entegrasyonu ile Semantik Çekirdek, gerçekten çoklu platform AI çözümlerini mümkün kılar - OpenAI, Azure OpenAI veya AWS Bedrock kullanabilirsiniz; tutarlı bir çerçeve kullanarak, araç entegrasyonu ile zengin konuşma uygulamaları geliştirebilirsiniz. , BedrockAgent AWS'nin en son temel modellerini ve Anlam Çekirdeği projelerinizde güvenli, genişletilebilir aracı paradigmasından yararlanmanın kapılarını açar.