С завершением диалога можно имитировать диалог в обоих направлениях с агентом ИИ. Это, конечно, полезно для создания чат-ботов, но его также можно использовать для создания автономных агентов, которые могут выполнять бизнес-процессы, создавать код и многое другое. Как основной тип модели, предоставляемый OpenAI, Google, Mistral, Facebook и другие, завершение чата является наиболее распространенной службой искусственного интеллекта, которую вы добавите в проект семантического ядра.
При выборе модели завершения чата необходимо учитывать следующее:
- Какие модальности поддерживает модель (например, текст, изображение, звук и т. д.)?
- Поддерживается ли вызов функций?
- Насколько быстро он получает и создает маркеры?
- Сколько стоит каждый токен?
Внимание
Из всех приведенных выше вопросов самое важное — поддерживает ли модель вызов функции. Если это не так, вы не сможете использовать модель для вызова существующего кода. Большинство последних моделей из OpenAI, Google, Mistral и Amazon все поддерживают вызовы функций. Однако поддержка небольших языковых моделей по-прежнему ограничена.
Настройка локальной среды
Некоторые службы ИИ могут размещаться локально и могут потребовать некоторых настроек. Ниже приведены инструкции для тех, кто поддерживает это.
Локальная настройка отсутствует.
Локальная настройка отсутствует.
Локальная настройка отсутствует.
Локальная настройка отсутствует.
Локальная настройка отсутствует.
Локальная настройка отсутствует.
Чтобы запустить Ollama локально с помощью docker, используйте следующую команду, чтобы запустить контейнер с помощью ЦП.
docker run -d -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Чтобы запустить Ollama локально с помощью docker, используйте следующую команду, чтобы запустить контейнер с помощью GPU.
docker run -d --gpus=all -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
После запуска контейнера запустите окно терминала для контейнера Docker, например при использовании рабочего стола Docker, выберите Open in Terminal из действий.
В этом терминале скачайте необходимые модели, например здесь мы скачиваем модель phi3.
ollama pull phi3
Локальная настройка отсутствует.
Локальная настройка отсутствует.
Клонируйте репозиторий, содержащий модель ONNX, который вы хотите использовать.
git clone https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-onnx
Локальная настройка отсутствует.
Установка необходимых пакетов
Перед добавлением завершения чата в ядро необходимо установить необходимые пакеты. Ниже приведены пакеты, которые необходимо установить для каждого поставщика услуг ИИ.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
dotnet add package Microsoft.SemanticKernel.Connectors.MistralAI --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Google --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.HuggingFace --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.AzureAIInference --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Amazon --prerelease
Примечание.
Антропические модели доступны на платформе Amazon Bedrock. Чтобы использовать модели Anthropic, необходимо установить пакет коннектора Amazon.
dotnet add package Microsoft.SemanticKernel.Connectors.Amazon --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Onnx --prerelease
Для других поставщиков служб ИИ, поддерживающих API завершения чата OpenAI (например, LLM Studio), можно использовать соединитель завершения чата OpenAI.
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
Создание служб завершения чата
Теперь, когда вы установили необходимые пакеты, можно создать службы завершения чата. Ниже приведены несколько способов создания служб завершения чата с помощью семантического ядра.
Добавление непосредственно в ядро
Чтобы добавить службу завершения чата, можно использовать следующий код, чтобы добавить его во внутренний поставщик служб ядра.
using Microsoft.SemanticKernel;
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAIChatCompletion(
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Kernel kernel = kernelBuilder.Build();
using Microsoft.SemanticKernel;
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional
serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Kernel kernel = kernelBuilder.Build();
Внимание
Коннектор завершения чата Mistral в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddMistralChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Внимание
Коннектор завершения чата Google в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddGoogleAIGeminiChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Внимание
Коннектор завершения чата Hugging Face в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddHuggingFaceChatCompletion(
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Внимание
Соединитель завершения чата Azure AI инференс в настоящее время находится в стадии эксперимента. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureAIInferenceChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Внимание
Соединитель завершения чата Ollama в настоящее время экспериментальн. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOllamaChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. "phi3" if phi3 was downloaded as described above.
endpoint: new Uri("YOUR_ENDPOINT"), // E.g. "http://localhost:11434" if Ollama has been started in docker as described above.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
Kernel kernel = kernelBuilder.Build();
Внимание
В настоящее время соединитель завершения чата Bedrock, необходимый для Anthropic, является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
Kernel kernel = kernelBuilder.Build();
Внимание
Соединитель завершения чата Bedrock в настоящее время находится на стадии экспериментального тестирования. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
Kernel kernel = kernelBuilder.Build();
Внимание
Соединитель завершения чата ONNX в настоящее время экспериментальный. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOnnxRuntimeGenAIChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. phi-3
modelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\Phi-3-mini-4k-instruct-onnx\cpu_and_mobile\cpu-int4-rtn-block-32
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
jsonSerializerOptions: customJsonSerializerOptions // Optional; for providing custom serialization settings for e.g. function argument / result serialization and parsing.
);
Kernel kernel = kernelBuilder.Build();
Для других поставщиков служб ИИ, поддерживающих API завершения чата OpenAI (например, LLM Studio), можно использовать следующий код для повторного использования существующего соединителя завершения чата OpenAI.
Внимание
Использование пользовательских конечных точек с соединителем OpenAI в настоящее время находится в стадии эксперимента. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0010.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Внедрение зависимостей
Если вы используете инъекцию зависимостей, то, скорее всего, вы захотите добавить службы ИИ непосредственно к провайдеру служб. Это полезно, если вы хотите создать одноэлементные службы ИИ и повторно использовать их в временных ядрах.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddAzureOpenAIChatCompletion(
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional; for OpenAI deployment
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Коннектор завершения чата Mistral в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddMistralChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Коннектор завершения чата Google в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddGoogleAIGeminiChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Коннектор завершения чата Hugging Face в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddHuggingFaceChatCompletion(
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Соединитель завершения чата Azure AI инференс в настоящее время находится в стадии эксперимента. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddAzureAIInferenceChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Соединитель завершения чата Ollama в настоящее время экспериментальн. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddOllamaChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. "phi3" if phi3 was downloaded as described above.
endpoint: new Uri("YOUR_ENDPOINT"), // E.g. "http://localhost:11434" if Ollama has been started in docker as described above.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
В настоящее время соединитель завершения чата Bedrock, необходимый для Anthropic, является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Соединитель завершения чата Bedrock в настоящее время находится на стадии экспериментального тестирования. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Внимание
Соединитель завершения чата ONNX в настоящее время экспериментальный. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddOnnxRuntimeGenAIChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. phi-3
modelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\Phi-3-mini-4k-instruct-onnx\cpu_and_mobile\cpu-int4-rtn-block-32
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
jsonSerializerOptions: customJsonSerializerOptions // Optional; for providing custom serialization settings for e.g. function argument / result serialization and parsing.
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Для других поставщиков служб ИИ, поддерживающих API завершения чата OpenAI (например, LLM Studio), можно использовать следующий код для повторного использования существующего соединителя завершения чата OpenAI.
Внимание
Использование пользовательских конечных точек с соединителем OpenAI в настоящее время находится в стадии эксперимента. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0010.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0010
builder.Services.AddOpenAIChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Создание автономных экземпляров
Наконец, можно создать экземпляры службы напрямую, чтобы можно было добавить их в ядро позже или использовать их непосредственно в коде, не внедряя их в ядро или в поставщике услуг.
using Microsoft.SemanticKernel.Connectors.AzureOpenAI;
AzureOpenAIChatCompletionService chatCompletionService = new (
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Внимание
Коннектор завершения чата Mistral в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.MistralAI;
#pragma warning disable SKEXP0070
MistralAIChatCompletionService chatCompletionService = new (
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Внимание
Коннектор завершения чата Google в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
GoogleAIGeminiChatCompletionService chatCompletionService = new (
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Внимание
Коннектор завершения чата Hugging Face в настоящее время является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.HuggingFace;
#pragma warning disable SKEXP0070
HuggingFaceChatCompletionService chatCompletionService = new (
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT") // Optional
);
Внимание
Соединитель завершения чата Azure AI инференс в настоящее время находится в стадии эксперимента. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.AzureAIInference;
#pragma warning disable SKEXP0070
AzureAIInferenceChatCompletionService chatCompletionService = new (
modelId: "YOUR_MODEL_ID",
apiKey: "YOUR_API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Внимание
Соединитель завершения чата Ollama в настоящее время экспериментальн. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.ChatCompletion;
using OllamaSharp;
#pragma warning disable SKEXP0070
using var ollamaClient = new OllamaApiClient(
uriString: "YOUR_ENDPOINT" // E.g. "http://localhost:11434" if Ollama has been started in docker as described above.
defaultModel: "NAME_OF_MODEL" // E.g. "phi3" if phi3 was downloaded as described above.
);
IChatCompletionService chatCompletionService = ollamaClient.AsChatCompletionService();
Внимание
В настоящее время соединитель завершения чата Bedrock, необходимый для Anthropic, является экспериментальным. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Amazon;
#pragma warning disable SKEXP0070
BedrockChatCompletionService chatCompletionService = new BedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
);
Внимание
Соединитель завершения чата Bedrock в настоящее время находится на стадии экспериментального тестирования. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Amazon;
#pragma warning disable SKEXP0070
BedrockChatCompletionService chatCompletionService = new BedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
);
Внимание
Соединитель завершения чата ONNX в настоящее время экспериментальный. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Onnx;
#pragma warning disable SKEXP0070
OnnxRuntimeGenAIChatCompletionService chatCompletionService = new OnnxRuntimeGenAIChatCompletionService(
modelId: "NAME_OF_MODEL", // E.g. phi-3
modelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\Phi-3-mini-4k-instruct-onnx\cpu_and_mobile\cpu-int4-rtn-block-32
jsonSerializerOptions: customJsonSerializerOptions // Optional; for providing custom serialization settings for e.g. function argument / result serialization and parsing.
);
Для других поставщиков служб ИИ, поддерживающих API завершения чата OpenAI (например, LLM Studio), можно использовать следующий код для повторного использования существующего соединителя завершения чата OpenAI.
Внимание
Использование пользовательских конечных точек с соединителем OpenAI в настоящее время находится в стадии эксперимента. Чтобы использовать его, необходимо добавить #pragma warning disable SKEXP0010.
using Microsoft.SemanticKernel.Connectors.OpenAI;
#pragma warning disable SKEXP0010
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Чтобы создать службу завершения чата, необходимо установить и импортировать необходимые модули и создать экземпляр службы. Ниже приведены действия по установке и созданию службы завершения чата для каждого поставщика услуг ИИ.
Установка необходимых пакетов
Пакет семантического ядра поставляется со всеми необходимыми пакетами для использования Azure OpenAI. Для использования Azure OpenAI не требуется дополнительных пакетов.
Пакет семантического ядра поставляется со всеми необходимыми пакетами для использования OpenAI. Для использования OpenAI нет дополнительных пакетов.
pip install semantic-kernel[azure]
pip install semantic-kernel[anthropic]
pip install semantic-kernel[aws]
pip install semantic-kernel[google]
pip install semantic-kernel[google]
pip install semantic-kernel[mistralai]
pip install semantic-kernel[ollama]
pip install semantic-kernel[onnx]
Создание службы завершения чата
Совет/Чаевые
Службы OpenAIChatCompletion, AzureChatCompletion, и AzureAIInferenceChatCompletion позволяют настроить аргумент ключевого слова instruction_role. Этот параметр определяет, как системные инструкции представлены в модели и принимает либо "system", либо "developer". При использовании модели причин следует задать instruction_role="developer". Любые сообщения ролей system, найденные в ChatHistory, будут автоматически сопоставлены с ролью developer до отправки запроса в модель.
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
chat_completion_service = AzureChatCompletion(
deployment_name="my-deployment",
api_key="my-api-key",
endpoint="my-api-endpoint", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = AzureChatCompletion(service_id="my-service-id")
Примечание.
Служба AzureChatCompletion также поддерживает проверку подлинности Microsoft Entra. Если ключ API не указан, служба попытается пройти проверку подлинности с помощью токена Entra.
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
chat_completion_service = OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = OpenAIChatCompletion(service_id="my-service-id")
from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion
chat_completion_service = AzureAIInferenceChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
endpoint="my-api-endpoint", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = AzureAIInferenceChatCompletion(ai_model_id="my-deployment", service_id="my-service-id")
# You can also use an Azure OpenAI deployment with the Azure AI Inference service
from azure.ai.inference.aio import ChatCompletionsClient
from azure.identity.aio import DefaultAzureCredential
chat_completion_service = AzureAIInferenceChatCompletion(
ai_model_id="my-deployment",
client=ChatCompletionsClient(
endpoint=f"{str(endpoint).strip('/')}/openai/deployments/{deployment_name}",
credential=DefaultAzureCredential(),
credential_scopes=["https://cognitiveservices.azure.com/.default"],
),
)
Примечание.
Служба AzureAIInferenceChatCompletion также поддерживает проверку подлинности Microsoft Entra. Если ключ API не указан, служба попытается пройти проверку подлинности с помощью токена Entra.
from semantic_kernel.connectors.ai.anthropic import AnthropicChatCompletion
chat_completion_service = AnthropicChatCompletion(
chat_model_id="model-id",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
from semantic_kernel.connectors.ai.bedrock import BedrockChatCompletion
chat_completion_service = BedrockChatCompletion(
model_id="model-id",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Примечание.
Amazon Bedrock не принимает ключ API. Следуйте этому руководству , чтобы настроить среду.
from semantic_kernel.connectors.ai.google.google_ai import GoogleAIChatCompletion
chat_completion_service = GoogleAIChatCompletion(
gemini_model_id="model-id",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Совет/Чаевые
Пользователи могут получить доступ к моделям Google Gemini через Google AI Studio или платформу Google Vertex. Следуйте этому руководству , чтобы настроить среду.
from semantic_kernel.connectors.ai.google.vertex_ai import VertexAIChatCompletion
chat_completion_service = VertexAIChatCompletion(
project_id="my-project-id",
gemini_model_id="model-id",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Совет/Чаевые
Пользователи могут получить доступ к моделям Google Gemini через Google AI Studio или платформу Google Vertex. Следуйте этому руководству , чтобы настроить среду.
from semantic_kernel.connectors.ai.mistral_ai import MistralAIChatCompletion
chat_completion_service = MistralAIChatCompletion(
ai_model_id="model-id",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
from semantic_kernel.connectors.ai.ollama import OllamaChatCompletion
chat_completion_service = OllamaChatCompletion(
ai_model_id="model-id",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Совет/Чаевые
Узнайте больше о Ollama и скачайте необходимое программное обеспечение из здесь.
from semantic_kernel.connectors.ai.onnx import OnnxGenAIChatCompletion
chat_completion_service = OnnxGenAIChatCompletion(
template="phi3v",
ai_model_path="model-path",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Вы можете сразу начать использовать службу завершения или добавить службу завершения чата в ядро. Для добавления службы в ядро можно использовать следующий код.
from semantic_kernel import Kernel
# Initialize the kernel
kernel = Kernel()
# Add the chat completion service created above to the kernel
kernel.add_service(chat_completion_service)
Вы можете создавать экземпляры службы завершения чата напрямую и добавлять их в ядро или использовать их непосредственно в коде, не внедряя их в ядро. В следующем коде показано, как создать службу завершения чата и добавить ее в ядро.
import com.azure.ai.openai.OpenAIAsyncClient;
import com.azure.ai.openai.OpenAIClientBuilder;
import com.microsoft.semantickernel.Kernel;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
// Create the client
OpenAIAsyncClient client = new OpenAIClientBuilder()
.credential(azureOpenAIClientCredentials)
.endpoint(azureOpenAIClientEndpoint)
.buildAsyncClient();
// Create the chat completion service
ChatCompletionService openAIChatCompletion = OpenAIChatCompletion.builder()
.withOpenAIAsyncClient(client)
.withModelId(modelId)
.build();
// Initialize the kernel
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, openAIChatCompletion)
.build();
import com.azure.ai.openai.OpenAIAsyncClient;
import com.azure.ai.openai.OpenAIClientBuilder;
import com.microsoft.semantickernel.Kernel;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
// Create the client
OpenAIAsyncClient client = new OpenAIClientBuilder()
.credential(openAIClientCredentials)
.buildAsyncClient();
// Create the chat completion service
ChatCompletionService openAIChatCompletion = OpenAIChatCompletion.builder()
.withOpenAIAsyncClient(client)
.withModelId(modelId)
.build();
// Initialize the kernel
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, openAIChatCompletion)
.build();
Получение служб завершения общения в чате
После добавления служб завершения чата в ядро их можно получить с помощью метода получения службы. Ниже приведен пример получения службы завершения чата из ядра.
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
# Retrieve the chat completion service by type
chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)
# Retrieve the chat completion service by id
chat_completion_service = kernel.get_service(service_id="my-service-id")
# Retrieve the default inference settings
execution_settings = kernel.get_prompt_execution_settings_from_service_id("my-service-id")
ChatCompletionService chatCompletionService = kernel.getService(ChatCompletionService.class);
Совет/Чаевые
Добавление службы завершения чата в ядро не требуется, если вам не нужно использовать другие службы в ядре. Службу завершения чата можно использовать непосредственно в коде.
Использование служб завершения чата
Теперь, когда у вас есть служба завершения чата, ее можно использовать для создания ответов от агента ИИ. Существует два основных способа использования службы завершения чата:
-
не потоковый: Вы ждёте, пока служба сгенерирует весь ответ перед тем, как вернуть его пользователю.
-
Стриминг: отдельные фрагменты ответа создаются и возвращаются пользователю по мере их генерации.
Прежде чем приступить к работе, необходимо вручную создать экземпляр параметров выполнения, чтобы использовать службу завершения чата, если вы не зарегистрировали службу в ядре.
from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
execution_settings = OpenAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
execution_settings = OpenAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatPromptExecutionSettings
execution_settings = AzureAIInferenceChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.anthropic import AnthropicChatPromptExecutionSettings
execution_settings = AnthropicChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.bedrock import BedrockChatPromptExecutionSettings
execution_settings = BedrockChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.google.google_ai import GoogleAIChatPromptExecutionSettings
execution_settings = GoogleAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.google.vertex_ai import VertexAIChatPromptExecutionSettings
execution_settings = VertexAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.mistral_ai import MistralAIChatPromptExecutionSettings
execution_settings = MistralAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.ollama import OllamaChatPromptExecutionSettings
execution_settings = OllamaChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.onnx import OnnxGenAIPromptExecutionSettings
execution_settings = OnnxGenAIPromptExecutionSettings()
Совет/Чаевые
Чтобы узнать, что можно настроить в параметрах выполнения, можно проверить определение класса в исходном коде или ознакомиться с документацией по API .
Ниже приведены два способа использования службы завершения чата для создания ответов.
Завершение чата без потоковой передачи
Чтобы использовать завершение чата без потоковой передачи, можно использовать следующий код для создания ответа от агента ИИ.
ChatHistory history = [];
history.AddUserMessage("Hello, how are you?");
var response = await chatCompletionService.GetChatMessageContentAsync(
history,
kernel: kernel
);
chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")
response = await chat_completion_service.get_chat_message_content(
chat_history=history,
settings=execution_settings,
)
ChatHistory history = new ChatHistory();
history.addUserMessage("Hello, how are you?");
InvocationContext optionalInvocationContext = null;
List<ChatMessageContent<?>> response = chatCompletionService.getChatMessageContentsAsync(
history,
kernel,
optionalInvocationContext
);
Завершение потокового чата
Чтобы использовать завершение потокового чата, можно использовать следующий код для создания ответа от агента ИИ.
ChatHistory history = [];
history.AddUserMessage("Hello, how are you?");
var response = chatCompletionService.GetStreamingChatMessageContentsAsync(
chatHistory: history,
kernel: kernel
);
await foreach (var chunk in response)
{
Console.Write(chunk);
}
chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")
response = chat_completion_service.get_streaming_chat_message_content(
chat_history=history,
settings=execution_settings,
)
async for chunk in response:
print(chunk, end="")
Примечание.
Семантический ядро для Java не поддерживает модель потоковой передачи ответа.
Следующие шаги
Теперь, когда вы добавили службы завершения чата в проект семантического ядра, вы можете начать создавать беседы с агентом ИИ. Дополнительные сведения об использовании службы завершения чата см. в следующих статьях: