De hier geïllustreerde configuratie laat zien hoe informatie uit Mercator automatisch kan worden vertaald met AI. Het voorbeeld wordt gegeven voor het artikelinformatiebestand, waarbij de gebruiker de artikelomschrijving invoert in het Frans (S_MODELE) en AI vraagt, via een aangepaste knop, om het te vertalen
- naar het Nederlands: S_MODELEN,
- naar het Engels: S_MODELEE,
- naar het Duits: S_MODELED.
Nadat de vertaling is voltooid, kan de gebruiker blijven communiceren met AI en aanvullende instructies geven om de vertalingen te verbeteren.
Met ChatGPT van OpenAI
Dit vereist de installatie van de plugin MercatorAI.OpenAI en werkt alleen met een Core-versie van Mercator. (De code is echter ook compileerbaar in een klassieke versie).
De code voor de knop naast de omschrijvingsvelden is als volgt. Merk op dat hier een gestructureerde antwoordchat wordt gebruikt. Het antwoord wordt geplaatst in de klasse Trad. Het attribuut MercatorAI.FactoryOpenAI.ChatJsonFormat (Description) geeft aan ChatGPT door waar elk antwoord moet worden geplaatst.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;
// <CompileWithRoslyn />
namespace MercatorUi.MovableControls.ButtonsCodes
{
public static class Script
{
public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
{
// enter your customized code here
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)clickedButton.Form;
if (string.IsNullOrWhiteSpace(sigForm.StockRecord.S_MODELE))
{
MercatorUi.Dialogs.Stop("De omschrijving in het Frans is leeg!");
return;
}
MercatorAI.FactoryOpenAI factory = new MercatorAI.FactoryOpenAI();
MercatorAI.Interfaces.IOpenAiChat openAiChat = factory.CreateOpenAiChat("gpt-4o-mini", out string error);
if (!string.IsNullOrEmpty(error))
{
MercatorUi.Dialogs.Stop("Kan de OpenAI-chat niet initialiseren: " + error);
return;
}
string systemMessage = "Je bent een assistent die productnamen vertaalt in het Nederlands, Engels en Duits voor een doe-het-zelfwinkel.";
string chatMessage = sigForm.StockRecord.S_MODELE;
MercatorAI.FactoryOpenAI.ChatOptions chatOptions = new MercatorAI.FactoryOpenAI.ChatOptions
{
Temperature = 0.2f, // Beperkt de creativiteit, maar biedt nog steeds ruimte voor natuurlijke formuleringen
TopP = 1.0f // Het is niet nodig om de cumulatieve waarschijnlijkheid te filteren, vooral niet voor korte en eenvoudige zinnen
};
while (!string.IsNullOrEmpty(chatMessage))
{
try
{
MercatorUi.Wait.WaitStatic.WaitWindow(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
Trad trad = openAiChat.Ask<Trad>(chatMessage, "Vertaling_NL_EN_DE", systemMessage: systemMessage, chatOptions: chatOptions);
systemMessage = null;
sigForm.StockRecord.S_MODELEN = trad.TradNL ?? "";
sigForm.StockRecord.S_MODELEE = trad.TradEN ?? "";
sigForm.StockRecord.S_MODELED = trad.TradDE ?? "";
MercatorUi.Wait.WaitStatic.WaitClear();
chatMessage = MercatorUi.Dialogs.AskMemo("Vertalingen verfijnen met een extra instructie?", "");
}
catch (Exception ex)
{
MercatorUi.Wait.WaitStatic.WaitClear();
MercatorUi.Dialogs.Stop(ex.Message);
chatMessage = "";
}
}
}
public class Trad
{
[MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Vertaling NL", IsRequired = true)]
public string TradNL { get; set; }
[MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Vertaling EN", IsRequired = true)]
public string TradEN { get; set; }
[MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Vertaling DE", IsRequired = true)]
public string TradDE { get; set; }
}
}
}
Met Gemini van Google
Dit vereist de installatie van de plugin MercatorAI.Gemini en werkt alleen met een Core-versie van Mercator. (De code is echter ook compileerbaar in een klassieke versie).
De code voor de knop naast de omschrijvingsvelden is als volgt. Merk op dat hier een gestructureerde antwoordchat wordt gebruikt. Het antwoord wordt geplaatst in de klasse Trad.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;
// <CompileWithRoslyn />
namespace MercatorUi.MovableControls.ButtonsCodes
{
public static class Script
{
public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
{
// enter your customized code here
Forms.Sig.SigForm sigForm = (Forms.Sig.SigForm)clickedButton.Form;
if (string.IsNullOrWhiteSpace(sigForm.StockRecord.S_MODELE))
{
MercatorUi.Dialogs.Stop("De omschrijving in het Frans is leeg!");
return;
}
MercatorAI.FactoryGemini factory = new MercatorAI.FactoryGemini();
MercatorAI.Interfaces.IGeminiChat geminiChat = factory.CreateGeminiChat("gemini-2.5-flash", out string error);
if (!string.IsNullOrEmpty(error))
{
Dialogs.Stop("Kan de Gemini-chat niet initialiseren: " + error);
return;
}
string systemMessage = "Je bent een assistent die productnamen vertaalt in het Nederlands, Engels en Duits voor een doe-het-zelfwinkel.";
string chatMessage = "Te vertalen: \"" + sigForm.StockRecord.S_MODELE + "\"";
while (!string.IsNullOrEmpty(chatMessage))
{
Wait.WaitStatic.WaitWindowBaseThread(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
Trad trad = null;
_BaseClasses.ExclusiveBackgroundWorkerAsync exclusiveBackgroundWorkerAsync = new _BaseClasses.ExclusiveBackgroundWorkerAsync(async () => trad = await geminiChat.AskAsync<Trad>(chatMessage, systemMessage: systemMessage));
Wait.WaitStatic.WaitClearBaseThread();
if (exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork != null)
{
Wait.WaitStatic.WaitClearBaseThread();
Dialogs.Stop(exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.Message + (exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.InnerException != null ? "\r\n" + exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.InnerException.Message : ""));
return;
}
sigForm.StockRecord.S_MODELEN = trad.TradNL ?? "";
sigForm.StockRecord.S_MODELEE = trad.TradEN ?? "";
sigForm.StockRecord.S_MODELED = trad.TradDE ?? "";
Wait.WaitStatic.WaitClear();
string consigneSuppl = Dialogs.AskMemo("Vertalingen verfijnen met een extra instructie?", "");
if (!string.IsNullOrWhiteSpace(consigneSuppl))
chatMessage = consigneSuppl + "\n" + "Te vertalen: \"" + sigForm.StockRecord.S_MODELE + "\"";
else
return;
}
}
public class Trad
{
public string TradNL { get; set; }
public string TradEN { get; set; }
public string TradDE { get; set; }
}
}
}
De te vertalen informatie wordt verzonden naar een derde partij (OpenAI). Er mogen dus geen vertrouwelijke gegevens worden doorgestuurd.
De vertalingen die door deze code worden gegenereerd, zijn automatisch gegenereerd met behulp van een model voor kunstmatige intelligentie (AI). Hoewel het ontworpen is om nuttige en relevante antwoorden te geven, kunnen deze vertalingen onvolledig, onjuist of gedeeltelijk fout zijn.
De gebruiker blijft als enige verantwoordelijk voor de evaluatie en het gebruik van deze vertalingen. Mercator of de leverancier van de AI-dienst kan in geen geval aansprakelijk worden gesteld voor de gevolgen van het gebruik van deze vertalingen.
Het gebruik van deze dienst moet compatibel zijn met de GDPR-voorschriften die binnen het bedrijf van toepassing zijn.