写点什么

利用文心千帆打造一个属于自己的小师爷

作者:为自己带盐
  • 2023-08-02
    河北
  • 本文字数:2456 字

    阅读完需:约 8 分钟

前言

前阵子,突然收到了文心千帆的试用邀请,正好今天有空,就拿出点时间来了解了一下。

主要训练了一个私有模型,了解了一下大语言模型的训练流程,经历了整理数据集,人工/智能标注,强化学习,发布数据集,训练模型,部署应用(没真部署,太贵了,如下图👇)几个步骤。


对大语言模型算是有了一个更新的认识,虽然没有发布自己的私有模型,但千帆提供的能力可不止是模型训练,还提供了一些公有模型,可以利用这些模型,发布属于自己的专属小师爷。


本篇不再介绍模型训练的相关流程,感兴趣的老铁,可以到官方文档查看,地址👉:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Slfmc9dds

开通服务

现在千帆好像还是再试用阶段,但基本填了邀请链接就能过,而且现在的服务费用也不高,对开发者个人来说,是深入熟悉大模型的好机会。

邀请链接👉:https://cloud.baidu.com/product/wenxinworkshop?track=dingbutonglan

具体的开通过程,就不多说了,提交信息之后等着就行。


创建应用

到文心千帆的管理控制台,找到“大模型服务”-->“应用接入”,根据操作指引创建应用即可

注意,提前开通必须的服务,如果没有模型训练的需求,那按需开通预测服务类的服务就好

创建好应用后,可以在列表里看到应用信息,拿到 apikey 和 secretkey 之后,剩下的就是本地开发的事儿了


开发应用

我这里,只是开发了一个简单控制台应用,因为主要还是体验为主,想要最快的时间看到成果(1-2 小时搞定)。事实上,我们可以开发任何终端形态的人工智能类应用,包括但不限于 web,小程序,桌面软件,app 等。

这里呢,我也不详细的分步骤把代码完整的贴出来了,就贴一些关键的部分,因为太简单了,和其他云服务的调用流程基本一致。


核心代码

交互模型

主要包含和千帆后台交互的请求模型和想用模型,实际上也可以不封装,这个就看个人习惯了。然后我这里的代码基本没怎么优化,属于快速跑通型的,然后立马就写博客分享出来了,仅供参考,哈哈~

public class MessageModel{	public List<RequestModel> messages { get; set; }}    
public class RequestModel{ public string role { get; set; } = "user";//user: 表示用户,assistant: 表示对话助手
public string content { get; set; }}
public class ResponseModel{ public string id { get; set; }
public int created { get; set; }
public int? sentence_id { get; set; }
public bool? is_end { get; set; }
public bool? is_truncated { get; set; }
public string result { get; set; }
public bool need_clear_history { get; set; }
public int ban_round { get; set; }
public Usage usage { get; set; }}
public class Usage{ public int prompt_tokens { get; set; }
public int completion_tokens { get; set; }
public int total_tokens { get; set;}}
复制代码

获取 token

static string GetAccessToken(){  if (string.IsNullOrEmpty(CacheManager.Default.Get<string>("qftoken"))){    var client = new RestClient($"https://aip.baidubce.com/oauth/2.0/token");    var request = new RestRequest();    request.Timeout = -1;    request.Method = Method.Post;    request.AddParameter("grant_type", "client_credentials");    request.AddParameter("client_id", apikey);    request.AddParameter("client_secret", secretkey);    var response = client.Execute(request);    //Console.WriteLine(response.Content);    var result = JsonConvert.DeserializeObject<dynamic>(response.Content);    string accessToken= result.access_token.ToString();    CacheManager.Default.Set_AbsoluteExpire("qftoken", accessToken, DateTime.Now.AddHours(2) - DateTime.Now);    return accessToken;  }  else  {    return CacheManager.Default.Get<string>("qftoken");  }}
复制代码

开始问答

public static void ErnieBotTurbo(string message){  decimal price = 0.008M;  var client = new RestClient($"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token={GetAccessToken()}");
var request = new RestRequest(); request.Timeout = -1; request.Method = Method.Post; request.AddHeader("Content-Type", "application/json"); var item = new RequestModel() { content = message, }; var ret = new MessageModel(); ret.messages = new List<RequestModel> { item }; request.AddParameter("application/json", JsonConvert.SerializeObject(ret), ParameterType.RequestBody); var response = client.Execute(request); if (response.Content.Contains("error_code")) { AnsiConsole.WriteLine(response.Content); } var responseModel = JsonConvert.DeserializeObject<ResponseModel>(response.Content); if (!string.IsNullOrEmpty(responseModel.result)) { foreach (char c in responseModel.result) { AnsiConsole.Markup($"[#FDE047]{c}[/]"); Thread.Sleep(100); } Console.WriteLine(); AnsiConsole.Markup($"[#1E9FFF]此次回答消耗,prompt_tokens:{responseModel.usage.prompt_tokens},completion_tokens:{responseModel.usage.completion_tokens},total_tokens:{responseModel.usage.total_tokens}[/]"); Console.WriteLine(); AnsiConsole.Markup($"[#1E9FFF]此次回答预计支出:{price / 1000 * responseModel.usage.total_tokens}元[/]"); } Console.WriteLine();}
复制代码

这里我引用的是 ERNIE-Bot-turbo 这个模型,费用是 0.008/千 tokens,还有一些其他的模型,价格都差不多。

代码的部分基本就这些了,没什么复杂的点。

最后,看看演示效果吧,对了控制台的文字输出效果,用的是 AnsiConsole 来实现的,地址:https://spectreconsole.net/


发布于: 刚刚阅读数: 4
用户头像

学着码代码,学着码人生。 2019-04-11 加入

是一枚,热爱技术,天赋不高,又有点轴,的码农。。

评论

发布
暂无评论
利用文心千帆打造一个属于自己的小师爷_大语言模型_为自己带盐_InfoQ写作社区