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

server/2024/9/23 9:30:17/

【大模型部署】在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;
}
完整代码

完整代码


http://www.ppmy.cn/server/44819.html

相关文章

NoSQL数据库技术与应用 教学设计

《NoSQL数据库技术与应用》 教学设计 课程名称&#xff1a;NoSQL数据库技术与应用 授课年级&#xff1a; 20xx年级 授课学期&#xff1a; 20xx学年第一学期 教师姓名&#xff1a; 某某老师 2020年5月6日 课题 名称 第1章 初识NoSQL 计划 学时 3 课时 内容 分析 随着云计算、…

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中&#xff0c; 同一个SQL 20多个session 在跑&#xff0c;等待事件network&#xff0c;可能怀疑是不是网络断开了&#xff0c;导致没有返回 执行sql 如下&#xff1a; BEGIN Xdblink ; END; 去到dblink 所在的db&#xff0c;发现20多个sql在…

多线程基础知识

什么是死锁&#xff1f;如何避免死锁&#xff1f; 死锁是指在多线程编程中&#xff0c;两个或多个线程互相等待对方持有的资源&#xff0c;导致程序无法继续执行的状态。 死锁的发生通常需要满足以下四个条件&#xff1a; 互斥条件&#xff1a;至少有一个资源被某个线程独占时&…

Vue.js 混入(Mixins)高级用法:提升代码复用与灵活性

Vue.js 中的混入&#xff08;Mixins&#xff09;是一种强大而灵活的设计模式&#xff0c;它允许你将可复用的组件功能抽离为独立的模块&#xff0c;并在多个组件间共享。本文将深入探讨混入的高级用法&#xff0c;包括如何传递参数给混入、解决命名冲突、以及如何利用高阶组件思…

vscode终端运行pnpm,yarn不成功问题

vscode终端运行pnpm&#xff0c;yarn不成功问题 1.问题描述2.解决办法 1.问题描述 全局安装了pnpm后&#xff0c;cmd窗口执行pnpm -v可以查看版本信息&#xff0c;在项目目录可以执行操作&#xff0c;但是在vscode中无法执行并报错 2.解决办法 以管理员身份运行vscode打开vscod…

k8s遇到的错误记录

时隔四年有开始重新鼓捣k8s了&#xff0c;重新安装后遇到的错误记录如下&#xff1a; Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes) Requires: kubernetes-cni 0.7.5 Available: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes) …

Mac系统国内通过nvm快速安装node

国内通过nvm安装node 国内nvm安装工具 地址&#xff1a;https://gitee.com/RubyMetric/nvm-cn 安装命令 bash -c "$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh)"如果按照过程中有报错可以尝试下载安装脚本 在浏览器中打开下面的链接htt…

安装Chrome扩展程序来 一键禁用页面上的所有动画和过渡。有那些扩展程序推荐一下

要安装Chrome扩展程序来一键禁用页面上的所有动画和过渡&#xff0c;以下是一些推荐的扩展程序&#xff1a; Toggle CSS Animations and Transitions 功能&#xff1a;此扩展程序允许用户轻松地在网页上切换CSS动画和过渡的开启与关闭状态。使用方法&#xff1a;安装后&#x…