端侧在线版本SDK文档 | 大装置帮助中心
跳到主要内容

在线版本SDK文档

SenseChatLiteSDK API文档

版本号更新内容备注
V1.0.0初版
V1.0.1新增在线版本SDK文档内容

SenseTime

1 结构体(structs)和类型别名(typedefs)说明

CMessage

一个CMessage对象表示一条大语言模型输入、输出的消息。

类型成员名称说明
Rolerole消息角色
char *content消息内容

ModelParameters

LLM的模型参数

类型成员名称说明
intmax_new_tokens最大生成的token数量
floatrepetition_penalty重复惩罚系数
floattemperature温度,控制随机性
floattop_p最大token概率累加和阈值

SensenovaParams

LLM的模型参数

类型成员名称说明
char *authorizationSensenova API Authorization
char *model_nameSensenova模型名称
ModelParametersmodel_params模型参数
intstream是否使用流式接口
intweb_search_enable是否启用在线检索

LLMRuntimeStats

LLM对话状态统计

类型成员名称说明
floatprefill_toks_per_secPrefill速度(token/s)
floatdecode_toks_per_secDecode速度(token/s)
floatprefill_time_last_round上一轮Prefill时间
floatpercentage_of_terminal_toks端侧Token占比
intprefill_toks_last_round上一轮Prefill数量
intdecode_toks_last_round上一轮Decode数量
inthistorical_rounds历史对话轮数

smart_handle_t

SmartLLM上下文handle,用于调用各个接口。

CStreamChatCallback

流式对话的回调函数,从SmartLLMStreamChat调用。

回调函数参数列表:

类型参数名称说明
StreamStatusstatus流式对话运行状态
const char *output _size新增的token
void *user_data从SmartLLMStreamChat的user_data参数转发。

回调函数返回值:

如果正常返回,返回0,否则返回非0。

2 枚举(enums)

Error

表示接口调用的错误状态。

名称说明
kSuccess0接口正常返回
kInvalidArgs-1参数错误
kInvalidHandle-2无效的handle
kOutOfMemory-3系统内存不足
kRunFailed-4模型运行失败
kUndefined-5未定义行为
kFileNotFound-6文件找不到
kInvalidModelFile-7模型文件错误
kTriggerSensitive-8触发敏感词
kExceededTokenLength-9超过最大的token长度
kInvalidNetwork-10网络异常
kFileAlreadyExists-11文件已经存在
kInvalidLicense-12License错误
kLanguageNotAllowed-13输入了不支持的语言
kModuleNotInitialized-999模块未被初始化
kUnsupported-1000不支持的操作

MemoryType

表示LLM中历史对话的存储类型。

名称说明
kNone0不存储历史对话
kMemory1存储历史对话

Role

表示LLM的消息角色。

名称说明
kUser0用户输入Prompt
kAssistant1LLM生成的输出
kSystem2系统Prompt
kTool3(Reserved)

StreamStatus

表示LLM流式生成的运行状态。

名称说明
kRunning0流式
kEnd1存储历史对话
kSensetive2触发敏感词
kError3回调函数返回了错误
kLanguageError4触发不支持的语言

MemoryType

表示LLM中历史对话的存储类型。

名称说明
kNone0不存储历史对话
kMemory1存储历史对话

3 函数接口

SmartCloudLLMCreate

SMART_C_API 
Error SmartLLMCreate(
const char *model_path,
MemoryType mem_type,
smart_handle_t *handle);

创建SmartLLM Handle

参数:

名称类型方向描述
model_pathconst char *in模型文件路径
mem_typeMemoryTypein历史记录类型
handlesmart_handle_t ∗out创建的SmartLLM Handle

返回值:

成功返回kSuccess,失败详见第2节Error错误列表。

SmartCloudLLMDestroy

SMART_C_API Error SmartCloudLLMDestroy(smart_handle_t handle);

销毁SmartLLM Handle

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle

返回值:

成功返回kSuccess,失败详见第2节Error错误列表。

SmartCloudLLMAddLicense

SMART_C_API Error SmartCloudLLMAddLicense(  
const char* license_path
# if __ANDROID__
, JNIEnv *env
, jobject ctx
# endif _// __ANDROID__
);

添加License文件。

参数:

名称类型方向描述
license_pathconst char *in要销毁的文件信息数组,由SmartLLMListDocument返回。
envJNIEnv *in(仅Android平台) Java JNI接口的JNIEnv对象指针。
ctxjobjectin(仅Android平台) android.Content.Context对象实例。

返回值:

成功返回kSuccess,失败详见第2节Error错误列表

SmartCloudLLMSetSensenovaParams

SMART_C_API
Error SmartCloudLLMSetSensenovaParams(
smart_handle_t handle,
const SensenovaParams *sensenova_params);

设置Sensenova云端LLM参数。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
Sensenova_paramsconst SensenovaParams*inSensenova云端LLM参数

返回值:

成功返回kSuccess,失败详见第2节Error错误列表。

SmartCloudLLMSetMemoryType

SMART_C_API
Error SmartCloudLLMSetMemoryType(
smart_handle_t handle,
MemoryType mem_type);

设置历史记录存储类型

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
mem_typeMemoryTypein历史记录类型

返回值:

成功返回kSuccess,失败详见第2节Error错误列表。

SmartCloudLLMChat

SMART_C_API 
Error SmartCloudLLMChat(
smart_handle_t handle,
const CMessage *messages,
int messages_num,
const char **stops,
int stops_num,
CMessage *output);

使用LLM进行非流式对话。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
messagesconst CMessage*in输入的消息数组
message_numintin输入的消息数组长度
stopsconst char **in停止词列表,一个字符串数组
stops_numintin停止词列表长度
outputCMessage *outLLM输出的消息,需要调用SmartLLMReleaseChatOutput释放内存

返回值:

成功返回kSuccess,失败详见第2节Error错误列表

SmartCloudLLMStreamChat

SMART_C_API 
Error SmartCloudLLMStreamChat(
smart_handle_t handle,
const CMessage *messages,
int messages_num,
const char **stops,
int stops_num,
CStreamChatCallback callback,
void *user_data);

使用LLM进行流式对话。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
messagesconst CMessage*in输入的消息数组
message_numintin输入的消息数组长度
stopsconst char **in停止词列表,一个字符串数组
stops_numintin停止词列表长度
callbackCStreamChatCallbackin回调函数,在每一个Token生成时调用。
user_datavoid *in任意内容,转发给回调函数。

返回值:

成功返回kSuccess,失败详见第2节Error错误列表

SmartCloudLLMReleaseChatOutput

SMART_C_API Error SmartCloudLLMReleaseChatOutput(CMessage *output);

销毁SmartLLMChat接口的输出消息。

参数:

名称类型方向描述
outputCMessage *inSmartLLMComplete接口的输出消息。

返回值:

成功返回kSuccess,失败详见第2节Error错误列表

SmartCloudLLMGetRuntimeStats

SMART_API 
Error SmartCloudLLMGetRuntimeStats(
smart_handle_t handle,
LLMRuntimeStats *runtime_stats);

获取SmartLLM上一轮的运行时状态统计。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
runtime_statsLLMRuntimeStats *out运行时状态统计结果

返回值:

成功返回kSuccess,失败详见第2节Error错误列表

SmartCloudLLMClearMemory

SMART_C_API Error SmartCloudLLMClearMemory(smart_handle_t handle);

清除历史对话。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle

返回值:

成功返回kSuccess,失败详见第2节Error错误列表

4 调用示例代码

#include <string.h>
#include <stdio.h>

#include "core/common.h"
#include "smart_cloud_llm.h"
#include "smart_cloud_llm_common.h"

#if __ANDROID__
#define SmartCloudLLMAddLicense(a) SmartCloudLLMAddLicense(a, nullptr, nullptr)
#else
#define SmartCloudLLMAddLicense(a) SmartCloudLLMAddLicense(a)
#endif

int CompleteCallback(StreamStatus status, const char *output, void *user_data) {
printf("status is %d, output is %s\n", status, output);
return 0;
}

int ChatCallback(StreamStatus status, const CMessage *output, void *user_data) {
printf("status is %d, message.role is %d, message.content is %s\n", status, output->role,
output->content);

return 0;
}

void PrintRuntimeStats(LLMRuntimeStats &runtime_stats) {
printf(
"Runtime stats is:\n"
" prefill_toks_per_sec %.1f\n"
" decode_toks_per_sec %.1f\n"
" prefill_time_last_round %.1f\n"
" percentage_of_terminal_toks %.1f\n"
" historical_rounds %d\n",
runtime_stats.prefill_toks_per_sec, runtime_stats.decode_toks_per_sec,
runtime_stats.prefill_time_last_round, runtime_stats.percentage_of_terminal_toks,
runtime_stats.historical_rounds);
}

int main(int argc, char **argv) {
if (argc != 2) {
printf("Using: %s license_file\n", argv[0]);
return -1;
}

if (kSuccess != SmartCloudLLMAddLicense(argv[1])) {
return -1;
}

smart_handle_t smart_handle;

Error err = SmartCloudLLMCreate(kMemory, &smart_handle);
if (kSuccess != err) {
printf("SmartCloudLLMCreate failed with %d\n", err);
return -1;
}
printf("SmartCloudLLMCreate done\n");

ModelParameters terminal_params;
terminal_params.max_new_tokens = 1024;
terminal_params.repetition_penalty = 1.2f;
terminal_params.temperature = 0.1f;
terminal_params.top_p = 0.8f;

SensenovaParams nova_params;
nova_params.authorization = ""; // edit to your nova authorization
nova_params.model_name = ""; // edit to your nova model_name
nova_params.model_params = terminal_params;
nova_params.stream = 1;
nova_params.web_search_enable = 1;

err = SmartCloudLLMSetSensenovaParams(smart_handle, &nova_params);
if (kSuccess != err) {
printf("SmartCloudLLMSetSensenovaParams failed with %d\n", err);
return -1;
}
printf("SmartCloudLLMSetSensenovaParams done\n");

err = SmartCloudLLMSetMemoryType(smart_handle, kMemory);
if (kSuccess != err) {
printf("SmartCloudLLMSetMemoryType failed with %d\n", err);
return -1;
}
printf("SmartCloudLLMSetMemoryType done\n");

const char *stops[1] = {"aaa"};
const int stops_num = 1;

CMessage chat_in;
const int messages_num = 1;
chat_in.role = kUser;
chat_in.content = "你好";

CMessage chat_out;
err = SmartCloudLLMChat(smart_handle, &chat_in, messages_num, stops, stops_num, &chat_out);
printf("chat done, ret is %d, role is %d, content is %s\n", err, chat_out.role, chat_out.content);

err = SmartCloudLLMReleaseChatOutput(&chat_out);
if (kSuccess != err) {
printf("SmartCloudLLMReleaseChatOutput failed with %d\n", err);
return -1;
}

LLMRuntimeStats runtime_stats;
err = SmartCloudLLMGetRuntimeStats(smart_handle, &runtime_stats);
if (kSuccess != err) {
printf("SmartCloudLLMGetRuntimeStats failed with %d\n", err);
return -1;
}
PrintRuntimeStats(runtime_stats);

void *userdata;
err = SmartCloudLLMStreamChat(smart_handle, &chat_in, messages_num, stops, stops_num, ChatCallback,
userdata);
printf("SmartCloudLLMStreamChat done, ret is %d\n", err);

err = SmartCloudLLMGetRuntimeStats(smart_handle, &runtime_stats);
if (kSuccess != err) {
printf("SmartCloudLLMGetRuntimeStats failed with %d\n", err);
return -1;
}
PrintRuntimeStats(runtime_stats);

err = SmartCloudLLMClearMemory(smart_handle);
if (kSuccess != err) {
printf("SmartCloudLLMClearMemory failed with %d\n", err);
return -1;
}
printf("SmartCloudLLMClearMemory done\n");

err = SmartCloudLLMDestory(smart_handle);
if (kSuccess != err) {
printf("SmartCloudLLMDestory failed with %d\n", err);
return -1;
}

printf("process done\n");

return 0;
}