• 一篇文章让你两种方式调用星火大模型,搭建属于自己的“chatgpt”


    申请

    网址:星火大模型api注册链接

    选择零元购

    获取你专属的key、密钥、appid

    方法1:使用jquery直接调用
     

    html: 

    1. //应用插件-此插件用于对url编码加密,资源包已经上传,审核通过后,会在顶部显示
    2. <script src="../../js/crypto-js/rollups/hmac-sha256.js" type="text/javascript">script>
    3. <script src="../../js/crypto-js/components/enc-base64-min.js" type="text/javascript">script>
    4. <div class="QA-item-ft-cont">
    5. <div class="QA-item-ft-info">
    6. <textarea id="search_text">textarea>
    7. div>
    8. <div class="QA-item-ft-btn">
    9. <a onclick="aisendmsg()" class="btn blue-bg search_btn" >发送a>div>
    10. div>

    注意:如果上面资源下载不了,可以关注“墨水直达”公众号,输入“crypto-js”即可下载插件

    js:

    视频效果如下: 

    desktop 2023-10-18 15-38-13


     

    方法2:使用c#后台调用

    1. 定义全局
    2. private static ClientWebSocket webSocket0;
    3. private static CancellationToken cancellation;
    4. //appid
    5. private const string x_appid = "你的appid";
    6. private const string api_secret = "你的密钥";
    7. private const string api_key = "你的key";
    8. private static string hostUrl1 = "https://spark-api.xf-yun.com/v1.1/chat";
    9. private static string hostUrl2 = "https://spark-api.xf-yun.com/v2.1/chat";
    10. [HttpPost]
    11. public async Task KDXF_OpenAI(string parm)
    12. {
    13. ResultRes res = new ResultRes();
    14. res.code = 1;
    15. try
    16. {
    17. OpenAI_Entity entity = JsonConvert.DeserializeObject(parm);
    18. string resp = "";
    19. //加密url
    20. string authUrl = GetAuthUrl(entity.type);
    21. string url = authUrl.Replace("http://", "ws://").Replace("https://", "wss://");
    22. //开启websocket
    23. using (webSocket0 = new ClientWebSocket())
    24. {
    25. await webSocket0.ConnectAsync(new Uri(url), cancellation);
    26. JsonRequest request = new JsonRequest();
    27. request.header = new Header()
    28. {
    29. app_id = x_appid,
    30. uid = entity.userid
    31. };
    32. var sqldetaillist = xxxx;//这里是用户的历史问答数据,就不展示了,如果你们不需要历史问答,则可以省略
    33. List contentlist = new List();
    34. foreach (var item in sqldetaillist)
    35. {
    36. Content entity1 = new Content();
    37. entity1.role = "user";
    38. entity1.content= item.content;
    39. contentlist.Add(entity1);
    40. entity1.role = "assistant";
    41. entity1.content = item.reqcontent;
    42. contentlist.Add(entity1);
    43. }
    44. //如果没有历史问答,省略上面一段代码,从这里开始即可
    45. Content entity2 = new Content();
    46. entity2.role = "user";
    47. entity2.content = entity.content;
    48. contentlist.Add(entity2);
    49. request.parameter = new Parameter()
    50. {
    51. chat = new Chat()
    52. {
    53. domain = entity.type == 0 ? "general" : "generalv2",
    54. temperature = 0.7,//温度采样阈值,用于控制生成内容的随机性和多样性,值越大多样性越高;范围(0,1)
    55. max_tokens = entity.type == 0 ? 4096 : 8192,//生成内容的最大长度,范围(0,4096);2.0版本(0,8192)
    56. }
    57. };
    58. request.payload = new Payload()
    59. {
    60. message = new Message()
    61. {
    62. text = contentlist
    63. }
    64. };
    65. string jsonString = JsonConvert.SerializeObject(request);
    66. //连接成功,开始发送数据
    67. var frameData2 = System.Text.Encoding.UTF8.GetBytes(jsonString.ToString());
    68. webSocket0.SendAsync(new ArraySegment<byte>(frameData2), WebSocketMessageType.Text, true, cancellation);
    69. // 接收流式返回结果进行解析
    70. byte[] receiveBuffer = new byte[1024];
    71. WebSocketReceiveResult result = await webSocket0.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), cancellation);
    72. while (!result.CloseStatus.HasValue)
    73. {
    74. if (result.MessageType == WebSocketMessageType.Text)
    75. {
    76. string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, result.Count);
    77. //将结果构造为json
    78. JObject jsonObj = JObject.Parse(receivedMessage);
    79. int code = (int)jsonObj["header"]["code"];
    80. if (0 == code)
    81. {
    82. int status = (int)jsonObj["payload"]["choices"]["status"];
    83. JArray textArray = (JArray)jsonObj["payload"]["choices"]["text"];
    84. string content = (string)textArray[0]["content"];
    85. resp += content;
    86. if (status != 2)
    87. {
    88. Console.WriteLine($"已接收到数据: {receivedMessage}");
    89. }
    90. else
    91. {
    92. // Console.WriteLine($"最后一帧: {receivedMessage}");
    93. int totalTokens = (int)jsonObj["payload"]["usage"]["text"]["total_tokens"];
    94. //Console.WriteLine($"整体返回结果: {resp}");
    95. //Console.WriteLine($"本次消耗token数: {totalTokens}");
    96. res.totalTokens = totalTokens;
    97. res.result = resp;
    98. break;
    99. }
    100. }
    101. }
    102. else if (result.MessageType == WebSocketMessageType.Close)
    103. {
    104. res.code = -1;
    105. res.result = "已关闭WebSocket连接";
    106. Console.WriteLine("已关闭WebSocket连接");
    107. break;
    108. }
    109. result = await webSocket0.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), cancellation);
    110. }
    111. }
    112. }
    113. catch (Exception ex)
    114. {
    115. res.code = -1;
    116. res.result = ex.Message;
    117. }
    118. return res;
    119. }
    120. private static string GetAuthUrl(int type = 0)
    121. {
    122. string date = DateTime.UtcNow.ToString("r");
    123. Uri uri = new Uri(type == 0 ? hostUrl1 : hostUrl2);
    124. StringBuilder builder = new StringBuilder("host: ").Append(uri.Host).Append("\n").//
    125. Append("date: ").Append(date).Append("\n").//
    126. Append("GET ").Append(uri.LocalPath).Append(" HTTP/1.1");
    127. string sha = HMACsha256(api_secret, builder.ToString());
    128. string authorization = string.Format("api_key=\"{0}\", algorithm=\"{1}\", headers=\"{2}\", signature=\"{3}\"", api_key, "hmac-sha256", "host date request-line", sha);
    129. //System.Web.HttpUtility.UrlEncode
    130. string NewUrl = "https://" + uri.Host + uri.LocalPath;
    131. string path1 = "authorization" + "=" + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(authorization));
    132. date = date.Replace(" ", "%20").Replace(":", "%3A").Replace(",", "%2C");
    133. string path2 = "date" + "=" + date;
    134. string path3 = "host" + "=" + uri.Host;
    135. NewUrl = NewUrl + "?" + path1 + "&" + path2 + "&" + path3;
    136. return NewUrl;
    137. }
    138. public static string HMACsha256(string apiSecretIsKey, string buider)
    139. {
    140. byte[] bytes = System.Text.Encoding.UTF8.GetBytes(apiSecretIsKey);
    141. System.Security.Cryptography.HMACSHA256 hMACSHA256 = new System.Security.Cryptography.HMACSHA256(bytes);
    142. byte[] date = System.Text.Encoding.UTF8.GetBytes(buider);
    143. date = hMACSHA256.ComputeHash(date);
    144. hMACSHA256.Clear();
    145. return Convert.ToBase64String(date);
    146. }
    147. //下面是实体类
    148. public class OpenAI_Entity
    149. {
    150. public string userid { get; set; }//请求用户的id,唯一性
    151. public string content { get; set; }//问题
    152. public int type { get; set; } //来源,如果type=0则调用1.5版本接口,如果type=1则调用2.0版本接口
    153. }
    154. //构造请求体
    155. public class JsonRequest
    156. {
    157. public Header header { get; set; }
    158. public Parameter parameter { get; set; }
    159. public Payload payload { get; set; }
    160. }
    161. public class Header
    162. {
    163. public string app_id { get; set; }
    164. public string uid { get; set; }
    165. }
    166. public class Parameter
    167. {
    168. public Chat chat { get; set; }
    169. }
    170. public class Chat
    171. {
    172. public string domain { get; set; }
    173. public double temperature { get; set; }
    174. public int max_tokens { get; set; }
    175. }
    176. public class Payload
    177. {
    178. public Message message { get; set; }
    179. }
    180. public class Message
    181. {
    182. public List text { get; set; }
    183. }
    184. public class Content
    185. {
    186. public string role { get; set; }
    187. public string content { get; set; }
    188. }

  • 相关阅读:
    C语言之OJ刷题
    【C++】一些特殊类的实现
    springboot配置
    【字符编码】c++编码格式及转换
    【前端】JavaScript(一)
    Java网络编程----通过实现简易聊天工具来聊聊NIO
    简单走近ChatGPT
    JS进阶-防抖和节流
    python re findall search finditer complie 预加载
    springboot基于微信小程序的电器商城系统的设计与实现毕业设计源码251453
  • 原文地址:https://blog.csdn.net/huxinyu0208/article/details/133906598