翻譯|使用教程|編輯:龔雪|2024-07-08 10:24:08.933|閱讀 89 次
概述:本文將介紹如何使用DevExpress WinForms組件在網格控件中集成語義相似性搜索(通過嵌入模型提供支持),歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
許多用戶都知道Microsoft的Daniel Roth和Steve Sanderson引入的.NET智能組件——AI驅動的UI控件,許多人都喜歡這個控件原因歸結為以下幾點:
P.S:DevExpress WinForms擁有180+組件和UI庫,能為Windows Forms平臺創(chuàng)建具有影響力的業(yè)務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業(yè)務數據,它都能輕松勝任!
獲取DevExpress WinForms v24.1正式版下載
DevExpress技術交流群10:532598169 歡迎一起進群討論
上面提到的例子采用ASP. NET Core Blazor和MVC/Razor集成,在本文中我們將演示如何使用DevExpress WinForms數據網格輕松引入“智能搜索”,其他數據感知DevExpress UI控件的集成也類似——您只需要使用適當的事件來實現期望的結果。
1. Microsoft的 NuGet(作為一個實驗性的GitHub倉庫)是我們“智能搜索”實現的核心——只是把它和DevExpress.Win.Grid包一起添加到WinForms項目中。
讓我們仔細看看Microsoft的GitHub repo本地嵌入:
嵌入用于語義相似度搜索,自然語言字符串被轉換成稱為嵌入的數字向量。兩個字符串在概念上越相關,它們的向量就越接近。雖然您可以使用外部AI服務來計算嵌入,但在許多情況下,可以簡單地再服務器上本地計算它們(不需要GPU - CPU就可以正常工作)。SmartComponents.LocalEmbeddings是一個簡化此操作的包,使用它您可以在一毫秒內計算嵌入,并在一位數毫秒內對數十萬個候選項執(zhí)行語義搜索。
SmartComponents.LocalEmbeddings NuGet包實際上不包含任何ML模型,但它被配置為在您第一次構建應用程序時下載一個模型,您可以配置下載哪個模型。
有關這方面的更多信息,請查看了解在web上搜索類似的文章。ONNX嵌入模型(由Microsoft.ML.OnnxRuntime.dll提供支持)會自動從SmartComponents.LocalEmbeddings NuGet包中添加到Bin文件夾中 - 它的大小為16MB。
2. 被綁定到一個Item記錄的集合(ID, Name, Description),測試數據是人工智能生成的(節(jié)省時間)。我們處理網格的 事件來確定搜索字符串行的可見性(基于條目文本相似度—在本例中為Name和Description,可選),當處理鍵盤輸入或更改搜索選項(如相似性閾值)時,也會觸發(fā)過濾例程。
void OnCustomRowFilter(object sender, RowFilterEventArgs e) { Item? item = ((ColumnView)sender).DataController.GetRowByListSourceIndex(e.ListSourceRow) as Item; if(item == null) return; string filter = teFilter.Text; if(string.IsNullOrEmpty(filter)) return; float threshold = (float)tbThreshold.Value / 100; e.Visible = SmartFilterProvider.IsSimilarTo(filter, item.Name, threshold); if(!e.Visible && cbIncludeDescription.Checked) e.Visible = SmartFilterProvider.IsSimilarTo(filter, item.Description, threshold); e.Handled = true; }
3. “智能搜索”是由SmartFilterProvider類實現的——它調用了SmartComponents. LocalEmbeddings API基于GitHub repo中發(fā)布的文檔。
namespace SmartAIFilter.Provider { using SmartComponents.LocalEmbeddings; public static class SmartFilterProvider { readonly static LocalEmbedder Embedder = new LocalEmbedder(caseSensitive: false); readonly static ConcurrentDictionary<string, EmbeddingF32> cache = new ConcurrentDictionary<string, EmbeddingF32>(StringComparer.OrdinalIgnoreCase); public static bool IsSimilarTo(string filter, string text, float threshold = 0.75f) { EmbeddingF32 eText = cache.GetOrAdd(text, x => Embedder.Embed(x)); EmbeddingF32 eFilter = cache.GetOrAdd(filter, x => Embedder.Embed(x)); return eFilter.Similarity(eText) > threshold; } } }
上面的LocalEmbedder類使用運行時——它可以執(zhí)行許多不同的CPU或GPU嵌入模型(通常,CPU對于這樣小的模型工作得更快)。
SmartComponents.LocalEmbeddings NuGet包實際上不包含任何ML模型,但它被配置為在您第一次構建應用程序時下載一個模型。如前所述,您可以配置下載哪個模型。
作為一名開發(fā)人員,您可以根據特定用例場景/項目需求來調整這個示例。例如,您可以根據需要使用在線(OpenAI, Azure等)或離線模型(Ollama, ONNX)。
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網