当前位置:   article > 正文

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型_c# 大模型

c# 大模型

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型

前言

今天来写一个简单的ernie-c#的例子,主要参考了百度智能云的例子,然后自己改了改,学习了ERNIE模型的鉴权方式,数据流的格式和简单的数据解析,实现了在C#中调用百度智能云的ernie(其实就是文心一言3.5的语言模型)的例子。

步骤

  1. 注册百度智能云
  2. 创建应用
  3. 开通ERNIE 3.5 4K模型的付费通道(似乎是免费的)
  4. 获取AK和SK
  5. 代码接入

请添加图片描述

步骤1-注册百度智能云

百度智能云
按提示注册即可

步骤2-创建应用

点击“应用接入” -> “创建应用”

请添加图片描述

按下图操作即可

请添加图片描述

步骤3-开通ERNIE 3.5 4K模型的付费通道

百度会送20元的优惠券,试用的话是免费的,如果要收费的话,请酌情开通

请添加图片描述

我的代金券

请添加图片描述

步骤4-获取AK和SK

在这里获取AK和SK,后面代码里面要用

请添加图片描述

代码接入

定义AK和SK
// 您的AccessKey ID
const string API_KEY = "qSXXXXXXXXXXXXXXXXQ";
// 您的AccessKey Secret
const string SECRET_KEY = "Kb8XXXXXXXXXXXXXXXXXX24ZH";
  • 1
  • 2
  • 3
  • 4
定义发送和回传的数据结构
public class Message
{
        [JsonProperty("role")]
        public string Role { get; set; }

        [JsonProperty("content")]
        public string Content { get; set; }
}

public class ErnieMessage
{
        [JsonProperty("messages")]
        public Message[] Messages { get; set; }

        [JsonProperty("temperature")]
        public double Temperature { get; set; }

        [JsonProperty("top_p")]
        public double TopP { get; set; }

        [JsonProperty("penalty_score")]
        public double PenaltyScore { get; set; }

        [JsonProperty("disable_search")]
        public bool DisableSearch { get; set; }

        [JsonProperty("enable_citation")]
        public bool EnableCitation { get; set; }
}
ErnieMessage ernieMessage = new ErnieMessage();

public class ChatCompletionResult
{
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("object")]
        public string ObjectType { get; set; } // 这里的属性名可以根据实际需求进行命名,例如避免与.NET的内置Object类冲突  

        [JsonProperty("created")]
        public long CreatedTimestamp { get; set; } // 通常时间戳会转换为DateTime,但这里保持为long  

        [JsonProperty("result")]
        public string Result { get; set; }

        [JsonProperty("is_truncated")]
        public bool IsTruncated { get; set; }

        [JsonProperty("need_clear_history")]
        public bool NeedClearHistory { get; set; }

        [JsonProperty("finish_reason")]
        public string FinishReason { get; set; }

        [JsonProperty("usage")]
        public Usage UsageInfo { get; set; }

        // 嵌套类来表示Usage对象  
        public class Usage
        {
        [JsonProperty("prompt_tokens")]
        public int PromptTokens { get; set; }

        [JsonProperty("completion_tokens")]
        public int CompletionTokens { get; set; }

        [JsonProperty("total_tokens")]
        public int TotalTokens { get; set; }
        }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
定义消息池
// 定义消息池
public class MessagePool
{
    public List<Message> Messages { get; set; }

    public MessagePool()
    {
        Messages = new List<Message>();
    }

    public void AddMessage(Message message)
    {
        Messages.Add(message);
    }

    public void ClearMessages()
    {
        Messages.Clear();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
定义角色
enum eRole { User, Assistant}
string Role(eRole role)
{
        return role == eRole.User ? "user" : "assistant";
}
  • 1
  • 2
  • 3
  • 4
  • 5
定义聊天函数
private string Chat(string strSend, eRole role)
{
        var client = new RestClient($"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-3.5-4k-0205?access_token={GetAccessTokenMethod()}");
        client.Timeout = -1;
        var request = new RestRequest(Method.POST);
        request.AddHeader("Content-Type", "application/json");
        AddMessageToPool(strSend, role);
        var body = JsonConvert.SerializeObject(ernieMessage, Formatting.None);
        request.AddParameter("application/json", body, ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);
        AddMessageToPool(response.Content, eRole.Assistant);
        ChatCompletionResult result = JsonConvert.DeserializeObject<ChatCompletionResult>(response.Content);
        FillCompletionInfo(result);
        if (result.NeedClearHistory) ClearHistoryMethod();
        return result.Result;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
完整代码

完整代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/980566
推荐阅读
相关标签
  

闽ICP备14008679号