探索 语义内核 聊天完成代理(实验性)
警告
语义内核代理框架是实验性的,仍在开发中,可能会更改。
有关此讨论的详细 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 服务。
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 中不可用。
操作说明:
有关聊天完成代理的端到端示例,请参阅: