AI 问答 API 对接说明

我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递,同时还需要处理 Token 超出限制的问题。

AceDataCloud 提供的 AI 问答 API 针对上述情况进行了优化,在保证问答效果不变的情况下,对连续对话的实现进行了封装,对接时无需再关心 messages 的传递,也无需关心 Token 超出限制的问题(API 内部自动进行了处理),同时也提供了对话查询、修改等功能,使得整体的对接大大简化。

本文档会介绍下 AI 问答 API 的对接说明。

申请流程

要使用 API,需要先到 AI 问答 API[1] 对应页面申请对应的服务,(文章底部原文链接可进入官网)

扫码打开官网注册获免费 API 额度

扫码打开官网注册获免费 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」按钮即可进行测试,如上图所示,这里我们就得到了如下结果:

{
  "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 的代码如下:

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 的对接代码如下:

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,并正常传递 modelquestion 参数,如图所示:

对应代码如下:

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
}'

可以得到如下回答:

{
  "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?」,如图所示:

对应代码如下:

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?"
}'

结果如下:

{
  "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 样例调用代码:

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())

输出效果如下:

{"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 的流式调用代码如下:

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 样例代码:

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,如图所示:

对应代码如下:

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"
}'

运行结果如下:

{
    "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.acedata.cloud/ht05g0.png,我们直接将其作为 references 参数传递即可,同时需要注意的是,模型必须要选择支持视觉识别的模型,目前支持的是 gpt-4-vision,所以输入如下:

对应的代码如下:

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.acedata.cloud/ht05g0.png"]
}'

运行结果如下:

{
  "answer": "There are 5 apples in the picture."
}

可以看到,我们就成功得到了对应图片的回答结果。

联网问答

本 API 还支持联网模型,包括 GPT-3.5、GPT-4 均能支持,在 API 背后有一个自动搜索互联网并总结的过程,我们可以选择模型为 gpt-3.5-browsing 来体验下,如图所示:

代码如下:

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?"
}'

运行结果如下:

{
  "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,回答效果会更好。

[1]

AI 问答 API: https://platform.acedata.cloud/documents/59fb1199-6694-4afb-a222-3554d7f7d05a?inviter_id=aef91f35-f7f9-494d-bcf6-3a533440101f 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/619061.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Matlab/simulink永磁直驱风机的建模仿真

Matlab/simulink直驱永磁同步风机的建模仿真,跟随风速波动效果好,可以作为后期科研的基础模型

【recast-navigation-js】通过websocket获取navmesh数据并初始化

目录 说在前面目录结构websocket服务器前端结果 说在前面 操作系统:windows 11浏览器:edge版本 124.0.2478.97recast-navigation-js版本:0.29.0golang版本:1.21.5 目录结构 D:. │ go.mod │ go.sum │ main.go // websocket …

电视剧电影原声背景音乐,经典影视配乐片段音效合集

一、素材描述 本套影视配乐素材,大小1.89G,27个压缩文件。 二、素材目录 宰相刘罗锅配乐片段.rar 影视配乐65首.rar 太极张三丰原声.rar 东邪西毒原声配乐15首.rar 东方不败之风云再起配乐24首.rar 东方不败原声配乐16首.rar 电影大话西游原声配…

Ubuntu18.04解决有线网卡连接问题(不更新内核成功版)

https://www.realtek.com/Download/List?cate_id584 (需要翻一下) 不想自己去下载,直接去我资源里下载我上传的包就好啦(😂😂😂刚刚看了下别人下载要VIP还是自己去网站下很快的) 下载后解压,在…

Spring MVC(建立连接 + 请求)

文章目录 一、建立客户端和服务器的连接二、如何构造请求(传参)2.1 构造请求方式 参数通用注解2.2 传递单个参数2.3 传递多个参数2.4 传递数组/集合2.5 传递对象2.6 传递JSON 三、相关的其他请求操作3.1 获取URL中的参数 PathVariable3.2 上传文件 Requ…

HCIP-Datacom-ARST自选题库_07_割接【35道题】

一、单选题 1.在割接的测试阶段,符合以下哪一种情况的可以判断为割接成功? 网络承载的上层应用业务测试正常 网络设备的配置查看结果正常 网络流量路径正常 路由协议运行正常 2.在割接的测试阶段中,表明已经完成测试的标准是: IP设备的配置查看结…

Docker 直接运行一个 Alpine 镜像

由于镜像很小,下载时间往往很短,读者可以直接使用 docker run 指令直接运行一个 Alpine 容器,并指定运行的 Linux 指令,例如: PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…

QTreeView学习 branch 虚线设置

1、方法一&#xff1a; #include <QStyleFactory> ui.treeView->setStyle(QStyleFactory::create("windows")); 2、方法二&#xff1a; QString strtyle2 R"( QTreeView::branch:has-siblings:!adjoins-item { border-image: url(:/TreeViewDe…

Nios-II编程

文章目录 一硬件部分设计1Qsys2Quartus 二软件1Nios-II Eclipse 三运行项目及效果1配置 FPGA 一硬件部分设计 1Qsys 1创建一个项目 2点击 Tools 下拉菜单下的 Platform Designer 工具&#xff0c;启动 Platform Designer 后&#xff0c;点击 File-save&#xff0c;在文件名中…

易图讯智慧公安警用三维电子沙盘系统

智慧公安警用三维电子沙盘系统是一个结合现代科技手段&#xff0c;为公安部门提供全面、高效、智能的警务管理解决方案的系统。该系统以“情报大数据、指挥扁平化、勤务可视化、情指勤一体化”为设计思想&#xff0c;整合了多台设备、有无线通讯、短信平台、天网、交通平台、治…

活字格中如何打开指定文件夹

如何使用活字格打开指定文件夹 活字格是一款功能强大的电子表格软件&#xff0c;除了基本的表格计算功能之外&#xff0c;还提供了丰富的扩展功能&#xff0c;可以用来实现各种自动化操作。例如&#xff0c;我们可以使用活字格来打开指定的文件夹。 以下是具体的操作步骤&…

重学JavaScript高阶知识点(三)—— 详解Js中的内存管理

详解Js中的内存管理 1. 简介2. 内存生命周期3. JavaScript 的内存分配4. 垃圾回收 1. 简介 很多底层语言一般都有底层的内存管理接口&#xff0c;比如 C语言&#xff0c;可以调用对应的API去创建和释放内存空间。意思是需要手动去创建和释放内存空间&#xff0c;很明显&#x…

【C++11】列表初始化、右值引用的详细讲解(上)

前言 在一开始学C之前我们就简单的了解了一下C的发展历史。 相比较而言&#xff0c;C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全&#xff0c;不仅功能更强大&#xff0c;而且能提升程序员的开发效率加了许多特性&#xff0c;约140个新特性。使得C…

电商核心技术揭秘55:社群与粉丝经济的结合

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

OpenAI下周发布更新;TikTok将自动标记AIGC;智谱AI亮相2024 ICLR

OpenAI 官宣下周举办直播发布更新 OpenAI 今日凌晨官宣&#xff0c;将在当地时间 5 月 13 日上午十点&#xff08;北京时间 5 月 14 日凌晨两点&#xff09;在官网进行直播&#xff0c;届时将演示一些 ChatGPT 和 GPT-4 的更新。 OpenAI CEO Sam Altman 补充表示&#xff0c;届…

【论文润色心得】博士生的福音来啦!

&#x1f31f;【论文润色心得】博士生的福音来啦&#xff01;&#x1f393; &#x1f4da; 投稿屡遭拒绝&#xff1f;语言关难过&#xff1f;看这里&#xff0c;我找到了解决之道&#xff01;&#x1f469;‍&#x1f3eb; &#x1f4a1; 我的润色经历&#xff0c;从拒稿到接…

springboot整合rabbitmq的不同工作模式理解

前提是已经安装并启动了rabbitmq&#xff0c;并且项目已经引入rabbitmq&#xff0c;完成了配置。 不同模式所需参数不同&#xff0c;生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

excel常见图表大全

Excel图表是一种以图形形式呈现数据的工具&#xff0c;它将数字和统计信息转化为直观的视觉元素&#xff0c;如线图、柱状图、饼图等。这些图表可以帮助人们更容易地理解数据的趋势、关系和模式。 使用场景 Excel图表广泛应用于各个领域&#xff0c;包括&#xff1a; 商务分…

鸿蒙开发学习:初探【ArkUI-X】

ArkTS 是华为自研的开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配 ArkUI 框架&#xff0c;扩展了声明式 UI 、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨端应用。 ArkUI-X 进一步将 ArkUI 扩展到了多个 OS 平台…

【三十一】springboot+easyExcel实现多文件导出压缩包

互相交流入口地址 整体目录&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定义swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP实现日志操作 【…