当前位置: 首页 > news >正文

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

【大模型部署】在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";
定义发送和回传的数据结构
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; }}
}
定义消息池
// 定义消息池
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();}
}
定义角色
enum eRole { User, Assistant}
string Role(eRole role)
{return role == eRole.User ? "user" : "assistant";
}
定义聊天函数
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;
}
完整代码

完整代码

相关文章:

  • Hive环境搭建
  • 从 0 手撸一个 pytorch
  • 中国联通国际在商业零售领域的全球网络与SDN网络技术应用
  • ANDROID OLLVM 混淆配置
  • 【OpenCV】像素信息统计
  • redis数据类型之string,list
  • zabbix配置自动发现规则模版-snmp
  • 谢宁DOE培训适合哪些人?
  • Java面试八股之自旋是什么意思
  • 聚酯输送带的原材料
  • 在winnas中使用docker desktop遇到的问题及解决方法记录
  • 【C++】构造函数、析构函数、拷贝构造与运算符重载
  • 乡村振兴的乡村旅游新模式:挖掘乡村旅游资源,创新旅游开发方式,打造乡村旅游新品牌,助力美丽乡村建设
  • 迅睿 CMS 中开启【ionCube 扩展】的方法
  • LVM、磁盘配额
  • [deviceone开发]-do_Webview的基本示例
  • Android系统模拟器绘制实现概述
  • css系列之关于字体的事
  • css选择器
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • JS 面试题总结
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Vue全家桶实现一个Web App
  • 搭建gitbook 和 访问权限认证
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 微信小程序开发问题汇总
  • 应用生命周期终极 DevOps 工具包
  • 【云吞铺子】性能抖动剖析(二)
  • ​queue --- 一个同步的队列类​
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #13 yum、编译安装与sed命令的使用
  • #NOIP 2014# day.2 T2 寻找道路
  • #WEB前端(HTML属性)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (06)金属布线——为半导体注入生命的连接
  • (4)(4.6) Triducer
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (BFS)hdoj2377-Bus Pass
  • (编译到47%失败)to be deleted
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (分布式缓存)Redis哨兵
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)http-server应用
  • (转)创业家杂志:UCWEB天使第一步
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(一)
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net framework profiles /.net framework 配置
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net接口调试与案例
  • .Net实现SCrypt Hash加密