一、注册百度智能云账号,并申请权限
二、选择应用接入,创建应用
名称、描述随便填,直接点确定即可
三、接入智能AI思路
1、把创建的应用的APIKey和SecretKey存储下来
private static string id = "Ze8ezd7WiT48wbjuIAPVykz9";
private static string secret = "AXaoBFvFZGN9NtdCPr0ft7jIaXjgWibz";
2、封装查询token的方法
/// <summary>
/// 生成鉴权token
/// </summary>
public static string GetAccessToken()
{
var client = new RestClient($"https://aip.baidubce.com/oauth/2.0/token?client_id={id}&client_secret={secret}&grant_type=client_credentials")
{
Timeout = -1
};
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/json");
var body = @"";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var result = JsonConvert.DeserializeObject<dynamic>(response.Content);
return result.access_token.ToString();
}
3、封装聊天的方法
/// <summary>
/// 聊天
/// </summary>
public static void GetMsg(string content)
{
string token = GetAccessToken();
var client = new RestClient($"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token={token}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
string body = @"
{
""messages"": [
{
""role"": ""user"",
""content"": ""contentParams""
}
]
}";
body = body.Replace("contentParams", content);
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var responseContent = JsonConvert.DeserializeObject<dynamic>(response.Content);
string result = responseContent.result;
Console.WriteLine("这是我做出的回答:");
Console.WriteLine(result);
}
4、聊天使用
GetMsg("查询问题内容");
四、我的实现
using Newtonsoft.Json;
using RestSharp;
using System.Net.Http.Json;
using System.Text.Json.Serialization;
namespace Gpt
{
public class Messages
{
/// <summary>
/// 消息内容
/// </summary>
public List<MessageInfo> messages { get; set; }
}
public class MessageInfo
{
/// <summary>
/// 消息内容
/// </summary>
public string role { get; set; }
/// <summary>
/// 内容
/// </summary>
public string content { get; set; }
}
public class Program
{
private static string id = "Ze8ez********APVykz9";
private static string secret = "AXaoBFv********jgWibz";
/// <summary>
/// 存储会话 问题内容
/// </summary>
private static List<MessageInfo> messageInfos = new List<MessageInfo>();
static void Main(string[] args)
{
Console.WriteLine("***************这些小王接入的人工智障,有什么问题欢迎询问***************");
Console.WriteLine("***************会话开始***************");
bool isBreak = false;
do
{
Console.WriteLine("请输入查询问题:");
string content = Console.ReadLine();
if (!string.IsNullOrEmpty(content))
{
GetMsg(content);
}
else
{
//如果未输入内容,则退出本次会话聊天
isBreak = true;
}
} while (!isBreak);
Console.WriteLine("***************会话结束***************");
}
/// <summary>
/// 聊天
/// </summary>
public static void GetMsg(string content)
{
string token = GetAccessToken();
var client = new RestClient($"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token={token}");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
string body = GetUserBody(content);
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var responseContent = JsonConvert.DeserializeObject<dynamic>(response.Content);
string result = responseContent.result;
//把历史查询内容组装到历史信息中,供下次查询一起进行组合式查询
SetAssistantBody(result);
Console.WriteLine("这是我做出的回答:");
Console.WriteLine(result);
}
/// <summary>
/// 组装查询body1
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static string GetUserBody(string content)
{
MessageInfo messageInfo = new MessageInfo
{
role = "user",
content = content
};
messageInfos.Add(messageInfo);
Messages message = new Messages
{
messages = messageInfos
};
return JsonConvert.SerializeObject(message);
}
/// <summary>
/// 组装查询body2
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static void SetAssistantBody(string content)
{
MessageInfo messageInfo = new MessageInfo
{
role = "assistant",
content = content
};
messageInfos.Add(messageInfo);
}
/// <summary>
/// 生成鉴权token
/// </summary>
public static string GetAccessToken()
{
var client = new RestClient($"https://aip.baidubce.com/oauth/2.0/token?client_id={id}&client_secret={secret}&grant_type=client_credentials")
{
Timeout = -1
};
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/json");
var body = @"";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var result = JsonConvert.DeserializeObject<dynamic>(response.Content);
return result.access_token.ToString();
}
}
}
五、效果展示
详细接入百度智能AI问题可参考接入官方文档:[百度智能云控制台 (baidu.com)]
智能AI引入,大致就是这些,如果大家想封装更多独特的功能,可以根据自己的业务逻辑去给他改变,大家有什么更好玩的,欢迎到评论区展示!!!