原創(chuàng)|使用教程|編輯:龔雪|2024-09-30 11:05:47.173|閱讀 100 次
概述:本文主要介紹界面控件DevExpress v24.2如何完成具有AI功能文本編輯器的擴(kuò)展,歡迎下載最新版組件體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷售中 >>
本文重點(diǎn)介紹了DevExpress在近年來(lái)最熱門(mén)領(lǐng)域——人工智能(AI)和自然語(yǔ)言處理(NLP)的改進(jìn)!
NLP是人工智能的一個(gè)分支,它允許計(jì)算機(jī)與人類語(yǔ)言進(jìn)行交互,這包括以有意義/有用的方式理解、解釋、生成和回應(yīng)文本(和語(yǔ)音)的能力?;贜LP的功能允許更好的數(shù)據(jù)分析、個(gè)性化體驗(yàn)、高效的溝通,并導(dǎo)致更明智的決策和提高效率。例如:
P.S:DevExpress擁有.NET開(kāi)發(fā)需要的所有平臺(tái)控件,包含600多個(gè)UI控件、報(bào)表平臺(tái)、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。
DevExpress技術(shù)交流群10:532598169 歡迎一起進(jìn)群討論
DevExpress AI APIs允許您在WinForms、WPF或Blazor應(yīng)用程序中注冊(cè)和使用多個(gè)AI服務(wù),DevExpress的搶先體驗(yàn)預(yù)覽版(v24.2.1)支持以下AI服務(wù):
本文中描述的AI服務(wù)和DevExpress AI擴(kuò)展遵循"bring your own key" 原則,DevExpress不提供REST API,也不提供任何內(nèi)置的LLMs/SLMs。您需要有一個(gè)激活的Azure/Open AI訂閱來(lái)獲取REST API端點(diǎn)、密鑰和模型部署名稱,這些變量必須在應(yīng)用程序啟動(dòng)時(shí)指定,來(lái)注冊(cè)AI客戶端并在應(yīng)用程序中啟用DevExpress AI-Powered擴(kuò)展。
在開(kāi)始之前,您需要滿足以下先決條件:
或 .NET Framework v4.7.2
下表列出了DevExpress AI相關(guān)的NuGet包:
要在控制臺(tái)應(yīng)用程序中使用DevExpress AI-Powered擴(kuò)展,您需要安裝以下DevExpress包中的一個(gè)并注冊(cè)AI客戶端:
DevExpress AI-Powered擴(kuò)展在AIExtensionsContainerDefault容器中運(yùn)行,該容器管理已注冊(cè)的AI客戶端,以便DevExpress UI組件可以自動(dòng)利用AI服務(wù)。
下面的代碼片段注冊(cè)了一個(gè)Azure OpenAI客戶端:
using Azure.AI.OpenAI; using DevExpress.AIIntegration; ... //Modify the following lines to obtain and pass your personal Azure OpenAI credentails to the Register* method. string AzureOpenAIEndpoint { get { return Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT"); } } string AzureOpenAIKey { get { return Environment.GetEnvironmentVariable("AZURE_OPENAI_APIKEY"); } } string DeploymentName { get { return Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENTNAME"); } } AIExtensionsContainerDefault defaultAIContainer; ... static void Main() { defaultAIContainer = new AIExtensionsContainerDefault(); defaultAIContainer.RegisterChatClientOpenAIService( new AzureOpenAIClient(new Uri(AzureOpenAIEndpoint), new System.ClientModel.ApiKeyCredential(AzureOpenAIKey)), DeploymentName ); }
要使用離線的模型,請(qǐng)調(diào)用RegisterChatClientOllamaAIService方法。這個(gè)方法注冊(cè)一個(gè)Ollama客戶端,在這個(gè)方法中,第一個(gè)參數(shù)是默認(rèn)的,第二個(gè)參數(shù)指定模型名稱:
defaultAIContainer.RegisterChatClientOllamaAIService("http://localhost:11434/api/chat", "llama3.1");
一旦您注冊(cè)了一個(gè)AI客戶端,可以使用DevExpress AI驅(qū)動(dòng)的擴(kuò)展如下(DevExpress AI驅(qū)動(dòng)的擴(kuò)展如下所示):
var result = await defaultAIContainer.TranslateAsync(new TranslateRequest(textToTranslate, language)); //OR var translateExtension = defaultAIContainer.CreateTranslateExtension(); TranslateRequest request = new TranslateRequest(textToTranslate, language); var result = await translateExtension.ExecuteAsync(request, CancellationToken.None);
處理大型文本塊可能具有挑戰(zhàn)性,但我們已經(jīng)覆蓋了。DevExpress AI-Powered擴(kuò)展自動(dòng)將大型內(nèi)容拆分為可管理的塊(包括段落、句子、單詞、標(biāo)點(diǎn)符號(hào)和其他文本元素),以確保準(zhǔn)確處理,以下是如何管理大型文本塊和處理AI服務(wù)響應(yīng)的方法:
public async Task<string> GetTranslation(string textToTranslate, string language) { TextResponse result = await defaultAIContainer.TranslateAsync(new TranslateRequest(textToTranslate, language)); if(result.IsCompleted) return result.Response; if(!result.IsRestrictedOrFailed) { string translatedText = result.Response; while(result.IsContinuationRequired){ await result.ContinueAsync(); translatedText += result.Response } return translatedText; } //Something unexpected happened switch (result.Status) { case ResponseStatus.MaxTokenLimitExceeded: case ResponseStatus.InputSizeLimitExceeded: return "The text you're trying to send within a request is too long and exceeds the allowed limit."; case ResponseStatus.ContentFiltered: return "Potentially harmful content was detected in your request."; case ResponseStatus.Error: return "An error occurred while processing the request."; } throw new NotSupportedException(); }
重要的響應(yīng)包括:
使用以下設(shè)置來(lái)配置文本內(nèi)容和圖像的大小限制:
public static partial class AIIntegration { //Specifies the maximum number of tokens that can be processed by a model request. Applies to all DevExpress AI-Powered extensions. public static int? ChatMaxTokensDefault { get; set; } = null; //Specifies the default temperature for chat-based AI-Powered extensions. //To learn more please visit //ai.stackexchange.com/questions/32477/what-is-the-temperature-in-the-gpt-models public static float? ChatTemperatureDefault { get; set; } = null; //Specifies the maximum allowed size of the text buffer per request, in bytes. public static int TextBufferMaxSize { get; set; } = 64 * 1024;//64kb //Specifies the maximum allowed size of the image buffer per request, in bytes. public static int ImageBufferMaxSize { get; set; } = 2 * 1024 * 1024;//2mb //Specifies the maximum allowed chunk length, in characters. public static int ChunkMaxLength { get; set; } = 6000; }
DevExpress EAP v24.2附帶以下AI支持的擴(kuò)展:
這些擴(kuò)展以類似聊天的方式工作 - 其中請(qǐng)求通過(guò)內(nèi)置提示發(fā)送到OpenAI/Ollama模型。
除了提供對(duì)托管在Azure和Ollama中的AI模型的訪問(wèn)外,我們還實(shí)現(xiàn)了與Azure AI語(yǔ)言服務(wù)交互的API,包括Azure AI Translator和Azure AI Language(文本摘要)。服務(wù)的選擇取決于您的預(yù)算,但是請(qǐng)注意,在調(diào)用以下方法時(shí),文本翻譯和摘要請(qǐng)求將專門(mén)發(fā)送到Azure AI語(yǔ)言服務(wù):
string azureTranslatorEndpoint = GetEnvironmentVariable("AZURE_TRANSLATOR_ENDPOINT"); string azureTranslatorKey = GetEnvironmentVariable("AZURE_TRANSLATOR_API_KEY"); //Register an Azure.TextAnalytics client. defaultAIContainer.RegisterTranslatorAzureAIService(new TextTranslationClient(new AzureKeyCredential(azureTranslatorKey), new Uri(azureTranslatorEndpoint))); //Register an Azure.TextAnalytics client. string azureTextAnalyticsEndpoint = GetEnvironmentVariable("AZURE_TEXT_ANALYTICS_ENDPOINT"); string azureTextAnalyticsKey = GetEnvironmentVariable("AZURE_TEXT_ANALYTICS_API_KEY"); defaultAIContainer.RegisterTextAnalyticsAzureAIService(new TextAnalyticsClient(new Uri(azureTextAnalyticsEndpoint), new AzureKeyCredential(azureTextAnalyticsKey)));
DevExpress AI驅(qū)動(dòng)的擴(kuò)展具有預(yù)先構(gòu)建的提示,可以根據(jù)需要進(jìn)行定制:
1. AI驅(qū)動(dòng)的擴(kuò)展中派生并覆蓋GetSystemPrompt方法:
public class WilliamShakespeareStyleExtension : RewriteStyleExtension { public WilliamShakespeareStyleExtension(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override string GetSystemPrompt(RewriteStyleRequest request) { return "Rewrite this text in the William Shakespeare style."; } }
2. 在默認(rèn)容器中注冊(cè)您的擴(kuò)展(這將覆蓋內(nèi)置擴(kuò)展):
defaultAIContainer.Register<RewriteStyleRequest, WilliamShakespeareStyleExtension>();
當(dāng)您調(diào)用RewriteStyleAsync方法時(shí),自定義提示將與用戶輸入一起發(fā)送到AI服務(wù)。
在這個(gè)階段,DevExpress AI相關(guān)的API的另一個(gè)重要元素開(kāi)始發(fā)揮作用:AIExtensionsContainerLocal類。與默認(rèn)擴(kuò)展容器類似,AIExtensionsContainerLocal類存儲(chǔ)了您手動(dòng)實(shí)現(xiàn)和注冊(cè)的ai支持的擴(kuò)展,而無(wú)需替換DevExpress內(nèi)置擴(kuò)展。
關(guān)鍵的區(qū)別在于這個(gè)容器中包含的擴(kuò)展不會(huì)被DevExpress UI組件自動(dòng)使用,這允許您為應(yīng)用程序的不同部分實(shí)現(xiàn)不同的行為。下面的代碼片段實(shí)現(xiàn)了一個(gè)自定義的AI驅(qū)動(dòng)的擴(kuò)展(注意如何使用基類):
public class AuthoredStyleExtension : ChangeTextExtension<AuthoredStyleRequest> { public AuthoredStyleExtension(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override string GetSystemPrompt(AuthoredStyleRequest request) { return $"Rewrite this text in the {request.Author} style"; } } //A custom request that processes text. public class AuthoredStyleRequest : TextRequest { public AuthoredStyleRequest(string Author, string Text) : base(Text) { this.Author = Author; } public string Author { get; init; } } public static class CustomAIIntegration { public static AuthoredStyleExtension CreateAuthoredStyleExtension(this IAIExtensionsContainer container){ return (AuthoredStyleExtension)container.GetExtension(typeof(AuthoredStyleRequest));
您可以實(shí)現(xiàn)自己的TextRequest后代,以便在構(gòu)造提示符時(shí)向AI模型提供額外的信息。示例包括內(nèi)置的ChangeTone和RewriteStyle擴(kuò)展,它們獲得用于指定語(yǔ)氣(例如,Casual, Friendly, Confident)和風(fēng)格(例如,F(xiàn)ormal, Conversational)的枚舉值。要在運(yùn)行時(shí)調(diào)用自定義擴(kuò)展,請(qǐng)使用以下代碼片段:
var localContainer = new AIExtensionsContainerLocal(defaultAIContainer); localContainer.Register<AuthoredStyleRequest, AuthoredStyleExtension>(); AuthoredStyleExtension extension = localContainer.CreateAuthoredStyleExtension(); var request = new AuthoredStyleRequest("Mark Twain", textToModify); //Here you can also set up the Temperature variable that will be used to execute this particular model request request.Options.Temperature = 0.9f; string result = await extension.ExecuteAsync(request, CancellationToken.None);
DevExpress AI-Powered擴(kuò)展支持本地化,這有助于確保AI驅(qū)動(dòng)的功能對(duì)于不同地區(qū)的用戶都是可訪問(wèn)和相關(guān)的。通過(guò)本地化人工智能擴(kuò)展,您可以調(diào)整用戶界面和任何預(yù)定義的內(nèi)容,以滿足最終用戶的語(yǔ)言和文化偏好,您也可以根據(jù)區(qū)域偏好定制提示(例如,當(dāng)使用單語(yǔ)言AI模型時(shí))。
更多產(chǎn)品需求,歡迎咨詢“”~
更多DevExpress線上公開(kāi)課、中文教程資訊請(qǐng)上中文網(wǎng)獲取
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)