探索 语义内核 聊天完成代理(实验性)

警告

语义内核代理框架是实验性的,仍在开发中,可能会更改。

有关此讨论的详细 API 文档在以下位置提供:

代理当前在 Java 中不可用。

语义内核中的 聊天完成

聊天完成 基本上是一种协议,用于与 AI 模型进行基于聊天的交互,其中聊天历史记录通过每个请求维护并呈现给模型。 语义内核 AI 服务 提供统一的框架,用于集成各种 AI 模型的聊天完成功能。

聊天完成代理可以利用这些 AI 服务中的任何一个来生成响应,无论是定向到用户还是另一个代理。

对于 .NET, 聊天完成 AI 服务基于 IChatCompletionService 接口。

对于 .NET,支持通过聊天完成的模型的某些 AI 服务包括:

型号 语义内核 AI 服务
Azure Open AI Microsoft.SemanticKernel.Connectors.AzureOpenAI
双子座 Microsoft.SemanticKernel.Connectors.Google
HuggingFace Microsoft.SemanticKernel.Connectors.HuggingFace
Mistral Microsoft.SemanticKernel.Connectors.MistralAI
OpenAI Microsoft.SemanticKernel.Connectors.OpenAI
Onnx Microsoft.SemanticKernel.Connectors.Onnx

代理当前在 Java 中不可用。

创建聊天完成代理

聊天完成代理基本上基于 AI 服务。 因此,创建 聊天完成代理 首先创建包含一 个或多个聊天完成服务的内核 实例,然后使用对该 内核 实例的引用实例化代理。

// Initialize a Kernel with a chat-completion service
IKernelBuilder builder = Kernel.CreateBuilder();

builder.AddAzureOpenAIChatCompletion(/*<...configuration parameters>*/);

Kernel kernel = builder.Build();

// Create the agent
ChatCompletionAgent agent =
    new()
    {
        Name = "SummarizationAgent",
        Instructions = "Summarize user input",
        Kernel = kernel
    };
# Define the Kernel
kernel = Kernel()

# Add the AzureChatCompletion AI Service to the Kernel
kernel.add_service(AzureChatCompletion(service_id="<service_id>"))

# Create the agent
agent = ChatCompletionAgent(
  service_id="agent", 
  kernel=kernel, 
  name="<agent name>", 
  instructions="<agent instructions>",
)

代理当前在 Java 中不可用。

AI 服务选择

与直接使用语义内核 AI 服务不同,聊天完成代理支持服务选择器的规范。 当内核包含多个 AI 服务时,服务选择器会标识要面向的 AI 服务

注意:如果存在多个 AI 服务且未提供任何服务选择器,则为在代理框架外部使用 AI 服务时找到的代理应用相同的默认逻辑

IKernelBuilder builder = Kernel.CreateBuilder();

// Initialize multiple chat-completion services.
builder.AddAzureOpenAIChatCompletion(/*<...service configuration>*/, serviceId: "service-1");
builder.AddAzureOpenAIChatCompletion(/*<...service configuration>*/, serviceId: "service-2");

Kernel kernel = builder.Build();

ChatCompletionAgent agent =
    new()
    {
        Name = "<agent name>",
        Instructions = "<agent instructions>",
        Kernel = kernel,
        Arguments = // Specify the service-identifier via the KernelArguments
          new KernelArguments(
            new OpenAIPromptExecutionSettings() 
            { 
              ServiceId = "service-2" // The target service-identifier.
            });
    };
# Define the Kernel
kernel = Kernel()

# Add the AzureChatCompletion AI Service to the Kernel
kernel.add_service(AzureChatCompletion(service_id="<service_id>"))

# Create the agent
agent = ChatCompletionAgent(
  service_id="agent", 
  kernel=kernel, 
  name="<agent name>", 
  instructions="<agent instructions>",
)

代理当前在 Java 中不可用。

聊天完成代理进行交流

聊天完成代理 的交流基于 聊天历史记录 实例,与与 聊天完成 AI 服务交互没有什么不同。

// Define agent
ChatCompletionAgent agent = ...;

// Create a ChatHistory object to maintain the conversation state.
ChatHistory chat = [];

// Add a user message to the conversation
chat.Add(new ChatMessageContent(AuthorRole.User, "<user input>"));

// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(chat))
{
  // Process agent response(s)...
}
# Define agent
agent = ChatCompletionAgent(...)

# Define the chat history
chat = ChatHistory()

# Add the user message
chat.add_message(ChatMessageContent(role=AuthorRole.USER, content=input))

# Generate the agent response(s)
async for response in agent.invoke(chat):
  # process agent response(s)

代理当前在 Java 中不可用。

操作说明:

有关聊天完成代理的端到端示例,请参阅: