c#程序接入百度智能云千帆大模型AI,实现自制GPT

162 阅读1分钟

一、注册百度智能云账号,并申请权限

image.png

二、选择应用接入,创建应用

image.png

image.png 名称、描述随便填,直接点确定即可

三、接入智能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();
        }


    }
}

五、效果展示

image.png

详细接入百度智能AI问题可参考接入官方文档:[百度智能云控制台 (baidu.com)]

智能AI引入,大致就是这些,如果大家想封装更多独特的功能,可以根据自己的业务逻辑去给他改变,大家有什么更好玩的,欢迎到评论区展示!!!