> ## Documentation Index
> Fetch the complete documentation index at: https://cndoc-langchain.site/llms.txt
> Use this file to discover all available pages before exploring further.

# SageMaker 集成

> 使用 LangChain Python 与 SageMaker 嵌入模型集成。

让我们加载 `SageMaker Endpoints Embeddings` 类。如果您在 SageMaker 上托管了例如您自己的 Hugging Face 模型，则可以使用该类。

有关如何执行此操作的说明，请参阅 [在 SageMaker 上使用 Hugging Face 进行自定义推理](https://www.philschmid.de/custom-inference-huggingface-sagemaker)。

**注意**：为了处理批处理请求，您需要在自定义 `inference.py` 脚本中的 `predict_fn()` 函数内调整返回行：

从

`return {"vectors": sentence_embeddings[0].tolist()}`

更改为：

`return {"vectors": sentence_embeddings.tolist()}`。

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
!pip3 install langchain boto3
```

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
import json
from typing import Dict, List

from langchain_community.embeddings import SagemakerEndpointEmbeddings
from langchain_community.embeddings.sagemaker_endpoint import EmbeddingsContentHandler


class ContentHandler(EmbeddingsContentHandler):
    content_type = "application/json"
    accepts = "application/json"

    def transform_input(self, inputs: list[str], model_kwargs: Dict) -> bytes:
        """
        将输入转换为 SageMaker 端点可以处理的字节。
        参数:
            inputs: 输入字符串列表。
            model_kwargs: 要传递给端点的额外关键字参数。
        返回:
            转换后的字节输入。
        """
        # 示例：inference.py 期望一个带有 "inputs" 键的 JSON 字符串：
        input_str = json.dumps({"inputs": inputs, **model_kwargs})
        return input_str.encode("utf-8")

    def transform_output(self, output: bytes) -> List[List[float]]:
        """
        将端点的字节输出转换为嵌入列表。
        参数:
            output: 来自 SageMaker 端点的字节输出。
        返回:
            转换后的输出 - 嵌入列表
        注意:
            外部列表的长度是输入字符串的数量。
            内部列表的长度是嵌入维度。
        """
        # 示例：inference.py 返回一个带有嵌入列表的 JSON 字符串，
        # 嵌入列表位于 "vectors" 键中：
        response_json = json.loads(output.read().decode("utf-8"))
        return response_json["vectors"]


content_handler = ContentHandler()


embeddings = SagemakerEndpointEmbeddings(
    # credentials_profile_name="credentials-profile-name",
    endpoint_name="huggingface-pytorch-inference-2023-03-21-16-14-03-834",
    region_name="us-east-1",
    content_handler=content_handler,
)


# client = boto3.client(
#     "sagemaker-runtime",
#     region_name="us-west-2"
# )
# embeddings = SagemakerEndpointEmbeddings(
#     endpoint_name="huggingface-pytorch-inference-2023-03-21-16-14-03-834",
#     client=client
#     content_handler=content_handler,
# )
```

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
query_result = embeddings.embed_query("foo")
```

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
doc_results = embeddings.embed_documents(["foo"])
```

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
doc_results
```

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
```

***

<div className="source-links">
  <Callout icon="terminal-2">
    [连接这些文档](/use-these-docs) 到 Claude、VSCode 等，通过 MCP 获取实时答案。
  </Callout>

  <Callout icon="edit">
    [在 GitHub 上编辑此页面](https://github.com/langchain-ai/docs/edit/main/src/oss/python/integrations/embeddings/sagemaker-endpoint.mdx) 或 [提交问题](https://github.com/langchain-ai/docs/issues/new/choose)。
  </Callout>
</div>
