Source code for langchain_community.embeddings.llamacpp
from typing import Any, Dict, List, Optional
from langchain_core.embeddings import Embeddings
from langchain_core.pydantic_v1 import BaseModel, Extra, Field, root_validator
[docs]class LlamaCppEmbeddings(BaseModel, Embeddings):
"""llama.cpp嵌入模型。
要使用,您应该已安装llama-cpp-python库,并将Llama模型的路径作为构造函数的命名参数提供。
查看:https://github.com/abetlen/llama-cpp-python
示例:
.. code-block:: python
from langchain_community.embeddings import LlamaCppEmbeddings
llama = LlamaCppEmbeddings(model_path="/path/to/model.bin")"""
client: Any #: :meta private:
model_path: str
n_ctx: int = Field(512, alias="n_ctx")
"""标记上下文窗口。"""
n_parts: int = Field(-1, alias="n_parts")
"""将模型分割成的部分数量。
如果是-1,则部分数量会自动确定。"""
seed: int = Field(-1, alias="seed")
"""种子。如果为-1,则使用随机种子。"""
f16_kv: bool = Field(False, alias="f16_kv")
"""为键/值缓存使用半精度。"""
logits_all: bool = Field(False, alias="logits_all")
"""返回所有标记的logits,而不仅仅是最后一个标记。"""
vocab_only: bool = Field(False, alias="vocab_only")
"""只加载词汇表,不加载权重。"""
use_mlock: bool = Field(False, alias="use_mlock")
"""强制系统将模型保留在内存中。"""
n_threads: Optional[int] = Field(None, alias="n_threads")
"""线程数。如果为None,则线程数会自动确定。"""
n_batch: Optional[int] = Field(512, alias="n_batch")
"""并行处理的令牌数量。
应该是介于1和n_ctx之间的数字。"""
n_gpu_layers: Optional[int] = Field(None, alias="n_gpu_layers")
"""要加载到GPU内存中的层数。默认值为None。"""
verbose: bool = Field(True, alias="verbose")
"""将详细输出打印到stderr。"""
class Config:
"""此pydantic对象的配置。"""
extra = Extra.forbid
@root_validator()
def validate_environment(cls, values: Dict) -> Dict:
"""验证llama-cpp-python库是否已安装。"""
model_path = values["model_path"]
model_param_names = [
"n_ctx",
"n_parts",
"seed",
"f16_kv",
"logits_all",
"vocab_only",
"use_mlock",
"n_threads",
"n_batch",
"verbose",
]
model_params = {k: values[k] for k in model_param_names}
# For backwards compatibility, only include if non-null.
if values["n_gpu_layers"] is not None:
model_params["n_gpu_layers"] = values["n_gpu_layers"]
try:
from llama_cpp import Llama
values["client"] = Llama(model_path, embedding=True, **model_params)
except ImportError:
raise ImportError(
"Could not import llama-cpp-python library. "
"Please install the llama-cpp-python library to "
"use this embedding model: pip install llama-cpp-python"
)
except Exception as e:
raise ValueError(
f"Could not load Llama model from path: {model_path}. "
f"Received error {e}"
)
return values
[docs] def embed_documents(self, texts: List[str]) -> List[List[float]]:
"""使用Llama模型嵌入文档列表。
参数:
texts: 要嵌入的文本列表。
返回:
每个文本的嵌入列表。
"""
embeddings = [self.client.embed(text) for text in texts]
return [list(map(float, e)) for e in embeddings]
[docs] def embed_query(self, text: str) -> List[float]:
"""使用Llama模型嵌入一个查询。
参数:
text: 要嵌入的文本。
返回:
文本的嵌入结果。
"""
embedding = self.client.embed(text)
return list(map(float, embedding))