AidLLM C++ 接口文档
💡注意
使用 AidGen-SDK C++ 开发需要了解如下基本事项:
- 编译时需要包含头文件,存放路径
/usr/local/include/aidlux/aidgen/aidllm.hpp
- 链接时需要指定库文件,存放路径
/usr/local/lib/libaidgen.so
推理后端类型.enum LLmBackendType
对于 AidllmSDK 而言,支持使用不同的推理后端框架来实现大模型的推理任务,涉及到的推理后端如下所示。
成员变量名 | 类型 | 值 | 描述 |
---|---|---|---|
TYPE_DEFAULT | uint8_t | 0 | 未知后端类型 |
TYPE_GENIE | uint8_t | 1 | Genie推理后端 |
推理任务状态.enum LLMSentenceState
Aidllm 在推理任务的完成过程中,针对一次会话,可能会存在各种不同阶段的状态,开发者可以根据这些状态码来了解当前推理任务的运行情况。
成员变量名 | 类型 | 值 | 描述 |
---|---|---|---|
BEGIN | uint8_t | 0 | 会话开始部分 |
CONTINUE | uint8_t | 1 | 会话持续推理中间内容 |
END | uint8_t | 2 | 会话结尾部分 |
COMPLETE | uint8_t | 3 | 当前会话成功完结 |
ABORT | uint8_t | 4 | 当前会话被动终止 |
ERROR | uint8_t | 5 | 当前会话推理错误 |
日志级别.enum LogLevel
AidllmSDK 提供有设置日志的接口(后续会介绍),需要提供给接口当前使用哪个日志级别,所以就需要使用此日志级别枚举。
成员变量名 | 类型 | 值 | 描述 |
---|---|---|---|
INFO | uint8_t | 0 | 消息 |
WARNING | uint8_t | 1 | 警告 |
ERROR | uint8_t | 2 | 错误 |
FATAL | uint8_t | 3 | 致命错误 |
推理回调函数数据类型.struct LLMCallbackData
Aidllm 在推理任务时,会使用开发者提供的回调函数,此数据类型就是传递给该回调函数的参数,开发者可以在自定义的回调函数中使用推理的结果数据。
成员变量列表
Config 对象用于设置运行时的配置信息,其中就包含如下的这些参数:
成员变量 | state |
类型 | enum LLMSentenceState |
默认值 | |
描述 | 当前推理会话的状态码 |
成员变量 | text |
类型 | std::string |
默认值 | |
描述 | 推理任务的结果字符/特殊状态码对应的提示消息 |
运行上下文类.class LLMContext
Aidllm 在运行过程中,可能需要设置一些配置信息,同时运行时的相关数据也需要传递,使用此运行上下文类型的对象来完成数据流转。
创建实例对象.create_instance()
想要设置运行时的上下文信息,当然就需要先有配置实例对象,此函数用于创建 LLMContext 类型的实例对象。
API | create_instance |
描述 | 用于构造 LLMContext 类的实例对象 |
参数 | config_file:初始配置文件,其中可以配置后端类型、模型文件名称等关键信息 |
返回值 | 如果为 nullptr 值,说明函数构建对象失败;否则就是 LLMContext 对象的指针 |
// 创建配置实例对象,返回值为空则报错
std::unique_ptr<LLMContext> llm_context_ptr = LLMContext::create_instance("qwen2-7b/qwen2-7b.json");
if(llm_context_ptr == nullptr){
printf("Test sample: LLMContext create_instance failed.\n");
return EXIT_FAILURE;
}
成员变量列表
Config 对象用于设置运行时的配置信息,其中就包含如下的这些参数:
成员变量 | config_file |
类型 | std::string |
默认值 | |
描述 | 初始配置文件,创建对象时传入的配置文件参数 |
成员变量 | backend_type |
类型 | LLmBackendType |
默认值 | LLmBackendType.TYPE_DEFAULT |
描述 | 在配置文件中会要求开发者指定推理后端。初始化操作解析配置文件完成之后,会覆写此字段,标识开发者指定的后端类型 |
成员变量 | model_file_vec |
类型 | std::vector<std::string> |
默认值 | |
描述 | 在配置文件中会要求开发者指定模型文件。初始化操作解析配置文件完成之后,会覆写此字段,标识开发者指定的模型文件 |
成员变量 | config_overwrite_options |
类型 | std::string |
默认值 | |
描述 | 通过设置此字段,可以指定推理过程中的某些关键参数,从而影响推理速度、推理结果等 |
成员变量 | android_tmp_directory |
类型 | std::string |
默认值 | |
描述 | 此字段只在 Android 平台下有效。通过设置此字段,可以指定系统用户拥有合法权限的目录,以供推理程序借用 |
解释器类.class LLMInterpreter
LLMInterpreter 类型的对象实例是执行推理操作的主体,用于执行具体的推理过程。
创建实例对象.create_instance()
想要执行推理相关的操作,推理解释器肯定必不可少,此函数就用于构建推理解释器的实例对象。
API | create_instance |
描述 | 利用 LLMContext 对象所管理的各种数据,构造 LLMInterpreter 类型的对象 |
参数 | llm_context:LLMContext 实例对象的指针 |
返回值 | 为 nullptr 值则说明函数构建对象失败;否则就是 LLMInterpreter 对象的指针 |
// 使用 LLMContext 对象指针来创建解释器对象,返回值为空则报错
std::unique_ptr<LLMInterpreter> llm_interpreter_ptr = LLMInterpreter::create_instance(llm_context_ptr);
if(llm_interpreter_ptr == nullptr){
printf("Test sample: LLMInterpreter create_instance failed.\n");
return EXIT_FAILURE;
}
初始化操作.initialize()
解释器对象创建之后,需要执行一些初始化操作,比如环境检查、资源构建等。
API | initialize |
描述 | 完成推理所需的相关初始化工作 |
参数 | void |
返回值 | 0 值则说明初始化操作执行成功,否则非 0 值就说明执行失败 |
// 解释器初始化,返回值非0则报错
int init_result = llm_interpreter_ptr->initialize();
if(init_result != EXIT_SUCCESS){
printf("Test sample: aidllm initialize failed.\n");
return EXIT_FAILURE;
}
会话推理操作.run()
成功完成初始化操作之后,就可以跟大模型执行对话操作,开发者提供自定义的回调函数,用于处理会话过程中持续的推理结果。
API | run |
描述 | 执行一次会话推理 |
参数 | prompt:提示词字符串 |
cb:开发者提供的自定义回调函数,用于处理会话过程中持续的推理结果 | |
user_data:用户数据的指针,方便在自定义回调函数中使用这些数据 | |
返回值 | 0 值则说明执行释放操作成功,否则非 0 值就说明执行失败 |
会话终止操作.abort()
用户可能在某些情况下,会想要打断当前正在执行推理的会话,此函数就用于实现推理终止。
API | abort |
描述 | 终止当前正在运行推理的会话 |
参数 | void |
返回值 | 0 值则说明初始化操作执行成功,否则非 0 值就说明执行失败 |
// 解释器初始化,返回值非0则报错
int init_result = llm_interpreter_ptr->initialize();
if(init_result != EXIT_SUCCESS){
printf("Test sample: aidllm initialize failed.\n");
return EXIT_FAILURE;
}
完结释放操作.finalize()
前面提到解释器对象需要执行 initialize() 初始化相关操作,相应的,解释器也会需要执行一些释放操作,将之前创建的资源予以销毁等。
API | finalize |
描述 | 完成必要的反初始化释放操作 |
参数 | void |
返回值 | 0 值则说明执行释放操作成功,否则非 0 值就说明执行失败 |
// 执行解释器反初始化过程,返回值非0则报错
int fin_result = llm_interpreter_ptr->finalize();
if(fin_result != EXIT_SUCCESS){
printf("Test : aidllm finalize failed.\n");
return EXIT_FAILURE;
}