BotSharp开源应用框架——毗连LLMs到您的.NET应用

打印 上一主题 下一主题

主题 962|帖子 962|积分 2886

开源AI署理应用框架

将LLMs毗连到您的现有的以业务为中心的应用程序

“对话作为平台(CaaP)是未来,以是我们已经为使用BotSharp AI BOT平台构建器的.NET开发者提供了完整的工具包来构建CaaP。它为您的呆板人开放了尽大概多的学习能力,并精确控制AI处理流程的每一个步骤。”

BotSharp 是一个开源的AI呆板人平台构建器的呆板学习框架。这个项目涉及到自然语言理解、盘算机视觉和音频处理技能,并旨在推动信息系统中智能呆板人助手的发展和应用。开箱即用的呆板学习算法使普通程序员可以或许更快、更轻易地开发人工智能应用。
它是用C#编写的,运行在.Net Core上,这是一个完全跨平台的框架,接纳插件和流程执行设计,完全解耦插件。C#是一种企业级编程语言,广泛用于编写信息管理相关系统的业务逻辑。更友爱的企业开发者。BotSharp直接接纳C#中的呆板学习算法。这将便于C#的范例语言特性,并在系统范围内重构代码时更轻易。
BotSharp严酷按照组件原则,解耦平台构建器中必要的每一个部门。以是你可以选择差别的UI/UX,大概选择差别的LLM提供商。它们都基于同一的接口进行模块化。BotSharp提供了一个高级的Agent抽象层,有效地管理企业中复杂的应用场景,使企业开发者可以或许高效地将AI集成到业务系统中。

一些特性



  • 内置多署理和带状态管理的对话。
  • 支持多种LLM规划方法来处理差别的使命。
  • 内置RAG相关接口,基于内存的向量搜刮。
  • 支持多种LLM平台(ChatGPT 3.5 / 4.0, PaLM 2, LLaMA 2, HuggingFace)。
  • 允很多个具有差别责任的署理协作完成复杂使命。
  • 在一个地方构建、测试、评估和审计你的LLM署理。
  • 支持差别的开源UI Chatbot UI, HuggingChat UI。
  • 抽象标准的富内容数据结构。集成盛行的消息频道,如Facebook Messenger、Slack和Telegram。
快速开始


  • 运行后端服务
  1. PS D:\> git clone https://github.com/dotnetcore/BotSharp  
  2. PS D:\> cd BotSharp  
  3. PS D:\BotSharp\> dotnet run -p .\src\WebStarter  
复制代码

  • 运行UI项目,参考 Chatbot UI。
插件

BotSharp使用组件设计,内核保持最小,业务功能由外部组件实现。模块化设计也让贡献者更好地到场。下面是内置的插件:
数据存储



  • BotSharp.Plugin.MongoStorage
LLMs



  • BotSharp.Plugin.AzureOpenAI
  • BotSharp.Plugin.GoogleAI
  • BotSharp.Plugin.MetaAI
  • BotSharp.Plugin.HuggingFace
  • BotSharp.Plugin.LLamaSharp
  • BotSharp.Plugin.SemanticKernel
消息 / 频道



  • BotSharp.OpenAPI
  • BotSharp.Plugin.MetaMessenger
  • BotSharp.Plugin.Twilio
  • BotSharp.Plugin.WeChat
RAGS



  • BotSharp.Plugin.KnowledgeBase
  • BotSharp.Plugin.Qdrant
视觉



  • BotSharp.Plugin.PaddleSharp
工具



  • BotSharp.Plugin.RoutingSpeeder
  • BotSharp.Plugin.PizzaBot
UIs



  • BotSharp.Plugin.ChatbotUI
文档

阅读文档:https://botsharp.readthedocs.io
假如你觉得这个项目对你有帮助,请给项目点个Star,我们会非常感激。
SciSharp STACK的成员项目,这是基于.NET的开源软件生态系统,用于数学、科学和工程。
概览

BotSharp是一个开源的应用框架,旨在加快将LLM集成到您当前的业务系统中。该项目涉及自然语言理解和音频处理技能,旨在推动信息系统中智能呆板人助手的开发和应用。开箱即用的呆板学习算法允许普通程序员更快、更轻易地开发人工智能应用程序。
BotSharp是一个高兼容性和高可扩展性的平台构建器。它严酷遵守组件原则,解耦平台构建器中必要的每一部门。以是你可以选择差别的UI/UX,大概选择差别的NLP标签器,大概选择更先辈的算法来做NER使命。它们都是基于同一接口的模块化。
从前面的图表中我们可以看到,基于botsharp,你可以用3个组件启动你本身的聊天呆板人平台:


  • 存储模块:Botsharp支持内存和redis DB两种方法。
  • 语料提取器:将模板中的数据格式化,以便输入到botsharp练习器。
  • NLU引擎。Botsharp初始化了一个独家的NLU引擎,并向用户开放。
BotSharp让你在你的产品和服务之上构建会话接口,提供一个自然语言理解(NLU)引擎来处理和理解自然语言输入。
传统的盘算机接口必要结构化的数据,这使得使用这些接口不自然,甚至偶尔很困难。而呆板学习接口是数据驱动的,盘算机可以从非结构化数据(句子)中找到逻辑或信息。
比方,一个简单的请求大概像“你能播放乡村音乐吗?”。其他用户大概会问“播放一些浪漫的歌曲。”
即使是如许的简单题目,你也可以看到对话体验很难实现。表明和处理自然语言必要一个非常强大的语言解析器,它有理解语言细微差别的能力。
你的代码将不得不处理所有这些差别范例的请求来执行雷同的逻辑:查找某个特性的预测信息。出于这个原因,传统的盘算机接口会倾向于强迫用户输入一个众所周知的、标准的请求,以损害用户体验,由于如许更轻易。
然而,BotSharp让你通过处理自然语言理解(NLU)为你轻松实现对话用户体验。当你使用BotSharp时,你可以创建理解自然语言的含义和细微差别,并将其翻译成你的软件可以理解的结构化含义的署理。
特性



  • 内置多署理管理,易于构建Bot作为服务平台。
  • 集成多种LLM,如ChatGPT和LLaMA。
  • 使用插件设计,易于扩展功能。
  • 与多种向量存储进行协作,用于语义搜刮。
  • 支持差别的UI提供者,如Chatbot UI和HuggingChat UI。
  • 集成了盛行的社交平台,如Facebook Messenger,Slack和Telegram。
  • 提供REST API与您本身的UI协作。
入门

用Pizza Bot开始

为了让开发者尽快体验到BotSharp的便利,我们设计了一个底子样例项目PizzaBot。这个例子可以让你在本地呆板上快速运行。假如你想在本地运行,这个例子必要下载llama-2量化模型,格式为gguf。
在命令行中运行

  1. git clone https://github.com/SciSharp/BotSharp   
  2. cd BotSharp   
  3. dotnet run --project .\src\WebStarter\WebStarter.csproj -p SolutionName=PizzaBot   
复制代码
这就完成了,你会看到这个运行屏幕。

接下来,尝试从Open API访问聊天,我们公开了我们的Postman集合。记住将情况设置为localhost。

在调试模式下运行

假如你已经安装了Visual Studio,你可以在调试模式下运行。双击PizzaBot来启动办理方案。

点击WebStarter以调试模式运行,大概你可以从命令行开始

安装

BotSharp严酷遵照模块化设计原则,接纳视图和逻辑分离的结构。它还提供了完整的Web API接口,以便与您本身的系统集成。在架构级别,针对差别的目标,设计了Hook和EvenT,可以在不改变内核的情况下扩展Chatbot的对话能力。
在开发模式下本地运行

假如你是一个.NET开发者,并且想为BotSharp开发扩展或修复bug,你可以按F5在本地以调试模式运行。确保Microsoft .NET SDK 6.0+构建情况使用dotnet CLI(首选)构建办理方案。
克隆源代码并构建

  1. PS D:\> git clone https://github.com/Oceania2018/BotSharp   
  2. PS D:\> cd BotSharp   
  3. PS D:\> dotnet build   
复制代码
更新配置

BotSharp可以与多个LLM提供者一起工作。在你的项目中更新appsettings.json。下面的配置是使用Azure OpenAI作为LLM后端
  1. "AzureOpenAi": {   
  2.     "ApiKey": "",   
  3.     "Endpoint": "https://xxx.openai.azure.com/",   
  4.     "DeploymentModel": {   
  5.       "ChatCompletionModel": "",   
  6.       "TextCompletionModel": ""   
  7.     }   
  8. }   
复制代码
运行后端web项目

  1. PS D:\> dotnet run --project src/WebStarter   
复制代码

打开REST API

你可以通过http://localhost:5500/swagger在浏览器中访问API。

使用Postman测试

我们公开共享了Postman的API集合,方便开发者快速开发。

到目前为止,你已经设置了Bot的运行和开发情况,但是你还不能真正测试Chatbot。下一步是关于如何创建一个Agent并开始与Chatbot进行对话。
假如你只计划使用REST API与你的呆板人互动,可以忽略下面的部门。
启动一个聊天呆板人UI(可选)

你可以使用第三方开源UI进行调试和开发,也可以直接使用REST API与你的系统集成。假如你想使用Chatbot UI作为前端。
  1. PS D:\> git clone https://github.com/mckaywrigley/chatbot-ui   
  2. PS D:\> cd chatbot-ui   
  3. PS D:\> cd npm i   
  4. PS D:\> cd npm run dev   
复制代码
在.env.local中更新API url到你的localhost BotSharp后端服务。
  1. OPENAI_API_HOST=http://localhost:5500   
复制代码
在http://localhost:3000打开你的网络浏览器,享受与BotSharp的聊天。

在NuGet中安装

假如你不想使用源代码来体验这个框架,你也可以直接安装BotSharp发布的NuGet包,并根据你的项目需求安装差别的功能包。安装前,请仔细阅读文档,相识差别模块可以提供的功能。
  1. PS D:\> Install-Package BotSharp.Core   
复制代码
署理先容

署理帮助你处理用户的语句(非结构化数据),转化为你可以用来返回得当响应的结构化数据。
署理是一个包含提示词和函数Json Schema定义,少样本示例和知识库数据的集合。你可以创建多个差别的署理来在特定的范畴执行特定的操纵。BotSharp已经内置了对署理的维护,包括创建、更新和删除,导入和导出。
我的署理

创建了平台账户后,你可以开始进入创建署理的步骤。
署理创建

假设我们必要写一个Pizza餐厅订单AI Bot。起首,指定一个名称和形貌,然后调用署理创建API创建一个新的呆板人,系统将返回一个内部使用的署理Id。在后续的交互中必要使用这个Id。

署理指导

BotSharp使用最新的大语言模型进行自然语言理解,可以与OpenAI的ChatGPT进行交互,也支持最广泛使用的开源大语言模型LLaMA及其微调模型。在这个例子中,我们使用Azure OpenAI作为LLM引擎。
  1. "AzureOpenAi": {   
  2.     "ApiKey": "",   
  3.     "Endpoint": "",   
  4.     "DeploymentModel": {   
  5.         "ChatCompletionModel": "",   
  6.         "TextCompletionModel": ""   
  7.     }   
  8. }   
复制代码
假如你使用安装包运行,请确保安装了BotSharp.Plugin.AzureOpenAI插件包。
如今我们可以通过署理更新API更新聊天呆板人定义的提示。

更新成功后,呆板人将有一个系统提示,后续的对话将根据系统提示的配景知识与用户进行交互。到目前为止,署理的创建已经完成,但是真正的对话还没有开始。下面将继续先容最后一步,署理对话部门。
路由器

这一节将具体表明路由器的用法。路由器有一个专门的配置节点供定制。
  1. "Router": {   
  2.   "RouterId": "",   
  3.   "Provider": "azure-openai",   
  4.   "Model": "gpt-4"   
  5. }   
复制代码
路由器工作原理

如何注册署理到路由器?

当你添加一个新的署理时,路由器可以自动读取署理的配置,但是为了让路由器将请求分发到新的署理,你必须将AllowRouting属性设置为True。关于如何使用路由器的更多信息,请参考署理/路由器章节。
路由能力扩展

假如你必要扩展路由器的能力,我们只必要添加相应的路由处理器
如何添加自定义处理器?

  1. public class TransferToCsrRoutingHandler : IRoutingHandler     
  2. {   
  3.     public string Name => "order_payment";   
  4.    
  5.     public string Description => "pay the order.";   
  6.    
  7.     private readonly RoutingSettings _settings;   
  8.    
  9.     public TransferToCsrRoutingHandler(RoutingSettings settings)      
  10.     {   
  11.         _settings = settings;   
  12.     }   
  13.    
  14.     public async Task<RoleDialogModel> Handle(IRoutingService routing, FunctionCallFromLlm inst)      
  15.     {   
  16.         var result = new RoleDialogModel(AgentRole.User, "I'm connecting the payment gateway, wait a moment please.")   
  17.         {   
  18.             CurrentAgentId = _settings.RouterId,   
  19.             FunctionName = inst.Function   
  20.         };   
  21.         return result;   
  22.     }   
  23. }   
复制代码
路由 - 重定向

路由器会维护一个署理调用栈,并根据对话状态和重定向配置自动设置当前活动的署理。

你可以根据你的业务需求配置重定向规则。
  1. {   
  2.     "routingRules": [   
  3.         {   
  4.             "field": "order_number",   
  5.             "required": true,   
  6.             "description": "pizza order number",   
  7.             "redirectTo": "c2b57a74-ae4e-4c81-b3ad-9ac5bff982bd"   
  8.         }   
  9.     ]   
  10. }   
复制代码
对话

开始对话

在与署理的每次新对话之前,必要创建一个新的对话,也就是会话。这个对话的好处是它可以帮助用户管理对话上下文。LLM必要根据整个对话的汗青天生下一个对话内容。

发送消息

恭喜你,整个署理配置已经完成,如今你可以通过API开始向你的聊天呆板人发送消息了。

对话状态

BotSharp内置了对话状态管理功能,默认情况下会自动将函数的输入参数生存到对话状态中,并在对话的生命周期内有效。假如参数名重复,将被覆盖。
通道先容

当你已经在Botsharp上练习了一个聊天呆板人,你大概希望它在生活中扮演一个真正的角色。以是我们在Botsharp中集成了一些盛行的通道,包括Twilio,facebook messenger,Telegram,微信和一些其他的RPAs。这些通道可以让你的呆板人在生活中“真实”存在。比方,在facebook上,当一个用户访问你的页面并向你发送消息时,他们可以与你的署理攀谈。你还可以基于Twilio设置一个捏造助手,与你的客户进行订购,咨询,题目办理和很多其他业务流程的聊天。
消息组件

当你正在构建一个AI聊天呆板人时,对话远远凌驾了简单的文本消息。除了文本,BotSharp允许你发送丰富的多媒体,如音频,视频和图片,并以消息模板,快速复兴,按钮等情势提供一套结构化的消息选项。UI渲染程序可以根据返回的数据格式渲染组件。
文本消息

  1. {   
  2.     "recipient":{   
  3.         "id":"{{conversation_id}}"   
  4.     },   
  5.     "messaging_type": "RESPONSE",   
  6.     "message":{   
  7.         "text":"Hello, world!"   
  8.     }   
  9. }   
复制代码
快速复兴

content_type:文本,电话号码和电子邮件
  1. {   
  2.     "recipient":{   
  3.         "id":"{{conversation_id}}"   
  4.     },   
  5.     "messaging_type": "RESPONSE",   
  6.     "message":{   
  7.         "text": "Pick a color:",   
  8.         "quick_replies":[   
  9.         {   
  10.             "content_type":"text",   
  11.             "title":"Red",   
  12.             "payload":"<POSTBACK_PAYLOAD>",   
  13.             "image_url":"http://example.com/img/red.png"   
  14.         },{   
  15.             "content_type":"text",   
  16.             "title":"Green",   
  17.             "payload":"<POSTBACK_PAYLOAD>",   
  18.             "image_url":"http://example.com/img/green.png"   
  19.         }   
  20.       ]   
  21.     }   
  22. }   
复制代码
发送人行为

设置期望是创建聊天呆板人时的关键。发送人行为是一个关键工具,允许你控制打字和阅读收据指示符。比方,你可以使用它们来显示一条消息何时被看到或何时正在被输入,让用户在交互过程中保持知情。
sender_action:mark_seen,typing_on和typing_off
  1. {   
  2.     "recipient":{   
  3.         "id":"{{conversation_id}}"   
  4.     },   
  5.     "sender_action":"typing_on"   
  6. }   
复制代码
消息模板

消息模板是一种结构化的消息格式,用于在对话中以整洁的方式呈现复杂的信息,防止文本混乱。这些模板还包括按钮以增强互动性。它提供了一种方式,让你在标准文本消息之外提供更丰富的对话体验,通过集成按钮,图片,列表和更多内容与文本一起的单个消息。模板可以用于很多目标,如显示产品信息,要求消息接收者从预定的选项中选择,和显示搜刮结果。
  1. {   
  2.     "recipient":{   
  3.         "id":"{{conversation_id}}"   
  4.     },   
  5.     "message":{   
  6.         "attachment":{   
  7.         "type":"template",   
  8.         "payload":{   
  9.             "template_type":"TEMPLATE-TYPE",   
  10.             "elements":[   
  11.                 {   
  12.                     "title":"TEMPLATE-TITLE",   
  13.                     ...   
  14.                 }   
  15.             ]   
  16.           }   
  17.         }   
  18.     }   
  19. }   
复制代码
按钮模板

按钮模板发送一条附有最多三个按钮的文本消息。此模板对于提供消息接收者可以从中选择的选项很有用,如对题目标预设答案或要采取的行动。
type:web_url,postback,phone_number,account_link(登录),account_unlink(注销)
  1. {   
  2.     "template_type":"button",   
  3.     "text":"What do you want to do next?",   
  4.     "buttons":[   
  5.         {   
  6.             "type":"web_url",   
  7.             "url":"https://www.github.com",   
  8.             "title":"Visit Github"   
  9.         },   
  10.         {   
  11.             "type":"postback",   
  12.             "title":"Visit Github",   
  13.             "payload": "<STRING_SENT_TO_WEBHOOK>"   
  14.         },   
  15.         {   
  16.             "type":"phone_number",   
  17.             "title":"<BUTTON_TEXT>",   
  18.             "payload":"<PHONE_NUMBER>"   
  19.         },   
  20.         {   
  21.             "type": "account_link",   
  22.             "url": "<YOUR_LOGIN_URL>"   
  23.         },   
  24.         {   
  25.             "type": "account_unlink"   
  26.         }   
  27.     ]   
  28. }   
复制代码
通用模板

通用模板是一种简单的结构化消息,包括标题、副标题、图像和最多三个按钮。你还可以指定一个default_action对象,设置一个URL,当模板被点击时,该URL将在聊天webview中打开。
  1. {   
  2.     "template_type":"generic",   
  3.     "elements":[   
  4.         {   
  5.             "title":"Welcome!",   
  6.             "image_url":"https://raw.githubusercontent.com/fbsamples/original-coast-clothing/main/public/styles/male-work.jpg",   
  7.             "subtitle":"We have the right hat for everyone.",   
  8.             "default_action": {   
  9.                 "type": "web_url",   
  10.                 "url": "https://www.originalcoastclothing.com/",   
  11.                 "webview_height_ratio": "tall"   
  12.         },   
  13.         "buttons":[   
  14.             {   
  15.                 "type":"web_url",   
  16.                 "url":"https://www.originalcoastclothing.com/",   
  17.                 "title":"View Website"   
  18.             }                  
  19.           ]            
  20.         }   
  21.     ]   
  22. }   
复制代码
表单模板

表单模板用于从用户端网络信息,UI允许用户填写一个结构化的表单。
客户反馈模板

信使

BotSharp的Facebook集成允许你轻松创建一个具有自然语言理解能力的Facebook Messenger呆板人,基于BotSharp技能。
设置Facebook
为了为你的署理设置Facebook集成,你必要以下内容:


  • 一个Facebook账户
  • 一个将你的署理添加到的Facebook页面
    当用户访问你的页面并向你发送消息时,他们将与你的署理攀谈。
    创建Facebook应用

  • 登录Facebook开发者控制台。
  • 点击右上角的我的应用
  • 点击添加新应用,输入显示名称和联系电子邮件。
  • 点击创建应用ID
  • 在下一页,点击Messenger选项的设置按钮。
  • Token天生部门,选择你的Facebook页面之一(假如不存在,请创建新页面)。
    这将天生一个页面访问令牌。保留这个令牌,由于你必要在BotSharp中输入它。
    设置BotSharp


    • 点击左侧菜单中的集成选项,并打开Facebook Messenger。在打开的对话框中,输入以下信息:
      验证令牌 - 这可以是任何字符串,仅供你使用页面访问令牌 - 输入在Facebook开发者控制台天生的令牌

  • 大概编辑App_DataDbInitializerAgents下的agents.json,更新页面访问令牌验证令牌
  • 点击启动按钮。
    Webhook配置
    要配置你的署理的webhook,返回到Facebook开发者控制台:


    • 点击Webhooks部门下的设置Webhooks按钮,并输入以下信息:
      回调URL - 这是在Facebook Messenger集成页面上提供的URL验证令牌 - 这是你创建的令牌在订阅字段下查抄消息messaging_postbacks选项

  • 点击验证和生存按钮。
    测试
    为了让你的署理可供测试,你必要让你的应用公开:
  • 点击Facebook开发者控制台左侧菜单的应用审核
  • 点击使APP_NAME公开下的开关?你将被提示为你的应用选择一个类别。
  • 从列表中选择Messenger应用
  • 点击确认按钮。
    你还必要为你的页面设置一个用户名。这是用户在使用你的署理时将与之聊天的用户名。要设置用户名,点击你的页面的个人资料图片和标题下的创建页面@用户名链接。
文本嵌入

文本嵌入将人类语言表示给盘算机,使得语义搜刮成为大概。BotSharp支持多种嵌入方法,并通过工程抽象支持更多嵌入方法的扩展。
fastText嵌入

FastText是一个开源的、免费的、轻量级的库,允许用户学习文本表示和文本分类器。它在标准的、通用的硬件上运行。模型可以在后期被缩小,甚至得当在移动设备上。为了使用fastText嵌入方法,请确保安装了BotSharp.Plugin.MetaAI,并在你的本地设置中启用这个插件。还必要下载fastText的预练习模型,并在设置中指定模型的位置。
  1. "PluginLoader": {   
  2.     "Assemblies": [   
  3.       "BotSharp.Plugin.MetaAI"   
  4.     ],   
  5.     "Plugins": [   
  6.       "KnowledgeBasePlugin",   
  7.       "MemVecDbPlugin",   
  8.       "MetaAiPlugin"   
  9.     ]   
  10. },   
  11.    
  12. "KnowledgeBase": {   
  13.     "TextEmbedding": "fastTextEmbeddingProvider"   
  14. },   
  15.    
  16. "MetaAi": {   
  17.   "fastText": {   
  18.     "ModelPath": "crawl-300d-2M-subword.bin"   
  19.   }   
  20. }   
复制代码
LLamaSharp.TextEmbeddingProvider

LLamaSharp也提供了一个LLM嵌入。关于LLamaSharp的更多操纵方法,请参考它的repo地点。你必要下载相应的LLM开源模型,如llama2,到本地。
  1. "PluginLoader": {   
  2.     "Assemblies": [   
  3.       "BotSharp.Core"   
  4.     ],   
  5.     "Plugins": [   
  6.       "KnowledgeBasePlugin",   
  7.       "MemVecDbPlugin",   
  8.       "LLamaSharpPlugin"   
  9.     ]   
  10. },   
  11.    
  12. "KnowledgeBase": {   
  13.     "TextEmbedding": "LLamaSharp.TextEmbeddingProvider"   
  14. },   
  15.    
  16. "LlamaSharp": {   
  17.     "ModelPath": "llama-2-7b-chat.ggmlv3.q3_K_S.bin"   
  18. }   
复制代码
TensorFlow BERT

练习你本身的嵌入

你也可以使用TensorFlow.NET重新开始练习一个嵌入模型。
向量数据库

为了使用你本身的私有数据构建一个知识库问答系统,你起首必要将你的文档转换为纯文本,然后将文本嵌入到向量数据库进行索引,以提高后续搜刮的服从。
内存向量数据库

MemVecDb是BotSharp提供的一个轻量级内存向量数据库,用于快速开发和测试。不发起在现实生产情况中使用。
相似性搜刮

在我们相识了文本嵌入和向量数据库的概念之后,我们可以开始使用BotSharp现实构建一个基于LLM的知识库题目系统。下面我们将走过如何使用现有的PDF文档制作一个Q&A聊天呆板人。
构建问答呆板人

喂养知识

使用喂养知识接口将知识喂入数据库。在此之前,你必要创建一个署理来管理Chatbot,并在后续的操纵中必要署理的id。http://localhost:5500/knowledge/{agentId},你可以添加startPageNum和endPageNum来选择文档的有用部门。

检索知识

在你完成知识输入后,你可以开始与你的AI助手提出相关题目。

提示工程

LLM使用提示作为输入,模型会根据输入产生差别的输出。
模板

我们可以将提示定义为一个模板,模板可以根据变量改变,如许一份指令文件就可以天生动态的提示。BotSharp使用Liquid模板来支持各种复杂的动态提示工程。
  1. ITemplateRender   
  2. bool Render(Agent agent, Dictionary<string, object> dict)   
复制代码
函数

一个调用函数是一个作为另一个函数的参数传递并在特定事件或操纵发生后执行的函数。在大语言模型(LLMs)的上下文中,调用函数可以用于挂钩到LLM应用的各个阶段。它们对于如日记记录、监控、流媒体等使命非常有用。比方,在BotSharp框架中,调用函数可以用于记录信息、监控LLM应用的进度或执行其他使命。BotSharp提供了一个callbacks参数,允许开发者与外部系统交互。
在LLM应用中使用调用函数提供了灵活性和可扩展性。开发者可以通过定义实现特定方法的回调处理器来定制他们的应用的行为。这些处理器可以用于如日记记录、错误处理或与外部系统交互等使命。函数将根据对话上下文由LLM触发。
认证

用户账户

作为一个Bot构建框架,最根本的步骤是集成用户认证功能,如许后端API就可以识别当前请求来自哪个用户。如许,就可以进一步构建一个更完整的业务系统。BotSharp可以与ASP.NET MVC的用户认证功能结合。
创建用户账户

使用BotSharp中的账户创建API创建第一个平台用户。

获取访问令牌

创建了平台用户后,可以通过获取令牌API获取用户令牌,所有后续的API都必要这个令牌。

插件

BotSharp接纳插件架构设计,模块之间相互独立。以对话为核心,每个插件通过Hook机制完成各种功能(如添加LLM提供者和Text Embedding提供者)。关于系统提供的Hooks,你可以参考专门的Hook section。
这里我们将先容如何添加一个新的插件来扩展你的LLM应用。我们仍旧使用PizzaBot的例子来说明如何完成这个使命。

  • 添加类库添加了一个新的类库叫做BotSharp.Plugin.PizzaBot,并添加引用到web start应用
  • 实现接口添加一个新的类叫做PizzaBotPlugin并实现接口IBotSharpPlugin。
  1. namespace BotSharp.Plugin.PizzaBot;   
  2.    
  3. public class PizzaBotPlugin : IBotSharpPlugin     
  4. {   
  5.     public void RegisterDI(IServiceCollection services, IConfiguration config)     
  6.     {   
  7.         // Register callback function   
  8.         services.AddScoped<IFunctionCallback, MakePaymentFn>();   
  9.    
  10.         // Register hooks   
  11.         services.AddScoped<IAgentHook, PizzaBotAgentHook>();   
  12.     }   
  13. }   
复制代码

  • 添加到设置在appsettings.json中添加插件。
  1. "PluginLoader": {   
  2.     "Assemblies": [   
  3.         "BotSharp.Plugin.PizzaBot"   
  4.     ]   
  5. }   
复制代码
启动web项目后,你应该会在控制台中看到成功加载的消息。
  1. Loaded plugin PizzaBotPlugin from BotSharp.Plugin.PizzaBot.   
复制代码
钩子

Hook是在BotSharp中的一个地方,允许你毗连到一个模块,以提供差别的行为大概做出反应。
署理钩子

  1. IAgentHook   
  2. // Triggered when agent is loading.   
  3. bool OnAgentLoading(ref string id);   
  4. bool OnInstructionLoaded(string template, Dictionary<string, object> dict);   
  5. bool OnFunctionsLoaded(List<FunctionDef> functions);   
  6. bool OnSamplesLoaded(ref string samples);   
  7.    
  8. // Triggered when agent is loaded completely.   
  9. void OnAgentLoaded(Agent agent);   
复制代码
更多关于署理钩子的信息,请前往Agent Hook。
对话钩子

  1. IConversationHook   
  2. // Triggered once for every new conversation.   
  3. Task OnConversationInitialized(Conversation conversation);   
  4. Task OnDialogsLoaded(List<RoleDialogModel> dialogs);   
  5. Task OnMessageReceived(RoleDialogModel message);   
  6.    
  7. // Triggered before LLM calls function.   
  8. Task OnFunctionExecuting(RoleDialogModel message);   
  9.    
  10. // Triggered when the function calling completed.   
  11. Task OnFunctionExecuted(RoleDialogModel message);   
  12. Task OnResponseGenerated(RoleDialogModel message);   
  13.    
  14. // LLM detected the current task is completed.   
  15. Task OnCurrentTaskEnding(RoleDialogModel message);   
  16.    
  17. // LLM detected the user's intention to end the conversation   
  18. Task OnConversationEnding(RoleDialogModel message);   
  19.    
  20. // LLM can't handle user's request or user requests human being to involve.   
  21. Task OnHumanInterventionNeeded(RoleDialogModel message);   
复制代码
更多关于对话钩子的信息,请前往Conversation Hook。
  1. IConversationHook   
  2. Task OnStateLoaded(ConversationState state);   
  3. Task OnStateChanged(string name, string preValue, string currentValue);   
复制代码
内容天生钩子

  1. IContentGeneratingHook   
复制代码
模型内容天生钩子,它可以用于日记记录、度量和跟踪。
  1. // Before content generating.   
  2. Task BeforeGenerating(Agent agent, List<RoleDialogModel> conversations);   
  3.    
  4. // After content generated.   
  5. Task AfterGenerated(RoleDialogModel message, TokenStatsModel tokenStats);   
  6. IInstructHook   
  7. Task BeforeCompletion(Agent agent, RoleDialogModel message);   
  8. Task AfterCompletion(Agent agent, InstructResult result);   
复制代码
路由

路由是一个重要的功能,允很多个署理一起完成企业级使命。当你将LLM应用到你的业务系统时,开发具有差别功能的署理是必然的。如何有效地管理这么多具有差别责任的署理是一项具有挑战性的使命。从工程角度看,每个差别的团队都负责开发差别的署理,团队之间将面对署理之间的相互隔离的题目。理想的情况是,他们可以独立开发,但可以协同工作以实现用户的目标。接纳Routing确保了署理在企业应用中可以具有可扩展性、灵活性和充足的鲁棒性。
路由器

路由功能是BotSharp管理多个署理的核心技能。BotSharp内置了一个智能署理叫做Router。当你启用这个功能时,所有用户的请求都将由路由器先辈行预处理,以确定将请求分发给哪个署理处理。路由技能的长处是可以隔离差别的署理,并让他们一起工作以实现用户的目标。接纳Routing确保了署理在企业应用中可以具有可扩展性、灵活性和充足的鲁棒性。

推理器

对于用户提出的简单题目,普通的路由功能已经可以处理。然而,对于用户有长篇形貌并必要拆解使命的场景,普通的路由无法处理。此时,必要打开Reasoning功能,LLM会根据题目标复杂性将其拆解成差别的小使命。这些小使命可以由相应的署理处理。在处理过程中,路由器将不断调解下一步计划,以应对署理返回的差别结果。

关于Routing的更多相关信息,请前往Agent Routing。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表