feat: 新增openai对接接口

This commit is contained in:
chenchun
2024-07-19 18:17:36 +08:00
parent 58d1b62250
commit a0478279df
10 changed files with 146 additions and 5 deletions

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using OpenAI;
using OpenAI.Managers;
using OpenAI.ObjectModels;
using OpenAI.ObjectModels.RequestModels;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Services;
using Yi.Framework.ChatHub.Domain.Shared.Options;
namespace Yi.Framework.ChatHub.Domain.Managers
{
public class AiManager : DomainService, ISingletonDependency
{
public AiManager(IOptions<AiOptions> options)
{
this.OpenAIService = new OpenAIService(new OpenAiOptions()
{
ApiKey = options.Value.ApiKey,
BaseDomain = options.Value.BaseDomain
});
}
private OpenAIService OpenAIService { get; }
public async IAsyncEnumerable<string> ChatAsStreamAsync()
{
var completionResult = OpenAIService.ChatCompletion.CreateCompletionAsStream(new ChatCompletionCreateRequest
{
Messages = new List<ChatMessage>
{
ChatMessage.FromUser("特朗普是谁?"),
},
Model = Models.Gpt_4,
});
await foreach (var result in completionResult)
{
if (result.Successful)
{
yield return result.Choices.FirstOrDefault()?.Message.Content??string.Empty;
}
}
}
}
}

View File

@@ -48,6 +48,14 @@ namespace Yi.Framework.ChatHub.Domain.Managers
case MessageTypeEnum.All:
await _hubContext.Clients.All.SendAsync(ChatConst.ClientActionReceiveMsg, context.MessageType, context);
break;
case MessageTypeEnum.Ai:
var userModel2 = await GetUserAsync(context.ReceiveId.Value);
if (userModel2 is not null)
{
await _hubContext.Clients.Client(userModel2.ClientId).SendAsync(ChatConst.ClientActionReceiveMsg, context.MessageType, context);
}
break;
default:
break;
}

View File

@@ -7,7 +7,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Betalgo.OpenAI" Version="8.6.1" />
<PackageReference Include="Volo.Abp.AspNetCore.SignalR" Version="$(AbpVersion)" />
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="$(AbpVersion)" />