当前位置: 首页 > article >正文

对接豆包大模型

一、注册账号

豆包官网:点击跳转

二、账号认证

三、选择产品

四、选择模型

五、开通服务

六、获取密钥

API_KEY是作为HTTP的请求的鉴权信息使用,需要作为HTTP的Authorization请求字段使用。

七、请求参数

可以知道,如果想要接入AI大模型,请求需要包含以上2个参数。

1、model

必填项,需要填入接入点的ID,格式一般可以参考官方提供的接入案例,具体的流程如下:

2、messages

必填项,需要填写消息的对话列表,是固定的格式,其中需要包含role和content,如下:

role指的是角色,分为system和user,system指的是豆包大模型,user指的是用户,大模型和用户需要分别输入对应的对话内容。

对于system的content指的是提供给大模型的提示词,对于user的content指的是提供给大模型的对话内容。

注意:豆包大模型的HTTP的请求参数是以JSON格式进行构造的,所以可以参考接入示例:

八、接入方式

可以知道豆包大模型可以采用HTTP的POST请求来进行对话,由于使用的是主流的HTTP/1.1的协议版本,支持长连接,但是如果打算在请求中包含请求body的话,一般是需要在构造HTTP请求的时候使用头部字段Content-Length : xxx  xxx是一个整数,用于记录数据长度

一般HTTP/1.1的协议版本中,客户端和服务器都需要指定请求体/响应体的长度,方便双方读取指定长度的数据。

九、响应格式

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include <netdb.h>


#include "cJSON.h"  //包含该头文件

//缓冲区大小
#define  BUFSIZE    4096

//豆包大模型API的密钥,需要修改为自己的密钥
#define  API_KEY   "c379494b-0267-443d-8460-916d403fxxxx"  

//HTTP服务的端口
#define  HTTP_PORT  80

//豆包大模型的URL
#define SERVER_URL  "/api/v3/chat/completions"

//豆包大模型的IP
#define SERVER_IP   "101.126.75.85"

//豆包大模型的域名
#define SERVER_DOMAIN "ark.cn-beijing.volces.com"

int main(int argc,char **argv)
{
    char recvbuf[BUFSIZE] ={0}; //存储响应内容
    char request[BUFSIZE] ={0}; //存储请求内容

    //1.创建TCP套接字,HTTP协议是基于TCP协议实现的
    int tcp_socket = socket(AF_INET, SOCK_STREAM, 0); 
    if(-1 == tcp_socket)
    {
        fprintf(stderr,"create tcp socket error,%s\n",strerror(errno));
        exit(-1);
    }
    
    //2.向豆包大模型的服务器发起连接请求
    struct sockaddr_in dest ={0};                           //IPv4地址格式的实例
    dest.sin_family = AF_INET;                              //IPv4协议族
    dest.sin_port   = htons(HTTP_PORT);                     //目标端口,需要转换为网络字节序
    dest.sin_addr.s_addr = inet_addr(SERVER_IP);            //目标地址,需要转换为网络字节序

    if(-1 == connect(tcp_socket,(struct sockaddr *)&dest,sizeof(dest)))
    {
        fprintf(stderr,"connect error,%s\n",strerror(errno));
        exit(-2);
    }

    printf("connect ok\n");

#if 1
    for(;;)
    {
       
        //3.连接成功后,可以向豆包大模型服务器发起请求,需要构造请求内容
        char reqbody[512] = {0};  //用于存储请求体
        
        //构造请求体,作为POST请求的一部分
        sprintf(reqbody,"{\"model\": \"doubao-1-5-lite-32k-250115\",\"messages\": [{\"role\": \"system\",\"content\": \"你是人工智能助手.\"},"
                        "{\"role\": \"user\",\"content\": \"请告诉我如何在ubuntu下面安装搜狗输入法?\"}]}");
        
        //构造POST请求
        sprintf(request,"POST %s HTTP/1.1\r\n"                  //请求行
                        "Host: %s\r\n"                          //主机域名
                        "Content-Type: application/json\r\n"    //请求体类型
                        "Content-Length: %d\r\n"                //请求体长度
                        "Authorization: Bearer %s\r\n"          //鉴权信息
                        "\n"                                    //空行
                        "%s\r\n",                               //请求体内容
                        SERVER_URL,SERVER_DOMAIN,strlen(reqbody),API_KEY,reqbody);

        //输出POST请求,用于调试             
        printf("%s\n",request);

        //4.发送POST请求
        send(tcp_socket,request,strlen(request),0); 
        printf("send ok\n");    

        //5.等待豆包大模型的响应内容  先返回响应头部,再返回响应Body
        sleep(8);   
        recv(tcp_socket,recvbuf,sizeof(recvbuf),0); //读取响应头部,默认会阻塞
        printf("[1]%s\n",recvbuf);                  //输出响应内容
   
        char *pstr = strstr(recvbuf,"{");   
        

        //6.把响应体中的JSON格式的字符串进行转换
        cJSON *root = cJSON_Parse(pstr);   //把存储了JSON格式的字符串转换为JSON格式
            
        char *string = cJSON_Print(root);     //把转换为JSON格式的数据以JSON格式输出
            
        printf("%s\n",string);                //测试是否成功的把字符串转换为JSON格式
        
        break;
    }
#endif   
    
    return 0;
}

完整demo:点击跳转

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 


http://www.kler.cn/a/596107.html

相关文章:

  • 机器学习——分类、回归、聚类、LASSO回归、Ridge回归(自用)
  • 深入理解 Redis SDS:高效字符串存储的秘密
  • PostgreSQL 常用函数 覆盖九成场景
  • GitHub Copilot Extensions:解锁开发者新能力
  • 人工智能之数学基础:线性方程组求解的得力助手——增广矩阵
  • Kafka消息自定义序列化
  • golang接口用法-代码案例
  • vulhub靶场matrix-breakout-2-morpheus
  • java设计模式之工厂模式《铸剑风云录》
  • vue3:ref , reactive
  • 论华为 Pura X 折叠屏性能检测
  • S32K144外设实验(三):ADC单通道连续采样(中断)
  • AudioTrack
  • 树莓集团数字产业布局解读:战略+商业双驱动
  • 【数据挖掘】Python基础环境安装配置
  • 每日一题--C与C++的差别
  • Mac 上开发 Ragflow
  • PyCharm找不到包?一文解决 No module named报错~
  • 当DeepSeek走进生活:一场颠覆日常的智能革命
  • Trae AI 上新 SSHremote:服务器 Python 接口日志排查实战指南