TypeChat.net traz as idéias do TypeChat para .Net.
O TypeChat.net fornece bibliotecas de plataformas cruzadas que ajudam a criar interfaces de linguagem natural com modelos de idiomas usando tipos fortes, validação de tipo e programas simples de tipo segura (planos). A digitação forte pode ajudar a tornar o software que usa modelos de idiomas mais determinísticos e confiáveis.
// Translates user intent into strongly typed Calendar Actions
var model = new LanguageModel(Config.LoadOpenAI());
var translator = new JsonTranslator<CalendarActions>(model);
// Translate natural language request
CalendarActions actions = await translator.TranslateAsync(requestText);
O TypeChat.net está em desenvolvimento ativo com atualizações frequentes. A estrutura evoluirá à medida que a equipe explora o espaço e incorpora feedback. Os cenários suportados são mostrados nos exemplos incluídos. A documentação também continuará a melhorar. Em caso de dúvida, observe o código.
Atualmente, o TypeChat.net consiste nos seguintes assemblies:
Microsoft.TyPechat : Classes que traduzem o Intent Intent em objetos fortemente digitados e validados.
Microsoft.Typechat.Program : Classes para sintetizar, validar e executar programas JSON .
Microsoft.TyPechat.Semantickernel : integração com o kernel semântico do Microsoft para modelos, plug -ins, incorporação e outros recursos.
O TypeChat usa modelos de idiomas para traduzir a intenção do usuário em JSON que está em conformidade com um esquema. Este JSON é então validado e desserializado em um objeto digitado. A verificação adicional de restrição é aplicada conforme necessário. Os erros de validação são enviados de volta ao modelo de idioma, que os usa para reparar o JSON que ele retornou originalmente.
O TypeChat fornece:
[Comment("Milks currently in stock")]
public class Milks
{
[JsonVocab("whole milk | two percent milk | nonfat milk | soy milk | almond milk")]
public string Name { get; set; }
}
TypeChat.Program traduz solicitações de linguagem natural em programas simples ( planos ), representados como JSON.
Os programas JSON podem ser considerados como um DSL ou plano, expresso em JSON, com uma gramática associada que é aplicada. Os programas JSON podem ser digitados contra as APIs que eles têm como alvo. Eles podem ser executados usando um intérprete ou compilados no código .NET.
Typechat.program inclui:
// Translates user intent into typed Programs that call methods on a Math API
var model = new LanguageModel(Config.LoadOpenAI());
var api = new MathAPI();
var translator = new ProgramTranslator<IMathAPI>(model, api);
// Translate natural language request
Program program = await translator.TranslateAsync(requestText);
// Run the program
program.Run(api);
TypeChat.semantickernel usa o kernel semântico 1.0. Inclui aulas para:
As versões anteriores do TypeChat.net usaram o modelo de programação de pré-lançamento do kernel semântico. Você pode acessar esta versão depreciada usando o ramo SK_Prerelease.
dotnet add package Microsoft.TypeChat
dotnet add package Microsoft.TypeChat.Program
dotnet add package Microsoft.TypeChat.SemanticKernel
Para ver o TypeChat.net em ação, explore os projetos de exemplo e a biblioteca TypeChat.Example.
Cada exemplo inclui um input.txt com entrada de amostra. Passe o arquivo de entrada como um argumento para executar o exemplo no modo em lote .
As seções abaixo descrevem quais exemplos melhor introduzirão qual conceito. Alguns exemplos ou cenários podem funcionar melhor com o GPT-4 .
O exemplo do sentimento é o Hello World do TypeChat e uma introdução mínima ao JSontranslator.
Os exemplos a seguir demonstram como usar o JSontranslator, esquemas e vocabulários:
Para usar o TypeChat.net ou executar os exemplos, você precisa :
A appSsettings.Development.json típico será o seguinte:
// For Azure OpenAI service
{
"OpenAI": {
"Azure": true,
"ApiKey": "YOUR API KEY",
"Endpoint": "https://YOUR_RESOURCE_NAME.openai.azure.com",
"Model": "gpt-35-turbo" // Name of Azure deployment
}
}
// For Azure OpenAI service with Azure Identity: DefaultCredentials
{
"OpenAI": {
"Azure": true,
"ApiKey": "identity",
"Endpoint": "https://YOUR_RESOURCE_NAME.openai.azure.com",
"Model": "gpt-35-turbo" // Name of Azure deployment
}
}
// For OpenAI Service:
{
"OpenAI": {
"Azure": false,
"ApiKey": "YOUR API KEY",
"Endpoint": "https://api.openai.com/v1/chat/completions",
"Model": "gpt-3.5-turbo" // Name of OpenAI model
}
}
Exemplos de TypeChat acessam modelos de idiomas usando a classe LinguageModel. A classe OpenAaconfig fornece configuração para LinguageModel. Você inicializa o OpenAiconfig a partir da configuração do seu aplicativo, a partir de um arquivo JSON ou de variáveis de ambiente.
Consulte OpenAaconfig.cs para obter uma lista de:
// Your configuration
OpenAIConfig config = Config.LoadOpenAI();
// Or Json file
OpenAIConfig config = OpenAIConfig.LoadFromJsonFile(...);
// Or from config
config = OpenAIConfig.FromEnvironment();
var model = new LanguageModel(config);
Você também pode acessar um LanguageModel usando o objeto Semantickernel Kernel que você criou usando um KernelBuilder.
const string modelName = "gpt-35-turbo";
new ChatLanguageModel(_kernel.GetService<IChatCompletionService>(modelName), modelName);
O TypeChat acessa modelos de idiomas usando a interface ilanguageModel. LanguageModel implementa o ilanguageModel.
Você pode usar seu próprio cliente de modelo implementando o IlanguageModel. Se você não usar um dos modelos abertos de IA listados acima, provavelmente também precisará fornecer recursos do JSontranslator que funcionam melhor com seu modelo.
Este projeto adotou o Código de Conduta Open Microsoft. Para obter mais informações, consulte o Código de Conduta Perguntas frequentes ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.
Copyright (C) Microsoft Corporation. Todos os direitos reservados.
Licenciado sob a licença do MIT.
Este projeto pode conter marcas comerciais ou logotipos para projetos, produtos ou serviços. O uso autorizado de marcas comerciais ou logotipos da Microsoft está sujeito e deve seguir as diretrizes de marca registrada e marca da Microsoft. O uso de marcas comerciais da Microsoft ou logotipos em versões modificadas deste projeto não deve causar confusão ou implicar o patrocínio da Microsoft. Qualquer uso de marcas comerciais ou logotipos de terceiros estão sujeitas às políticas de terceiros.