V1.1 / Guide / Chinese only

TXSDK_LLM开发指南

Chinese only

TXSDK LLM开发指南

logo

责任与版权

责任限制

本文档内容仅供参考。珠海泰芯半导体有限公司(以下简称“泰芯”)未对本文档信息的准确性或完整性作出任何明示或暗示的陈述或保证,且不对使用本文件信息所产生的后果承担任何责任。

泰芯保留在不另行通知对本文件进行修改、改进或其他变更的权利。

泰芯没有为客户产品的应用、设计验证提供协助的义务。客户应自行对其应用的设计、验证和测试负责,并确保其应用符合所有法律、法规及安全相关的要求。

如因客户未遵守本协议导致任何损害、费用、损失及/或责任,泰芯不承担任何责任;同时,客户应全额赔偿因客户未遵守本协议而给泰芯造成的任何损害、费用、损失及/或责任。

版权声明

未经泰芯书面同意,任何一方不得为商业目的修改、改编、变更、翻译或基于本文件创建衍生作品。

未经泰芯书面同意,任何一方不得向第三方披露或分发本文件中提及的任何部分或全部源代码、SDK、二进制文件和目标代码。

任何一方不得修改、反向工程、反汇编、反编译或以其他方式试图发掘任何非源代码部分的SDK,包括但不限于预编译的二进制文件和目标代码。

此外,任何可能侵犯泰芯或其他知识产权所有者权利的行为也均被严格禁止。

对于实施上述侵权行为的主体,泰芯有权依据中华人民共和国法律或其他可能适用的法律、国际条约采取必要的法律措施,包括但不限于对侵权人提起诉讼或仲裁,或申请法律强制措施。

珠海泰芯半导体有限公司

2024年09月24日

修订记录

日期

版本

描 述

修订人

2026-05-07

V1.1

2025-04-25

V1.0

TX

1. 概述

TXSDK是泰芯半导体发布的WiFi/音视频系列芯片开发SDK。本文档是TXSDK的LLM功能开发指南,介绍了SDK的LLM库所支持的功能以及使用方法。

LLM库实现了豆包火山引擎的大语言模型(多模态)、语音识别、语音合成、文生图接入,智能体平台扣子(coze)接入。支持应用基于开放接口进行接入大模型的二次开发,可以实现AI语音对话、拍照识别、图片生成等功能。

2. LLM库介绍

LLM 库内部分为 会话层(session)、平台层(platform)、传输层(transfer),如图1所示。

图1

session层将不同类型的模型进行分类,对外提供调用接口,方便应用对不同的会话进行初始化、配置、资源回收以及数据收发。对内负责会话管理、状态机轮询、数据重传、断线重连等业务。

platform层对接不同云平台的具体协议,向上提供协议解析、分包、组包等功能。

transfer层提供基于 http(s)和websocket(s)协议的通信接口,支持结构化元数据传输。包含连接管理、数据收发、分片处理等功能。该层对外开放,具体说明可见另一份文档TXSDK_LLM_TRANSFER。

3. 接口说明

3.1. 数据结构

3.1.1. 宏

#define LLM_SESSION_MAX () //最大会话个数,根据实际设置

3.1.2. 枚举

(1)llm_xxx_config 传入参数,用于配置不同层级的参数,如平台参数、传输参数等。

typedef enum {

LLM_CONFIG_TYPE_MODEL, //platform层配置

LLM_CONFIG_TYPE_TRANS, //transfer层配置

} llm_cfg_type;

(2)llm_xxx_send 传入参数,用于对数据流有顺序要求的场景,如STT音频流等。

typedef enum {

LLM_DATA_STATE_START = 1, //首帧

LLM_DATA_STATE_MIDDLE = 2, //中间帧

LLM_DATA_STATE_END = 3, //尾帧

} llm_data_state;

(3)llm_xxx_send 传入参数,用于标识数据类型。

typedef enum {

LLM_DATA_TYPE_MGMT = 0, //管理帧

LLM_DATA_TYPE_AUDIO = 1, //音频

LLM_DATA_TYPE_FILE = 2, //文件

LLM_DATA_TYPE_TEXT = 3, //文本

LLM_DATA_TYPE_RAW = 4, //原始数据

LLM_DATA_TYPE_TTS = 5, //文本(TTS专用)

LLM_DATA_TYPE_IMAGE = 6, //图像

} llm_data_type;

(4)图片格式枚举。

typedef enum {

LLM_IMAGE_TYPE_JPEG = 0,

LLM_IMAGE_TYPE_PNG = 1,

LLM_IMAGE_TYPE_GIF = 2,

LLM_IMAGE_TYPE_WEBP = 3,

LLM_IMAGE_TYPE_BMP = 4,

LLM_IMAGE_TYPE_TIFF = 5,

LLM_IMAGE_TYPE_ICO = 6,

LLM_IMAGE_TYPE_DIB = 7,

LLM_IMAGE_TYPE_ICNS = 8,

LLM_IMAGE_TYPE_SGI = 9,

LLM_IMAGE_TYPE_JPEG2000 = 10,

LLM_IMAGE_TYPE_HEIC = 11,

LLM_IMAGE_TYPE_HEIF = 12,

} llm_image_type;

  1. LLM库的事件机制需要在session初始化为session注册llm_evt_cb回调。事件回调是内部实时上抛的,不可阻塞,阻塞超过 10个 ticks会警告。

enum llm_event {

LLM_EVENT_UNKNOWN = 0,

//general

LLM_EVENT_CONNECTED = 1, // 已连接

LLM_EVENT_DISCONNECT = 2, // 已断开

LLM_EVENT_CONN_ERR = 3, // 连接错误

LLM_EVENT_TX_ERR = 4, // TX 错误

LLM_EVENT_RX_ERR = 5, // RX 错误

LLM_EVENT_TIMEOUT = 6, // 超时

LLM_EVENT_STT_RESULT = 7,

LLM_EVENT_TTS_RESULT = 8,

LLM_EVENT_CHAT_RESULT = 9,

LLM_EVENT_TTI_RESULT = 10,

LLM_EVENT_ERROR_MSG = 11, // 服务器返回错误信息

LLM_EVENT_FUNC_CALL = 12, // Function_calling

LLM_EVENT_CUSTOMIZE = 13, // 自定义(内部未知事件)

//llm_tts

LLM_EVENT_TTS_AUDIO_START = 14, // 语音开始

//llm_sts

LLM_EVENT_VAD_RESULT = 15, // VAD 结果

LLM_EVENT_DIALOGUE_START = 16, // 对话开始

LLM_EVENT_DIALOGUE_TIMEOUT = 17, // 对话超时

LLM_EVENT_DIALOGUE_END = 18, // 对话结束

LLM_EVENT_INTERRUPT_END = 19, // 打断结束

LLM_EVENT_WAITING_END = 20, // 等待通知服务器结束

LLM_EVENT_UPLOAD_FILE_RESULT = 21, // 上传文件结果

LLM_EVENT_CONVERSATION_ID = 22, // 上传conversation_id

LLM_EVENT_MPLAYER_RESULT = 23, // MediaPlayer,例如mp3

LLM_EVENT_IOT_RESULT = 24, // IOT 控制

};

3.1.3. 结构体

(1)llm_global_init传入参数,用于指定LLM 库全局资源初始化,如模型启用、线程分配等。

struct llm_model {

const char *name; //模型名称,可自定义

const struct llm_model_data *m; //模型操作集,可在对应头文件查看

};

struct llm_global_param {

uint16 task_reuse: 1, rev: 15; //任务复用

uint16 model_count; //模型个数

const struct llm_model *models; //模型列表

};

(2)llm_chat_init传入参数,用于配置大语言模型的会话参数,如消息队列容量、图像处理上限、流式响应控制及事件回调等。

struct llm_chat_sparam {

uint16 qmsg_tx_cnt; // TX 队列大小

uint16 qmsg_rx_cnt; // RX 队列大小

uint16 image_max_cnt; // 图片队列大小(图像识别)

uint16 reply_fragment_size; // 文本分片大小(仅流式有效)

uint16 cb_max_size; // 流式接收缓冲区大小

void *evt_cb; // 事件回调函数指针

};

(3)llm_stt_init传入参数,用于配置语音转文本模型的会话参数,如消息队列容量、流式响应控制及事件回调等,转换结果通过事件回调方式上报。

struct llm_stt_sparam {

uint16 qmsg_tx_cnt; // TX 队列大小

uint16 cb_max_size; // 流式接收缓冲区大小

void *evt_cb; // 事件回调函数指针

};

(4)llm_tts_init传入参数,用于配置文本转语音模型的会话参数,如消息队列容量、音频缓冲区大小、流式响应控制及事件回调等。

struct llm_tts_sparam {

uint16 qmsg_tx_cnt; // TX 队列大小

uint16 rx_buff_size; // 音频缓冲区大小

uint16 cb_max_size; // 流式接收缓冲区大小

void *evt_cb; // 事件回调函数指针

};

(5)llm_tti_init传入参数,用于配置文本转图像模型的会话参数,如消息队列容量、流式接收缓冲区大小及事件回调等。

struct llm_tti_sparam {

uint16 qmsg_tx_cnt; // TX 队列大小

uint16 cb_max_size; // 流式接收缓冲区大小

void *evt_cb; // 事件回调函数指针

};

(6)llm_sts_init传入参数,用于配置智能体的会话参数,如消息队列容量、音频缓冲区大小、流式响应控制及事件回调等。

struct llm_sts_sparam {

uint16 qmsg_tx_cnt; // TX 队列大小

uint16 rx_buff_size; // 音频缓冲区大小

uint16 cb_max_size; // 流式接收缓冲区大小

void *evt_cb; // 事件回调函数指针

};

3.2. API介绍

3.2.1. 基础类

  1. 函数原型:

int32 llm_global_init(struct llm_global_param *global);

功能描述:LLM 全局资源初始化。

参数说明:

①global:见3.1.3结构体 llm_global_param 说明。

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_global_deinit(void);

功能描述:LLM 全局资源回收。

参数说明:

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

3.2.2. llm_chat类

llm_chat 是大语言模型的一种抽象类,负责管理与云端大语言模型通信。数据上下行均以文本的形式进行交互,LLM库会自动完成数据的序列化和反序列化。LLM库支持流式和非流式回复,其中,流式回复支持对内容进行了切片,应用可通过设置llm_chat_sparam.reply_fragment_size控制切片大小,如设置 40 个字符进行分片,LLM库内部会自动识别 40 个字符内完整的断句并上报。

  1. 函数原型:

void *llm_chat_init(char *llm_name, struct llm_chat_sparam *sparam);

功能描述:创建大语言模型 session。

参数说明:

①llm_name:模型名称,需要在 global 配置的列表中;

②sparam:见3.1.3结构体 llm_chat_param 说明;

返回值:

①成功:返回 session 句柄;

②失败:NULL;

  1. 函数原型:

int32 llm_chat_deinit(void *chat_hdl);

功能描述:销毁大语言模型 session。

参数说明:

①chat_hdl:session 句柄。

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_chat_send(void *chat_hdl, llm_data_type type, llm_data_state state, char *text, uint32 text_len);

功能描述:数据发送。

参数说明:

①chat_hdl:session 句柄;

②type:数据类型,填LLM_DATA_TYPE_TEXT;

③state:数据状态,见3.1.2枚举 llm_data_state 说明;

④text:文本;

⑤text_len:文本长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_chat_recv(void *chat_hdl, char *buff, uint32 buff_size, uint8 flags);

功能描述:数据接收。

参数说明:

①chat_hdl:session 句柄;

②buff:接收的buff;

③buff_size:接收的长度;

④flags:预留位,暂时没有使用;

返回值:

①成功:实际接收长度,若返回 0,则说明传入的 buff 大小不足以存放数据;

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_chat_set_role(void *chat_hdl, char *role);

功能描述:prompt预设。

参数说明:

①chat_hdl:session 句柄;

②role:提示词,该指针内存不可销毁;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_chat_config(void *chat_hdl, llm_cfg_type type, void *cfg, uint32 cfg_size);

功能描述:platform 和 transfer 参数配置。

参数说明:

①chat_hdl:session 句柄;

②type:配置类型,见3.1.2枚举 llm_cfg_type 说明;

③cfg:配置信息;

④cfg_size:配置信息大小;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_chat_upload_file(void *chat_hdl, llm_data_type data_type, uint32 param, char *data, uint32 data_len);

功能描述:文件上传,多模态实现(如图片)。

参数说明:

①chat_hdl:session 句柄。

②data_type:数据类型,见3.1.2枚举 llm_data_type 说明;

③param:数据类型详细参数,如若数据类型为LLM_DATA_TYPE_IMAGE,该参数对应3.1.2枚举中 llm_image_type类型;

④data:待上传数据;

⑤data_len:待上传数据长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_chat_interrupt(void *chat_hdl, uint32 timeout);

功能描述:对话打断,回收上次请求资源。

参数说明:

①chat_hdl:session 句柄。

②timeout:超时时间,单位毫秒,若为 0 则阻塞直至完成;

返回值:

①成功:RET_OK(0);

②失败:错误返回 RET_ERR(-1),超时返回LLME_WAIT_TIMEOUT(-5);

3.2.3. llm_stt类

llm_stt是面向语音到文本(Speak-to-Text)任务的轻量级抽象类,负责管理与云端语音识别模型通信。数据上行为音频,下行为文本,LLM库会自动完成数据的序列化和反序列化。本会话对上传的音频帧顺序有严格的固定,发送首帧对应 3.1.2枚举llm_data_state中的LLM_DATA_STATE_START,通常是用来触发平台层同步平台配置的,buff可携带数据也可以传空;中间帧对应LLM_DATA_STATE_MIDDLE,buff必须携带数据;尾帧对应LLM_DATA_STATE_END,buff必须携带数据。

  1. 函数原型:

void *llm_stt_init(char *llm_name, struct llm_stt_sparam *sparam);

功能描述:创建 STT 大模型 session。

参数说明:

①llm_name:模型名称,需要在 global 配置的列表中;

②sparam:见3.1.3结构体 llm_stt_param 说明;

返回值:

①成功:返回 session 句柄;

②失败:NULL;

  1. 函数原型:

int32 llm_stt_deinit(void *stt_hdl);

功能描述:销毁 STT 大模型 session。

参数说明:

①stt_hdl:session 句柄。

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_stt_send(void *stt_hdl, llm_data_type type, llm_data_state state, char *audio, uint32 audio_len);

功能描述:数据发送。

参数说明:

①stt_hdl:session 句柄;

②type:数据类型,填LLM_DATA_TYPE_AUDIO;

③state:数据状态,见3.1.2枚举 llm_data_state 说明;

④audio:音频;

⑤audio_len:音频长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_stt_recv(void *stt_hdl, char *buff, uint32 buff_size, uint8 flags);

功能描述:数据接收,预留函数,目前空实现,STT结果以事件形式上报。

参数说明:

①stt_hdl:session 句柄;

②buff:接收的buff;

③buff_size:接收的长度;

④flags:预留位,暂时没有使用;

返回值:

①成功:实际接收长度;

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_stt_config(void *stt_hdl, llm_cfg_type type, void *cfg, uint32 cfg_size);

功能描述:platform 和 transfer 参数配置。

参数说明:

①stt_hdl:session 句柄;

② type:配置类型,见3.1.2枚举 llm_cfg_type 说明;

③cfg:配置信息;

④cfg_size:配置信息大小;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_stt_interrupt(void *stt_hdl, uint32 timeout);

功能描述:对话打断,回收上次对话资源。

参数说明:

①stt_hdl:session 句柄。

②timeout:超时时间,单位毫秒,若为 0 则阻塞直至完成;

返回值:

①成功:RET_OK(0);

②失败:错误返回 RET_ERR(-1),超时返回LLME_WAIT_TIMEOUT(-5);

3.2.4. llm_tts类

llm_tts是面向文本到语音(Text-to-Speak)任务的轻量级抽象类,负责管理与云端语音合成模型通信。数据上行为文本,下行为音频,LLM库会自动完成数据的序列化和反序列化。

  1. 函数原型:

void *llm_tts_init(char *llm_name, struct llm_tts_sparam *sparam);

功能描述:创建 TTS 大模型 session。

参数说明:

①llm_name:模型名称,需要在 global 配置的列表中;

③sparam:见3.1.3结构体 llm_tts_param 说明;

返回值:

①成功:返回 session 句柄;

②失败:NULL;

  1. 函数原型:

int32 llm_tts_deinit(void *tts_hdl);

功能描述:销毁 TTS大模型 session。

参数说明:

①tts_hdl:session 句柄。

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_tts_send(void *tts_hdl, llm_data_type type, llm_data_state state, char *text, uint32 text_len);

功能描述:数据发送。

参数说明:

①tts_hdl:session 句柄;

②type:数据类型,填LLM_DATA_TYPE_TEXT;

③state:数据状态,见3.1.2枚举 llm_data_state 说明;

④text:文本;

⑤text_len:文本长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_tts_recv(void *tts_hdl, char *buff, uint32 buff_size, uint8 flags);

功能描述:数据接收。

参数说明:

①tts_hdl:session 句柄;

②buff:接收的buff;

③buff_size:接收的长度;

④flags:

0:表示尽可能的接收,不足 buff_size 也会返回缓冲区仅有的数据;

1:表示强制整收,只有满足等于 buff_size 才会返回;

返回值:

①成功:实际接收长度;

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_tts_config(void *tts_hdl, llm_cfg_type type, void *cfg, uint32 cfg_size);

功能描述:platform 和 transfer 参数配置。

参数说明:

①tts_hdl:session 句柄;

② type:配置类型,见3.1.2枚举 llm_cfg_type 说明;

③cfg:配置信息;

④cfg_size:配置信息大小;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_tts_interrupt(void *tts_hdl, uint32 timeout);

功能描述:对话打断,回收上次对话资源。

参数说明:

①tts_hdl:session 句柄。

②timeout:超时时间,单位毫秒,若为 0 则阻塞直至完成;

返回值:

①成功:RET_OK(0);

②失败:错误返回 RET_ERR(-1),超时返回LLME_WAIT_TIMEOUT(-5);

  1. 函数原型:

int32 llm_tts_play_audio(void *tts_hdl, void *audio, uint32 length);

功能描述:利用TTS的音频缓冲区播放音频,常用于播放提示音,会阻塞至传入音频完全写入音频缓冲区,打断可退出。

参数说明:

①tts_hdl:session 句柄;

②audio:播放的音频;

③length:音频长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

3.2.5. llm_tti类

llm_tti 是面向文本到图像(Text-to-Image)任务的轻量级抽象类,负责管理与云端文生图模型通信。数据上行为文本,下行为图片,LLM库会自动完成数据的序列化和反序列化。

  1. 函数原型:

void *llm_tti_init(char *llm_name, struct llm_tti_sparam *sparam);

功能描述:创建 TTI 大模型 session。

参数说明:

①llm_name:模型名称,需要在 global 配置的列表中;

②sparam:见3.1.3结构体 llm_tti_param 说明;

返回值:

①成功:返回 session 句柄;

②失败:NULL;

  1. 函数原型:

int32 llm_tti_deinit(void *tti_hdl);

功能描述:销毁 TTI 大模型 session。

参数说明:

①tti_hdl:session 句柄。

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_tti_send(void *tti_hdl, llm_data_type type, llm_data_state state, char *text, uint32 text_len);

功能描述:数据发送。

参数说明:

①tti_hdl:session 句柄;

②type:数据类型,填LLM_DATA_TYPE_TEXT;

③state:数据状态,见3.1.2枚举 llm_data_state 说明;

④text:文本;

⑤text_len:文本长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_tti_recv(void *tti_hdl, char *buff, uint32 buff_size, uint8 flags);

功能描述:数据接收,预留函数,目前空实现,TTI结果以事件形式上报。

参数说明:

①tti_hdl:session 句柄;

②buff:接收的buff;

③buff_size:接收的长度;

④flags:预留位,暂时没有使用;

返回值:

①成功:实际接收长度;

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_tti_config(void *tti_hdl, llm_cfg_type type, void *cfg, uint32 cfg_size);

功能描述:platform 和 transfer 参数配置。

参数说明:

①tti_hdl:session 句柄;

② type:配置类型,见3.1.2枚举 llm_cfg_type 说明;

③cfg:配置信息;

④cfg_size:配置信息大小;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_tti_interrupt(void *tti_hdl, uint32 timeout);

功能描述:对话打断,回收上次对话资源。

参数说明:

①tti_hdl:session 句柄。

②timeout:超时时间,单位毫秒,若为 0 则阻塞直至完成;

返回值:

①成功:RET_OK(0);

②失败:错误返回 RET_ERR(-1),超时返回LLME_WAIT_TIMEOUT(-5);

3.2.6. llm_sts类

llm_sts 是面向长连接语音对话(如智能体agent)任务的轻量级抽象类,负责管理与云端智能体通信。数据上下行均为音频,LLM库会自动完成数据的序列化和反序列化。

  1. 函数原型:

void *llm_sts_init(char *llm_name, struct llm_sts_sparam *sparam);

功能描述:创建 STS 大模型 session。

参数说明:

①llm_name:模型名称,需要在 global 配置的列表中;

③sparam:见3.1.3结构体 llm_sts_param 说明;

返回值:

①成功:返回 session 句柄;

②失败:NULL;

  1. 函数原型:

int32 llm_sts_deinit(void *sts_hdl);

功能描述:销毁 STS大模型 session。

参数说明:

①sts_hdl:session 句柄。

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_send(void *sts_hdl, llm_data_type type, llm_data_state state, char *data, uint32 data_len);

功能描述:数据发送。

参数说明:

①sts_hdl:session 句柄;

②type:数据类型,见3.1.2枚举 llm_data_type 说明;

③state:数据状态,见3.1.2枚举 llm_data_state 说明;

④data:数据;

⑤data_len:数据长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_sts_recv(void *sts_hdl, char *buff, uint32 buff_size, uint8 flags);

功能描述:数据接收。

参数说明:

①sts_hdl:session 句柄;

②buff:接收的buff;

③buff_size:接收的长度;

④flags:

0:表示尽可能的接收,不足 buff_size 也会返回缓冲区仅有的数据;

1:表示强制整收,只有满足等于 buff_size 才会返回;

返回值:

①成功:实际接收长度;

②失败:RET_ERR(-1);

③重试:LLME_AGAIN(-2);

  1. 函数原型:

int32 llm_sts_config(void *sts_hdl, llm_cfg_type type, void *cfg, uint32 cfg_size);

功能描述:platform 和 transfer 参数配置。

参数说明:

①sts_hdl:session 句柄;

②type:配置类型,见3.1.2枚举 llm_cfg_type 说明;

③cfg:配置信息;

④cfg_size:配置信息大小;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_interrupt(void *sts_hdl, uint32 timeout);

功能描述:对话打断,回收上次对话资源。

参数说明:

①sts_hdl:session 句柄;

②timeout:超时时间,单位毫秒,若为 0 则阻塞直至完成;

返回值:

①成功:RET_OK(0);

②失败:错误返回 RET_ERR(-1),超时返回LLME_WAIT_TIMEOUT(-5);

  1. 函数原型:

int32 llm_sts_wait(void *sts_hdl, uint32 timeout);

功能描述:等待音频发送进入就绪态。

参数说明:

①sts_hdl:session 句柄;

②timeout:超时时间,单位毫秒,若为 0 则阻塞直至完成;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

③超时:LLME_WAIT_TIMEOUT(-5);

  1. 函数原型:

int32 llm_sts_reconnect(void *sts_hdl);

功能描述:会话重连,对话异常(如超时、掉线、服务器错误)下重新连接。

参数说明:

①sts_hdl:session 句柄;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_stop(void *sts_hdl);

功能描述:会话暂停,内部线程空转。

参数说明:

①sts_hdl:session 句柄;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_run(void *sts_hdl,;

功能描述:会话恢复,尝试恢复至上一个状态,若无法恢复则重连。

参数说明:

①sts_hdl:session 句柄;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_play_audio(void *sts_hdl, void *audio, uint32 length);

功能描述:利用STS的音频缓冲区播放音频,常用于播放提示音,会阻塞至传入音频完全写入音频缓冲区,打断可退出。

参数说明:

①sts_hdl:session 句柄;

②audio:播放的音频;

③length:音频长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_check_audio(void *sts_hdl);

功能描述:检查拉流是否结束且所有音频都被读走。

参数说明:

①sts_hdl:session 句柄。

返回值:

①成功:已完成(1)、未完成(0);

②失败:RET_ERR(-1);

  1. 函数原型:

int32 llm_sts_upload_file(void *sts_hdl, llm_data_type data_type, llm_data_state state, char *data, uint32 data_len);

功能描述:文件上传,多模态实现(如图片)。

参数说明:

①sts_hdl:session 句柄。

②data_type:数据类型,见3.1.2枚举 llm_data_type 说明;

③ state:数据状态,见3.1.2枚举 llm_data_state 说明;

④data:待上传数据指针;

⑤data_len:待上传数据长度;

返回值:

①成功:RET_OK(0);

②失败:RET_ERR(-1);

4. LLM开发

4.1. 开发思路

大模型开发整体上可以分为两类,第一类是需要借助云端大模型完成一些比较复杂的功能,例如语音识别、语音合成、数据分析、语言翻译、文本处理、图片识别、图片生成等,这一类功能可以通过LLM库的llm_stt、llm_tts、llm_chat、llm_tti分别实现。第二类是AI语音对话,这个功能可以通过llm_stt、llm_tts、llm_chat组合实现,也可以通过llm_sts实现,LLM库的llm_sts目前支持扣子(coze)平台。相较于组合实现的方式,llm_sts通常对话延迟更短,业务逻辑更简单。

使用LLM库开发流程基本一致,如图2所示。

F:/笔记/菜鸟成长日记/llm/文档/流程.png流程图2

系统初始化(global init)阶段,需要配置支持的模型列表。对于多个session组合的方案。即llm_stt、llm_tts、llm_chat,还需要指定是否启动任务复用,当空间富裕情况下可以选择不启动任务复用,即每路 session 独占一条线程,效率更高响应会更及时。若启动任务复用,内部只需要两条线程(TTS需要独占一条,其他类型共用一条),处理数据需要轮询。

如图3所示,models为模型列表,需要为其配置模型名称和操作集,LLM库所支持的模型在其对应的头文件都会提供相应的操作集,直接使用即可。

图3

完成系统初始化后,开始创建会话(session init),这里需保留会话句柄以便后续的使用。会话创建后需要对该会话进行两项必要的配置,第一个是对会话选择的平台参数(platform config)进行配置,platform config包含了LLM库所支持的服务器参数,具体可以在不同模型的头文件查看。第二个是对该会话的传输层(transfer config)进行配置。我们允许应用对每一个session的transfer层进行超时、流控、证书认证设置。其他的预设需根据需求选择,有些session有自己特有的接口,例如llm_chat可以设置模型的prompt等。

完成以上的流程后,就可以进行数据的收发和其他的交互了,其中interrupt是用于终止单次交互,回收单次交互的资源,常用于实现打断的操作。

最后,系统结束退出时,进行必要的资源释放(deinit)。

4.2. 服务器搭建

4.2.1. 豆包火山引擎

  1. 官方文档

①CHAT:https://www.volcengine.com/docs/82379/1298454

②STT:https://www.volcengine.com/docs/6561/80816

③TTS:https://www.volcengine.com/docs/6561/79817

  1. CHAT 接入

①登录火山引擎控制台:https://console.volcengine.com/home

图4

②申请密钥

图5

③创建推理接入点

图6

④可选:需要 联网搜索、网页分析、深度数学计算等

图7

  1. STT\TTS 接入

①登录火山引擎控制台:https://console.volcengine.com/home

图8

②创建应用

图9

③开通 一句话识别(试用版为例)

图10

④开通 语音合成(正式版为例)

图11

4.2.2. 扣子(coze)

官方文档:https://www.coze.cn/open/docs/guides/quickstart

5. 示例代码

SDK提供LLM库使用的多个示例demo,具体路径在:sdk\app\llm_app。