Typechat.net apporte les idées de Typechat à .net.
Typechat.net fournit des bibliothèques transformatrices qui vous aident à créer des interfaces en langage naturel avec des modèles de langage à l'aide de types forts, de validation de type et de programmes (plans) de type simple. Un typage fort peut aider à rendre les logiciels qui utilisent des modèles de langage plus déterministes et plus fiables.
// 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);
Typechat.net est en développement actif avec des mises à jour fréquentes. Le cadre évoluera à mesure que l'équipe explore l'espace et intègre les commentaires. Les scénarios pris en charge sont affichés dans les exemples inclus. La documentation continuera également de s'améliorer. En cas de doute, veuillez consulter le code.
Typechat.net se compose actuellement des assemblages suivants:
Microsoft.Typechat : classes qui traduisent l'intention de l'utilisateur dans des objets fortement typés et validés.
Microsoft.Typechat.Program : Classes pour synthétiser, valider et exécuter les programmes JSON .
Microsoft.Typechat.semantickernel : Intégration avec le noyau sémantique Microsoft pour les modèles, les plugins, les intégres et autres fonctionnalités.
TypeChat utilise des modèles de langage pour traduire l'intention de l'utilisateur en JSON qui se conforme à un schéma. Ce JSON est ensuite validé et désérialisé en un objet typé. Une vérification supplémentaire des contraintes est appliquée au besoin. Les erreurs de validation sont renvoyées au modèle de langue, qui les utilise pour réparer le JSON qu'il a renvoyé à l'origine.
Typechat fournit:
[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 traduit les demandes de langage naturel en programmes simples ( plans ), représentés en JSON.
Les programmes JSON peuvent être considérés comme un DSL ou un plan, exprimé en JSON, avec une grammaire associée qui est appliquée. Les programmes JSON peuvent être vérifiés par les API qu'ils ciblent. Ils peuvent ensuite être exécutés à l'aide d'un interprète ou compilé en code .NET.
Typechat.Program comprend:
// 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 utilise le noyau sémantique 1.0. Il comprend des cours pour:
Les versions antérieures de typeChat.net ont utilisé le modèle de programmation pré-libération du noyau sémantique. Vous pouvez accéder à cette version obsolète à l'aide de la succursale SK_Preelease.
dotnet add package Microsoft.TypeChat
dotnet add package Microsoft.TypeChat.Program
dotnet add package Microsoft.TypeChat.SemanticKernel
Pour voir Typechat.net en action, explorez l'exemple de projets et la bibliothèque Typechat.Examples.
Chaque exemple comprend une entrée.txt avec une entrée d'échantillon. Passez le fichier d'entrée comme argument pour exécuter l'exemple en mode batch .
Les sections ci-dessous décrivent quels exemples introduiront le mieux quel concept. Certains exemples ou scénarios peuvent mieux fonctionner avec GPT-4 .
L'exemple de sentiment est Hello World de Typechat et une introduction minimale à JsonTranslator.
Les exemples suivants montrent comment utiliser JSONTRANSLOTor, schémas et vocabulaires:
Pour utiliser Typechat.net ou exécuter les exemples, vous avez besoin soit :
Un appsettings.development.json typique ressemblera à ceci:
// 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
}
}
Les exemples de typeChat accèdent aux modèles de langage à l'aide de la classe LanguageModel. La classe OpenaiConfig fournit la configuration de LanguageModel. Vous initialisez OpenaiConfig à partir de la configuration de votre application, à partir d'un fichier JSON ou à partir des variables d'environnement.
Voir openaiconfig.cs pour une liste 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);
Vous pouvez également accéder à un LanguageModel à l'aide de l'objet de noyau Semantickernel que vous avez créé à l'aide d'un KernelBuilder.
const string modelName = "gpt-35-turbo";
new ChatLanguageModel(_kernel.GetService<IChatCompletionService>(modelName), modelName);
TypeChat accède aux modèles de langage à l'aide de l'interface ilanguagemodel. LanguageModel implémente ilanguagemodel.
Vous pouvez utiliser votre propre client de modèle en implémentant IlanguageModel. Si vous n'utilisez pas l'un des modèles d'IA ouverts énumérés ci-dessus, vous devrez probablement également fournir JSONTranslatorPrompts qui fonctionnent le mieux avec votre modèle.
Ce projet a adopté le code de conduite open source Microsoft. Pour plus d'informations, consultez le code de conduite FAQ ou contactez [email protected] avec toute question ou commentaire supplémentaire.
Copyright (c) Microsoft Corporation. Tous droits réservés.
Licencié sous la licence du MIT.
Ce projet peut contenir des marques ou des logos pour des projets, des produits ou des services. L'utilisation autorisée de marques ou de logos Microsoft est soumise et doit suivre les directives de marque et de marque de Microsoft. L'utilisation de marques ou de logos de Microsoft dans des versions modifiées de ce projet ne doit pas provoquer de confusion ou impliquer le parrainage de Microsoft. Toute utilisation de marques ou de logos tiers est soumis aux politiques de ces tiers.