Source code for langchain_community.embeddings.bookend

"""封装Bookend AI嵌入模型。"""

import json
from typing import Any, List

import requests
from langchain_core.embeddings import Embeddings
from langchain_core.pydantic_v1 import BaseModel, Field

API_URL = "https://api.bookend.ai/"
DEFAULT_TASK = "embeddings"
PATH = "/models/predict"


[docs]class BookendEmbeddings(BaseModel, Embeddings): """Bookend AI句子转换嵌入模型。 示例: .. code-block:: python from langchain_community.embeddings import BookendEmbeddings bookend = BookendEmbeddings( domain={domain} api_token={api_token} model_id={model_id} ) bookend.embed_documents([ "请戴上耳罩,因为我听不见你说话。", "婴儿湿巾是由巧克力星尘制成的。" ]) bookend.embed_query( "她只用鲜艳的颜色来绘画;她不喜欢淡彩。" ) """ domain: str """请求在https://bookend.ai/上注册一个域名以使用这个嵌入模块。""" api_token: str """在https://bookend.ai/请求API令牌以使用此嵌入模块。""" model_id: str """要使用的嵌入模型ID。""" auth_header: dict = Field(default_factory=dict) def __init__(self, **kwargs: Any): super().__init__(**kwargs) self.auth_header = {"Authorization": "Basic {}".format(self.api_token)}
[docs] def embed_documents(self, texts: List[str]) -> List[List[float]]: """使用Bookend部署的嵌入模型来嵌入文档。 参数: texts: 要嵌入的文本列表。 返回: 每个文本的嵌入列表。 """ result = [] headers = self.auth_header headers["Content-Type"] = "application/json; charset=utf-8" params = { "model_id": self.model_id, "task": DEFAULT_TASK, } for text in texts: data = json.dumps( {"text": text, "question": None, "context": None, "instruction": None} ) r = requests.request( "POST", API_URL + self.domain + PATH, headers=headers, params=params, data=data, ) result.append(r.json()[0]["data"]) return result
[docs] def embed_query(self, text: str) -> List[float]: """使用Bookend部署的嵌入模型嵌入一个查询。 参数: text: 要嵌入的文本。 返回: 文本的嵌入。 """ return self.embed_documents([text])[0]