You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
6.9 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Services;
using Newtonsoft.Json;
namespace TradeManageNew.chatgpt
{
/// <summary>
/// ChatGptService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
[System.Web.Script.Services.ScriptService]
public class ChatGptService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
#region 多条件普通查询
[WebMethod(EnableSession = true)]
public string GetGptMess(string prompt)
{
try
{
string js = "{\"prompt\":\"" + prompt + "\",\"max_tokens\":1028, \"temperature\": 1,\"model\":\"text-davinci-003\"}";
byte[] data = System.Text.Encoding.UTF8.GetBytes(js);
string mess = "";
List<string> head = new List<string>();
head.Add("Authorization:Bearer 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");
string content = HttpRequest("https://api.openai.com/v1/completions", "Post", "application/json", head, null, data, out mess);
if (mess != "")
return mess;
GptRoot model = JsonConvert.DeserializeObject<GptRoot>(content);
string remess = "";
if (model != null && model.choices != null)
{
foreach (var md in model.choices)
{
remess += md.text;//.Replace("\n", "<br/>");
}
}
return remess;
}
catch (Exception ex)
{
return ex.Message;
}
}
#endregion
public static string HttpRequest(string url, string Method, string ContentType, List<string> ListHeader, Version ver, byte[] bytes, out string ErrorMessage)
{
try
{
ErrorMessage = "";
//System.Net.ServicePointManager.DefaultConnectionLimit =200;
//设置支持的ssl协议版本这里我们都勾选上常用的几个
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
if (string.IsNullOrEmpty(ContentType) == true) ContentType = "application/x-www-form-urlencoded";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = Method; //GET,POST
myRequest.ContentType = ContentType;
myRequest.KeepAlive = true;
//myRequest.Accept = "text/html";
//myRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; qihu theworld)";
myRequest.Headers.Add("Accept-Language: zh-CN");
myRequest.Headers["Pragma"] = "no-cache"; //禁用缓存
myRequest.Headers["Cache-Control"] = "no-cache"; //禁用缓存
//myRequest.Timeout = 3 * 60 * 1000;
myRequest.Timeout = 300000;
myRequest.ReadWriteTimeout = 3 * 60 * 1000;
if (ver != null)
myRequest.ProtocolVersion = ver;
if (ListHeader != null)
{
foreach (var item in ListHeader)
{
myRequest.Headers.Add(item);
}
}
if (Method.ToUpper() == "POST" && (bytes == null || bytes.Length == 0))
{
bytes = new byte[1];
}
if (bytes != null && bytes.Length > 0)
{
//myRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
Stream stream = myRequest.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
}
//获得接口返回值
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
Stream myResponseStream = myResponse.GetResponseStream();
StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
myResponseStream.Close();
myRequest.Abort();
myResponse.Close();
reader = null;
myResponseStream = null;
myRequest = null;
myResponse = null;
return content;
}
catch (WebException e)
{
if (e.Response == null)
{
ErrorMessage = e.Message;
}
else
{
Stream myResponseStream = e.Response.GetResponseStream();
StreamReader reader = new StreamReader(myResponseStream, Encoding.UTF8);
ErrorMessage = reader.ReadToEnd();
if (ErrorMessage == "") ErrorMessage = e.Message;
}
}
return "";
}
}
//如果好用,请收藏地址,帮忙分享。
public class ChoicesItem
{
/// <summary>
///
/// </summary>
public string text { get; set; }
/// <summary>
///
/// </summary>
public int index { get; set; }
/// <summary>
///
/// </summary>
public string logprobs { get; set; }
/// <summary>
///
/// </summary>
public string finish_reason { get; set; }
}
public class Usage
{
/// <summary>
///
/// </summary>
public int prompt_tokens { get; set; }
/// <summary>
///
/// </summary>
public int completion_tokens { get; set; }
/// <summary>
///
/// </summary>
public int total_tokens { get; set; }
}
public class GptRoot
{
/// <summary>
///
/// </summary>
public string id { get; set; }
/// <summary>
///
/// </summary>
public int created { get; set; }
/// <summary>
///
/// </summary>
public string model { get; set; }
/// <summary>
///
/// </summary>
public List<ChoicesItem> choices { get; set; }
/// <summary>
///
/// </summary>
public Usage usage { get; set; }
}
}