AI Chat API 对接说明
AI Chat API 对接说明
我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages
字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递,同时还需要处理 Token 超出限制的问题。
AceDataCloud 提供的 AI 问答 API 针对上述情况进行了优化,在保证问答效果不变的情况下,对连续对话的实现进行了封装,对接时无需再关心 messages 的传递,也无需关心 Token 超出限制的问题(API 内部自动进行了处理),同时也提供了对话查询、修改等功能,使得整体的对接大大简化。
本文档会介绍下 AI 问答 API 的对接说明。
申请流程
要使用 API,需要先到 AI 问答 API 对应页面申请对应的服务,进入页面之后,点击「Acquire」按钮,如图所示:
如果你尚未登录或注册,会自动跳转到登录页面邀请您来注册和登录,登录注册之后会自动返回当前页面。
在首次申请时会有免费额度赠送,可以免费使用该 API。
基本使用
首先先了解下基本的使用方式,就是输入问题,获得回答,只需要简单地传递一个 question
字段,并指定相应模型即可。
比如说询问:“What's your name?”,我们接下来就可以在界面上填写对应的内容,如图所示:
可以看到这里我们设置了 Request Headers,包括:
accept
:想要接收怎样格式的响应结果,这里填写为application/json
,即 JSON 格式。authorization
:调用 API 的密钥,申请之后可以直接下拉选择。
另外设置了 Request Body,包括:
model
:模型的选择,比如主流的 GPT 3.5,GPT 4 等。question
:需要询问的问题,可以是任意的纯文本。
选择之后,可以发现右侧也生成了对应代码,如图所示:
点击「Try」按钮即可进行测试,如上图所示,这里我们就得到了如下结果:
json { "answer": "I am an AI language model developed by OpenAI and I don't have a personal name. However, you can call me GPT or simply Chatbot. How can I assist you today?" }
可以看到,这里返回的结果中有一个 answer
字段,就是该问题的回答。我们可以输入任意问题,就可以得到任意的回答。
如果你不需要任何多轮对话的支持,这个 API 可以极大方便你的对接。
另外如果想生成对应的对接代码,可以直接复制生成,例如 CURL 的代码如下:
shell curl -X POST 'https://api.acedata.cloud/aichat/conversations' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{ "model": "gpt-3.5", "question": "What's your name?" }'
Python 的对接代码如下:
```python import requests
url = "https://api.acedata.cloud/aichat/conversations"
headers = { "accept": "application/json", "authorization": "Bearer {token}", "content-type": "application/json" }
payload = { "model": "gpt-3.5", "question": "What's your name?" }
response = requests.post(url, json=payload, headers=headers) print(response.text) ```
多轮对话
如果您想要对接多轮对话功能,需要传递一个额外参数 stateful
,其值为 true
,后续的每次请求都要携带该参数。传递了 stateful
参数之后,API 会额外返回一个 id
参数,代表当前对话的 ID,后续我们只需要将该 ID 作为参数传递,就可以轻松实现多轮对话。
下面我们来演示下具体的操作。
第一次请求,将 stateful
参数设置为 true
,并正常传递 model
和 question
参数,如图所示:
对应代码如下:
shell curl -X POST 'https://api.acedata.cloud/aichat/conversations' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{ "model": "gpt-3.5", "question": "What's your name?", "stateful": true }'
可以得到如下回答:
json { "answer": "I am an AI language model created by OpenAI and I don't have a personal name. You can simply call me OpenAI or ChatGPT. How can I assist you today?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916" }
第二次请求,将第一次请求返回的 id
字段作为参数传递,同时 stateful
参数依然设置为 true
,询问「What I asked you just now?」,如图所示:
对应代码如下:
shell curl -X POST 'https://api.acedata.cloud/aichat/conversations' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{ "model": "gpt-3.5", "stateful": true, "id": "7cdb293b-2267-4979-a1ec-48d9ad149916", "question": "What I asked you just now?" }'
结果如下:
json { "answer": "You asked me what my name is. As an AI language model, I do not possess a personal identity, so I don't have a specific name. However, you can refer to me as OpenAI or ChatGPT, the names used for this AI model. Is there anything else I can help you with?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916" }
可以看到,就可以根据上下文回答对应的问题了。
流式响应
该接口也支持流式响应,这对网页对接十分有用,可以让网页实现逐字显示效果。
如果想流式返回响应,可以更改请求头里面的 accept
参数,修改为 application/x-ndjson
。
修改如图所示,不过调用代码需要有对应的更改才能支持流式响应。
将 accept
修改为 application/x-ndjson
之后,API 将逐行返回对应的 JSON 数据,在代码层面我们需要做相应的修改来获得逐行的结果。
Python 样例调用代码:
```python import requests
url = "https://api.acedata.cloud/aichat/conversations"
headers = { "accept": "application/x-ndjson", "authorization": "Bearer {token}", "content-type": "application/json" }
payload = { "model": "gpt-3.5", "stateful": True, "id": "7cdb293b-2267-4979-a1ec-48d9ad149916", "question": "Hello" }
response = requests.post(url, json=payload, headers=headers, stream=True) for line in response.iter_lines(): print(line.decode()) ```
输出效果如下:
json {"answer": "Hello", "delta_answer": "Hello", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How", "delta_answer": " How", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How can", "delta_answer": " can", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How can I", "delta_answer": " I", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How can I assist", "delta_answer": " assist", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How can I assist you", "delta_answer": " you", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How can I assist you today", "delta_answer": " today", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"} {"answer": "Hello! How can I assist you today?", "delta_answer": "?", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
可以看到,响应里面的 answer
即为最新的回答内容,delta_answer
则是新增的回答内容,您可以根据结果来对接到您的系统中。
JavaScript 也是支持的,比如 Node.js 的流式调用代码如下:
```javascript const axios = require("axios");
const url = "https://api.acedata.cloud/aichat/conversations"; const headers = { "Content-Type": "application/json", Accept: "application/x-ndjson", Authorization: "Bearer {token}", }; const body = { question: "Hello", model: "gpt-3.5", stateful: true, };
axios .post(url, body, { headers: headers, responseType: "stream" }) .then((response) => { console.log(response.status); response.data.on("data", (chunk) => { console.log(chunk.toString()); }); }) .catch((error) => { console.error(error); }); ```
Java 样例代码:
```java String url = "https://api.acedata.cloud/aichat/conversations"; OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"question\": \"Hello\", \"stateful\": true, \"model\": \"gpt-3.5\"}"); Request request = new Request.Builder() .url(url) .post(body) .addHeader("Content-Type", "application/json") .addHeader("Accept", "application/x-ndjson") .addHeader("Authorization", "Bearer {token}") .build();
client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); }
@Override
public void onResponse(Call call, Response response) throws IOException {if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);try (BufferedReader br = new BufferedReader(new InputStreamReader(response.body().byteStream(), "UTF-8"))) {String responseLine;while ((responseLine = br.readLine()) != null) {System.out.println(responseLine);}}
}
}); ```
其他语言可以另外自行改写,原理都是一样的。
模型预设
我们知道,OpenAI 相关的 API 有对应的 system_prompt
的概念,就是给整个模型设置一个预设,比如它叫什么名字等等。本 AI 问答 API 也暴露了这个参数,叫做 preset
,利用它我们可以给模型增加预设,我们用一个例子来体验下:
这里我们额外添加 preset
字段,内容为 You are a professional artist
,如图所示:
对应代码如下:
shell curl -X POST 'https://api.acedata.cloud/aichat/conversations' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{ "model": "gpt-3.5", "stateful": true, "question": "What can you help me?", "preset": "You are a professional artist" }'
运行结果如下:
python { "answer": "As a professional artist, I can offer a range of services and assistance depending on your specific needs. Here are a few ways I can help you:\n\n1. Custom Artwork: If you have a specific vision or idea, I can create custom artwork for you. This can include paintings, drawings, digital art, or any other medium you prefer.\n\n2. Commissioned Pieces: If you have a specific subject or concept in mind, I can create commissioned art pieces tailored to your preferences. This could be for personal enjoyment or as a unique gift for someone special.\n\n3. Art Consultation: If you need guidance on art selection, interior design, or how to showcase and display art in your space, I can provide professional advice to help enhance your aesthetic sense and create a cohesive look." }
可以看到这里我们告诉 GPT 他是一个机器人,然后问它可以为我们做什么,他就可以扮演一个机器人的角色来回答问题了。
图片识别
本 AI 也能支持添加附件进行图片识别,通过 references
传递对应图片链接即可,比如我这里有一张苹果的图片,如图所示:
该图片的链接是 https://cdn.zhishuyun.com/9882e3b3-6d22-4a87-a03c-746207db2f43.png,我们直接将其作为 references
参数传递即可,同时需要注意的是,模型必须要选择支持视觉识别的模型,目前支持的是 gpt-4-vision
,所以输入如下:
对应的代码如下:
shell curl -X POST 'https://api.acedata.cloud/aichat/conversations' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{ "model": "gpt-4-vision", "question": "How many apples in the picture?", "references": ["https://cdn.zhishuyun.com/9882e3b3-6d22-4a87-a03c-746207db2f43.png"] }'
运行结果如下:
json { "answer": "There are 5 apples in the picture." }
可以看到,我们就成功得到了对应图片的回答结果。
联网问答
本 API 还支持联网模型,包括 GPT-3.5、GPT-4 均能支持,在 API 背后有一个自动搜索互联网并总结的过程,我们可以选择模型为 gpt-3.5-browsing
来体验下,如图所示:
代码如下:
shell curl -X POST 'https://api.acedata.cloud/aichat/conversations' \ -H 'accept: application/json' \ -H 'authorization: Bearer {token}' \ -H 'content-type: application/json' \ -d '{ "model": "gpt-3.5-browsing", "question": "What's the weather of New York today?" }'
运行结果如下:
json { "answer": "The weather in New York today is as follows:\n- Current Temperature: 16°C (60°F)\n- High: 16°C (60°F)\n- Low: 10°C (50°F)\n- Humidity: 47%\n- UV Index: 6 of 11\n- Sunrise: 5:42 am\n- Sunset: 8:02 pm\n\nIt's overcast with a chance of occasional showers overnight, and the chance of rain is 50%.\nFor more details, you can visit [The Weather Channel](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nIs there anything else you'd like to know?" }
可以看到,这里它自动联网搜索了 The Weather Channel 网站,并获得了里面的信息,然后进一步返回了实时结果。
如果对模型回答质量有更高要求,可以将模型更换为
gpt-4-browsing
,回答效果会更好。
相关文章:

AI Chat API 对接说明
AI Chat API 对接说明 我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递࿰…...
Thread线程基础使用
多线程目的:其实就是希望“并行”执行多任务,提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…...

【Linux】结构化命令
结构化命令structured command:允许脚本根据条件跳过部分命令,改变执行流程。 1、if-then语句 格式1: if command then commands fi 格式2: if command; then commands fi 运行if之后的command命令,如果它的退出状态码…...

ElasticSearch01-概述
零、文章目录 ElasticSearch01-概述 1、Elastic Stack (1)简介 官网地址:https://www.elastic.co/cn/ELK是一个免费开源的日志分析架构技术栈总称,包含三大基础组件,分别是Elasticsearch、Logstash、Kibana。但实际…...
docker xxxx is using its referenced image ea06665f255d
Error response from daemon: conflict: unable to remove repository reference “registrxxxxxx” (must force) - container 9642fd1fd4a0 is using its referenced image ea06665f255d 这个错误表明你尝试删除的镜像正在被一个容器使用,因此无法删除。要解决这…...
Vue 2 中 v-text 和 v-html 指令的使用详解
目录 Vue 2 中 v-text 和 v-html 指令的使用详解 v-text 指令 简介 基本语法 示例 1:基础用法 特点 v-html 指令 简介 基本语法 示例 2:基础用法 注意事项 区别与选择指南 何时使用 最佳实践 Vue 2 中 v-text 和 v-html 指令的使用详解 V…...
高级Python游戏开发:创建一款多人对战坦克大战
在本教程中,我们将用Python的Pygame库开发一款高级的坦克大战游戏。这款游戏支持多人对战、碰撞检测、子弹射击以及地图障碍生成,适合作为学习Python高级游戏开发的练习项目。 一、游戏功能概述 多人对战模式:玩家可以操作坦克,在同一屏幕上互相攻击。子弹射击:坦克可以发…...

数据结构_拓扑排序
拓扑排序 (所有点按照先后顺序排序) 1.先找到入度为0的点,记录之后,删除这个点和它的出边; 2.若有两个可选,随便选择一个 例 a的入度为0,选a [a] 随便选一个 [a,e] 再找入度为0的点 再选c 最后选d 拓…...
Edge SCDN 边缘安全加速有什么用?
Edge SCDN是最新推出的边缘安全加速服务,它是一种融合了安全防护和内容分发加速功能的网络服务技术,通过在网络边缘部署服务器节点,来优化内容的传输和用户的访问体验,同时保障网络安全。 抵御 DDoS 攻击: Edge SCDN …...

被狗咬住怎么让它松口?
当遭遇狗咬住的惊险状况,保持冷静是首要原则,慌乱只会让事态愈发糟糕。因为狗能敏锐感知人类的情绪,你的镇定能避免它因你的恐惧而愈发兴奋或紧张。 切勿盲目地用力拉扯被咬住的部位。狗的咬合力颇为强大,强行拉扯可能致使伤口撕裂…...
MySQL迁移SQLite 借助PYTHON脚本
使用 Python 脚本将 MySQL 数据库迁移到 SQLite 是一种灵活且强大的方法。 下面是一个基本的脚本示例,使用 pandas 和 sqlite3 库来实现这一过程。 这个脚本假设你已经安装了 pandas 和 mysql-connector-python 库。 步骤 安装必要的库: 如果尚未安装ÿ…...
Python什么是动态调用方法?What is Dynamic Method Invocation? (中英双语)
什么是动态调用方法? 动态调用方法指通过方法或属性的名称,在运行时而非编译时调用对象的方法或访问其属性。换句话说,在编写代码时,方法名或属性名可以是变量,只有在程序运行时才能确定调用的内容。这种特性允许程序…...

Cesium中实现仿ArcGIS三维的动态图层加载方式
Cesium 加载 ArcGIS 动态图层的方式 如果你在 Cesium 中加载过 ArcGIS 的动态图层,你会发现,Cesium 对于动态图层仍然采用类似切片图层的逻辑进行加载。也就是每个固定的瓦片 export 一张图片。 这样会造成一些问题: 请求量大,…...

数据冒险、控制冒险、结构冒险
计算机组成原理 数据冒险、控制冒险、结构冒险 对所有用户(所有程序员)可见:PSW、PC、通用寄存器 PSW(条件转移需要用到,程序员使用CMP指令的时候也需要用到所以是对用户可见)PC(跳转指令需要…...

TCA9555芯片手册解读(6)
接前一篇文章:TCA9555芯片手册解读(5) 二、详述 7. 上电复位 当电源(从0V)施加到VCC时,内部通电复位将TCA9555保持在复位状态,直到VCC达到VPOR。此时,重启条件被释放,T…...
NodeJs-fs模块
fs 全称为 file system ,称之为 文件系统 ,是 Node.js 中的 内置模块, fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动,内容的写入读取等以及文件夹相关操作 写入文件 异步写入 // 导入fs模块const f…...

Transformer: Attention Is All You Need (2017) 翻译
论文:Attention Is All You Need 下载地址如下: download: Transformer Attention Is All you need Attention Is All You Need 中文 《Attention Is All You Need》是《Transformer》模型的开创性论文,提出了一种全新的基于注意力机制的架构…...

【记录】Django解决与VUE跨域问题
1 梗概 这里记录Django与VUE的跨域问题解决方法,主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…...
Java 常见Exception异常解决方法
在Java编程中,异常处理是确保程序稳定性和健壮性的重要部分。了解常见的异常类型及其解决方法,可以帮助你编写更加健壮的代码。以下是一些常见的Java异常及其解决方法: NullPointerException:空指针异常 原因:尝试访问…...
东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南
东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 文章目录 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 一 TongWeb V7二 Spring Boot JAR 配置文件三 修改 maven 依赖四 docker compose 启动项目五 查看 docker 信息 本文详细讲解了如何在 Docker 环境中…...
gopool 源码分析
gopool gopool是字节跳动开源节流的gopkg包中协程池的一个实现。 关键结构 协程池: type pool struct {// The name of the poolname string// capacity of the pool, the maximum number of goroutines that are actually working// 协程池的最大容量cap int32…...
kubeadm安装k8s
1、环境准备 1.1、升级系统内核 参考另一篇文章:https://blog.csdn.net/u012533920/article/details/148457715?spm1011.2415.3001.5331 1.2、设置Hostname cat <<EOF > /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhos…...
使用Caddy在Ubuntu 22.04上配置HTTPS反向代理
使用Caddy在Ubuntu 22.04上配置HTTPS反向代理(无域名/IP验证+密码保护) 一、 环境说明 环境说明:测试环境,生产环境请谨慎OS: Ubuntu 22.04.1 LTSCaddy版本:v2.10.0服务器IP: 192.168.3.88(内网)公网IP: 10.2.3.11(测试虚拟)代理端口: 9080后端服务: http://192.168.3…...

C#使用MindFusion.Diagramming框架绘制流程图(2):流程图示例
上一节我们初步介绍MindFusion.Diagramming框架 C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型-CSDN博客 这里演示示例程序: 新建Windows窗体应用程序FlowDiagramDemo,将默认的Form1重命名为FormFlowDiagram. 右键FlowDiagramDemo管理NuGet程序包 输入MindFusio…...

【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录 引言Redisson基本信息Redisson网站 Redisson应用…...

立志成为一名优秀测试开发工程师(第十一天)—Postman动态参数/变量、文件上传、断言策略、批量执行及CSV/JSON数据驱动测试
目录 一、Postman接口关联与正则表达式应用 1.正则表达式解析 2.提取鉴权码。 二、Postman内置动态参数以及自定义动态参数 1.常见内置动态参数: 2.自定义动态参数: 3.“编辑”接口练习 三、图片上传 1.文件的上传 2.上传后内容的验证 四、po…...
MS2691 全频段、多模导航、射频低噪声放大器芯片,应用于导航仪 双频测量仪
MS2691 全频段、多模导航、射频低噪声放大器芯片,应用于导航仪 双频测量仪 产品简述 MS2691 是一款具有 1164MHz 1615MHz 全频段、低功耗的低噪声放大器芯片。该芯片通过对外围电路的简单配置,使得频带具有宽带或窄带特性。支持不同频段的各种导…...

sqlsugar WhereIF条件的大于等于和等于查出来的坑
一、如下图所示,当我用 .WhereIF(input.Plancontroltype > 0, u > u.Plancontroltype (DnjqPlancontroltype)input.Plancontroltype) 这里面用等于的时候,返回结果一条数据都没有。 上图中生成的SQL如下: SELECT id AS Id ,code AS …...

【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程
目录 1 -> 同步云函数/云对象 1.1 -> 同步单个云函数/云对象 1.2 -> 批量同步云函数/云对象 2 -> 同步云数据库 2.1 -> 同步单个对象类型 2.2 -> 批量同步对象类型 3 -> 一键同步云侧代码 1 -> 同步云函数/云对象 说明 对于使用DevEco Studio…...

RockyLinux9.6搭建k8s集群
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...