Merge branch 'SciSharp:master' into master

This commit is contained in:
hchen2020 2023-08-10 13:53:07 -05:00 committed by GitHub
commit 7eab6e5ee8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 124 additions and 80 deletions

View file

@ -47,8 +47,6 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
GPU|Any CPU = GPU|Any CPU
GPU|x64 = GPU|x64
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
EndGlobalSection
@ -57,10 +55,6 @@ Global
{197885F1-2EB2-4709-B9AA-A777878D74B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.Debug|x64.ActiveCfg = Debug|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.Debug|x64.Build.0 = Debug|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|Any CPU.Build.0 = Release|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|x64.ActiveCfg = Release|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|x64.Build.0 = Release|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.Release|Any CPU.Build.0 = Release|Any CPU
{197885F1-2EB2-4709-B9AA-A777878D74B3}.Release|x64.ActiveCfg = Release|Any CPU
@ -69,10 +63,6 @@ Global
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Debug|x64.ActiveCfg = Debug|x64
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Debug|x64.Build.0 = Debug|x64
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|Any CPU.Build.0 = Release|Any CPU
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|x64.ActiveCfg = Release|x64
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|x64.Build.0 = Release|x64
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Release|Any CPU.ActiveCfg = Release|Any CPU
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Release|Any CPU.Build.0 = Release|Any CPU
{36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Release|x64.ActiveCfg = Release|x64
@ -81,10 +71,6 @@ Global
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.Debug|x64.ActiveCfg = Debug|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.Debug|x64.Build.0 = Debug|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|Any CPU.Build.0 = Release|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|x64.ActiveCfg = Release|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|x64.Build.0 = Release|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.Release|Any CPU.Build.0 = Release|Any CPU
{07AD18C5-CE7B-495A-815F-170E93CCC42A}.Release|x64.ActiveCfg = Release|Any CPU
@ -93,10 +79,6 @@ Global
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Debug|x64.ActiveCfg = Debug|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Debug|x64.Build.0 = Debug|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|Any CPU.Build.0 = Release|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|x64.ActiveCfg = Release|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|x64.Build.0 = Release|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Release|Any CPU.Build.0 = Release|Any CPU
{3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Release|x64.ActiveCfg = Release|Any CPU
@ -105,10 +87,6 @@ Global
{57806BAF-7736-425A-B499-13A2A2DF1E63}.Debug|Any CPU.Build.0 = Debug|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.Debug|x64.ActiveCfg = Debug|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.Debug|x64.Build.0 = Debug|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|Any CPU.Build.0 = Release|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|x64.ActiveCfg = Release|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|x64.Build.0 = Release|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.Release|Any CPU.ActiveCfg = Release|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.Release|Any CPU.Build.0 = Release|Any CPU
{57806BAF-7736-425A-B499-13A2A2DF1E63}.Release|x64.ActiveCfg = Release|Any CPU
@ -117,10 +95,6 @@ Global
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Debug|x64.ActiveCfg = Debug|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Debug|x64.Build.0 = Debug|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|Any CPU.Build.0 = Release|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|x64.ActiveCfg = Release|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|x64.Build.0 = Release|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|Any CPU.Build.0 = Release|Any CPU
{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|x64.ActiveCfg = Release|Any CPU
@ -129,10 +103,6 @@ Global
{2323A7A3-E938-488D-A57E-638638054BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.Debug|x64.ActiveCfg = Debug|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.Debug|x64.Build.0 = Debug|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.GPU|Any CPU.Build.0 = Release|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.GPU|x64.ActiveCfg = Release|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.GPU|x64.Build.0 = Release|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.Release|Any CPU.Build.0 = Release|Any CPU
{2323A7A3-E938-488D-A57E-638638054BC4}.Release|x64.ActiveCfg = Release|Any CPU
@ -141,10 +111,6 @@ Global
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Debug|x64.ActiveCfg = Debug|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Debug|x64.Build.0 = Debug|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|Any CPU.Build.0 = Release|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|x64.ActiveCfg = Release|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|x64.Build.0 = Release|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Release|Any CPU.Build.0 = Release|Any CPU
{0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Release|x64.ActiveCfg = Release|Any CPU
@ -153,10 +119,6 @@ Global
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Debug|x64.ActiveCfg = Debug|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Debug|x64.Build.0 = Debug|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|Any CPU.Build.0 = Release|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|x64.ActiveCfg = Release|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|x64.Build.0 = Release|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Release|Any CPU.Build.0 = Release|Any CPU
{6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Release|x64.ActiveCfg = Release|Any CPU
@ -165,10 +127,6 @@ Global
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Debug|x64.ActiveCfg = Debug|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Debug|x64.Build.0 = Debug|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|Any CPU.ActiveCfg = Release|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|Any CPU.Build.0 = Release|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|x64.ActiveCfg = Release|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|x64.Build.0 = Release|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Release|Any CPU.Build.0 = Release|Any CPU
{FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Release|x64.ActiveCfg = Release|Any CPU
@ -177,10 +135,6 @@ Global
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Debug|x64.ActiveCfg = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Debug|x64.Build.0 = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|Any CPU.ActiveCfg = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|Any CPU.Build.0 = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|x64.ActiveCfg = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|x64.Build.0 = Debug|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|Any CPU.Build.0 = Release|Any CPU
{0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|x64.ActiveCfg = Release|Any CPU
@ -189,10 +143,6 @@ Global
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|x64.ActiveCfg = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|x64.Build.0 = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|Any CPU.ActiveCfg = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|Any CPU.Build.0 = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|x64.ActiveCfg = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|x64.Build.0 = Debug|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|Any CPU.Build.0 = Release|Any CPU
{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|x64.ActiveCfg = Release|Any CPU

View file

@ -0,0 +1 @@
# Data Storage

View file

@ -64,9 +64,9 @@ author = 'Haiping Chen'
# built documents.
#
# The short X.Y version.
version = '0.8'
version = '0.9'
# The full version, including alpha/beta/rc tags.
release = '0.8.0'
release = '0.9.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View file

@ -1,6 +0,0 @@
Database Settings
=================
::
"Redis": "127.0.0.1:6379,defaultDatabase=BotSharp,poolsize=50,ssl=false,writeBuffer=10240,prefix=agent_"

View file

@ -1,16 +0,0 @@
Platform Settings
=================
* app.json
::
"Assemblies": "BotSharp.Core"
* BotSharpAi.json
::
"Pipe": "BotSharpTokenizer, BotSharpTagger, BotSharpCRFNer, BotSharpIntentClassifier"

View file

@ -66,18 +66,27 @@ The main documentation for the site is organized into the following sections:
.. toctree::
:maxdepth: 3
:caption: Channels Integration Documentation:
:caption: Channels Integration
integrations/facebook-messenger
.. _knowledge-base:
.. toctree::
:maxdepth: 3
:caption: Knowledge Base
knowledge-base/text-embedding
knowledge-base/vector-database
knowledge-base/similarity-search
.. _architecture-docs:
.. toctree::
:maxdepth: 3
:caption: Architecture Documentation:
:caption: Architecture:
configuration/db
configuration/platform
architecture/data_storage
If you feel that this project is helpful to you, please Star us on the project, we will be very grateful.

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

View file

@ -0,0 +1,17 @@
# Similarity Search
After we have learned the concepts of `Text Embedding` and `Vector Database`, we can start to use BotSharp to actually build an LLM-based knowledge base question system.
Below we will walk through how to use an existing PDF document to make a Q&A chatbot.
## Feed knowledge
Use the feed knowledge interface to feed knowledge into the database. Before that, you need to create an Agent to manage the Chatbot, and the Agent's `id` is needed in subsequent operations.
`http://localhost:5500/knowledge/{agentId}`, You can add `startPageNum` and `endPageNum` to select useful parts of the document.
![Alt text](assets/feed_knowledge_pdf.png)
## Retrieve knowledge
After you have finished inputting knowledge, you can start asking related questions with your AI Assistant.
![Alt text](assets/feed_knowledge_answer.png)

View file

@ -0,0 +1,59 @@
# Text Embedding
Text embeddings represent human language to computers, enabling tasks like semantic search. `BotSharp` supports a variety of Embedding methods, and supports the extension of more Embedding methods through engineering abstraction.
## fastText embedding
[FastText](https://fasttext.cc/) is an open-source, free, lightweight library that allows users to learn text representations and text classifiers. It works on standard, generic hardware. Models can later be reduced in size to even fit on mobile devices. In order to use the fastText embedding method, please make sure to install [BotSharp.Plugin.MetaAI](https://www.nuget.org/packages/BotSharp.Plugin.MetaAI), and enable this plugin in your local settings. It is also necessary to [download](https://fasttext.cc/docs/en/english-vectors.html) the pre-trained model of fastText and specify the location of the model in the settings.
```json
"PluginLoader": {
"Assemblies": [
"BotSharp.Plugin.MetaAI"
],
"Plugins": [
"KnowledgeBasePlugin",
"MemVecDbPlugin",
"MetaAiPlugin"
]
},
"KnowledgeBase": {
"TextEmbedding": "fastTextEmbeddingProvider"
},
"MetaAi": {
"fastText": {
"ModelPath": "crawl-300d-2M-subword.bin"
}
}
```
## LLamaSharp.TextEmbeddingProvider
`LLamaSharp` also provides an LLM embedding. For more operation methods of LLamaSharp, please refer to its [repo address](https://github.com/SciSharp/LLamaSharp) .
You need to download the corresponding LLM open source model like `llama2` to the local.
```json
"PluginLoader": {
"Assemblies": [
"BotSharp.Core"
],
"Plugins": [
"KnowledgeBasePlugin",
"MemVecDbPlugin",
"LLamaSharpPlugin"
]
},
"KnowledgeBase": {
"TextEmbedding": "LLamaSharp.TextEmbeddingProvider"
},
"LlamaSharp": {
"ModelPath": "llama-2-7b-chat.ggmlv3.q3_K_S.bin"
}
```
## TensorFlow BERT
## Train your own embedding
You can also train an embedding model yourself from scratch using [TensorFlow.NET](https://github.com/SciSharp/TensorFlow.NET).

View file

@ -0,0 +1,6 @@
# Vector Database
In order to use your own private data to build a knowledge base question answering system, you must first convert your documents into plain text, and then embed the text into the Vector database for indexing to improve subsequent search efficiency.
## Memory vector datbase
`MemVecDb` is a lightweight memory vector database provided by BotSharp for rapid development and testing. It is not recommended to be used in the actual production environment.

View file

@ -19,9 +19,33 @@ public class ChatCompletionProvider : IChatCompletion
throw new NotImplementedException();
}
public Task<bool> GetChatCompletionsAsync(Agent agent, List<RoleDialogModel> conversations, Func<RoleDialogModel, Task> onMessageReceived)
public async Task<bool> GetChatCompletionsAsync(Agent agent, List<RoleDialogModel> conversations, Func<RoleDialogModel, Task> onMessageReceived)
{
throw new NotImplementedException();
var content = string.Join("\n", conversations.Select(x => $"{x.Role}: {x.Content.Replace("user:", "User:")}")).Trim();
content += "\nBob: ";
var llama = _services.GetRequiredService<LlamaAiModel>();
llama.LoadModel();
var executor = new StatelessExecutor(llama.Model);
var inferenceParams = new InferenceParams()
{
Temperature = 1.0f,
AntiPrompts = new List<string> { "User:" },
MaxTokens = 256
};
string totalResponse = "";
var prompt = agent.Instruction + content;
await foreach (var response in executor.InferAsync(prompt, inferenceParams))
{
Console.Write(response);
totalResponse += response;
}
await onMessageReceived(new RoleDialogModel("assistant", totalResponse));
return true;
}
public async Task<bool> GetChatCompletionsStreamingAsync(Agent agent, List<RoleDialogModel> conversations, Func<RoleDialogModel, Task> onMessageReceived)