ChatGPTTools.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Microsoft.AspNetCore.Http;
  2. using OASystem.Domain;
  3. using OpenAI.GPT3.Managers;
  4. using OpenAI.GPT3;
  5. using Org.BouncyCastle.Ocsp;
  6. using System.Net.Http;
  7. using System.Net.Http.Headers;
  8. using OpenAI.GPT3.ObjectModels.RequestModels;
  9. using OpenAI.GPT3.ObjectModels;
  10. using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
  11. using System.IO;
  12. namespace OASystem.API.OAMethodLib.ChatGPT
  13. {
  14. /// <summary>
  15. /// ChatGPT 3.5
  16. /// </summary>
  17. public static class ChatGPTTools
  18. {
  19. private readonly static string _appKey = "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";
  20. private readonly static HttpClient _httpClient = new HttpClient { BaseAddress = new Uri("https://api.openai.com") };
  21. /// <summary>
  22. /// ChatGPT - Completions 自动补全
  23. /// </summary>
  24. /// <param name="prompt">提示(问题)</param>
  25. /// <returns></returns>
  26. public static async Task<Result> Completions(string prompt)
  27. {
  28. var result = new Result();
  29. string url = string.Format("{0}", "/v1/completions");
  30. var reqData = new CompletionCreateRequest()
  31. {
  32. Prompt = prompt, //提示(问题) 你向API提供的提示,即你提出的问题
  33. Temperature = 0.3f, //创新采样 取值范围0-1,当设置为0时,对于相同的问题,模型始终返回相同或者相近的结果,
  34. //设置1则与上次的回答更加不同。默认1
  35. TopP =1f, //默认1。替代temperature使用,考虑了模型质量,0.1为生成结果的质量为10%,建议使用1。
  36. N = 1, //默认1。针对提示所生成结果的次数,会大量消耗令牌。
  37. Stream = false, //默认false。是否以流式返回部分进度,流完成后会发送终止消息data:[DONE]
  38. Echo = false, //默认false,在返回结果外,还显示用户给的问题
  39. //Stop = "", //最多四个序列,返回的文本不包括停止序列
  40. MaxTokens = 1024, //默认16,大多数模型支持最大为204
  41. };
  42. return await PostChatGPT(url, reqData);
  43. }
  44. /// <summary>
  45. /// post 访问
  46. /// </summary>
  47. /// <param name="url">接口路径</param>
  48. /// <param name="formData">请求参数</param>
  49. /// <returns></returns>
  50. public static async Task<Result> PostChatGPT(string url, CompletionCreateRequest reqData)
  51. {
  52. Result result = new Result();
  53. OpenAIService service = new OpenAIService(new OpenAiOptions() { ApiKey = _appKey });
  54. var res = await service.Completions.CreateCompletion(reqData, Models.TextDavinciV3);
  55. if (res.Successful)
  56. {
  57. result.Code = 0;
  58. result.Data = new { Text = res.Choices.FirstOrDefault().Text };
  59. }
  60. else result.Msg = "访问失败!";
  61. return result;
  62. }
  63. }
  64. }