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

离线版本SDK文档

SenseChatLiteSDK API文档

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

SenseTime

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

CMessage

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

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

ModelParameters

端侧模型的模型参数

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

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,用于调用各个接口。

CStreamCompleteCallback

流式补全的回调函数,从SmartLLMStreamComplete调用。

回调函数参数列表:

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

回调函数返回值:

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

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 函数接口

SmartLLMCreate

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错误列表。

SmartLLMDestroy

SMART_C_API Error SmartLLMDestroy(smart_handle_t handle);

销毁SmartLLM Handle

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle

返回值:

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

SmartLLMAddLicense

SMART_C_API Error SmartLLMAddLicense(
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,失败详见1.2节Error错误列表

SmartLLMSetParams

SMART_C_API 
Error SmartLLMSetParams(
smart_handle_t handle,
const void *params);

设置LLM参数。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
paramsconst void *in模型参数,根据不同的模型而不同。例如,可传入 ModelParams

返回值:

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

SmartLLMSetMemoryType

SMART_C_API 
Error SmartLLMSetMemoryType(
smart_handle_t handle,
MemoryType mem_type);

设置历史记录存储类型

参数:

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

返回值:

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

SmartLLMComplete

SMART_C_API 
Error SmartLLMComplete(
smart_handle_t handle,
const char *prompt,
const char **stops,
int stops_num, char **output);

使用LLM补全输入。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle
promptconst char*in输入的Prompt
stopsconst char**in停止词列表,一个字符串数组
stop_numintin停止词列表长度
outputchar**out返回补全输出内容指针,需要调用SmartLLMReleaseCompleteOutput释放。

返回值:

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

SmartLLMChat

SMART_C_API 
Error SmartLLMChat(
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,失败详见1.2节Error错误列表

SmartLLMStreamComplete

SMART_C_API 
Error SmartLLMStreamComplete(
smart_handle_t handle,
const char *prompt,
const char **stops, int stops_num,
CStreamCompleteCallback callback,
void *user_data);

使用LLM流式补全输入。

参数:

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

返回值:

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

SmartLLMStreamChat

SMART_C_API 
Error SmartLLMStreamChat(
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,失败详见1.2节Error错误列表

SmartLLMReleaseCompleteOutput

SMART_C_API Error SmartLLMReleaseCompleteOutput(char *output);

销毁SmartLLMComplete接口的输出字符串。

参数:

名称类型方向描述
outputchar *inSmartLLMComplete接口的输出字符串

返回值:

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

SmartLLMReleaseChatOutput

SMART_C_API Error SmartLLMReleaseChatOutput(CMessage *output);

销毁SmartLLMChat接口的输出消息。

参数:

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

返回值:

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

SmartLLMGetRuntimeStats

SMART_API

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

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

参数:

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

返回值:

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

SmartLLMClearMemory

SMART_C_API Error SmartLLMClearMemory(smart_handle_t handle);

清除历史对话。

参数:

名称类型方向描述
handlesmart_handle_tinSmartLLM Handle

返回值:

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

4 调用示例代码

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

#include "core/common.h"
#include "smart_llm.h"
#include "smart_llm_common.h"

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 != 3) {
printf("Using: %s license_file model_file\n", argv[0]);
return -1;
}

Error err;
#if __ANDROID__
err = SmartLLMAddLicense(argv[1], nullptr, nullptr);
#else
err = SmartLLMAddLicense(argv[1]);
#endif // __ANDROID__
if (kSuccess != err) {
return -1;
}

smart_handle_t smart_handle;

err = SmartLLMCreate(argv[2], kMemory, &smart_handle);
if (kSuccess != err) {
printf("SmartLLMCreate failed with %d\n", err);
return -1;
}
printf("SmartLLMCreate 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;

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


err = SmartLLMSetMemoryType(smart_handle, kMemory);
if (kSuccess != err) {
printf("SmartLLMSetMemoryType failed with %d\n", err);
return -1;
}
printf("SmartLLMSetMemoryType 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 = SmartLLMChat(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 = SmartLLMReleaseChatOutput(&chat_out);
if (kSuccess != err) {
printf("SmartLLMReleaseChatOutput failed with %d\n", err);
return -1;
}

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

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

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

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

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

printf("process done\n");

return 0;
}