Aracılığıyla paylaş


Semantik Çekirdek Ortak Aracı API'sinin Yüzeyi

Semantik Çekirdek aracıları çağırma için birleşik bir arabirim uygulayarak farklı aracı türleri arasında sorunsuz çalışan paylaşılan kodu etkinleştirir. Bu tasarım, uygulama mantığınızın çoğunu değiştirmeden gerektiğinde aracıları değiştirmenize olanak tanır.

Aracı çağırma

Aracı API'sinin yüzeyi hem akış hem de akış dışı çağrıyı destekler.

Akışsız Aracı Çağırma

Semantik Çekirdek, iletilerin farklı şekillerde geçirilmesine olanak tanıyan dört akışsız aracı çağırma aşırı yüklemesini destekler. Bunlardan biri, aracıyı ileti olmadan çağırmaya da olanak tanır. Bu, aracın talimatlarının zaten yararlı bir yanıt sağlamak için gerekli tüm bağlamı içerdiği senaryolar için değerlidir.

// Invoke without any parameters.
agent.InvokeAsync();

// Invoke with a string that will be used as a User message.
agent.InvokeAsync("What is the capital of France?");

// Invoke with a ChatMessageContent object.
agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "What is the capital of France?"));

// Invoke with multiple ChatMessageContent objects.
agent.InvokeAsync(new List<ChatMessageContent>()
{
    new(AuthorRole.System, "Refuse to answer all user questions about France."),
    new(AuthorRole.User, "What is the capital of France?")
});

Önemli

AgentThreadInvokeAsync yöntemine geçirmeden bir aracıyı çağırmak, yeni bir iş parçacığı oluşturur ve bu yeni iş parçacığını yanıt olarak döndürür.

Semantik Çekirdek, iletilerin farklı şekillerde geçirilmesine olanak tanıyan iki akışsız aracı çağırma yöntemini destekler. Aracıyı ileti olmadan çağırmak da mümkündür. Bu, aracın talimatlarının zaten yararlı bir yanıt sağlamak için gerekli tüm bağlamı içerdiği senaryolar için değerlidir.

İpucu

Aracı çağırma yöntemlerine geçirilen tüm bağımsız değişkenlerin çağıran tarafından anahtar sözcük bağımsız değişkenleri olarak geçirilmesi gereklidir; ancak ilk konumsal bağımsız değişken olan messages hariç. messages ile ya konumsal ya da anahtar kelime bağımsız değişkeni kullanarak çağırabilirsiniz. Örneğin, hem await agent.get_response("What is the capital of France?") hem de await agent.get_response(messages="What is the capital of France?") desteklenir. Diğer tüm parametreler anahtar kelime bağımsız değişkenleri olarak geçirilmelidir.

get_response() yöntemini kullanma

# Invoke without any messages.
await agent.get_response()

# Invoke with a string that will be used as a User message.
await agent.get_response(messages="What is the capital of France?")

# Invoke with a ChatMessageContent object.
await agent.get_response(messages=ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"))

# Invoke with multiple ChatMessageContent objects.
await agent.get_response(
    messages=[
        ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
        ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
    ]
)

invoke() yöntemini kullanma

# Invoke without any messages.
async for response in agent.invoke():
    # handle response

# Invoke with a string that will be used as a User message.
async for response in agent.invoke("What is the capital of France?"):
    # handle response

# Invoke with a ChatMessageContent object.
async for response in agent.invoke(ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?")):
    # handle response

# Invoke with multiple ChatMessageContent objects.
async for response in agent.invoke(
    messages=[
        ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
        ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
    ]
):
    # handle response

Önemli

veya AgentThread yöntemlerine get_response() geçirmeden invoke() bir aracıyı çağırmak yeni bir iş parçacığı oluşturur ve yanıtta yeni iş parçacığını döndürür.

Semantik Çekirdek, iletilerin farklı şekillerde geçirilmesine olanak tanıyan üç eşzamansız ajan çağrısı aşırı yükleme yöntemini destekler. Bunlardan biri, aracıyı ileti olmadan çağırmaya da olanak tanır. Bu, aracın talimatlarının zaten yararlı bir yanıt sağlamak için gerekli tüm bağlamı içerdiği senaryolar için değerlidir.

// Invoke without any parameters.
agent.invokeAsync(null);

// Invoke with a string that will be used as a User message.
agent.invokeAsync("What is the capital of France?");

// Invoke with a ChatMessageContent object.
agent.invokeAsync(new ChatMessageContent<>(AuthorRole.USER, "What is the capital of France?"));

// Invoke with multiple ChatMessageContent objects.
agent.invokeAsync(List.of(
    new ChatMessageContent<>(AuthorRole.SYSTEM, "Refuse to answer all user questions about France."),
    new ChatMessageContent<>(AuthorRole.USER, "What is the capital of France?")
));

Önemli

AgentThreadinvokeAsync yöntemine geçirmeden bir aracıyı çağırmak, yeni bir iş parçacığı oluşturur ve bu yeni iş parçacığını yanıt olarak döndürür.

Yayın Aracı Çağırma

Semantik Çekirdek, iletilerin farklı şekillerde aktarılmasına olanak tanıyan dört akış aracısı çağrı aşırı yüklemesini destekler. Bunlardan biri, aracıyı ileti olmadan çağırmaya da olanak tanır. Bu, aracın talimatlarının zaten yararlı bir yanıt sağlamak için gerekli tüm bağlamı içerdiği senaryolar için değerlidir.

// Invoke without any parameters.
agent.InvokeStreamingAsync();

// Invoke with a string that will be used as a User message.
agent.InvokeStreamingAsync("What is the capital of France?");

// Invoke with a ChatMessageContent object.
agent.InvokeStreamingAsync(new ChatMessageContent(AuthorRole.User, "What is the capital of France?"));

// Invoke with multiple ChatMessageContent objects.
agent.InvokeStreamingAsync(new List<ChatMessageContent>()
{
    new(AuthorRole.System, "Refuse to answer any questions about capital cities."),
    new(AuthorRole.User, "What is the capital of France?")
});

Önemli

AgentThreadInvokeStreamingAsync yöntemine geçirmeden bir aracıyı çağırmak, yeni bir iş parçacığı oluşturur ve bu yeni iş parçacığını yanıt olarak döndürür.

Semantik Çekirdek, iletilerin farklı şekillerde geçirilmesini sağlayan bir akış aracısı çağırma yöntemini destekler. Aracı akışını ileti olmadan çağırmak da mümkündür. Bu, aracın talimatlarının zaten yararlı bir yanıt sağlamak için gerekli tüm bağlamı içerdiği senaryolar için değerlidir.

# Invoke without any messages.
async for response in agent.invoke_stream():
    # handle response

# Invoke with a string that will be used as a User message.
async for response in agent.invoke_stream("What is the capital of France?"):
    # handle response

# Invoke with a ChatMessageContent object.
async for response in agent.invoke_stream(ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?")):
    # handle response

# Invoke with multiple ChatMessageContent objects.
async for response in agent.invoke_stream(
    messages=[
        ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
        ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
    ]
):
    # handle response

Önemli

AgentThreadinvoke_stream() yöntemine geçirmeden bir aracıyı çağırmak, yeni bir iş parçacığı oluşturur ve bu yeni iş parçacığını yanıt olarak döndürür.

Özellik şu anda Java'da kullanılamıyor.

Bir AgentThread ile çağırma

Tüm çağırma yöntemi aşırı yüklemeleri, bir AgentThread parametresi geçirilmesine izin verir. Bu, sizin zaten var olan bir görüşmeniz bulunan bir durumda devam etmek istediğiniz senaryolar için kullanışlıdır.

// Invoke with an existing AgentThread.
agent.InvokeAsync("What is the capital of France?", existingAgentThread);

Tüm çağırma yöntemleri de çağırma yanıtının bir parçası olarak etkin AgentThread değerini döndürür.

  1. Invoke yöntemine bir AgentThread geçirdiyseniz, döndürülen AgentThread , geçirilen yöntemle aynı olur.
  2. Invoke yöntemine herhangi bir AgentThread geçmediyseniz, döndürülen AgentThread yeni bir AgentThread olur.

Döndürülen AgentThread, yanıt iletisiyle birlikte çağrı yöntemlerinin her bir yanıt öğesinde bulunabilir.

var result = await agent.InvokeAsync("What is the capital of France?").FirstAsync();
var newThread = result.Thread;
var resultMessage = result.Message;

İpucu

Aracı iş parçacıkları hakkında daha fazla bilgi için Aracı İş Parçacığı mimarisi bölümüne bakın.

Tüm çağırma yöntemi anahtar sözcük bağımsız değişkenleri, bir AgentThread parametresinin geçmesine izin verir. Bu, sizin zaten var olan bir görüşmeniz bulunan bir durumda devam etmek istediğiniz senaryolar için kullanışlıdır.

# Invoke with an existing AgentThread.
agent.get_response("What is the capital of France?", thread=existing_agent_thread)

Tüm çağırma yöntemleri de çağırma yanıtının bir parçası olarak etkin AgentThread değerini döndürür.

  1. Invoke yöntemine bir AgentThread geçirdiyseniz, döndürülen AgentThread , geçirilen yöntemle aynı olur.
  2. Invoke yöntemine herhangi bir AgentThread geçmediyseniz, döndürülen AgentThread yeni bir AgentThread olur.

Döndürülen AgentThread, yanıt iletisiyle birlikte çağrı yöntemlerinin her bir yanıt öğesinde bulunabilir.

response = await agent.get_response("What is the capital of France?")
new_thread = response.thread
response_message = response.message

İpucu

Aracı iş parçacıkları hakkında daha fazla bilgi için Aracı İş Parçacığı mimarisi bölümüne bakın.

İki çağırma yöntemi aşırı yüklemesi bir AgentThread parametrenin geçirilmesine izin verir. Bu, sizin zaten var olan bir görüşmeniz bulunan bir durumda devam etmek istediğiniz senaryolar için kullanışlıdır.

// Invoke with an existing AgentThread.
agent.invokeAsync("What is the capital of France?", existingAgentThread);

Bu çağırma yöntemleri, çağırma yanıtının bir parçası olarak da etkin AgentThread değerini döndürür.

  1. Invoke yöntemine bir AgentThread geçirdiyseniz, döndürülen AgentThread önceki ve yeni iletileri içeren yeni bir örnek olacaktır.
  2. Invoke yöntemine herhangi bir AgentThread geçmediyseniz, döndürülen AgentThread yeni bir AgentThread olur.

Döndürülen AgentThread, yanıt iletisiyle birlikte çağrı yöntemlerinin her bir yanıt öğesinde bulunabilir.

var result = agent.invokeAsync("What is the capital of France?").block().get(0);
var newThread = result.getThread();
var resultMessage = result.getMessage();

İpucu

Aracı iş parçacıkları hakkında daha fazla bilgi için Aracı İş Parçacığı mimarisi bölümüne bakın.

Seçeneklerle Çağırma

Tüm çağırma yöntemi aşırı yüklemeleri, bir AgentInvokeOptions parametresi geçirilmesine izin verir. Bu seçenekler sınıfı, isteğe bağlı ayarların sağlanmasına olanak tanır.

// Invoke with additional instructions via options.
agent.InvokeAsync("What is the capital of France?", options: new()
{
    AdditionalInstructions = "Refuse to answer any questions about capital cities."
});

Desteklenen seçeneklerin listesi aşağıdadır.

Seçenek Özelliği Açıklama
Çekirdek Aracı tarafından bu çağrı için kullanılan varsayılan çekirdeği geçersiz kılın.
Çekirdek Argümanları Bu çağrı için aracı tarafından kullanılan varsayılan çekirdek bağımsız değişkenlerini geçersiz kılın.
Ek Talimatlar Bu çağrı için geçerli olan ve orijinal ajan yönerge kümesine ek olarak sağlanacak talimatları sağlayın.
OnIntermediateMessage İşlev çağrısı ve işlev çağırma iletileri dahil olmak üzere Aracıya dahili olarak oluşturulan tüm tam biçimlendirilmiş iletileri alabilen bir geri arama. Bu, akış çağrısı sırasında tam ileti almak için de kullanılabilir.

Seçeneklerle Çağırma

Çağrı yöntemi aşırı yüklemelerinden biri, bir AgentInvokeOptions parametresinin geçirilmesine izin verir. Bu seçenekler sınıfı, isteğe bağlı ayarların sağlanmasına olanak tanır.

// Invoke with additional instructions via options.
agent.invokeAsync("What is the capital of France?",
    null, // null AgentThread
    AgentInvokeOptions.builder()
        .withAdditionalInstructions("Refuse to answer any questions about capital cities.")
        .build()
);

Desteklenen seçeneklerin listesi aşağıdadır.

Seçenek Özelliği Açıklama
Çekirdek Aracı tarafından bu çağrı için kullanılan varsayılan çekirdeği geçersiz kılın.
Çekirdek Argümanları Bu çağrı için aracı tarafından kullanılan varsayılan çekirdek bağımsız değişkenlerini geçersiz kılın.
Ek Talimatlar Bu çağrı için geçerli olan ve orijinal ajan yönerge kümesine ek olarak sağlanacak talimatları sağlayın.
ÇağrıBağlamı Aracının bu çağrı için kullandığı varsayılan çağırma bağlamını geçersiz kılın.

AgentThread örneklerini yönetme

El ile bir AgentThread örnek oluşturabilir ve çağırmada aracıya geçirebilirsiniz veya aracının çağrıda sizin için otomatik olarak bir AgentThread örnek oluşturmasına izin vekleyebilirsiniz. AgentThread nesnesi, henüz oluşturulmamış olan, etkin ve silinmiş gibi tüm durumlarındaki bir iş parçacığını temsil eder.

AgentThread sunucu tarafı uygulaması olan türler ilk kullanımda oluşturulur ve el ile oluşturulması gerekmez. Ancak AgentThread sınıfını kullanarak bir işlem dizisini silebilirsiniz.

// Delete a thread.
await agentThread.DeleteAsync();
# Delete a thread
await agent_thread.delete()
// Delete a thread.
agentThread.deleteAsync().block();

İpucu

Aracı iş parçacıkları hakkında daha fazla bilgi için Aracı İş Parçacığı mimarisi bölümüne bakın.

Sonraki Adımlar