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

对接豆包大模型

一、注册账号

豆包官网:点击跳转

二、账号认证

三、选择产品

四、选择模型

五、开通服务

六、获取密钥

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:点击跳转

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

           

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

相关文章:

  • SvelteKit 最新中文文档教程(6)—— 状态管理
  • 【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战
  • 【海螺AI视频】蓝耘智算 | AI视频新浪潮:蓝耘MaaS与海螺AI视频创作体验
  • leetcode33.搜索旋转排序数组-medium
  • 【八股文】volatile关键字的底层原理是什么
  • 实现搜索功能:第一部分
  • 穿越是时空之门(java)
  • Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
  • golang中的接口
  • 【Java进阶学习 第九篇】常用API(Array、冒泡选择排序、二分查找、正则表达式)
  • 【C++进阶】指针:从基础到实践
  • Leetcode Hot 100 79.单词搜索
  • 【spring对bean Singleton和Prototype的管理流程】
  • 英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析
  • 小程序开发中的安全问题及防护措施
  • 蓝桥与力扣刷题(蓝桥 组队)
  • E1-相亲派对(组合)
  • 【AI News | 20250319】每日AI进展
  • @Resource和@Autowire
  • Java 中 LinkedList 的底层数据结构及相关分析
  • 奥运“四朝元老”华天回国参赛,伤势未愈谨慎出战全国锦标赛
  • 中央军委决定调整组建3所军队院校
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 泽连斯基批准美乌矿产协议
  • 科创板年内第3家!健信超导IPO获受理,拟募资8.65亿
  • 国家统计局今年将在全国开展两次人口固定样本跟访调查