mirror of
				https://github.com/hwchase17/langchain.git
				synced 2025-10-30 23:29:54 +00:00 
			
		
		
		
	Signed-off-by: ChengZi <chen.zhang@zilliz.com> Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com> Co-authored-by: Bagatur <22008038+baskaryan@users.noreply.github.com> Co-authored-by: Dan O'Donovan <dan.odonovan@gmail.com> Co-authored-by: Tom Daniel Grande <tomdgrande@gmail.com> Co-authored-by: Grande <Tom.Daniel.Grande@statsbygg.no> Co-authored-by: Bagatur <baskaryan@gmail.com> Co-authored-by: ccurme <chester.curme@gmail.com> Co-authored-by: Harrison Chase <hw.chase.17@gmail.com> Co-authored-by: Tomaz Bratanic <bratanic.tomaz@gmail.com> Co-authored-by: ZhangShenao <15201440436@163.com> Co-authored-by: Friso H. Kingma <fhkingma@gmail.com> Co-authored-by: ChengZi <chen.zhang@zilliz.com> Co-authored-by: Nuno Campos <nuno@langchain.dev> Co-authored-by: Morgante Pell <morgantep@google.com>
		
			
				
	
	
		
			129 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Any, Dict, List, Optional
 | |
| 
 | |
| from langchain_core.embeddings import Embeddings
 | |
| from langchain_core.utils import get_from_dict_or_env
 | |
| from pydantic import BaseModel, Field, model_validator
 | |
| 
 | |
| 
 | |
| class ZhipuAIEmbeddings(BaseModel, Embeddings):
 | |
|     """ZhipuAI embedding model integration.
 | |
| 
 | |
|     Setup:
 | |
| 
 | |
|         To use, you should have the ``zhipuai`` python package installed, and the
 | |
|         environment variable ``ZHIPU_API_KEY`` set with your API KEY.
 | |
| 
 | |
|         More instructions about ZhipuAi Embeddings, you can get it
 | |
|         from  https://open.bigmodel.cn/dev/api#vector
 | |
| 
 | |
|         .. code-block:: bash
 | |
| 
 | |
|             pip install -U zhipuai
 | |
|             export ZHIPU_API_KEY="your-api-key"
 | |
| 
 | |
|     Key init args — completion params:
 | |
|         model: Optional[str]
 | |
|             Name of ZhipuAI model to use.
 | |
|         api_key: str
 | |
|             Automatically inferred from env var `ZHIPU_API_KEY` if not provided.
 | |
| 
 | |
|     See full list of supported init args and their descriptions in the params section.
 | |
| 
 | |
|     Instantiate:
 | |
| 
 | |
|         .. code-block:: python
 | |
| 
 | |
|             from langchain_community.embeddings import ZhipuAIEmbeddings
 | |
| 
 | |
|             embed = ZhipuAIEmbeddings(
 | |
|                 model="embedding-2",
 | |
|                 # api_key="...",
 | |
|             )
 | |
| 
 | |
|     Embed single text:
 | |
|         .. code-block:: python
 | |
| 
 | |
|             input_text = "The meaning of life is 42"
 | |
|             embed.embed_query(input_text)
 | |
| 
 | |
|         .. code-block:: python
 | |
| 
 | |
|             [-0.003832892, 0.049372625, -0.035413884, -0.019301128, 0.0068899863, 0.01248398, -0.022153955, 0.006623926, 0.00778216, 0.009558191, ...]
 | |
| 
 | |
| 
 | |
|     Embed multiple text:
 | |
|         .. code-block:: python
 | |
| 
 | |
|             input_texts = ["This is a test query1.", "This is a test query2."]
 | |
|             embed.embed_documents(input_texts)
 | |
| 
 | |
|         .. code-block:: python
 | |
| 
 | |
|             [
 | |
|                 [0.0083934665, 0.037985895, -0.06684559, -0.039616987, 0.015481004, -0.023952313, ...],
 | |
|                 [-0.02713102, -0.005470169, 0.032321047, 0.042484466, 0.023290444, 0.02170547, ...]
 | |
|             ]
 | |
|     """  # noqa: E501
 | |
| 
 | |
|     client: Any = Field(default=None, exclude=True)  #: :meta private:
 | |
|     model: str = Field(default="embedding-2")
 | |
|     """Model name"""
 | |
|     api_key: str
 | |
|     """Automatically inferred from env var `ZHIPU_API_KEY` if not provided."""
 | |
|     dimensions: Optional[int] = None
 | |
|     """The number of dimensions the resulting output embeddings should have.
 | |
| 
 | |
|     Only supported in `embedding-3` and later models.
 | |
|     """
 | |
| 
 | |
|     @model_validator(mode="before")
 | |
|     @classmethod
 | |
|     def validate_environment(cls, values: Dict) -> Any:
 | |
|         """Validate that auth token exists in environment."""
 | |
|         values["api_key"] = get_from_dict_or_env(values, "api_key", "ZHIPUAI_API_KEY")
 | |
|         try:
 | |
|             from zhipuai import ZhipuAI
 | |
| 
 | |
|             values["client"] = ZhipuAI(api_key=values["api_key"])
 | |
|         except ImportError:
 | |
|             raise ImportError(
 | |
|                 "Could not import zhipuai python package."
 | |
|                 "Please install it with `pip install zhipuai`."
 | |
|             )
 | |
|         return values
 | |
| 
 | |
|     def embed_query(self, text: str) -> List[float]:
 | |
|         """
 | |
|         Embeds a text using the AutoVOT algorithm.
 | |
| 
 | |
|         Args:
 | |
|             text: A text to embed.
 | |
| 
 | |
|         Returns:
 | |
|             Input document's embedded list.
 | |
|         """
 | |
|         resp = self.embed_documents([text])
 | |
|         return resp[0]
 | |
| 
 | |
|     def embed_documents(self, texts: List[str]) -> List[List[float]]:
 | |
|         """
 | |
|         Embeds a list of text documents using the AutoVOT algorithm.
 | |
| 
 | |
|         Args:
 | |
|             texts: A list of text documents to embed.
 | |
| 
 | |
|         Returns:
 | |
|             A list of embeddings for each document in the input list.
 | |
|             Each embedding is represented as a list of float values.
 | |
|         """
 | |
|         if self.dimensions is not None:
 | |
|             resp = self.client.embeddings.create(
 | |
|                 model=self.model,
 | |
|                 input=texts,
 | |
|                 dimensions=self.dimensions,
 | |
|             )
 | |
|         else:
 | |
|             resp = self.client.embeddings.create(model=self.model, input=texts)
 | |
|         embeddings = [r.embedding for r in resp.data]
 | |
|         return embeddings
 |