SimpleRAG

简体中文 English

SimpleRAG

A simple RAG demo based on WPF and Semantic Kernel.✨

SimpleRAG是基于WPF与Semantic Kernel实现的一个简单的RAG应用,可用于学习与理解如何使用Semantic Kernel构建RAG应用。

主要功能✨

AI聊天

支持所有兼容OpenAI格式的大语言模型:

image-20240819163701855

文件对话

一个私有文档如下所示:

会议主题:《如何使用C#提升工作效率》
参会人员:张三、李四、王五
时间:2024.9.26 14:00-16:00
会议内容:
1. 自动化日常任务
许多日常任务可以自动化,从而节省时间和精力。例如,如果你需要定期处理大量数据,可以使用C#编写脚本来自动化数据导入、清理和分析过程。
2. 构建自定义工具
C#可以用来构建各种自定义工具,以满足特定需求。
3. 集成现有系统
C#可以轻松集成现有的系统和API,从而提高工作效率。
4. 开发插件和扩展
许多应用程序支持插件和扩展,C#可以用来开发这些插件,以增强现有应用程序的功能。
5. 优化现有代码
C#提供了丰富的库和框架,可以帮助你优化现有代码,提高性能和可维护性。

支持根据文件内容对话:

image-20240926121558886

文本嵌入

支持所有兼容OpenAI格式的嵌入模型:

image-20240819163900106

简单的RAG回答

简单的RAG回答效果:

image-20240819164221306

对比不使用RAG的回答:

image-20240819164322893

测试Function Calling

测试Function Calling回答效果:

对比一下不使用FunctionCalling的效果:

image-20240828162455519

经过测试这种方法可用的LLM:

平台 可用模型
硅基流动 Llama-3.1-405/70/8B、Llama-3-70/8B-Instruct、DeepSeek-V2-Chat、deepseek-llm-67b-chat、Qwen2-72/57/7/1.5B-Instruct、Qwen2-57B-A14B-Instruct、Qwen1.5-110/32/14B-Chat、Qwen2-Math-72B-Instruct、Yi-1.5-34/9/6B-Chat-16K、internlm2_5-20/7b-chat
讯飞星火 Spark Lite、Spark Pro-128K、Spark Max、Spark4.0 Ultra
零一万物 yi-large、yi-medium、yi-spark、yi-large-rag、yi-large-fc、yi-large-turbo
月之暗面 moonshot-v1-8k、moonshot-v1-32k、moonshot-v1-128k
智谱AI glm-4-0520、glm-4、glm-4-air、glm-4-airx、glm-4-flash、glm-4v、glm-3-turbo
DeepSeek deepseek-chat、deepseek-coder
阶跃星辰 step-1-8k、step-1-32k、step-1-128k、step-2-16k-nightly、step-1-flash
Minimax abab6.5s-chat、abab5.5-chat
阿里云百炼 qwen-max、qwen2-math-72b-instruct、qwen-max-0428、qwen2-72b-instruct、qwen2-57b-a14b-instruct、qwen2-7b-instruct

以上不一定完备,还有一些模型没测,欢迎大家继续补充。

快速体验🚀

来到SimpleRAG的GitHub参考,注意到这里有个Releases:

image-20240822100649148

点击SimpleRAG-v0.0.1,有两个压缩包,一个依赖net8.0-windows框架,一个独立:

image-20240822100817138

依赖框架的包会小一些,独立的包会大一些,如果你的电脑已经装了net8.0-windows框架可以选择依赖框架的包,考虑到可能大部分人不一定装了net8.0-windows框架,我以独立的包做演示,点击压缩包,就在下载了:

image-20240822101244281

解压该压缩包:

image-20240822101450182

打开appsettings.json文件:

image-20240822101600329

appsettings.json文件如下所示:

image-20240822101740892

默认是使用SiliconCloud的api,只需填入你的SiliconCloud的Api Key即可,完成后,如下所示:

image-20240822102046293

现在点击SimpleRAG.exe即可运行程序:

image-20240822102117959

程序运行之后,如下所示:

image-20240822102215516

先通过AI聊天测试配置是否成功:

image-20240822102306935

配置已经成功。

现在来测试一下嵌入。

先拿一个简单的文本进行测试:

n最喜欢吃的水果是西瓜。

image-20240822102445438

嵌入成功:

image-20240822102504358

这个Demo程序为了方便存储文本向量使用的是Sqlite数据库,在这里可以看到:

image-20240822102554159

如果你有数据库管理软件的话,打开该数据库,会发现文本已经以向量的形式存入Sqlite数据库中:

image-20240822102822026

现在开始测试RAG回答效果:

image-20240822102901171

对比不使用RAG的回答效果:

image-20240822102956395

可以发现大语言模型根本不知道我们想问的私有数据的事情,出现了幻觉。

以上就成功使用SiliconCloud体验了SimpleRAG。

实现的原理,在我的这篇文章中有进行介绍,感兴趣的朋友可以看看:

SemanticKernel/C#:检索增强生成(RAG)简易实践

从源码构建🚀

git clone到本地,打开appsettings.example.json文件:

image-20240819164816557

如下所示:

image-20240819164844061

ChatAI用于配置对话模型,Embedding用于配置嵌入模型,TextChunker用于配置文档切片大小。

还是以SiliconCloud为例,只需填入你的api key 并将文件名改为appsettings.json,或者新建一个appsettings.json即可。

配置完成如下所示:

image-20240819165255285

IDE:VS2022

.NET 版本:.NET 8

打开解决方案,项目结构如下所示:

image-20240819165459846

运行程序:

image-20240819165551772

测试AI聊天:

image-20240819165652624

测试嵌入:

image-20240819165803024

使用的是Sqlite保存向量,可以在Debug文件夹下找到这个数据库:

image-20240819165854807

打开该数据库,如下所示:

image-20240819170059576

测试RAG回答:

image-20240819170128226

最后✨

如果对您有所帮助,点个star✨,就是最大的支持😊。

如果您看了这个指南,还是遇到了问题,欢迎通过公众号联系我:

qrcode_for_gh_eb0908859e11_344