| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 | 
							- using OASystem.Domain.Dtos.Groups;
 
- using OASystem.Domain.Dtos.KiMi;
 
- using System.Net.Http.Headers;
 
- namespace OASystem.API.OAMethodLib.KiMiApi
 
- {
 
-     public class KiMiApiClient
 
-     {
 
-         //读取配置文件
 
-         private KiMiSetting _kimiSetting { get; set; }
 
-         private readonly HttpClient _httpClient;
 
-         public KiMiApiClient()
 
-         {
 
-             _httpClient = new HttpClient();
 
-             _kimiSetting = AutofacIocManager.Instance.GetService<KiMiSetting>();
 
-             // 设置公共请求头
 
-             _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _kimiSetting.Key);
 
-         }
 
-         //private  string apiKey = "sk-AY1Sv4rLnSUgGGHcC8SGSWYYKzGID7leZJcFfxAYozLC8dIc";
 
-         //private  string baseUrl = "https://api.moonshot.cn/v1";
 
-         public async Task<string> UploadFileAsync(IFormFile file)
 
-         {
 
-             string message = string.Empty;
 
-             byte[] fileBytes = null;
 
-             using (var memoryStream = new MemoryStream())
 
-             {
 
-                 await file.CopyToAsync(memoryStream);
 
-                 fileBytes = memoryStream.ToArray();
 
-             }
 
-             // 上传文件
 
-             var fileContent = new ByteArrayContent(fileBytes);
 
-             var fileFormData = new MultipartFormDataContent
 
-             {
 
-                 { fileContent, "file", file.FileName },
 
-                 { new StringContent("file-extract"), "purpose" }
 
-             };
 
-             HttpResponseMessage fileResponse = await _httpClient.PostAsync($"{_kimiSetting.BaseUrl}/files", fileFormData);
 
-             string fileResponseContent = await fileResponse.Content.ReadAsStringAsync();
 
-             if (!fileResponse.IsSuccessStatusCode)
 
-             {
 
-                 throw new Exception($"Failed to upload file: {fileResponseContent}");
 
-             }
 
-             dynamic fileObject = JsonConvert.DeserializeObject(fileResponseContent);
 
-             string fileId = fileObject.id;
 
-             HttpResponseMessage contentResponse = await _httpClient.GetAsync($"{_kimiSetting.BaseUrl}/files/{fileId}/content");
 
-             string fileContentText = await contentResponse.Content.ReadAsStringAsync();
 
-             if (!contentResponse.IsSuccessStatusCode)
 
-             {
 
-                 throw new Exception($"Failed to get file content: {fileContentText}");
 
-             }
 
-             message = fileContentText;
 
-             return message;
 
-         }
 
-         public async Task<List<SeedMessages>> UploadFilesAsync(List<IFormFile> files)
 
-         {
 
-             List<SeedMessages> result = new List<SeedMessages>();
 
-             foreach (IFormFile file in files)
 
-             {
 
-                 var fileConter = await this.UploadFileAsync(file);
 
-                 result.Add(new SeedMessages() { Role = KimiRole.system , Content = fileConter });
 
-             }
 
-             return result;
 
-         }
 
-         public async Task<string> SeedMessage(List<SeedMessages> messages)
 
-         {
 
-             string completionResponseContent = await SeedAsync(messages);
 
-              // 解析返回的完成结果
 
-             var completion = JObject.Parse(completionResponseContent);
 
-             string reply = completion["choices"][0]["message"].ToString();
 
-             return reply;
 
-         }
 
-         public async Task<KiMiRoot> SeedMessageByFullConterObject(List<SeedMessages> messages)
 
-         {
 
-             var respStr =  await SeedAsync(messages);
 
-             return JsonConvert.DeserializeObject<KiMiRoot>(respStr);
 
-         }
 
-         private async Task<string> SeedAsync(List<SeedMessages> messages)
 
-         {
 
-             var completionRequest = new
 
-             {
 
-                 model = _kimiSetting.Model,
 
-                 messages = messages.Select(x => new
 
-                 {
 
-                     Role = StringEnumHelper.ToStringValue(x.Role),
 
-                     x.Content
 
-                 }),
 
-                 temperature = 1
 
-             };
 
-             var completionJson = JsonConvert.SerializeObject(completionRequest);
 
-             var completionContent = new StringContent(completionJson, Encoding.UTF8, "application/json");
 
-             HttpResponseMessage completionResponse = await _httpClient.PostAsync($"{_kimiSetting.BaseUrl}/chat/completions", completionContent);
 
-             string completionResponseContent = await completionResponse.Content.ReadAsStringAsync();
 
-             if (!completionResponse.IsSuccessStatusCode)
 
-             {
 
-                 throw new Exception($"Failed to seed message: {completionResponseContent}");
 
-             }
 
-             return completionResponseContent;
 
-         }
 
-     }
 
-     public class SeedMessages
 
-     {
 
-         public KimiRole Role { get; set; }
 
-         public string Content { get; set; }
 
-     }
 
-     public class KiMiRoot
 
-     {
 
-         public string Id { get; set; }
 
-         public string Object { get; set; }
 
-         public long Created { get; set; }
 
-         public string Model { get; set; }
 
-         public List<Choice> Choices { get; set; }
 
-         public Usage Usage { get; set; }
 
-     }
 
-     public class Choice
 
-     {
 
-         public int Index { get; set; }
 
-         public ReturnMessage Message { get; set; }
 
-         public string FinishReason { get; set; }
 
-     }
 
-     public class Usage
 
-     {
 
-         public int PromptTokens { get; set; }
 
-         public int CompletionTokens { get; set; }
 
-         public int TotalTokens { get; set; }
 
-     }
 
-     public class ReturnMessage
 
-     {
 
-         public string Role { get; set; }
 
-         public string Content { get; set; }
 
-     }
 
-     public enum KimiRole
 
-     {
 
-         system,
 
-         user
 
-     }
 
-     public static class StringEnumHelper
 
-     {
 
-         public static string ToStringValue(KimiRole value)
 
-         {
 
-             return value switch
 
-             {
 
-                 KimiRole.system => "system",
 
-                 KimiRole.user => "user",
 
-                 _ => throw new ArgumentOutOfRangeException(nameof(value), value, null)
 
-             };
 
-         }
 
-     }
 
- }
 
 
  |