界面控件DevExpress中文教程 - 如何拓展具有AI功能的文本编辑器(一)

本文重点介绍了DevExpress在近年来最热门领域——人工智能(AI)和自然语言处理(NLP)的改进!

NLP是人工智能的一个分支,它允许计算机与人类语言进行交互,这包括以有意义/有用的方式理解、解释、生成和回应文本(和语音)的能力。基于NLP的功能允许更好的数据分析、个性化体验、高效的沟通,并导致更明智的决策和提高效率。例如:

  • 机器翻译
  • 文本摘要
  • 文本生成
  • 文本分类
  • 以及更多…

P.S:DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。

获取DevExpress v24.1正式版下载(Q技术交流:532598169)

开始使用DevExpress AI支持的扩展
先决条件

DevExpress AI APIs允许您在WinForms、WPF或Blazor应用程序中注册和使用多个AI服务,DevExpress的抢先体验预览版(v24.2.1)支持以下AI服务:

  • OpenAI
  • Azure OpenAI
  • Ollama

本文中描述的AI服务和DevExpress AI扩展遵循"bring your own key" 原则,DevExpress不提供REST API,也不提供任何内置的LLMs/SLMs。您需要有一个激活的Azure/Open AI订阅来获取REST API端点、密钥和模型部署名称,这些变量必须在应用程序启动时指定,来注册AI客户端并在应用程序中启用DevExpress AI-Powered扩展。

在开始之前,您需要满足以下先决条件:

  • .NET 8 SDK 或 .NET Framework v4.7.2

  • 激活DevExpress Universal 或 DevExpress DXperience授权(下载Early Access Preview v24.2 build)。
  • 要使用Open AI,您需要以下内容:
    1. 一个激活的OpenAI订阅。
    2. API 密钥
    3. OpenAI .NET SDK
  • 要使用Azure OpenAI,您需要以下内容:
    1. 一个激活的Azure订阅和Azure开放人工智能服务资源。
    2. Azure OpenAI .NET SDK
  • 要使用自托管模型,您需要以下内容:
    1. 安装Ollama
    2. 下载病运行一个Ollama模型:Models

下表列出了DevExpress AI相关的NuGet包:

界面控件DevExpress中文教程 - 如何拓展具有AI功能的文本编辑器

注册AI客户端

要在控制台应用程序中使用DevExpress AI-Powered扩展,您需要安装以下DevExpress包中的一个并注册AI客户端:

  • DevExpress.AIIntegration
  • DevExpress.AIIntegration.OpenAI, DevExpress.AIIntegration.Azure.OpenAI, or DevExpress.AIIntegration.Ollama(基于您的参数)

DevExpress AI-Powered扩展在AIExtensionsContainerDefault容器中运行,该容器管理已注册的AI客户端,以便DevExpress UI组件可以自动利用AI服务。

下面的代码片段注册了一个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
);
}

要使用离线的Ollama模型,请调用RegisterChatClientOllamaAIService方法。这个方法注册一个Ollama客户端,在这个方法中,第一个参数是默认的Ollama API Endpoint,第二个参数指定模型名称:

defaultAIContainer.RegisterChatClientOllamaAIService("http://localhost:11434/api/chat", "llama3.1");

一旦您注册了一个AI客户端,可以使用DevExpress AI驱动的扩展如下(DevExpress AI驱动的扩展如下所示):

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);
管理长输入文本和AI响应

处理大型文本块可能具有挑战性,但我们已经覆盖了。DevExpress AI-Powered扩展自动将大型内容拆分为可管理的块(包括段落、句子、单词、标点符号和其他文本元素),以确保准确处理,以下是如何管理大型文本块和处理AI服务响应的方法:

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();
}

重要的响应包括:

  • MaxTokenLimitExceeded — 指示AI服务响应被截断,因为它超过了允许的限制(特别是来自模型)。当输入大小(请求)和输出(响应)的组合超过了模型在一次交互中可以处理的令牌的最大数量时,就会出现这种情况。例如,GPT-4o LLM根据所选择的计划具有8K-128K令牌的上下文窗口,而微软的小语言模型(SLM),如Phi-3 Mini,可以处理最多4K令牌。
  • InputSizeLimitExceeded — 表示AI服务响应被我们的“引擎”截断,以防止过度的资源消耗,这允许您避免用户可能因提交过大的文本请求而无意中消耗所有Azure积分的情况。要修改这个限制,您可以显式地设置ChatMaxTokensDefault属性,使其与公司策略和模型上下文窗口大小保持一致。

使用以下设置来配置文本内容和图像的大小限制:

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 https://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 AI-Powered扩展

DevExpress EAP v24.2附带以下AI支持的扩展:

界面控件DevExpress中文教程 - 如何拓展具有AI功能的文本编辑器

这些扩展以类似聊天的方式工作 - 其中请求通过内置提示发送到OpenAI/Ollama模型。

除了提供对托管在Azure和Ollama中的AI模型的访问外,我们还实现了与Azure AI语言服务交互的API,包括Azure AI Translator和Azure AI Language(文本摘要)。服务的选择取决于您的预算,但是请注意,在调用以下方法时,文本翻译和摘要请求将专门发送到Azure AI语言服务:

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-Powered的扩展

DevExpress AI驱动的扩展具有预先构建的提示,可以根据需要进行定制:

1. AI驱动的扩展中派生并覆盖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. 在默认容器中注册您的扩展(这将覆盖内置扩展):

defaultAIContainer.Register<RewriteStyleRequest, WilliamShakespeareStyleExtension>();

当您调用RewriteStyleAsync方法时,自定义提示将与用户输入一起发送到AI服务。

在这个阶段,DevExpress AI相关的API的另一个重要元素开始发挥作用:AIExtensionsContainerLocal类。与默认扩展容器类似,AIExtensionsContainerLocal类存储了您手动实现和注册的ai支持的扩展,而无需替换DevExpress内置扩展。

关键的区别在于这个容器中包含的扩展不会被DevExpress UI组件自动使用,这允许您为应用程序的不同部分实现不同的行为。下面的代码片段实现了一个自定义的AI驱动的扩展(注意如何使用基类):

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));

您可以实现自己的TextRequest后代,以便在构造提示符时向AI模型提供额外的信息。示例包括内置的ChangeTone和RewriteStyle扩展,它们获得用于指定语气(例如,Casual, Friendly, Confident)和风格(例如,Formal, Conversational)的枚举值。要在运行时调用自定义扩展,请使用以下代码片段:

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扩展支持本地化,这有助于确保AI驱动的功能对于不同地区的用户都是可访问和相关的。通过本地化人工智能扩展,您可以调整用户界面和任何预定义的内容,以满足最终用户的语言和文化偏好,您也可以根据区域偏好定制提示(例如,当使用单语言AI模型时)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558837.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Run the FPGA VI 选项的作用

Run the FPGA VI 选项的作用是决定当主机 VI 运行时&#xff0c;FPGA VI 是否会自动运行。 具体作用&#xff1a; 勾选 “Run the FPGA VI”&#xff1a; 当主机 VI 执行时&#xff0c;如果 FPGA VI 没有正在运行&#xff0c;系统将自动启动并运行该 FPGA VI。 这可以确保 FPG…

设计模式——门面模式 | 外观模式

哈喽&#xff0c;各位盆友们&#xff01;我是你们亲爱的学徒小z&#xff0c;今天给大家分享的文章是设计模式的——门面模式。 文章目录 定义通用类图1.通用结构2.优点3.缺点 使用场景注意事项1.一个子系统可以有多个门面2.门面不参与子系统内的业务逻辑 定义 定义&#xff1a;…

为Floorp浏览器添加搜索引擎及搜索栏相关设置. 2024-10-08

Floorp浏览器开源项目地址: https://github.com/floorp-Projects/floorp/ 以下内容同样适用于firefox和大部分基于firefox的桌面版浏览器 1.第一步 为Floorp浏览器添加搜索栏 (1.工具栏空白处 次键选择 定制工具栏 (2. 把 搜索框 拖动至工具栏 2.添加搜索引擎 以添加 搜狗搜索…

双十一买什么?双十一买什么东西最划算?超全双十一购物指南!

双十一即将到来&#xff0c;一年一度的购物狂欢盛宴再度开启&#xff01;在海量的商品面前&#xff0c;怎样挑选出既心仪又实惠的好物&#xff0c;已然成为大家关注的重点。下面为您呈上一份极为全面的2024年双十一必买清单&#xff0c;助力您轻松购物&#xff0c;收获满满&…

人才画像的重要性,如何打造精准人才画像?

人才画像在人力资源管理中占据重要地位&#xff0c;尤其是在人才招聘环节&#xff0c;它发挥着不可替代的作用&#xff0c;制定精准的人才画像有助于优化招聘和人力资源管理&#xff0c;从而提高组织竞争力和发展潜力。 一、人才画像的重要性 提高招聘精准度&#xff1a;精准…

【无人水面艇路径跟随控制8】(Matlab)USV代码阅读:LOS通过视线引导算法和PID控制器来实现无人水面艇的直线路径跟踪

【无人水面艇路径跟随控制8】&#xff08;Matlab&#xff09;USV代码阅读&#xff1a;通过视线引导算法和PID控制器来实现无人水面艇的直线路径跟踪 写在最前面LOS.m代码思路1. **参数初始化**2. **仿真时间设置**3. **仿真主循环**3.1 **视线引导法&#xff08;LOS&#xff09…

跟李沐学AI:使用注意力机制的seq2seq

动机 机器翻译中&#xff0c;每个生成的单词可能相关于源句子中的不同词。但Seq2sqe模型不能对此直接建模。 简单的Seq2Seq模型存在一个问题&#xff0c;即它将整个输入序列的信息压缩到了一个固定长度的向量中&#xff0c;这可能导致信息丢失&#xff0c;尤其是当输入序列很…

网站建设公司哪家好?好的网站建设公司应该有哪些特别之处?

面对众多的网站建设公司&#xff0c;企业该如何选择呢&#xff1f;如何才能避坑呢&#xff1f;本文将探讨好的网站建设公司应该具备的特别之处 案例&#xff0c;这是最直观的表现&#xff0c;一个好的网站建设公司必然拥有为数众多的的案例展示&#xff0c;且这些案例质量高&a…

分布式事务seata AT和XA性能对比

1. AT模式和XA模式性能对比&#xff1a; AT的阻塞是阻塞在了业务服务层&#xff0c;全局锁。 而XA模式是阻塞在了数据库&#xff0c;对数据库的性能影响很大。 肯定是优选AT&#xff0c;可以提升数据库的性能。 &#xff08;由于AT模式数据库事务阻塞小&#xff0c;那么同一…

自动化测试中如何高效进行元素定位!

前言 在自动化测试中&#xff0c;元素定位是一项非常重要的工作。良好的元素定位可以帮助测试人员处理大量的测试用例&#xff0c;加快测试进度&#xff0c;降低工作负担。但是在实际的测试工作中&#xff0c;我们常常遇到各种各样的定位问题&#xff0c;比如元素定位失败、元…

Python(十一)-__init__()方法,__str__()方法,__del__()方法

目录 魔法方法 无参__init__()方法 有参__init__()方法 __str__()方法 __del__()方法 魔法方法 魔法方法指的是&#xff1a;可以给Python类增加魔力的特殊方法。有两个特点&#xff1a; &#xff08;1&#xff09;总是被双下划线所包围&#xff1b; &#xff08;2&…

kubernetes 中 pod 的管理及优化

目录 一 kubernetes 中的资源 1.1 资源管理介绍 1.2 资源管理方式 1.2.1 命令式对象管理 1.2.2 资源类型 1.2.3 基本命令示例 1.2.3 运行和调试命令示例 1.2.4 高级命令示例 二 什么是pod 2.1 创建自主式pod &#xff08;生产不推荐&#xff09; 2.2 利用控制器管理…

零工市场转型数字化的挑战和机遇

我们的生活因为科技而变的更加方便、便利&#xff0c;例如手机支付、网上购物&#xff0c;那么就目前的就业市场来说&#xff0c;零工市场也面临着数字化转型的挑战和机遇。 零工市场数字化的机遇&#xff1a; 1.通过大数据的计算&#xff0c;极大的提高了零工市场中的匹配效率…

定点数和浮点数的详细介绍(一)定义、范围、位宽

1.定点数 1.1定点数描述 定点数包括定点小数(纯小数)、定点整数(纯整数)、整数和小数位数固定的实数。 1.2定点小数: 小数点默认在符号位后面,首位为符号位,其他为数值位(在用二进制代表小数时,例如0xFF,就表示0.5+0.25+0.125+0.0625+0.03125........) 例如,用…

希亦超声波清洗机值得购买吗?清洁技术之王多维度测评大揭秘!

随着人们生活质量的提升&#xff0c;高质量眼镜愈发受到欢迎&#xff0c;但它们的清洁与保养却常常被疏忽&#xff0c;导致镜片蒙尘受损&#xff0c;影响佩戴者的视觉清晰度。为此&#xff0c;超声波眼镜清洗机作为一种新兴潮流应时而生&#xff0c;以其高效清洁眼镜及珠宝、精…

无线AC——FW1——RT1——FW2——无线AP配置

无线AC——FW1——RT1——FW2——无线AP配置 AC: ! service dhcp ! ip dhcp pool v130 network-address 172.168.130.0 255.255.255.0 default-router 172.168.130.

三好夫人“硬控”嘴强王者老公

工作有点累了… 有点困了… 喝酒了… 吃的太饱了… 今天外面下雨的原因… 外面太热了… 最近压力大… 姐妹们是不是很熟悉这些话术&#xff0c;三好夫人可以很明确的告诉大家&#xff0c;天下的老公都一样&#xff0c;嘴上厉害的很&#xff0c;但是一到实践&#xff0c;…

React复习

文章目录 常用的HooksuseStateuseReduceruseRefuseContextuseMemouseCallbackuseEffect 组件通信Props&#xff08;属性&#xff09;Ref&#xff08;引用&#xff09;Context&#xff08;上下文&#xff09;State&#xff08;状态&#xff09;回调函数Event Bus&#xff08;事件…

KDTS 实现MySQL至KingbaseES迁移实践

此文章以linux环境实践&#xff0c;KingbaseES一下使用KES代替。 KDTS KDTS工具安装KES时会一起安装&#xff0c;一般存在目录为&#xff1a;ClientTools目录下guitools文件夹中 启动 进入KDTS-WEB下bin目录&#xff0c;执行sh文件 cd /opt/Kingbase/ES/V8/ClientTools/guit…