今年开年,最火的莫过于ChatGPT的相关讨论,这个提供了非常强大的AI处理,并且整个平台也提供了很多对应的API进行接入的处理,使得我们可以在各种程序上无缝接入AI的后端处理,从而实现智能AI的各种应用。ChatGPT的API可以在前端,以及一些后端进行API的接入,本篇随笔主要介绍基于ChatGPT的API的C#接入研究。

1、ChatGPT的介绍

ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI研发的聊天机器人程序 ,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文 等任务。

ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接大量的语料库来训练模型,这些语料库包含了真实世界中的对话,使得ChatGPT具备上知天文下知地理,还能根据聊天的上下文进行互动的能力,做到与真正人类几乎无异的聊天场景进行交流。ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

ChatGPT 的官网地址如下:https://platform.openai.com/ ,如果我们需要使用它的对话处理以及强大的API能力,需要注册才能使用,至于如何注册以及接收验证码的操作,请百度一下一下即可,这里忽略,只是介绍它的功能以及如何介入使用。

ChatGPT 可以做很多不同类型的工作,常规的问答聊天,编写各种语言的应用代码,编写论文、摘要等,以及图片处理,翻译等等,如下是它们的一些功能分类和介绍。

如我们可以在对话中测试其聊天/应答功能。

我们也可以让它编写一段操作代码,如下所示。

如果我们要了解ChatGPT平台的API介绍,可以参考 https://platform.openai.com/docs/api-reference/introduction ,其大概分类也是很常规的功能应用相关的,如下是它的列表介绍。

我们要学会如何使用API的话,需要了解它的相关模型概念,以及对各种处理的定义。

2、基于ChatGPT的API的C#接入

从上面的API介绍中,我们可以看到,API平台没有针对不同的语义给出不同的实现方式,只是给出了一个通用的调用方式,主要是基于输入参数,响应的数据格式的参考,具体的不同语言的应用如C#的接入,需要根据实际的格式进行对接。

主要的代码如下所示。

using RestSharp;
using System; namespace Gpt3APIExample
{
class Program
{
static void Main(string[] args)
{
// OpenAI API地址
string apiUrl = "https://api.openai.com/v1/engines/gpt-3/jobs"; // OpenAI API密钥
string apiKey = "YOUR_API_KEY"; // 创建一个RestClient对象
var client = new RestClient(apiUrl); // 创建一个RestRequest对象
var request = new RestRequest(Method.POST); // 在请求头中添加API密钥
request.AddHeader("Authorization", "Bearer " + apiKey); // 添加请求内容
request.AddJsonBody(new
{
model = "text-davinci-002",
prompt = "What is the capital of France?",
max_tokens = 100,
n = 1,
stop = null,
temperature = 0.5,
}); // 发送请求并获取响应
IRestResponse response = client.Execute(request); // 显示响应内容
Console.WriteLine(response.Content);
Console.ReadLine();
}
}
}

这个代码主要就是针对输入信息和输出的内容进行简单的包装,使用 RestSharp 的一个Http类库进行访问的包装。

而为了更好的使用ChatGPT的API处理,我们可以使用更高级一点的类库,如下面介绍的两个开源C#包装ChatGPT的类库:

https://github.com/OkGoDoIt/OpenAI-API-dotnet

https://github.com/RageAgainstThePixel/OpenAI-DotNet

我觉得他们都是很不错的,都是基于ChatGPT的API格式进行了一定程度的面向对象的包装,使得我们基于C#开发起来更方便。

例如我们基于 https://github.com/RageAgainstThePixel/OpenAI-DotNet

来查看使用代码,它的介绍也比较详细,基本上覆盖到了各个方面。

我们可以模仿来生成自己的代码即可,如下所示。

    /// <summary>
/// 基于OpenAI-DotNet的使用
/// </summary>
public class Test2
{
public static async Task ExcuteCode()
{
var api = new OpenAIClient(new OpenAIAuthentication(Constants.ApiKey)); var result = await api.CompletionsEndpoint.CreateCompletionAsync("读取图片文件的展示到窗体的C#代码", null, null, 1000, 0.1);
Log.Information(result.ToJson());
}

运行效果,可以看到输出的结果。

对于图片的生成和处理,我们也可以按照类似的API进行调用接口,如下是一段寻找图片的代码。

            var results = await api.ImagesEndPoint.GenerateImageAsync("中国布达拉宫的全景图片", 1, ImageSize.Large);
foreach (var item in results)
{
Log.Information(item);
}

为了验证图片的AI处理,我们生成两张正方形的图片,图片右下角扣掉一块空白的图片,图片格式使用PNG格式,然后调用如下代码进行替换处理。

            var imageAssetPath = "images/休息区.png";
var maskAssetPath = "images/休息区2.png";
var imageResults = await api.ImagesEndPoint.CreateImageEditAsync(Path.GetFullPath(imageAssetPath), Path.GetFullPath(maskAssetPath), "阳光明媚的室内休息区,有一个鸭子在池塘中", 1, ImageSize.Small);
foreach (var item in imageResults)
{
Log.Information(item);
}

生成后的图片效果如下所示。

生成的空白地方,填入一个所需要的区域,红色框是我加上去醒目的。

基于ChatGPT的API的C#接入研究的更多相关文章

  1. 基于微博LBS API开发的周边美图android app

    [app 不完善,就差api了] 几年之前看到过新浪微博开放API中有基于Place的API,授权后可以查看基于地理位置的一些数据,比如某个地点周边的微博动态.某个具体用户的位置动态等等.最近空余时间 ...

  2. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  3. 基于.NET Socket API 通信的综合应用

    闲谈一下,最近和客户进行对接Scoket 本地的程序作为请求方以及接受方,对接Scoket 的难度实在比较大,因为涉及到响应方返回的报文的不一致性,对于返回的报文的格式我需要做反序列化的难度增大了不少 ...

  4. 基于ArcGIS JS API的在线专题地图实现

    0 引言     专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...

  5. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  6. 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署

    部署流程概述 在微软的iis服务器上部署基于ArcGIS  Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...

  7. 基于百度地图api + AngularJS 的入门地图

    转载请注明地址:http://www.cnblogs.com/enzozo/p/4368081.html 简介: 此入门地图为简易的“广州大学城”公交寻路地图,采用很少量的AngularJS进行inp ...

  8. PHP:基于百度大脑api实现OCR文字识别

    有个项目要用到文字识别,网上找了很多资料,效果不是很好,偶然的机会,接触到百度大脑.百度大脑提供了很多解决方案,其中一个就是文字识别,百度提供了三种文字识别,分别是银行卡识别.身份证识别和通用文字识别 ...

  9. js基于谷歌地图API绘制可编辑圆形与多边形

    之前的工作中需要在谷歌地图上绘制可编辑多边形区域,所以基于谷歌地图API封装了个html页面,通过调用js绘制多边形并返回各点的经纬度坐标:当然首先你要保证你的电脑可以打开谷歌地图... 新建一个ht ...

  10. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

随机推荐

  1. bugku web2

    打开全是滑稽.... 直接查看源码(用firefox的F12来查看,其他的会注释掉)可以得到flag(抓包不知道怎么回事抓不到,不然应该也可以看到注释的flag)

  2. c++学习笔记(入门)

    1 struct和class的区别 struct成员变量(成员函数)的访问属性缺省的情况下默认为public. class成员变量(成员函数)的访问属性缺省的情况下默认为private. 2 初始化列 ...

  3. 【每日一题】【递归+int型返回值最后不接收】110. 平衡二叉树-211231/220221

    给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 . 答案: public class Solution ...

  4. 【每日一题】【归并排序/堆排序&虚拟头结点】148. 排序链表-211220/220217【出栈时不断容易产生环状链表!】

    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 . 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 方法1:归并排序+使用辅助函数 ...

  5. 【实时数仓】Day02-DWD、DIM层数据准备:各层职能、行为日志DWD层、业务日志DWD层及分流(Phoenix和HBASE)

    一.需求分析及实现思路 1.分层需求 建立数仓目的:增加数据计算的复用性 可以从半成品继续加工而成 从kafka的ODS层(数据一开始就读到了kafka)读用户行为数据和业务数据,并写回到kafka的 ...

  6. 比 JSON.stringify 快两倍的fast-json-stringify

    前言 相信大家对JSON.stringify并不陌生,通常在很多场景下都会用到这个API,最常见的就是HTTP请求中的数据传输, 因为HTTP 协议是一个文本协议,传输的格式都是字符串,但我们在代码中 ...

  7. Spring面试点汇总

    Spring面试点汇总 我们会在这里介绍我所涉及到的Spring相关的面试点内容,本篇内容持续更新 我们会介绍下述Spring的相关面试点: Spring refresh Spring bean Sp ...

  8. RocketMQ 在网易云音乐的实践

    本文作者:蒋星韬,网易云音乐服务端开发工程师. 云音乐线上场景众多,比如直播.评论.广告,各个业务线都会有消息场景比如发奖券,也会有延迟消息和事务消息场景,以及大数据做埋点数据.数据清洗.离线处理等. ...

  9. 瞧瞧别人家的API接口,那叫一个优雅

    前言 在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用. 那么问题来了,如果设计一个优雅的API接口,能够满足:安全性.可重复调用.稳定 ...

  10. OpenJudge 1.8.11 图像旋转

    11:图像旋转 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数. ...