前言
前阵子,突然收到了文心千帆的试用邀请,正好今天有空,就拿出点时间来了解了一下。
主要训练了一个私有模型,了解了一下大语言模型的训练流程,经历了整理数据集,人工/智能标注,强化学习,发布数据集,训练模型,部署应用(没真部署,太贵了,如下图👇)几个步骤。
对大语言模型算是有了一个更新的认识,虽然没有发布自己的私有模型,但千帆提供的能力可不止是模型训练,还提供了一些公有模型,可以利用这些模型,发布属于自己的专属小师爷。
本篇不再介绍模型训练的相关流程,感兴趣的老铁,可以到官方文档查看,地址👉: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/
评论