C++ API
Tokenizer 类
描述
Tokenizer 类负责文本的编码和解码,支持不同类型的分词器。
常量
static constexpr int MAGIC_NUMBER
描述: 魔法数字,用于识别分词器类型。
枚举类型
enum TokenizerType
SENTENCEPIECE:SentencePiece 分词器。TIKTOIKEN:TikToken 分词器。BERT:BERT 分词器。HUGGINGFACE:Hugging Face 分词器。
构造函数
Tokenizer()
描述: 默认构造函数。
析构函数
virtual ~Tokenizer()
描述: 默认析构函数。
公共方法
static Tokenizer* createTokenizer(const std::string& filename)
描述: 根据给定文件名创建相应类型的分词器实例。
参数:
filename:分词器配置文件路径。
返回: 创建的
Tokenizer实例指针。
bool is_stop(int token)
描述: 判断给定的 token 是否为停止 token。
参数:
token:待检查的 token。
返回: 如果是停止 token,则返回
true;否则返回false。
bool is_special(int token)
描述: 判断给定的 token 是否为特殊 token。
参数:
token:待检查的 token。
返回: 如果是特殊 token,则返回
true;否则返回false。
std::vector<int> encode(const std::string& str)
描述: 将输入字符串编码为 token 数组。
LlmStreamBuffer 类
描述
LlmStreamBuffer 是一个自定义流缓冲区,允许通过回调机制进行数据流传输。
构造函数
LlmStreamBuffer(CallBack callback)
参数:
callback:用于处理流数据的函数。
保护方法
std::streamsize xsputn(const char* s, std::streamsize n) override
描述: 将
n个字符从s指向的数组写入。返回: 写入的字符数量。
私有成员
CallBack callback_:存储回调函数。
PROMPT_TYPE 枚举
描述
定义了可以在 Llm 类中使用的提示类型。
SYSTEM:系统提示。ATTACHMENT:附件提示。USER:用户提示。ASSISTANT:助手提示。OTHER:其他提示类型。
Prompt 结构体
描述
表示一个提示,包含其类型、字符串内容及相关标记。
成员
PROMPT_TYPE type:提示类型。std::string str:提示内容。std::vector<int> tokens:与提示相关的标记。
Llm 类
描述
Llm 类封装了一个大型语言模型,用于交互和处理提示。
构造函数
析构函数
~Llm()
描述: 清理资源。
公共方法
void chat()
描述: 启动聊天会话。
void reset()
描述: 重置模型状态。
static Llm* createLLM(const std::string& config_path)
描述: 工厂方法,创建
Llm实例。返回: 创建的
Llm实例的指针。
void load()
描述: 加载模型配置。
VARP forward(const std::vector<int>& input_ids)
描述: 处理输入标记并返回输出变量。
int sample(VARP logits, const std::vector<int>& pre_ids)
描述: 根据提供的 ID 从 logits 中抽样。
返回: 抽样的整数。
std::string apply_prompt_template(const std::string& user_content) const
描述: 将提示模板应用于用户内容。
std::string apply_chat_template(const std::vector<PromptItem>& chat_prompts) const
描述: 将聊天模板应用于提示列表。
std::string response(const std::string& user_content, std::ostream* os = &std::cout, const char* end_with = nullptr)
描述: 根据用户内容生成响应。
参数:
os:输出流(默认为std::cout)。end_with:可选的附加字符串。
返回: 生成的响应。
void print_speed()
描述: 打印处理速度指标。
配置方法
std::string dump_config()
描述: 以字符串形式转储当前配置。
bool set_config(const std::string& content)
描述: 从字符串设置配置。
返回: 如果成功,返回
true;否则返回false。
LoRA 方法
size_t apply_lora(const std::string& lora_path)
描述: 从指定路径应用 LoRA 模型。
Llm* create_lora(const std::string& lora_path)
描述: 创建 LoRA 实例。
bool release_module(size_t index)
描述: 释放指定模块。
返回: 如果成功,返回
true。
bool select_module(size_t index)
描述: 选择指定模块。
返回: 如果成功,返回
true。
公共成员
int prompt_len_:提示长度。int gen_seq_len_:生成序列的长度。int all_seq_len_:总序列长度。std::vector<int> history_ids_:历史 ID 列表。int64_t visual_us_:视觉处理所用时间。int64_t prefill_us_:预填充所用时间。int64_t decode_us_:解码所用时间。float load_progress_:加载进度。bool is_single_:指示是否为单一模型。bool attention_fused_:指示是否融合了注意力机制。
保护成员
std::shared_ptr<LlmConfig> config_:模型配置。std::shared_ptr<Tokenizer> tokenizer_:文本处理的分词器。std::vector<int> key_value_shape_:键值对的形状。std::vector<MNN::Express::VARP> past_key_values_:历史键值对。MNN::Express::VARP inputs_embeds_, attention_mask_, position_ids_:模型输入。std::shared_ptr<MNN::Express::Executor::RuntimeManager> runtime_manager_:管理运行时执行。std::vector<std::shared_ptr<MNN::Express::Module>> modules_:加载的模块。const MNN::Express::Module* base_module_:基础模块指针。
保护方法
void init_runtime()
描述: 初始化运行时参数。
std::string decode(int id)
描述: 将给定 ID 解码为字符串。
bool is_stop(int token_id)
描述: 检查令牌是否为停止令牌。
virtual std::vector<int> tokenizer(const std::string& query)
描述: 对输入查询进行分词。
virtual MNN::Express::VARP embedding(const std::vector<int>& input_ids)
描述: 为输入 ID 生成嵌入。
virtual MNN::Express::VARP gen_attention_mask(int seq_len)
描述: 为序列生成注意力掩码。
virtual MNN::Express::VARP gen_position_ids(int seq_len)
描述: 为序列生成位置 ID。
Embedding 类
描述
Embedding 类负责生成文本和 ID 的嵌入表示,并提供相应的操作。
构造函数
公共方法
static Embedding* createEmbedding(const std::string& config_path, bool load = true)
描述: 工厂方法,创建
Embedding实例。参数:
config_path:配置文件路径。load:是否加载模型(默认为true)。
返回: 创建的
Embedding实例的指针。
static float dist(MNN::Express::VARP var0, MNN::Express::VARP var1)
描述: 计算两个嵌入的距离。
返回: 嵌入的距离值。
virtual void load() override
描述: 加载嵌入模型。
MNN::Express::VARP ids_embedding(const std::vector<int>& ids)
描述: 根据 ID 生成嵌入表示。
返回: 生成的嵌入变量。
MNN::Express::VARP txt_embedding(const std::string& txt)
描述: 根据文本生成嵌入表示。
返回: 生成的嵌入变量。
int dim() const
描述: 获取嵌入的维度。
返回: 嵌入维度。
私有方法
virtual std::vector<int> tokenizer(const std::string& query) override
描述: 对输入查询进行分词。
virtual MNN::Express::VARP gen_attention_mask(int seq_len) override
描述: 为序列生成注意力掩码。
virtual MNN::Express::VARP gen_position_ids(int seq_len) override
描述: 为序列生成位置 ID。
TextVectorStore 类
描述
TextVectorStore 类用于管理文本的向量存储,支持文本的添加和搜索。
构造函数
TextVectorStore()
描述: 默认构造函数。
析构函数
~TextVectorStore()
描述: 清理资源。
公共方法
static TextVectorStore* load(const std::string& path, const std::string& embedding_path = "")
描述: 从路径加载
TextVectorStore实例。返回: 加载的实例指针。
void save(const std::string& path)
描述: 保存文本向量存储到指定路径。
void add_text(const std::string& text)
描述: 添加单个文本到存储。
void add_texts(const std::vector<std::string>& texts)
描述: 添加多个文本到存储。
std::vector<std::string> search_similar_texts(const std::string& txt, int topk = 1)
描述: 搜索与给定文本相似的文本。
参数:
topk:返回的相似文本数量(默认为 1)。
返回: 相似文本的列表。
void bench()
描述: 进行基准测试。
保护方法
inline VARP text2vector(const std::string& text)
描述: 将文本转换为向量。
Document 类
描述
Document 类表示一个文档,支持根据类型加载和分割文档内容。
枚举类型
enum DOCTYPE
AUTO:自动识别类型。TXT:文本文件。MD:Markdown 文件。HTML:HTML 文件。PDF:PDF 文件。
构造函数
Document(const std::string& path, DOCTYPE type = AUTO)
参数:
path:文档路径。type:文档类型(默认为AUTO)。
析构函数
~Document()
描述: 清理资源。
公共方法
std::vector<std::string> split(int chunk_size = -1)
描述: 将文档分割为多个部分。
参数:
chunk_size:每部分的大小(默认为 -1,表示不限制)。
返回: 分割后的字符串列表。
私有方法
std::vector<std::string> load_txt()
描述: 加载文本文件内容。
std::vector<std::string> load_pdf()
描述: 加载 PDF 文件内容。
MemoryBase 类
描述
MemoryBase 类是一个抽象基类,提供文本向量存储的基础功能。
构造函数
MemoryBase()
描述: 默认构造函数。
析构函数
virtual ~MemoryBase()
描述: 清理资源。
公共方法
void set_embedding(std::shared_ptr<Embedding> embedding)
描述: 设置嵌入实例。
virtual std::vector<std::string> search(const std::string& query, int topk)
描述: 根据查询搜索文本。
参数:
topk:返回的结果数量。
返回: 搜索结果列表。
virtual void save(const std::string& path) = 0
描述: 保存存储(纯虚函数)。
virtual void build_vectors() = 0
描述: 构建文本向量(纯虚函数)。
保护方法
void load_store(const std::string& path)
描述: 从指定路径加载存储。
void save_store(const std::string& path)
描述: 将存储保存到指定路径。
ChatMemory 类
描述
ChatMemory 类继承自 MemoryBase,用于管理聊天记忆。
构造函数
ChatMemory()
描述: 默认构造函数。
析构函数
~ChatMemory() override
描述: 清理资源。
公共方法
static ChatMemory* load(const std::string& path)
描述: 从路径加载
ChatMemory实例。返回: 加载的实例指针。
void save(const std::string& path) override
描述: 保存聊天记忆到指定路径。
void build_vectors() override
描述: 构建聊天记忆的向量。
std::string get_latest(std::string key)
描述: 获取指定键的最新记忆。
void add(const std::vector<Prompt>& prompts)
描述: 添加提示到记忆中。
私有成员
json memory_:存储记忆的 JSON 对象。
Knowledge 类
描述
Knowledge 类继承自 MemoryBase,用于管理知识库。
构造函数
Knowledge()
描述: 默认构造函数。
析构函数
~Knowledge() override
描述: 清理资源。
公共方法
static Knowledge* load(const std::string& path)
描述: 从路径加载
Knowledge实例。返回: 加载的实例指针。
void save(const std::string& path) override
描述: 保存知识库到指定路径。
void build_vectors() override
描述: 构建知识库的向量。
私有成员
std::unique_ptr<Document> document_:指向文档的智能指针。
Pipeline 类
描述
Pipeline 类用于处理输入字符串,并管理不同的模块,包括 LLM、嵌入、知识库和聊天记忆。
构造函数
Pipeline()
描述: 默认构造函数,用于初始化
Pipeline实例。
析构函数
~Pipeline()
描述: 析构函数,用于清理资源。
公共方法
static Pipeline* load(const std::string& path)
描述: 从指定路径加载
Pipeline实例。参数:
path:配置文件路径。
返回: 加载的
Pipeline实例指针。
void invoke(const std::string& str)
描述: 处理输入字符串并执行相应操作。
参数:
str:输入字符串。
私有方法
bool need_memory(const std::string& str)
描述: 判断输入字符串是否需要记忆模块。
bool need_knowledge(const std::string& str)
描述: 判断输入字符串是否需要知识库模块。
std::string build_prompt(const std::string& str)
描述: 根据输入字符串构建提示。
私有成员
std::unique_ptr<Llm> llm_:指向 LLM 实例的智能指针。std::shared_ptr<Embedding> embedding_:指向嵌入实例的共享指针。std::unique_ptr<Knowledge> knowledge_:指向知识库实例的智能指针。std::unique_ptr<ChatMemory> memory_:指向聊天记忆实例的智能指针。std::string system_:系统信息字符串。std::string user_:用户信息字符串。std::string assistant_:助手信息字符串。std::vector<Prompt> prompts_:提示的向量。json config_:配置的 JSON 对象。