add 增加首页,暂时取消本地函数调用

This commit is contained in:
zyxucp
2024-03-11 23:16:23 +08:00
parent 69fd3a0367
commit 575a69bf4d
13 changed files with 450 additions and 54 deletions

View File

@@ -40,10 +40,11 @@ namespace AntSK.Domain.Domain.Service
var _kernel = _kernelService.GetKernelByApp(app);
var temperature = app.Temperature / 100;//存的是0~100需要缩小
OpenAIPromptExecutionSettings settings = new() { Temperature = temperature };
_kernelService.ImportFunctionsByApp(app, _kernel);
settings.ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions;
if (!string.IsNullOrEmpty(app.ApiFunctionList))//这里还需要加上本地插件的
{
_kernelService.ImportFunctionsByApp(app, _kernel);
settings.ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions;
}
var func = _kernel.CreateFunctionFromPrompt(app.Prompt, settings);
var chatResult = _kernel.InvokeStreamingAsync(function: func, arguments: new KernelArguments() { ["input"] = $"{history}{Environment.NewLine} user:{questions}" });
await foreach (var content in chatResult)

View File

@@ -26,7 +26,7 @@ namespace AntSK.Domain.Domain.Service
public MemoryServerless GetMemoryByKMS(string kmsID, SearchClientConfig searchClientConfig = null)
{
if (_memory.IsNull())
//if (_memory.IsNull())
{
//获取KMS配置
var kms = _kmss_Repositories.GetFirst(p => p.Id == kmsID);
@@ -67,9 +67,9 @@ namespace AntSK.Domain.Domain.Service
_memory = memoryBuild.Build<MemoryServerless>();
return _memory;
}
else {
return _memory;
}
//else {
// return _memory;
//}
}

View File

@@ -45,7 +45,7 @@ namespace AntSK.Domain.Domain.Service
/// <returns></returns>
public Kernel GetKernelByApp(Apps app)
{
if (_kernel.IsNull())
//if (_kernel.IsNull())
{
var chatModel = _aIModels_Repositories.GetFirst(p => p.Id == app.ChatModelID);
@@ -58,10 +58,10 @@ namespace AntSK.Domain.Domain.Service
RegisterPluginsWithKernel(_kernel);
return _kernel;
}
else
{
return _kernel;
}
//else
//{
// return _kernel;
//}
}
private void WithTextGenerationByAIType(IKernelBuilder builder, Apps app, AIModels chatModel, HttpClient chatHttpClient)
@@ -104,7 +104,7 @@ namespace AntSK.Domain.Domain.Service
public void ImportFunctionsByApp(Apps app, Kernel _kernel)
{
//插件不能重复注册,否则会异常
if (!_kernel.Plugins.Any(p => p.Name == "AntSkFunctions"))
if (_kernel.Plugins.Any(p => p.Name == "AntSkFunctions"))
{
return;
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AntSK.Domain.Model.Enum
{
public enum AppType
{
chat=1,
kms=2
}
}

View File

@@ -0,0 +1,26 @@
@namespace AntSK.Components
@inherits AntDomComponentBase
<Card>
<div class="chartCard">
<div class="chartTop">
<div class="avatar">@Avatar</div>
<div class="metaWrap">
<div class="meta">
<span>@Title</span>
<span class="action"><Icon Type="@Icon" /></span>
</div>
<div class="total">
<span>@Total</span>
</div>
</div>
</div>
<div class="content" style="height: @(string.IsNullOrEmpty(ContentHeight) ? "auto" : ContentHeight+"px")">
<div class="@(string.IsNullOrEmpty(ContentHeight) ? "" : "contentFixed")">@ChildContent</div>
</div>
<div class="footer">
@Footer
</div>
</div>
</Card>

View File

@@ -0,0 +1,31 @@
using Microsoft.AspNetCore.Components;
namespace AntSK.Components
{
public partial class ChartCard
{
[Parameter]
public string Avatar { get; set; }
[Parameter]
public string Title { get; set; }
[Parameter]
public RenderFragment Action { get; set; }
[Parameter]
public string Total { get; set; }
[Parameter]
public RenderFragment ChildContent { get; set; }
[Parameter]
public RenderFragment Footer { get; set; }
[Parameter]
public string ContentHeight { get; set; }
[Parameter]
public string Icon { get; set; }
}
}

View File

@@ -0,0 +1,77 @@
/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
/* stylelint-disable no-duplicate-selectors */
/* stylelint-disable */
/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
.chartCard {
position: relative;
}
.chartCard .chartTop {
position: relative;
width: 100%;
overflow: hidden;
}
.chartCard .chartTopMargin {
margin-bottom: 12px;
}
.chartCard .chartTopHasMargin {
margin-bottom: 20px;
}
.chartCard .metaWrap {
float: left;
}
.chartCard .avatar {
position: relative;
top: 4px;
float: left;
margin-right: 20px;
}
.chartCard .avatar img {
border-radius: 100%;
}
.chartCard .meta {
height: 22px;
color: rgba(0, 0, 0, 0.45);
font-size: 14px;
line-height: 22px;
}
.chartCard .action {
position: absolute;
top: 4px;
right: 0;
line-height: 1;
cursor: pointer;
}
.chartCard .total {
height: 38px;
margin-top: 4px;
margin-bottom: 0;
overflow: hidden;
color: rgba(0, 0, 0, 0.85);
font-size: 30px;
line-height: 38px;
white-space: nowrap;
text-overflow: ellipsis;
word-break: break-all;
}
.chartCard .content {
position: relative;
width: 100%;
margin-bottom: 12px;
}
.chartCard .contentFixed {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
}
.chartCard .footer {
margin-top: 8px;
padding-top: 9px;
border-top: 1px solid #f0f0f0;
}
.chartCard .footer > * {
position: relative;
}
.chartCard .footerMargin {
margin-top: 20px;
}

View File

@@ -3,7 +3,8 @@
@inherits AntDomComponentBase
<Space Class="@ClassMapper.Class" Size="@("26")">
<SpaceItem>
<Image Src="https://img.shields.io/github/stars/xuzeyu91/antsk?style=social" Width="88px" Height="20px;"></Image>
<SpaceItem Style="margin-left:20px;">
<AvatarDropdown Name="@context.Identity.Name"
Avatar="@_currentUser.Avatar"
MenuItems="@AvatarMenuItems"

View File

@@ -1,6 +1,7 @@
@namespace AntSK.Pages.AppPage
@using AntSK.Domain.Repositories
@using AntSK.Models
@using AntSK.Domain.Model.Enum
@page "/App/Add"
@page "/App/Add/{AppId}"
@using AntSK.Services.Auth
@@ -21,8 +22,8 @@
</FormItem>
<FormItem Label="类型" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
<RadioGroup @bind-Value="context.Type">
<Radio RadioButton Value="@("chat")">会话应用</Radio>
<Radio RadioButton Value="@("kms")">知识库</Radio>
<Radio RadioButton Value="@AppType.chat.ToString()">会话应用</Radio>
<Radio RadioButton Value="@AppType.kms.ToString()">知识库</Radio>
</RadioGroup>
</FormItem>
<FormItem Label="描述" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
@@ -37,7 +38,7 @@
</Select>
<Button Type="@ButtonType.Link" OnClick="NavigateModelList">去创建</Button>
</FormItem>
@if (@context.Type == "chat")
@if (@context.Type == AppType.chat.ToString())
{
<FormItem Label="提示词" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
@@ -66,7 +67,7 @@
</Select>
</FormItem>
}
@if (@context.Type == "kms")
@if (@context.Type == AppType.kms.ToString())
{
<FormItem Label="知识库" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
<Select Mode="multiple"

View File

@@ -1,5 +1,6 @@
@namespace AntSK.Pages.AppPage
@using AntSK.Domain.Repositories
@using AntSK.Domain.Model.Enum
@page "/AppList"
@inject NavigationManager NavigationManager
@using AntSK.Services.Auth
@@ -48,11 +49,11 @@
<!--todo: Ellipsis not working-->
@context.Describe
</Paragraph>
@if (context.Type == "chat")
@if (context.Type == AppType.chat.ToString())
{
<Tag Color="@PresetColor.Yellow.ToString()">会话应用</Tag>
}
else if (context.Type == "kms")
else if (context.Type == AppType.kms.ToString())
{
<Tag Color="@PresetColor.Green.ToString()">知识库</Tag>

View File

@@ -0,0 +1,60 @@
using AntSK.Domain.Model.Enum;
using AntSK.Domain.Repositories;
using AntSK.Domain.Utils;
using Microsoft.AspNetCore.Components;
namespace AntSK.Pages
{
public partial class Index
{
[Inject]
NavigationManager NavigationManager { get; set; }
[Inject]
IApps_Repositories _apps_Repositories { get; set; }
[Inject]
IAIModels_Repositories _aiModels_Repositories { get; set; }
[Inject]
IKmss_Repositories _kmss_Repositories { get; set; }
[Inject]
IKmsDetails_Repositories _kmsDetails_Repositories { get; set; }
private string appCount;
private string chatAppCount;
private string kmsAppCount;
private string kmsCount;
private string fileCount;
private string urlCount;
private string textCount;
private string filesCount;
private string chatAIModelCount;
private string embeddingAIModelCount;
private string aiModelCount;
private string imgSrc { get; set; }
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
chatAppCount = (await _apps_Repositories.CountAsync(p => p.Type == AppType.chat.ToString())).ConvertToString();
kmsAppCount = (await _apps_Repositories.CountAsync(p => p.Type == AppType.kms.ToString())).ConvertToString();
appCount= (chatAppCount.ConvertToInt32()+ kmsAppCount.ConvertToInt32()).ConvertToString();
kmsCount =(await _kmss_Repositories.CountAsync(p=>true)).ConvertToString();
chatAIModelCount = (await _aiModels_Repositories.CountAsync(p=>p.AIModelType==AIModelType.Chat)).ConvertToString();
embeddingAIModelCount = (await _aiModels_Repositories.CountAsync(p=>p.AIModelType==AIModelType.Embedding)).ConvertToString();
aiModelCount= (chatAIModelCount.ConvertToInt32() + embeddingAIModelCount.ConvertToInt32()).ConvertToString();
fileCount=(await _kmsDetails_Repositories.CountAsync(p =>p.Type=="file")).ConvertToString();
urlCount = (await _kmsDetails_Repositories.CountAsync(p => p.Type == "url")).ConvertToString();
textCount = (await _kmsDetails_Repositories.CountAsync(p => p.Type == "text")).ConvertToString();
filesCount = (fileCount.ConvertToInt32() + urlCount.ConvertToInt32() + textCount.ConvertToInt32()).ConvertToString();
}
}
}

View File

@@ -2,40 +2,63 @@
@using MarkdownSharp
@page "/"
@using AntSK.Services.Auth
@using AntSK.Components
@inherits AuthComponentBase
<Body>
@((MarkupString)(body))
<Image Width="200px" Src="@imgSrc" />
</Body>
<GridContent>
<Row Type="flex" Gutter="24">
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
<ChartCard Title="应用数量"
Total="@appCount"
Icon="wechat"
ContentHeight="46">
<ChildContent>
<Tag Color="@PresetColor.Yellow.ToString()">会话应用:@chatAppCount</Tag>
<Tag Color="@PresetColor.Green.ToString()">知识库应用:@kmsAppCount</Tag>
</ChildContent>
<Footer>
</Footer>
</ChartCard>
</AntDesign.Col>
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
<ChartCard Title="知识库数量"
Total="@kmsCount"
Icon="database"
ContentHeight="46">
<ChildContent>
@code {
[Inject]
NavigationManager NavigationManager { get; set; }
private string imgSrc { get; set; }
</ChildContent>
<Footer>
</Footer>
</ChartCard>
</AntDesign.Col>
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
<ChartCard Title="文档数量"
Total="@filesCount"
Icon="file"
ContentHeight="46">
<ChildContent>
<Tag Color="@PresetColor.Yellow.ToString()">文档:@fileCount</Tag>
<Tag Color="@PresetColor.Green.ToString()">链接:@urlCount</Tag>
<Tag Color="@PresetColor.Orange.ToString()">文本:@textCount</Tag>
</ChildContent>
<Footer>
</Footer>
</ChartCard>
</AntDesign.Col>
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
<ChartCard Title="模型数量"
Total="@aiModelCount"
Icon="robot"
ContentHeight="46">
<ChildContent>
<Tag Color="@PresetColor.Yellow.ToString()">会话模型:@chatAIModelCount</Tag>
<Tag Color="@PresetColor.Green.ToString()">向量模型:@embeddingAIModelCount</Tag>
</ChildContent>
<Footer>
</Footer>
</ChartCard>
</AntDesign.Col>
</Row>
</GridContent>
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
imgSrc = NavigationManager.BaseUri + "assets/gzh.png";
}
private string body = new Markdown().Transform(@"非常感谢您对**AntSK**的喜爱,您的支持对我来说是莫大的鼓励。
如果您对技术类视频感兴趣欢迎关注我的B站账号获取更多精彩内容。
- **Bilibili账号**[点击这里](https://space.bilibili.com/1673184683/channel/series)
同时如果您感兴趣可以访问我的GitHub页面查看更多开源项目和代码
- **GitHub页面**[点击这里](https://github.com/xuzeyu91)
另外,如果您想加入由我创建的**.Net/AI应用开发微信交流群**,欢迎先添加我的微信**xuzeyu91**。
发送“进群请求”,我将会把您邀请进群。
期待与您在线上交流技术,共同进步!
也欢迎您关注我的公众号,后面可以第一时间知道**AntSK**项目进展。");
}

View File

@@ -0,0 +1,161 @@
/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
/* stylelint-disable no-duplicate-selectors */
/* stylelint-disable */
/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
.iconGroup span.anticon {
margin-left: 16px;
color: rgba(0, 0, 0, 0.45);
cursor: pointer;
transition: color 0.32s;
}
.iconGroup span.anticon:hover {
color: rgba(0, 0, 0, 0.85);
}
.rankingList {
margin: 25px 0 0;
padding: 0;
list-style: none;
}
.rankingList li {
display: flex;
align-items: center;
margin-top: 16px;
zoom: 1;
}
.rankingList li::before,
.rankingList li::after {
display: table;
content: ' ';
}
.rankingList li::after {
clear: both;
height: 0;
font-size: 0;
visibility: hidden;
}
.rankingList li span {
color: rgba(0, 0, 0, 0.85);
font-size: 14px;
line-height: 22px;
}
.rankingList li .rankingItemNumber {
display: inline-block;
width: 20px;
height: 20px;
margin-top: 1.5px;
margin-right: 16px;
font-weight: 600;
font-size: 12px;
line-height: 20px;
text-align: center;
background-color: #fafafa;
border-radius: 20px;
}
.rankingList li .rankingItemNumber.active {
color: #fff;
background-color: #314659;
}
.rankingList li .rankingItemTitle {
flex: 1;
margin-right: 8px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.salesExtra {
display: inline-block;
margin-right: 24px;
}
.salesExtra a {
margin-left: 24px;
color: rgba(0, 0, 0, 0.85);
}
.salesExtra a:hover {
color: #1890ff;
}
.salesExtra a.currentDate {
color: #1890ff;
}
.salesCard .salesBar {
padding: 0 0 32px 32px;
}
.salesCard .salesRank {
padding: 0 32px 32px 72px;
}
.salesCard :global .ant-tabs-bar,
.salesCard :global .ant-tabs-nav-wrap {
padding-left: 16px;
}
.salesCard :global .ant-tabs-bar .ant-tabs-nav .ant-tabs-tab,
.salesCard :global .ant-tabs-nav-wrap .ant-tabs-nav .ant-tabs-tab {
padding-top: 16px;
padding-bottom: 14px;
line-height: 24px;
}
.salesCard :global .ant-tabs-extra-content {
padding-right: 24px;
line-height: 55px;
}
.salesCard :global .ant-card-head {
position: relative;
}
.salesCard :global .ant-card-head-title {
align-items: normal;
}
.salesCardExtra {
height: inherit;
}
.salesTypeRadio {
position: absolute;
right: 54px;
bottom: 12px;
}
.offlineCard :global .ant-tabs-ink-bar {
bottom: auto;
}
.offlineCard :global .ant-tabs-bar {
border-bottom: none;
}
.offlineCard :global .ant-tabs-nav-container-scrolling {
padding-right: 40px;
padding-left: 40px;
}
.offlineCard :global .ant-tabs-tab-prev-icon::before {
position: relative;
left: 6px;
}
.offlineCard :global .ant-tabs-tab-next-icon::before {
position: relative;
right: 6px;
}
.offlineCard :global .ant-tabs-tab-active h4 {
color: #1890ff;
}
.trendText {
margin-left: 8px;
color: rgba(0, 0, 0, 0.85);
}
@media screen and (max-width: 992px) {
.salesExtra {
display: none;
}
.rankingList li span:first-child {
margin-right: 8px;
}
}
@media screen and (max-width: 768px) {
.rankingTitle {
margin-top: 16px;
}
.salesCard .salesBar {
padding: 16px;
}
}
@media screen and (max-width: 576px) {
.salesExtraWrap {
display: none;
}
.salesCard :global .ant-tabs-content {
padding-top: 30px;
}
}