跳转到内容

langchain-google-vertexai

PyPI - Version PyPI - License PyPI - Downloads

注意

此软件包参考尚未完全迁移到 v1。

langchain_google_vertexai

LangChain Google 生成式 AI 集成.

此模块包含 LangChain 与 Vertex AI 服务的集成——包括 Google 基础模型、Vertex Model Garden 上可用的第三方基础模型。

支持的集成

  1. Google 基础模型:Gemini 系列、Codey、embeddings - ChatVertexAIVertexAIVertexAIEmbeddings
  2. 其他 Google 基础模型:Imagen - VertexAIImageCaptioningVertexAIImageCaptioningChatVertexAIImageEditorChatVertexAIImageGeneratorChatVertexAIVisualQnAChat
  3. Vertex Model Garden 上作为 API (model-as-a-service) 提供的第三方基础模型(Mistral、Llama、Anthropic)- model_garden.ChatAnthropicVertexmodel_garden_maas.VertexModelGardenLlamamodel_garden_maas.VertexModelGardenMistral
  4. 从 Vertex Model Garden 或 Huggingface 部署在 Vertex AI 端点上的第三方基础模型 - VertexAIModelGarden
  5. 在 Vertex AI 端点或本地部署的 Gemma - GemmaChatLocalHFGemmaChatLocalKaggleGemmaChatVertexAIModelGardenGemmaLocalHFGemmaLocalKaggleGemmaVertexAIModelGarden
  6. Vertex AI 上的 Vector Search - VectorSearchVectorStoreVectorSearchVectorStoreDatastoreVectorSearchVectorStoreGCS
  7. 用于生成式 AI 的 Vertex AI 评估器 - VertexPairWiseStringEvaluatorVertexStringEvaluator

请查看每个类的详细文档以获取更多信息。

安装

.. code-block:: bash pip install langchain-google-vertexai

您需要启用所需的 Google Cloud API(取决于您使用的集成)并通过以下方式之一设置凭据:- 为您的环境配置凭据(gcloud、工作负载身份等)- 将服务帐户 JSON 文件的路径存储为 GOOGLE_APPLICATION_CREDENTIALS 环境变量

此代码库使用 google.auth 库,该库首先查找上述应用程序凭据变量,然后查找系统级身份验证。

更多信息

  • 凭据类型 <https://cloud.google.com/docs/authentication/application-default-credentials#GAC>__
  • google.auth API 参考 <https://googleapis.dev/python/google-auth/latest/reference/google.auth.html#module-google.auth>__
函数 描述
create_structured_runnable

创建一个使用 OpenAI 函数的可运行序列。

get_vertex_maas_model

返回一个相应的 Vertex MaaS 实例。

create_context_cache

为某个模型中的内容创建一个缓存。

ChatVertexAI

基类:_VertexAICommon, BaseChatModel

Google Cloud Vertex AI 聊天模型集成。

设置

您必须满足以下任一条件:- 为您的环境配置凭据(gcloud、工作负载身份等)- 将服务帐户 JSON 文件的路径存储为 GOOGLE_APPLICATION_CREDENTIALS 环境变量

此代码库使用 google.auth 库,该库首先查找上述应用程序凭据变量,然后查找系统级身份验证。

更多信息

  • 凭据类型 <https://cloud.google.com/docs/authentication/application-default-credentials#GAC>__
  • google.auth API 参考 <https://googleapis.dev/python/google-auth/latest/reference/google.auth.html#module-google.auth>__

关键初始化参数 — 完成参数:model: str 要使用的 ChatVertexAI 模型名称。例如 'gemini-2.0-flash-001', 'gemini-2.5-pro', 等。temperature: Optional[float] 采样温度。seed: Optional[int] 要使用的采样整数。max_tokens: Optional[int] 生成的最大 token 数。stop: Optional[List[str]] 默认停止序列。safety_settings: Optional[Dict[vertexai.generative_models.HarmCategory, vertexai.generative_models.HarmBlockThreshold]] 用于所有生成的默认安全设置。

关键初始化参数 — 客户端参数:max_retries: int 最大重试次数。wait_exponential_kwargs: Optional[dict[str, float]] 带有 wait_exponential 参数的可选字典:- multiplier: 初始等待时间乘数(默认为 1.0)- min: 最小等待时间(秒)(默认为 4.0)- max: 最大等待时间(秒)(默认为 10.0)- exp_base: 要使用的指数基数(默认为 2.0)credentials: Optional[google.auth.credentials.Credentials] 进行 API 调用时使用的默认自定义凭据。如果未提供,将从环境中获取凭据。project: Optional[str] 进行 Vertex API 调用时使用的默认 GCP 项目。location: str = "us-central1" 进行 API 调用时使用的默认位置。request_parallelism: int = 5 允许向 VertexAI 模型发出的请求的并行度。(默认为 5)base_url: Optional[str] API 请求的基础 URL。

有关支持的初始化参数及其描述的完整列表,请参见参数部分。

实例化

.. code-block:: python

from langchain_google_vertexai import ChatVertexAI

llm = ChatVertexAI(
    model="gemini-1.5-flash-001",
    temperature=0,
    max_tokens=None,
    max_retries=6,
    stop=None,
    # other params...
)
调用

.. code-block:: python

messages = [
    (
        "system",
        "You are a helpful translator. Translate the user sentence to French.",
    ),
    ("human", "I love programming."),
]
llm.invoke(messages)

.. code-block:: python

AIMessage(
    content="J'adore programmer. ",
    response_metadata={
        "is_blocked": False,
        "safety_ratings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
        ],
        "citation_metadata": None,
        "usage_metadata": {
            "prompt_token_count": 17,
            "candidates_token_count": 7,
            "total_token_count": 24,
        },
    },
    id="run-925ce305-2268-44c4-875f-dde9128520ad-0",
)

.. code-block:: python

for chunk in llm.stream(messages):
    print(chunk)

.. code-block:: python

AIMessageChunk(
    content="J",
    response_metadata={
        "is_blocked": False,
        "safety_ratings": [],
        "citation_metadata": None,
    },
    id="run-9df01d73-84d9-42db-9d6b-b1466a019e89",
)
AIMessageChunk(
    content="'adore programmer. ",
    response_metadata={
        "is_blocked": False,
        "safety_ratings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
        ],
        "citation_metadata": None,
    },
    id="run-9df01d73-84d9-42db-9d6b-b1466a019e89",
)
AIMessageChunk(
    content="",
    response_metadata={
        "is_blocked": False,
        "safety_ratings": [],
        "citation_metadata": None,
        "usage_metadata": {
            "prompt_token_count": 17,
            "candidates_token_count": 7,
            "total_token_count": 24,
        },
    },
    id="run-9df01d73-84d9-42db-9d6b-b1466a019e89",
)

.. code-block:: python

stream = llm.stream(messages)
full = next(stream)
for chunk in stream:
    full += chunk
full

.. code-block:: python

AIMessageChunk(
    content="J'adore programmer. ",
    response_metadata={
        "is_blocked": False,
        "safety_ratings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
        ],
        "citation_metadata": None,
        "usage_metadata": {
            "prompt_token_count": 17,
            "candidates_token_count": 7,
            "total_token_count": 24,
        },
    },
    id="run-b7f7492c-4cb5-42d0-8fc3-dce9b293b0fb",
)
异步

.. code-block:: python

await llm.ainvoke(messages)

# stream:
# async for chunk in (await llm.astream(messages))

# batch:
# await llm.abatch([messages])

.. code-block:: python

AIMessage(
    content="J'adore programmer. ",
    response_metadata={
        "is_blocked": False,
        "safety_ratings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
        ],
        "citation_metadata": None,
        "usage_metadata": {
            "prompt_token_count": 17,
            "candidates_token_count": 7,
            "total_token_count": 24,
        },
    },
    id="run-925ce305-2268-44c4-875f-dde9128520ad-0",
)
上下文缓存

上下文缓存允许您存储和重用内容(例如 PDF、图像)以加快处理速度。cached_content 参数接受通过 Google Generative AI API 与 Vertex AI 创建的缓存名称。以下是从 GCS 缓存内容并查询它的示例。

示例

这将缓存 GCS 中的内容并进行查询。

.. code-block:: python

from google import genai
from google.genai.types import (
    Content,
    CreateCachedContentConfig,
    HttpOptions,
    Part,
)
from langchain_google_vertexai import ChatVertexAI
from langchain_core.messages import HumanMessage

client = genai.Client(http_options=HttpOptions(api_version="v1beta1"))

contents = [
    Content(
        role="user",
        parts=[
            Part.from_uri(
                file_uri="gs://your-bucket/file1",
                mime_type="application/pdf",
            ),
            Part.from_uri(
                file_uri="gs://your-bucket/file2",
                mime_type="image/jpeg",
            ),
        ],
    )
]

cache = client.caches.create(
    model="gemini-1.5-flash-001",
    config=CreateCachedContentConfig(
        contents=contents,
        system_instruction="You are an expert content analyzer.",
        display_name="content-cache",
        ttl="300s",
    ),
)

llm = ChatVertexAI(
    model_name="gemini-1.5-flash-001",
    cached_content=cache.name,
)
message = HumanMessage(
    content="Provide a summary of the key information across the content."
)
llm.invoke([message])
工具调用

.. code-block:: python

from pydantic import BaseModel, Field


class GetWeather(BaseModel):
    '''Get the current weather in a given location'''

    location: str = Field(
        ..., description="The city and state, e.g. San Francisco, CA"
    )


class GetPopulation(BaseModel):
    '''Get the current population in a given location'''

    location: str = Field(
        ..., description="The city and state, e.g. San Francisco, CA"
    )


llm_with_tools = llm.bind_tools([GetWeather, GetPopulation])
ai_msg = llm_with_tools.invoke(
    "Which city is hotter today and which is bigger: LA or NY?"
)
ai_msg.tool_calls

.. code-block:: python

[
    {
        "name": "GetWeather",
        "args": {"location": "Los Angeles, CA"},
        "id": "2a2401fa-40db-470d-83ce-4e52de910d9e",
    },
    {
        "name": "GetWeather",
        "args": {"location": "New York City, NY"},
        "id": "96761deb-ab7f-4ef9-b4b4-6d44562fc46e",
    },
    {
        "name": "GetPopulation",
        "args": {"location": "Los Angeles, CA"},
        "id": "9147d532-abee-43a2-adb5-12f164300484",
    },
    {
        "name": "GetPopulation",
        "args": {"location": "New York City, NY"},
        "id": "c43374ea-bde5-49ca-8487-5b83ebeea1e6",
    },
]

更多信息请参见 ChatVertexAI.bind_tools() 方法。

内置代码执行

.. code-block:: python

from google.cloud.aiplatform_v1beta1.types import Tool as VertexTool
from langchain_google_vertexai import ChatVertexAI

llm = ChatVertexAI(model="gemini-2.0-flash-exp")
resp = llm.invoke(
    "What is 3^3?",
    tools=[VertexTool(code_execution={})],
)
结构化输出

.. code-block:: python

from typing import Optional

from pydantic import BaseModel, Field


class Joke(BaseModel):
    '''Joke to tell user.'''

    setup: str = Field(description="The setup of the joke")
    punchline: str = Field(description="The punchline to the joke")
    rating: Optional[int] = Field(
        default=None, description="How funny the joke is, from 1 to 10"
    )


structured_llm = llm.with_structured_output(Joke)
structured_llm.invoke("Tell me a joke about cats")

.. code-block:: python

Joke(
    setup="What do you call a cat that loves to bowl?",
    punchline="An alley cat!",
    rating=None,
)

更多信息请参见 ChatVertexAI.with_structured_output()

图像输入

.. code-block:: python

import base64
import httpx
from langchain_core.messages import HumanMessage

image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
message = HumanMessage(
    content=[
        {"type": "text", "text": "describe the weather in this image"},
        {
            "type": "image_url",
            "image_url": {"url": f"data:image/jpeg;base64,{image_data}"},
        },
    ],
)
ai_msg = llm.invoke([message])
ai_msg.content

.. code-block:: python

"The weather in this image appears to be sunny and pleasant. The sky is a bright blue with scattered white clouds, suggesting a clear and mild day. The lush green grass indicates recent rainfall or sufficient moisture. The absence of strong shadows suggests that the sun is high in the sky, possibly late afternoon. Overall, the image conveys a sense of tranquility and warmth, characteristic of a beautiful summer day."

您也可以指向 GCS 文件,这样更快/更高效,因为字节是在来回传输。

.. code-block:: python

llm.invoke(
    [
        HumanMessage(
            [
                "What's in the image?",
                {
                    "type": "media",
                    "file_uri": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                    "mime_type": "image/jpeg",
                },
            ]
        )
    ]
).content

.. code-block:: python

'The image is of five blueberry scones arranged on a piece of baking paper. Here is a list of what is in the picture:* **Five blueberry scones:** They are scattered across the parchment paper, dusted with powdered sugar.  * **Two cups of coffee:**  Two white cups with saucers. One appears full, the other partially drunk. * **A bowl of blueberries:** A brown bowl is filled with fresh blueberries, placed near the scones.* **A spoon:**  A silver spoon with the words "Let\'s Jam" rests on the paper.* **Pink peonies:** Several pink peonies lie beside the scones, adding a touch of color.* **Baking paper:** The scones, cups, bowl, and spoon are arranged on a piece of white baking paper, splattered with purple.  The paper is crinkled and sits on a dark surface. The image has a rustic and delicious feel, suggesting a cozy and enjoyable breakfast or brunch setting.'
PDF 输入

.. code-block:: python

import base64
from langchain_core.messages import HumanMessage

pdf_bytes = open("/path/to/your/test.pdf", "rb").read()
pdf_base64 = base64.b64encode(pdf_bytes).decode("utf-8")
message = HumanMessage(
    content=[
        {"type": "text", "text": "describe the document in a sentence"},
        {
            "type": "file",
            "mime_type": "application/pdf",
            "base64": pdf_base64,
        },
    ]
)
ai_msg = llm.invoke([message])
ai_msg.content

.. code-block:: python

"This research paper describes a system developed for SemEval-2025 Task 9, which aims to automate the detection of food hazards from recall reports, addressing the class imbalance problem by leveraging LLM-based data augmentation techniques and transformer-based models to improve performance."

您也可以指向 GCS 文件。

.. code-block:: python

llm.invoke(
    [
        HumanMessage(
            [
                "describe the document in a sentence",
                {
                    "type": "media",
                    "file_uri": "gs://cloud-samples-data/generative-ai/pdf/1706.03762v7.pdf",
                    "mime_type": "application/pdf",
                },
            ]
        )
    ]
).content

.. code-block:: python

"The article introduces Transformer, a new model architecture for sequence transduction based solely on attention mechanisms, outperforming previous models in machine translation tasks and demonstrating good generalization to English constituency parsing."
视频输入

.. code-block:: python

import base64
from langchain_core.messages import HumanMessage

video_bytes = open("/path/to/your/video.mp4", "rb").read()
video_base64 = base64.b64encode(video_bytes).decode("utf-8")

message = HumanMessage(
    content=[
        {
            "type": "text",
            "text": "describe what's in this video in a sentence",
        },
        {
            "type": "file",
            "mime_type": "video/mp4",
            "base64": video_base64,
        },
    ]
)
ai_msg = llm.invoke([message])
ai_msg.content

.. code-block:: python

"Tom and Jerry, along with a turkey, engage in a chaotic Thanksgiving-themed adventure involving a corn-on-the-cob chase, maze antics, and a disastrous attempt to prepare a turkey dinner."

您也可以直接传递 YouTube URL

.. code-block:: python

from langchain_core.messages import HumanMessage

message = HumanMessage(
    content=[
        {"type": "text", "text": "summarize the video in 3 sentences."},
        {
            "type": "media",
            "file_uri": "https://www.youtube.com/watch?v=9hE5-98ZeCg",
            "mime_type": "video/mp4",
        },
    ]
)
ai_msg = llm.invoke([message])
ai_msg.content

.. code-block:: python

"The video is a demo of multimodal live streaming in Gemini 2.0. The narrator is sharing his screen in AI Studio and asks if the AI can see it. The AI then reads text that is highlighted on the screen, defines the word “multimodal,” and summarizes everything that was seen and heard."

您也可以指向 GCS 文件。

.. code-block:: python

llm = ChatVertexAI(model="gemini-1.0-pro-vision")

llm.invoke(
    [
        HumanMessage(
            [
                "What's in the video?",
                {
                    "type": "media",
                    "file_uri": "gs://cloud-samples-data/video/animals.mp4",
                    "mime_type": "video/mp4",
                },
            ]
        )
    ]
).content

.. code-block:: python

 'The video is about a new feature in Google Photos called "Zoomable Selfies". The feature allows users to take selfies with animals at the zoo. The video shows several examples of people taking selfies with animals, including a tiger, an elephant, and a sea otter. The video also shows how the feature works. Users simply need to open the Google Photos app and select the "Zoomable Selfies" option. Then, they need to choose an animal from the list of available animals. The app will then guide the user through the process of taking the selfie.'
音频输入

.. code-block:: python

import base64
from langchain_core.messages import HumanMessage

audio_bytes = open("/path/to/your/audio.mp3", "rb").read()
audio_base64 = base64.b64encode(audio_bytes).decode("utf-8")

message = HumanMessage(
    content=[
        {"type": "text", "text": "summarize this audio in a sentence"},
        {
            "type": "file",
            "mime_type": "audio/mp3",
            "base64": audio_base64,
        },
    ]
)
ai_msg = llm.invoke([message])
ai_msg.content

.. code-block:: python

"In this episode of the Made by Google podcast, Stephen Johnson and Simon Tokumine discuss NotebookLM, a tool designed to help users understand complex material in various modalities, with a focus on its unexpected uses, the development of audio overviews, and the implementation of new features like mind maps and source discovery."

您也可以指向 GCS 文件。

.. code-block:: python

from langchain_core.messages import HumanMessage

llm = ChatVertexAI(model="gemini-1.5-flash-001")

llm.invoke(
    [
        HumanMessage(
            [
                "What's this audio about?",
                {
                    "type": "media",
                    "file_uri": "gs://cloud-samples-data/generative-ai/audio/pixel.mp3",
                    "mime_type": "audio/mpeg",
                },
            ]
        )
    ]
).content

.. code-block:: python

"This audio is an interview with two product managers from Google who work on Pixel feature drops. They discuss how feature drops are important for showcasing how Google devices are constantly improving and getting better. They also discuss some of the highlights of the January feature drop and the new features coming in the March drop for Pixel phones and Pixel watches. The interview concludes with discussion of how user feedback is extremely important to them in deciding which features to include in the feature drops."
令牌使用情况

.. code-block:: python

ai_msg = llm.invoke(messages)
ai_msg.usage_metadata

.. code-block:: python

{"input_tokens": 17, "output_tokens": 7, "total_tokens": 24}
Logprobs

.. code-block:: python

llm = ChatVertexAI(model="gemini-1.5-flash-001", logprobs=True)
ai_msg = llm.invoke(messages)
ai_msg.response_metadata["logprobs_result"]

.. code-block:: python

[
    {"token": "J", "logprob": -1.549651415189146e-06, "top_logprobs": []},
    {"token": "'", "logprob": -1.549651415189146e-06, "top_logprobs": []},
    {"token": "adore", "logprob": 0.0, "top_logprobs": []},
    {
        "token": " programmer",
        "logprob": -1.1922384146600962e-07,
        "top_logprobs": [],
    },
    {"token": ".", "logprob": -4.827636439586058e-05, "top_logprobs": []},
    {"token": " ", "logprob": -0.018011733889579773, "top_logprobs": []},
    {"token": "\\n", "logprob": -0.0008687592926435173, "top_logprobs": []},
]

响应元数据 .. code-block:: python

    ai_msg = llm.invoke(messages)
    ai_msg.response_metadata

.. code-block:: python

    {
        "is_blocked": False,
        "safety_ratings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
        ],
        "usage_metadata": {
            "prompt_token_count": 17,
            "candidates_token_count": 7,
            "total_token_count": 24,
        },
    }

安全设置 .. code-block:: python

    from langchain_google_vertexai import HarmBlockThreshold, HarmCategory

    llm = ChatVertexAI(
        model="gemini-1.5-pro",
        safety_settings={
            HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
            HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
            HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
            HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
        },
    )

    llm.invoke(messages).response_metadata

.. code-block:: python

    {
        "is_blocked": False,
        "safety_ratings": [
            {
                "category": "HARM_CATEGORY_HATE_SPEECH",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_HARASSMENT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
            {
                "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
                "probability_label": "NEGLIGIBLE",
                "probability_score": 0.1,
                "blocked": False,
                "severity": "HARM_SEVERITY_NEGLIGIBLE",
                "severity_score": 0.1,
            },
        ],
        "usage_metadata": {
            "prompt_token_count": 17,
            "candidates_token_count": 7,
            "total_token_count": 24,
        },
    }
方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

将一系列提示传递给模型并返回模型生成的内容。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

dict

返回 LLM 的字典。

__init__

需要 mypy 类型检查来识别 model_name 是一个有效的参数

is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 langchain 对象的命名空间。

build_extra

根据传入的额外参数构建额外的关键字参数(kwargs)。

validate_environment

验证 python 包是否存在于环境中。

get_num_tokens

获取文本中存在的 token 数量。

with_structured_output

返回与给定模式匹配的格式化输出的模型包装器。

bind_tools

将类工具(tool-like)对象绑定到此聊天模型。

name 类属性 实例属性

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType 属性

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType 属性

OutputType: Any

获取此 Runnable 的输出类型。

input_schema 属性

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema 属性

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs 属性

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets 属性

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes 属性

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache 类属性 实例属性

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose 类属性 实例属性

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks 类属性 实例属性

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags 类属性 实例属性

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata 类属性 实例属性

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids 类属性 实例属性

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

rate_limiter 类属性 实例属性

rate_limiter: BaseRateLimiter | None = Field(default=None, exclude=True)

一个可选的速率限制器,用于限制请求数量。

disable_streaming 类属性 实例属性

disable_streaming: bool | Literal['tool_calling'] = False

是否为此模型禁用流式传输。

如果绕过流式传输,则 stream/astream/astream_events 将转而调用 invoke/ainvoke

  • 如果为 True,将始终绕过流式传输情况。
  • 如果为 'tool_calling',仅当模型被调用时带有 tools 关键字参数时,才会绕过流式传输情况。换句话说,仅当提供 tools 参数时,LangChain 才会自动切换到非流式行为 (invoke)。这提供了两全其美的方案。
  • 如果为 False(默认值),则在可用时始终使用流式传输情况。

此标志的主要原因是,代码可能是使用 stream 编写的,而用户可能希望将给定模型换成另一个实现不完全支持流式传输的模型。

output_version 类属性 实例属性

output_version: str | None = Field(
    default_factory=from_env("LC_OUTPUT_VERSION", default=None)
)

要存储在消息内容中的 AIMessage 输出格式的版本。

AIMessage.content_blocks 将懒解析 content 的内容为标准格式。此标志可用于额外将标准格式存储在消息内容中,例如,用于序列化目的。

支持的值

  • 'v0':内容中特定于提供商的格式(可以使用 content_blocks 进行懒解析)
  • 'v1':内容中的标准化格式(与 content_blocks 一致)

合作伙伴包(例如 langchain-openai)也可以使用此字段以向后兼容的方式推出新的内容格式。

在版本 1.0 中添加

profile 属性

profile: ModelProfile

返回模型的性能分析信息。

此属性将依赖于 langchain-model-profiles 包来检索聊天模型的能力,例如上下文窗口大小和支持的功能。

引发 描述
ImportError

如果未安装 langchain-model-profiles

返回 描述
ModelProfile

一个 ModelProfile 对象,包含模型的性能分析信息。

project 类属性 实例属性

project: str | None = None

在进行 Vertex API 调用时使用的默认 GCP 项目。

location 类属性 实例属性

location: str = Field(default=_DEFAULT_LOCATION)

进行 API 调用时使用的默认位置。

request_parallelism 类属性 实例属性

request_parallelism: int = 5

允许向 VertexAI 模型发出请求的并行度。

max_retries 类属性 实例属性

max_retries: int = 6

生成时进行的最大重试次数。

stop 类属性 实例属性

stop: list[str] | None = Field(default=None, alias='stop_sequences')

生成时使用的可选停止词列表。

full_model_name 类属性 实例属性

full_model_name: str | None = Field(default=None, exclude=True)

模型端点的全名。

api_endpoint 类属性 实例属性

api_endpoint: str | None = Field(default=None, alias='base_url')

期望的 API 端点,例如 us-central1-aiplatform.googleapis.com

api_transport 类属性 实例属性

api_transport: str | None = None

期望的 API 传输方法,可以是 'grpc' 或 'rest'。如果已定义,则使用 vertexai.init 中的默认参数。

additional_headers 类属性 实例属性

additional_headers: dict[str, str] | None = Field(default=None)

一个表示模型调用的附加头部的键值字典

client_cert_source 类属性 实例属性

client_cert_source: Callable[[], tuple[bytes, bytes]] | None = None

一个返回客户端证书字节和私钥字节的回调函数

credentials 类属性 实例属性

credentials: Any = Field(default=None, exclude=True)

要使用的默认自定义凭据 (google.auth.credentials.Credentials)

endpoint_version 类属性 实例属性

endpoint_version: Literal['v1', 'v1beta1'] = 'v1beta1'

是否使用 v1 或 v1beta1 端点。

v1 性能更高,但 v1beta1 可能包含一些新功能。

prediction_client 属性

prediction_client: PredictionServiceClient | PredictionServiceClient

返回 PredictionServiceClient。

async_prediction_client 属性

async_prediction_client: PredictionServiceAsyncClient | PredictionServiceAsyncClient

返回 PredictionServiceClient。

temperature 类属性 实例属性

temperature: float | None = None

采样温度,它控制了令牌选择的随机性程度。

frequency_penalty 类属性 实例属性

frequency_penalty: float | None = None

正值会惩罚在生成文本中重复出现的标记,从而降低重复内容的概率。

presence_penalty 类属性 实例属性

presence_penalty: float | None = None

正值会惩罚已在生成文本中出现的标记,从而增加生成更多样化内容的概率。

max_output_tokens 类属性 实例属性

max_output_tokens: int | None = Field(default=None, alias='max_tokens')

令牌限制决定了单个提示输出的最大文本量。

top_p 类属性 实例属性

top_p: float | None = None

从最可能到最不可能选择令牌,直到它们的概率总和等于 top-p 值。对于 Codey 模型,Top-p 会被忽略。

top_k 类属性 实例属性

top_k: int | None = None

模型如何选择输出令牌,下一个令牌是从 top-k 最可能的令牌中选择的。对于 Codey 模型,Top-k 会被忽略。

n 类属性 实例属性

n: int = 1

为每个提示生成多少个完成项。

seed 类属性 实例属性

seed: int | None = None

生成的随机种子。

streaming 类属性 实例属性

streaming: bool = False

是否以流式方式返回结果。

safety_settings 类属性 实例属性

safety_settings: SafetySettingsType | None = None

用于所有生成的默认安全设置。

例如
from langchain_google_vertexai import HarmBlockThreshold, HarmCategory

safety_settings = {
    HarmCategory.HARM_CATEGORY_UNSPECIFIED: HarmBlockThreshold.BLOCK_NONE,
    HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
    HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
}

tuned_model_name 类属性 实例属性

tuned_model_name: str | None = None

一个已调优模型的名称。

model_name 类属性 实例属性

model_name: str = Field(alias='model')

底层模型名称。

response_mime_type 类属性 实例属性

response_mime_type: str | None = None

可选。生成的候选文本的输出响应 MIME 类型。仅在 Gemini 1.5 及更高版本的模型中支持。支持的 MIME 类型:* 'text/plain':(默认)文本输出。* 'application/json':候选中的 JSON 响应。* 'text/x.enum':纯文本中的枚举。模型也需要被提示输出适当的响应类型,否则行为未定义。这是一个预览功能。

response_schema 类属性 实例属性

response_schema: dict[str, Any] | None = None

可选。强制输出一个模式。字典的格式应遵循 Open API 模式。

cached_content 类属性 实例属性

cached_content: str | None = None

可选。在缓存模式下使用模型。仅在 Gemini 1.5 及更高版本的模型中支持。必须是包含缓存名称的字符串(一个数字序列)。

logprobs 类属性 实例属性

logprobs: bool | int = False

是否作为 AIMessage.response_metadata 的一部分返回 logprobs。

如果为 False,不返回 logprobs。如果为 True,返回 top 候选的 logprobs。如果为 int,返回 top logprobs 候选的 logprobs。

.. 注意:截至 2024-10-28,此功能仅支持 gemini-1.5-flash 模型。

.. 版本新增:2.0.6

labels 类属性 实例属性

labels: dict[str, str] | None = None

可选地用元数据标记 llm 调用,以帮助追溯和计费。

perform_literal_eval_on_string_raw_content 类属性 实例属性

perform_literal_eval_on_string_raw_content: bool = False

是否对字符串原始内容执行字面求值。

wait_exponential_kwargs 类属性 实例属性

wait_exponential_kwargs: dict[str, float] | None = None

可选的字典,包含 wait_exponential 的参数: - multiplier:初始等待时间乘数(默认:1.0) - min:最小等待时间(秒)(默认:4.0) - max:最大等待时间(秒)(默认:10.0) - exp_base:使用的指数基数(默认:2.0

model_kwargs 类属性 实例属性

model_kwargs: dict[str, Any] = Field(default_factory=dict)

保存任何未预期的初始化参数。

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke 异步

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch 异步

abatch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed 异步

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[AIMessageChunk]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream 异步

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[AIMessageChunk]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log 异步

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events 异步

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform 异步

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

lc_id 类方法

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt 异步

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate 异步

agenerate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

__init__

__init__(*, model_name: str | None = None, **kwargs: Any) -> None

需要 mypy 类型检查以将 model_name 识别为有效参数并进行参数验证。

is_lc_serializable 类方法

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace 类方法

get_lc_namespace() -> list[str]

获取 langchain 对象的命名空间。

返回 描述
list[str]

["langchain", "chat_models", "vertexai"]

build_extra 类方法

build_extra(values: dict[str, Any]) -> Any

根据传入的额外参数构建额外的关键字参数(kwargs)。

validate_environment

validate_environment() -> Self

验证 python 包是否存在于环境中。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

更多信息 <https://cloud.google.com/vertex-ai/docs/reference/rpc/google.cloud.aiplatform.v1beta1#counttokensrequest>__

with_structured_output

with_structured_output(
    schema: dict | Type[BaseModel] | Type,
    *,
    include_raw: bool = False,
    method: Literal["json_mode"] | None = None,
    **kwargs: Any,
) -> Runnable[LanguageModelInput, dict | BaseModel]

返回与给定模式匹配的格式化输出的模型包装器。

.. 版本变更:1.1.0

Return type corrected in version 1.1.0. Previously if a dict schema
was provided then the output had the form
``[{"args": {}, "name": "schema_name"}]`` where the output was a list with
a single dict and the "args" of the one dict corresponded to the schema.
As of ``1.1.0`` this has been fixed so that the schema (the value
corresponding to the old "args" key) is returned directly.
参数 描述
模式

输出模式,可以是 dict 或 Pydantic 类。如果是一个 Pydantic 类,那么模型输出将是该类的对象。如果是一个 dict,那么模型输出将是一个 dict。使用 Pydantic 类时,返回的属性会进行验证,而使用 dict 则不会。如果 method'function_calling'schema 是一个 dict,那么该 dict 必须符合 OpenAI 函数调用规范。

类型: dict | Type[BaseModel] | Type

包含原始数据

如果为 False,则只返回解析后的结构化输出。如果在模型输出解析过程中发生错误,将会抛出异常。如果为 True,则会同时返回原始模型响应(一个 BaseMessage)和解析后的模型响应。如果在输出解析过程中发生错误,也会被捕获并返回。最终输出总是一个包含 'raw''parsed''parsing_error' 键的字典。

类型: bool 默认值: False

method

如果设置为 'json_schema',它将使用受控生成来生成响应,而不是函数调用。不适用于带有引用或 Pydantic 模型带有自引用的模式。

类型: Literal['json_mode'] | None 默认值: None

返回 描述
Runnable[LanguageModelInput, dict | BaseModel]

一个接受任何 ChatModel 输入的 Runnable。如果 'include_raw' 为 True,则返回一个

Runnable[LanguageModelInput, dict | BaseModel]

包含键的字典 — raw: BaseMessage, parsed: Optional[_DictOrPydantic],

parsing_error

Optional[BaseException]。如果 'include_raw' 为 False,则只返回

类型: Runnable[LanguageModelInput, dict | BaseModel]

Runnable[LanguageModelInput, dict | BaseModel]

返回 _DictOrPydantic,其中 _DictOrPydantic 的类型取决于 schema。

Runnable[LanguageModelInput, dict | BaseModel]

如果 schema 是一个 Pydantic 类,那么 _DictOrPydantic 就是那个 Pydantic 类。

Runnable[LanguageModelInput, dict | BaseModel]

如果 schema 是一个 dict,那么 _DictOrPydantic 就是一个 dict。

Pydantic 模式,排除原始数据

.. code-block:: python

from pydantic import BaseModel
from langchain_google_vertexai import ChatVertexAI


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


llm = ChatVertexAI(model_name="gemini-2.0-flash-001", temperature=0)
structured_llm = llm.with_structured_output(AnswerWithJustification)

structured_llm.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> AnswerWithJustification(
#     answer='They weigh the same.', justification='A pound is a pound.'
# )
Pydantic 模式,包含原始数据

.. code-block:: python

from pydantic import BaseModel
from langchain_google_vertexai import ChatVertexAI


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


llm = ChatVertexAI(model_name="gemini-2.0-flash-001", temperature=0)
structured_llm = llm.with_structured_output(
    AnswerWithJustification, include_raw=True
)

structured_llm.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'raw': AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Ao02pnFYXD6GN1yzc0uXPsvF', 'function': {'arguments': '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}', 'name': 'AnswerWithJustification'}, 'type': 'function'}]}),
#     'parsed': AnswerWithJustification(answer='They weigh the same.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'),
#     'parsing_error': None
# }
Dict 模式,排除原始数据

.. code-block:: python

from pydantic import BaseModel
from langchain_core.utils.function_calling import (
    convert_to_openai_function,
)
from langchain_google_vertexai import ChatVertexAI


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


dict_schema = convert_to_openai_function(AnswerWithJustification)
llm = ChatVertexAI(model_name="gemini-2.0-flash-001", temperature=0)
structured_llm = llm.with_structured_output(dict_schema)

structured_llm.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'answer': 'They weigh the same',
#     'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.'
# }
Pydantic 模式,流式处理

.. code-block:: python

from pydantic import BaseModel, Field
from langchain_google_vertexai import ChatVertexAI


class Explanation(BaseModel):
    '''A topic explanation with examples.'''

    description: str = Field(
        description="A brief description of the topic."
    )
    examples: str = Field(
        description="Two examples related to the topic."
    )


llm = ChatVertexAI(model_name="gemini-2.0-flash", temperature=0)
structured_llm = llm.with_structured_output(
    Explanation, method="json_mode"
)

for chunk in structured_llm.stream("Tell me about transformer models"):
    print(chunk)
    print("-------------------------")
# -> description='Transformer models are a type of neural network architecture that have revolutionized the field of natural language processing (NLP) and are also increasingly used in computer vision and other domains. They rely on the self-attention mechanism to weigh the importance of different parts of the input data, allowing them to effectively capture long-range dependencies. Unlike recurrent neural networks (RNNs), transformers can process the entire input sequence in parallel, leading to significantly faster training times. Key components of transformer models include: the self-attention mechanism (calculates attention weights between different parts of the input), multi-head attention (performs self-attention multiple times with different learned parameters), positional encoding (adds information about the position of tokens in the input sequence), feedforward networks (applies a non-linear transformation to each position), and encoder-decoder structure (used for sequence-to-sequence tasks).' examples='1. BERT (Bidirectional Encoder Representations from Transformers): A pre-trained transformer'
#    -------------------------
#    description='Transformer models are a type of neural network architecture that have revolutionized the field of natural language processing (NLP) and are also increasingly used in computer vision and other domains. They rely on the self-attention mechanism to weigh the importance of different parts of the input data, allowing them to effectively capture long-range dependencies. Unlike recurrent neural networks (RNNs), transformers can process the entire input sequence in parallel, leading to significantly faster training times. Key components of transformer models include: the self-attention mechanism (calculates attention weights between different parts of the input), multi-head attention (performs self-attention multiple times with different learned parameters), positional encoding (adds information about the position of tokens in the input sequence), feedforward networks (applies a non-linear transformation to each position), and encoder-decoder structure (used for sequence-to-sequence tasks).' examples='1. BERT (Bidirectional Encoder Representations from Transformers): A pre-trained transformer model that can be fine-tuned for various NLP tasks like text classification, question answering, and named entity recognition. 2. GPT (Generative Pre-trained Transformer): A language model that uses transformers to generate coherent and contextually relevant text. GPT models are used in chatbots, content creation, and code generation.'
#    -------------------------

bind_tools

bind_tools(
    tools: _ToolsType,
    tool_config: _ToolConfigDict | None = None,
    *,
    tool_choice: _ToolChoiceType | bool | None = None,
    **kwargs: Any,
) -> Runnable[LanguageModelInput, AIMessage]

将类工具(tool-like)对象绑定到此聊天模型。

假设模型与 Vertex 工具调用 API 兼容。

参数 描述
工具

要绑定到此聊天模型的工具定义列表。可以是一个 pydantic 模型、可调用对象或 BaseTool。Pydantic 模型、可调用对象和 BaseTool 将自动转换为其模式字典表示。现在支持在其参数中使用联合类型的工具,并将其转换为 anyOf 模式。

类型: _ToolsType

**kwargs

传递给 :class:~langchain.runnable.Runnable 构造函数的任何其他参数。

类型: Any 默认值: {}

VertexAIEmbeddings

基类:BaseModel, Embeddings

Google Cloud VertexAI 嵌入模型。

方法 描述
aembed_documents

异步嵌入搜索文档。

aembed_query

异步嵌入查询文本。

validate_environment

验证 python 包是否存在于环境中。

embed

嵌入一个字符串列表。

embed_documents

嵌入一个文档列表。

embed_query

嵌入一段文本。

project 类属性 实例属性

project: str | None = None

在进行 Vertex API 调用时使用的默认 GCP 项目。

location 类属性 实例属性

location: str = Field(default='us-central1')

进行 API 调用时使用的默认位置。

model_name 类属性 实例属性

model_name: str | None = Field(default=None, alias='model')

底层模型名称。

credentials 类属性 实例属性

credentials: Any = Field(default=None, exclude=True)

要使用的默认自定义凭据 (google.auth.credentials.Credentials)

max_retries 类属性 实例属性

max_retries: int = 6

生成时进行的最大重试次数。

aembed_documents 异步

aembed_documents(texts: list[str]) -> list[list[float]]

异步嵌入搜索文档。

参数 描述
texts

要嵌入的文本列表。

类型: list[str]

返回 描述
list[list[float]]

嵌入列表。

aembed_query 异步

aembed_query(text: str) -> list[float]

异步嵌入查询文本。

参数 描述
text

要嵌入的文本。

类型: str

返回 描述
list[float]

嵌入。

validate_environment

validate_environment() -> Self

验证 python 包是否存在于环境中。

embed

embed(
    texts: list[str],
    embeddings_task_type: EmbeddingTaskTypes | None = None,
    dimensions: int | None = None,
    title: str | None = None,
) -> list[list[float]]

嵌入一个字符串列表。

参数 描述
texts

要嵌入的字符串列表。

类型: list[str]

embeddings_task_type

可选的嵌入任务类型,为以下之一: RETRIEVAL_QUERY - 文本是搜索/检索设置中的查询。 RETRIEVAL_DOCUMENT - 文本是搜索/检索设置中的文档。 SEMANTIC_SIMILARITY - 嵌入将用于语义文本相似性 (STS)。 CLASSIFICATION - 嵌入将用于分类。 CLUSTERING - 嵌入将用于聚类。 CODE_RETRIEVAL_QUERY - 嵌入将用于 Java 和 Python 的代码检索。以下仅在预览模型上受支持: QUESTION_ANSWERING, FACT_VERIFICATION

类型: EmbeddingTaskTypes | None 默认值: None

dimensions

可选的输出嵌入维度。仅在预览模型上受支持。

TYPE: int | None DEFAULT: None

title

文本的可选标题。仅在 TaskType 为 RETRIEVAL_DOCUMENT 时适用。

类型: str | None 默认值: None

返回 描述
list[list[float]]

嵌入列表,每个文本一个。

embed_documents

embed_documents(
    texts: list[str], *, embeddings_task_type: EmbeddingTaskTypes = "RETRIEVAL_DOCUMENT"
) -> list[list[float]]

嵌入一个文档列表。

参数 描述
texts

要嵌入的文本列表。

类型: list[str]

embeddings_task_type

嵌入的任务类型。

类型: EmbeddingTaskTypes 默认值: 'RETRIEVAL_DOCUMENT'

返回 描述
list[list[float]]

嵌入列表,每个文本一个。

embed_query

embed_query(
    text: str, *, embeddings_task_type: EmbeddingTaskTypes = "RETRIEVAL_QUERY"
) -> list[float]

嵌入一段文本。

参数 描述
text

要嵌入的文本。

类型: str

embeddings_task_type

嵌入的任务类型。

类型: EmbeddingTaskTypes 默认值: 'RETRIEVAL_QUERY'

返回 描述
list[float]

文本的嵌入。

VertexPairWiseStringEvaluator

基类:_EvaluatorBase, PairwiseStringEvaluator

评估预测字符串的困惑度。

方法 描述
evaluate_string_pairs

评估输出的字符串对。

aevaluate_string_pairs

异步评估输出的字符串对。

requires_input property

requires_input: bool

此评估器是否需要输入字符串。

requires_reference property

requires_reference: bool

此评估器是否需要参考标签。

evaluate_string_pairs

evaluate_string_pairs(
    *,
    prediction: str,
    prediction_b: str,
    reference: str | None = None,
    input: str | None = None,
    **kwargs: Any,
) -> dict

评估输出的字符串对。

参数 描述
prediction

第一个模型的输出字符串。

类型: str

prediction_b

第二个模型的输出字符串。

类型: str

reference

预期的输出/参考字符串。

类型: str | None 默认值: None

输入

输入字符串。

类型: str | None 默认值: None

**kwargs

额外的关键字参数,例如回调和可选的参考字符串。

类型: Any 默认值: {}

返回 描述
dict

包含偏好、分数和/或其他信息的dict

aevaluate_string_pairs async

aevaluate_string_pairs(
    *,
    prediction: str,
    prediction_b: str,
    reference: str | None = None,
    input: str | None = None,
    **kwargs: Any,
) -> dict

异步评估输出的字符串对。

参数 描述
prediction

第一个模型的输出字符串。

类型: str

prediction_b

第二个模型的输出字符串。

类型: str

reference

预期的输出/参考字符串。

类型: str | None 默认值: None

输入

输入字符串。

类型: str | None 默认值: None

**kwargs

额外的关键字参数,例如回调和可选的参考字符串。

类型: Any 默认值: {}

返回 描述
dict

包含偏好、分数和/或其他信息的dict

VertexStringEvaluator

基类:_EvaluatorBase, StringEvaluator

评估预测字符串的困惑度。

方法 描述
evaluate_strings

基于可选的输入和标签评估链或 LLM 的输出。

aevaluate_strings

基于可选的输入和标签异步评估链或 LLM 的输出。

requires_reference property

requires_reference: bool

此评估器是否需要参考标签。

requires_input property

requires_input: bool

此评估器是否需要输入字符串。

evaluation_name property

evaluation_name: str

评估的名称。

evaluate_strings

evaluate_strings(
    *,
    prediction: str,
    reference: str | None = None,
    input: str | None = None,
    **kwargs: Any,
) -> dict

基于可选的输入和标签评估链或 LLM 的输出。

参数 描述
prediction

要评估的 LLM 或链的预测结果。

类型: str

reference

用于评估的参考标签。

类型: str | None 默认值: None

输入

评估期间要考虑的输入。

类型: str | None 默认值: None

**kwargs

额外的关键字参数,包括回调、标签等。

类型: Any 默认值: {}

返回 描述
dict

包含分数或值的评估结果。

类型: dict

aevaluate_strings async

aevaluate_strings(
    *,
    prediction: str,
    reference: str | None = None,
    input: str | None = None,
    **kwargs: Any,
) -> dict

基于可选的输入和标签异步评估链或 LLM 的输出。

参数 描述
prediction

要评估的 LLM 或链的预测结果。

类型: str

reference

用于评估的参考标签。

类型: str | None 默认值: None

输入

评估期间要考虑的输入。

类型: str | None 默认值: None

**kwargs

额外的关键字参数,包括回调、标签等。

类型: Any 默认值: {}

返回 描述
dict

包含分数或值的评估结果。

类型: dict

PydanticFunctionsOutputParser

基类:BaseOutputParser

将输出解析为 pydantic 对象。

此解析器用于解析使用 Google Vertex 函数格式调用函数的 ChatModel 的输出。

解析器提取函数调用并将其与提供的 pydantic 模式匹配。

如果函数调用与提供的模式不匹配,将引发异常。

示例

... 代码块:: python

message = AIMessage(
    content="This is a test message",
    additional_kwargs={
        "function_call": {
            "name": "cookie",
            "arguments": json.dumps({"name": "value", "age": 10}),
        }
    },
)
chat_generation = ChatGeneration(message=message)

class Cookie(BaseModel):
    name: str
    age: int

class Dog(BaseModel):
    species: str

# Full output
parser = PydanticOutputFunctionsParser(
    pydantic_schema={"cookie": Cookie, "dog": Dog}
)
result = parser.parse_result([chat_generation])
方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

__init__
is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

aparse_result

异步将候选模型 Generation 对象列表解析为特定格式。

aparse

异步将单个字符串模型输出解析为某种结构。

parse_with_prompt

使用输入提示作为上下文来解析 LLM 调用的输出。

get_format_instructions

关于 LLM 输出应如何格式化的说明。

dict

返回输出解析器的字典表示形式。

parse_result

将候选模型 Generation 对象列表解析为特定格式。

parse

将单个字符串模型输出解析为某种结构。

name class-attribute instance-attribute

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType property

InputType: Any

返回解析器的输入类型。

OutputType property

OutputType: type[T]

返回解析器的输出类型。

此属性是根据类的第一个类型参数推断出来的。

引发 描述
TypeError

如果类没有可推断的 OutputType

input_schema property

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema property

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs property

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets property

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes property

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: str | BaseMessage, config: RunnableConfig | None = None, **kwargs: Any
) -> T

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke async

ainvoke(
    input: str | BaseMessage, config: RunnableConfig | None = None, **kwargs: Any | None
) -> T

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch async

abatch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed async

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: Input, config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream async

astream(
    input: Input, config: RunnableConfig | None = None, **kwargs: Any | None
) -> AsyncIterator[Output]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log async

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events async

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform async

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

__init__

__init__(*args: Any, **kwargs: Any) -> None

is_lc_serializable classmethod

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace classmethod

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id classmethod

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

aparse_result async

aparse_result(result: list[Generation], *, partial: bool = False) -> T

异步将候选模型 Generation 对象列表解析为特定格式。

返回值仅从结果中的第一个 Generation 解析,该 Generation 被假定为可能性最高的 Generation

参数 描述
result

要解析的 Generation 列表。这些 Generation 对象被假定为单个模型输入的不同候选输出。

类型: list[Generation]

partial

是否将输出解析为部分结果。这对于可以解析部分结果的解析器很有用。

类型: bool 默认值: False

返回 描述
T

结构化输出。

aparse async

aparse(text: str) -> T

异步将单个字符串模型输出解析为某种结构。

参数 描述
text

语言模型的字符串输出。

类型: str

返回 描述
T

结构化输出。

parse_with_prompt

parse_with_prompt(completion: str, prompt: PromptValue) -> Any

使用输入提示作为上下文来解析 LLM 调用的输出。

提供提示主要是为了在 OutputParser 想要以某种方式重试或修复输出,并且需要提示中的信息来完成此操作时使用。

参数 描述
completion

语言模型的字符串输出。

类型: str

prompt

输入 PromptValue

类型: PromptValue

返回 描述
任意

结构化输出。

get_format_instructions

get_format_instructions() -> str

关于 LLM 输出应如何格式化的说明。

dict

dict(**kwargs: Any) -> dict

返回输出解析器的字典表示形式。

parse_result

parse_result(result: list[Generation], *, partial: bool = False) -> BaseModel

将候选模型 Generation 对象列表解析为特定格式。

返回值仅从结果中的第一个 Generation 解析,该 Generation 被假定为可能性最高的 Generation

参数 描述
result

要解析的 Generation 列表。这些 Generation 对象被假定为单个模型输入的不同候选输出。

类型: list[Generation]

partial

是否将输出解析为部分结果。这对于可以解析部分结果的解析器很有用。

类型: bool 默认值: False

返回 描述
T

结构化输出。

parse

parse(text: str) -> BaseModel

将单个字符串模型输出解析为某种结构。

参数 描述
text

语言模型的字符串输出。

类型: str

返回 描述
T

结构化输出。

VertexAI

基类:_VertexAICommon, BaseLLM

Google Vertex AI 大语言模型。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

此类未实现。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

向模型传递一系列提示并返回生成结果。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

__str__

返回对象的字符串表示形式以供打印。

dict

返回 LLM 的字典。

save

保存 LLM。

__init__

需要 mypy 类型检查来识别 model_name 是一个有效的参数

is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 langchain 对象的命名空间。

validate_environment

验证 python 包是否存在于环境中。

get_num_tokens

获取文本中存在的 token 数量。

name class-attribute instance-attribute

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType property

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType property

OutputType: type[str]

获取此 Runnable 的输入类型。

input_schema property

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema property

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs property

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets property

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes property

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache class-attribute instance-attribute

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose class-attribute instance-attribute

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks class-attribute instance-attribute

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags class-attribute instance-attribute

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids class-attribute instance-attribute

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

project class-attribute instance-attribute

project: str | None = None

在进行 Vertex API 调用时使用的默认 GCP 项目。

location class-attribute instance-attribute

location: str = Field(default=_DEFAULT_LOCATION)

进行 API 调用时使用的默认位置。

request_parallelism class-attribute instance-attribute

request_parallelism: int = 5

允许向 VertexAI 模型发出请求的并行度。

max_retries class-attribute instance-attribute

max_retries: int = 6

生成时进行的最大重试次数。

stop class-attribute instance-attribute

stop: list[str] | None = Field(default=None, alias='stop_sequences')

生成时使用的可选停止词列表。

full_model_name class-attribute instance-attribute

full_model_name: str | None = Field(default=None, exclude=True)

模型端点的全名。

api_endpoint class-attribute instance-attribute

api_endpoint: str | None = Field(default=None, alias='base_url')

期望的 API 端点,例如 us-central1-aiplatform.googleapis.com

api_transport class-attribute instance-attribute

api_transport: str | None = None

期望的 API 传输方法,可以是 'grpc' 或 'rest'。如果已定义,则使用 vertexai.init 中的默认参数。

additional_headers class-attribute instance-attribute

additional_headers: dict[str, str] | None = Field(default=None)

一个表示模型调用的附加头部的键值字典

client_cert_source class-attribute instance-attribute

client_cert_source: Callable[[], tuple[bytes, bytes]] | None = None

一个返回客户端证书字节和私钥字节的回调函数

credentials class-attribute instance-attribute

credentials: Any = Field(default=None, exclude=True)

要使用的默认自定义凭据 (google.auth.credentials.Credentials)

endpoint_version class-attribute instance-attribute

endpoint_version: Literal['v1', 'v1beta1'] = 'v1beta1'

是否使用 v1 或 v1beta1 端点。

v1 性能更高,但 v1beta1 可能包含一些新功能。

prediction_client property

prediction_client: PredictionServiceClient | PredictionServiceClient

返回 PredictionServiceClient。

async_prediction_client property

async_prediction_client: PredictionServiceAsyncClient | PredictionServiceAsyncClient

返回 PredictionServiceClient。

temperature class-attribute instance-attribute

temperature: float | None = None

采样温度,它控制了令牌选择的随机性程度。

frequency_penalty class-attribute instance-attribute

frequency_penalty: float | None = None

正值会惩罚在生成文本中重复出现的标记,从而降低重复内容的概率。

presence_penalty class-attribute instance-attribute

presence_penalty: float | None = None

正值会惩罚已在生成文本中出现的标记,从而增加生成更多样化内容的概率。

max_output_tokens class-attribute instance-attribute

max_output_tokens: int | None = Field(default=None, alias='max_tokens')

令牌限制决定了单个提示输出的最大文本量。

top_p class-attribute instance-attribute

top_p: float | None = None

从最可能到最不可能选择令牌,直到它们的概率总和等于 top-p 值。对于 Codey 模型,Top-p 会被忽略。

top_k class-attribute instance-attribute

top_k: int | None = None

模型如何选择输出令牌,下一个令牌是从 top-k 最可能的令牌中选择的。对于 Codey 模型,Top-k 会被忽略。

n class-attribute instance-attribute

n: int = 1

为每个提示生成多少个完成项。

seed class-attribute instance-attribute

seed: int | None = None

生成的随机种子。

streaming class-attribute instance-attribute

streaming: bool = False

是否以流式方式返回结果。

safety_settings class-attribute instance-attribute

safety_settings: SafetySettingsType | None = None

用于所有生成的默认安全设置。

例如
from langchain_google_vertexai import HarmBlockThreshold, HarmCategory

safety_settings = {
    HarmCategory.HARM_CATEGORY_UNSPECIFIED: HarmBlockThreshold.BLOCK_NONE,
    HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
    HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
}

model_name class-attribute instance-attribute

model_name: str = Field(default='gemini-2.0-flash-001', alias='model')

Vertex AI 大语言模型的名称。

tuned_model_name class-attribute instance-attribute

tuned_model_name: str | None = None

微调模型的名称。如果传递了 tuned_model_name,model_name 将用于确定模型家族。

response_mime_type class-attribute instance-attribute

response_mime_type: str | None = None

可选。生成的候选文本的输出响应 mimetype。仅在 Gemini 1.5 及更高版本的模型中支持。支持的 mimetype:* "text/plain":(默认)文本输出。* "application/json":候选中的 JSON 响应。* "text/x.enum":纯文本中的枚举。模型也需要被提示输出适当的响应类型,否则行为是未定义的。这是一个预览功能。

response_schema class-attribute instance-attribute

response_schema: dict[str, Any] | None = None

可选。强制输出一个模式。字典的格式应遵循 Open API 模式。

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> str

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke async

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> str

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[LanguageModelInput],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any,
) -> list[str]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch async

abatch(
    inputs: list[LanguageModelInput],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any,
) -> list[str]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed async

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[str]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream async

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[str]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log async

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events async

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform async

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

lc_id classmethod

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt async

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: dict | type, **kwargs: Any
) -> Runnable[LanguageModelInput, dict | BaseModel]

此类未实现。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    prompts: list[str],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    *,
    tags: list[str] | list[list[str]] | None = None,
    metadata: dict[str, Any] | list[dict[str, Any]] | None = None,
    run_name: str | list[str] | None = None,
    run_id: UUID | list[UUID | None] | None = None,
    **kwargs: Any,
) -> LLMResult

向模型传递一系列提示并返回生成结果。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

字符串提示列表。

类型: list[str]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks | list[Callbacks] | None 默认值: None

tags

要与每个提示关联的标签列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: list[str] | list[list[str]] | None 默认值: None

metadata

要与每个提示关联的元数据字典列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: dict[str, Any] | list[dict[str, Any]] | None 默认值: None

运行名称

要与每个提示关联的运行名称列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: str | list[str] | None 默认值: None

run_id

要与每个提示关联的运行 ID 列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: UUID | list[UUID | None] | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

引发 描述
ValueError

如果提示不是列表。

ValueError

如果 `callbacks`、`tags`、`metadata` 或 `run_name`(如果提供)的长度与提示的长度不匹配。

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate async

agenerate(
    prompts: list[str],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    *,
    tags: list[str] | list[list[str]] | None = None,
    metadata: dict[str, Any] | list[dict[str, Any]] | None = None,
    run_name: str | list[str] | None = None,
    run_id: UUID | list[UUID | None] | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

字符串提示列表。

类型: list[str]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks | list[Callbacks] | None 默认值: None

tags

要与每个提示关联的标签列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: list[str] | list[list[str]] | None 默认值: None

metadata

要与每个提示关联的元数据字典列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: dict[str, Any] | list[dict[str, Any]] | None 默认值: None

运行名称

要与每个提示关联的运行名称列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: str | list[str] | None 默认值: None

run_id

要与每个提示关联的运行 ID 列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: UUID | list[UUID | None] | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

引发 描述
ValueError

如果 `callbacks`、`tags`、`metadata` 或 `run_name`(如果提供)的长度与提示的长度不匹配。

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

__str__

__str__() -> str

返回对象的字符串表示形式以供打印。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

save

save(file_path: Path | str) -> None

保存 LLM。

参数 描述
file_path

用于保存 LLM 的文件路径。

类型: Path | str

引发 描述
ValueError

如果文件路径不是字符串或 Path 对象。

示例
llm.save(file_path="path/llm.yaml")

__init__

__init__(*, model_name: str | None = None, **kwargs: Any) -> None

需要 mypy 类型检查以将 model_name 识别为有效参数并进行参数验证。

is_lc_serializable classmethod

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace classmethod

get_lc_namespace() -> list[str]

获取 langchain 对象的命名空间。

返回 描述
list[str]

["langchain", "llms", "vertexai"]

validate_environment

validate_environment() -> Self

验证 python 包是否存在于环境中。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

VertexAIModelGarden

基类:_BaseVertexAIModelGarden, BaseLLM

从 Vertex AI Model Garden 提供的大语言模型。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

此类未实现。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens

获取文本中存在的 token 数量。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

向模型传递一系列提示并返回生成结果。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

__str__

返回对象的字符串表示形式以供打印。

dict

返回 LLM 的字典。

save

保存 LLM。

validate_environment

验证 python 包是否存在于环境中。

__init__

name class-attribute instance-attribute

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType property

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType property

OutputType: type[str]

获取此 Runnable 的输入类型。

input_schema property

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema property

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs property

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets property

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes property

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache 类属性 实例属性

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose 类属性 实例属性

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks 类属性 实例属性

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags 类属性 实例属性

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata 类属性 实例属性

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids 类属性 实例属性

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

project 类属性 实例属性

project: str | None = None

在进行 Vertex API 调用时使用的默认 GCP 项目。

location 类属性 实例属性

location: str = Field(default=_DEFAULT_LOCATION)

进行 API 调用时使用的默认位置。

request_parallelism 类属性 实例属性

request_parallelism: int = 5

允许向 VertexAI 模型发出请求的并行度。

max_retries 类属性 实例属性

max_retries: int = 6

生成时进行的最大重试次数。

stop 类属性 实例属性

stop: list[str] | None = Field(default=None, alias='stop_sequences')

生成时使用的可选停止词列表。

model_name 类属性 实例属性

model_name: str | None = Field(default=None, alias='model')

底层模型名称。

full_model_name 类属性 实例属性

full_model_name: str | None = Field(default=None, exclude=True)

模型端点的全名。

api_endpoint 类属性 实例属性

api_endpoint: str | None = Field(default=None, alias='base_url')

期望的 API 端点,例如 us-central1-aiplatform.googleapis.com

api_transport 类属性 实例属性

api_transport: str | None = None

期望的 API 传输方法,可以是 'grpc' 或 'rest'。如果已定义,则使用 vertexai.init 中的默认参数。

additional_headers 类属性 实例属性

additional_headers: dict[str, str] | None = Field(default=None)

一个表示模型调用的附加头部的键值字典

client_cert_source 类属性 实例属性

client_cert_source: Callable[[], tuple[bytes, bytes]] | None = None

一个返回客户端证书字节和私钥字节的回调函数

credentials 类属性 实例属性

credentials: Any = Field(default=None, exclude=True)

要使用的默认自定义凭据 (google.auth.credentials.Credentials)

endpoint_version 类属性 实例属性

endpoint_version: Literal['v1', 'v1beta1'] = 'v1beta1'

是否使用 v1 或 v1beta1 端点。

v1 性能更高,但 v1beta1 可能包含一些新功能。

prediction_client 属性

prediction_client: PredictionServiceClient | PredictionServiceClient

返回 PredictionServiceClient。

async_prediction_client 属性

async_prediction_client: PredictionServiceAsyncClient | PredictionServiceAsyncClient

返回 PredictionServiceClient。

endpoint_id 实例属性

endpoint_id: str

模型已部署的端点的名称。

allowed_model_args 类属性 实例属性

allowed_model_args: list[str] | None = None

允许传递给模型的可选参数。

result_arg 类属性 实例属性

result_arg: str | None = 'generated_text'

如果模型的输出预计为字符串,则将 result_arg 设置为 None。否则,如果它是一个字典,则提供一个包含结果的参数。

single_example_per_request 类属性 实例属性

single_example_per_request: bool = True

LLM 端点当前仅处理请求中的第一个示例

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> str

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke 异步

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> str

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[LanguageModelInput],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any,
) -> list[str]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch 异步

abatch(
    inputs: list[LanguageModelInput],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any,
) -> list[str]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed 异步

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[str]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream 异步

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[str]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log 异步

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events 异步

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform 异步

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

is_lc_serializable 类方法

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace 类方法

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id 类方法

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt 异步

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: dict | type, **kwargs: Any
) -> Runnable[LanguageModelInput, dict | BaseModel]

此类未实现。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    prompts: list[str],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    *,
    tags: list[str] | list[list[str]] | None = None,
    metadata: dict[str, Any] | list[dict[str, Any]] | None = None,
    run_name: str | list[str] | None = None,
    run_id: UUID | list[UUID | None] | None = None,
    **kwargs: Any,
) -> LLMResult

向模型传递一系列提示并返回生成结果。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

字符串提示列表。

类型: list[str]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks | list[Callbacks] | None 默认值: None

tags

要与每个提示关联的标签列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: list[str] | list[list[str]] | None 默认值: None

metadata

要与每个提示关联的元数据字典列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: dict[str, Any] | list[dict[str, Any]] | None 默认值: None

运行名称

要与每个提示关联的运行名称列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: str | list[str] | None 默认值: None

run_id

要与每个提示关联的运行 ID 列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: UUID | list[UUID | None] | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

引发 描述
ValueError

如果提示不是列表。

ValueError

如果 `callbacks`、`tags`、`metadata` 或 `run_name`(如果提供)的长度与提示的长度不匹配。

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate 异步

agenerate(
    prompts: list[str],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    *,
    tags: list[str] | list[list[str]] | None = None,
    metadata: dict[str, Any] | list[dict[str, Any]] | None = None,
    run_name: str | list[str] | None = None,
    run_id: UUID | list[UUID | None] | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

字符串提示列表。

类型: list[str]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks | list[Callbacks] | None 默认值: None

tags

要与每个提示关联的标签列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: list[str] | list[list[str]] | None 默认值: None

metadata

要与每个提示关联的元数据字典列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: dict[str, Any] | list[dict[str, Any]] | None 默认值: None

运行名称

要与每个提示关联的运行名称列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: str | list[str] | None 默认值: None

run_id

要与每个提示关联的运行 ID 列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: UUID | list[UUID | None] | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

引发 描述
ValueError

如果 `callbacks`、`tags`、`metadata` 或 `run_name`(如果提供)的长度与提示的长度不匹配。

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

__str__

__str__() -> str

返回对象的字符串表示形式以供打印。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

save

save(file_path: Path | str) -> None

保存 LLM。

参数 描述
file_path

用于保存 LLM 的文件路径。

类型: Path | str

引发 描述
ValueError

如果文件路径不是字符串或 Path 对象。

示例
llm.save(file_path="path/llm.yaml")

validate_environment

validate_environment() -> Self

验证 python 包是否存在于环境中。

__init__

__init__(**kwargs: Any) -> None

DataStoreDocumentStorage

基类:DocumentStorage

将文档存储在 Google Cloud DataStore 中。

方法 描述
amget

异步获取与给定键相关联的值。

amset

异步为给定的键设置值。

amdelete

异步删除给定的键及其关联的值。

ayield_keys

异步获取与给定前缀匹配的键的迭代器。

__init__

构造函数。

mget

按 ID 批量获取文档。

mset

使用每个键存储一系列文档。

mdelete

按键删除一系列文档。

yield_keys

生成存储中所有文档的键。

amget 异步

amget(keys: Sequence[K]) -> list[V | None]

异步获取与给定键相关联的值。

参数 描述
keys

一个键的序列。

类型: Sequence[K]

返回 描述
list[V | None]

与键相关联的可选值序列。

list[V | None]

如果未找到某个键,则相应的值将为 `None`。

amset 异步

amset(key_value_pairs: Sequence[tuple[K, V]]) -> None

异步为给定的键设置值。

参数 描述
key_value_pairs

键值对序列。

类型: Sequence[tuple[K, V]]

amdelete 异步

amdelete(keys: Sequence[K]) -> None

异步删除给定的键及其关联的值。

参数 描述
keys

要删除的键序列。

类型: Sequence[K]

ayield_keys 异步

ayield_keys(*, prefix: str | None = None) -> AsyncIterator[K] | AsyncIterator[str]

异步获取与给定前缀匹配的键的迭代器。

参数 描述
prefix

要匹配的前缀。

类型: str | None 默认值: None

YIELDS 描述
AsyncIterator[K] | AsyncIterator[str]

与给定前缀匹配的键。

AsyncIterator[K] | AsyncIterator[str]

此方法允许返回 K 或 str 的迭代器

AsyncIterator[K] | AsyncIterator[str]

取决于哪个对给定的商店更有意义。

__init__

__init__(
    datastore_client: Client,
    kind: str = "document_id",
    text_property_name: str = "text",
    metadata_property_name: str = "metadata",
    exclude_from_indexes: list[str] | None = None,
) -> None

构造函数。

参数 描述
datastore_client

Google Cloud DataStore 客户端。

类型: Client

kind

用于存储文档的种类(表名)。

类型: str 默认值: 'document_id'

text_property_name

用于存储文档文本内容的属性名称。

类型: str 默认: 'text'

metadata_property_name

用于存储文档元数据的属性名称。

类型: str 默认值: 'metadata'

exclude_from_indexes

要从索引中排除的属性列表。

类型: list[str] | None 默认值: None

mget

mget(keys: Sequence[str]) -> list[Document | None]

按 ID 批量获取文档。

参数 描述
keys

文本的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document | None]

文本列表。如果任何 ID 记录未找到键 ID,则返回一个 `None`。

mset

mset(key_value_pairs: Sequence[tuple[str, Document]]) -> None

使用每个键存储一系列文档。

参数 描述
key_value_pairs

键值对序列。

类型: Sequence[tuple[K, V]]

mdelete

mdelete(keys: Sequence[str]) -> None

按键删除一系列文档。

参数 描述
keys

要删除的键序列。

类型: Sequence[str]

yield_keys

yield_keys(*, prefix: str | None = None) -> Iterator[str]

生成存储中所有文档的键。

参数 描述
prefix

已忽略

类型: str | None 默认值: None

GCSDocumentStorage

基类:DocumentStorage

将文档存储在 Google Cloud Storage 中。对于每对 id、document_text,blob 的名称将是以纯文本格式存储的 {prefix}/{id}。

方法 描述
amget

异步获取与给定键相关联的值。

amset

异步为给定的键设置值。

amdelete

异步删除给定的键及其关联的值。

ayield_keys

异步获取与给定前缀匹配的键的迭代器。

__init__

构造函数。

mset

使用每个键存储一系列文档。

mget

按 ID 批量获取文档。

mdelete

按 ID 批量删除文档。

yield_keys

生成存储中存在的键。

amget 异步

amget(keys: Sequence[K]) -> list[V | None]

异步获取与给定键相关联的值。

参数 描述
keys

一个键的序列。

类型: Sequence[K]

返回 描述
list[V | None]

与键相关联的可选值序列。

list[V | None]

如果未找到某个键,则相应的值将为 `None`。

amset 异步

amset(key_value_pairs: Sequence[tuple[K, V]]) -> None

异步为给定的键设置值。

参数 描述
key_value_pairs

键值对序列。

类型: Sequence[tuple[K, V]]

amdelete 异步

amdelete(keys: Sequence[K]) -> None

异步删除给定的键及其关联的值。

参数 描述
keys

要删除的键序列。

类型: Sequence[K]

ayield_keys 异步

ayield_keys(*, prefix: str | None = None) -> AsyncIterator[K] | AsyncIterator[str]

异步获取与给定前缀匹配的键的迭代器。

参数 描述
prefix

要匹配的前缀。

类型: str | None 默认值: None

YIELDS 描述
AsyncIterator[K] | AsyncIterator[str]

与给定前缀匹配的键。

AsyncIterator[K] | AsyncIterator[str]

此方法允许返回 K 或 str 的迭代器

AsyncIterator[K] | AsyncIterator[str]

取决于哪个对给定的商店更有意义。

__init__

__init__(
    bucket: Bucket, prefix: str | None = "documents", threaded=True, n_threads=8
) -> None

构造函数。

参数 描述
bucket

将存储文档的桶。

类型: Bucket

prefix

所有文档名称前添加的前缀。

类型: str | None 默认值: 'documents'

mset

mset(key_value_pairs: Sequence[tuple[str, Document]]) -> None

使用每个键存储一系列文档。

参数 描述
key_value_pairs

键值对序列。

类型: Sequence[tuple[K, V]]

mget

mget(keys: Sequence[str]) -> list[Document | None]

按 ID 批量获取文档。默认实现仅循环 `get_by_id`。具有更快批量检索数据方法的子类应实现此方法。

参数 描述
keys

文本的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document | None]

`Document` 对象列表。如果任何 ID 记录未找到键 ID,则返回 `None`。

mdelete

mdelete(keys: Sequence[str]) -> None

按 ID 批量删除文档。

参数 描述
keys

文本的 ID 列表。

类型: Sequence[str]

yield_keys

yield_keys(*, prefix: str | None = None) -> Iterator[str]

生成存储中存在的键。

参数 描述
prefix

已忽略。使用构造函数中提供的前缀。

类型: str | None 默认值: None

VectorSearchVectorStore

基类:_BaseVertexAIVectorStore

VertexAI VectorStore,使用 Vector Search 处理搜索和索引,并将文档存储在 Google Cloud Storage 中。

方法 描述
add_texts

通过嵌入运行更多文本并添加到 `VectorStore`。

delete

按向量 ID 删除。

get_by_ids

根据 ID 获取文档。

aget_by_ids

通过 ID 异步获取文档。

adelete

按向量 ID 或其他条件异步删除。

aadd_texts

通过嵌入异步运行更多文本并添加到 `VectorStore`。

add_documents

在 `VectorStore` 中添加或更新文档。

aadd_documents

异步运行更多文档通过嵌入并添加到 `VectorStore`。

search

使用指定的搜索类型返回与查询最相似的文档。

asearch

异步返回与查询最相似的文档,使用指定的搜索类型。

similarity_search

返回与查询最相似的文档。

similarity_search_with_score

返回与查询最相似的文档及其与查询的余弦距离。

asimilarity_search_with_score

异步运行带距离的相似性搜索。

similarity_search_with_relevance_scores

返回文档和在 `[0, 1]` 范围内的相关性分数。

asimilarity_search_with_relevance_scores

异步返回文档和在 `[0, 1]` 范围内的相关性分数。

asimilarity_search

异步返回与查询最相似的文档。

similarity_search_by_vector

返回与嵌入向量最相似的文档。

asimilarity_search_by_vector

异步返回与嵌入向量最相似的文档。

max_marginal_relevance_search

返回使用最大边际相关性选择的文档。

amax_marginal_relevance_search

异步返回使用最大边际相关性选择的文档。

max_marginal_relevance_search_by_vector

返回使用最大边际相关性选择的文档。

amax_marginal_relevance_search_by_vector

异步返回使用最大边际相关性选择的文档。

from_documents

返回从文档和嵌入初始化的 `VectorStore`。

afrom_documents

异步返回从文档和嵌入初始化的 `VectorStore`。

from_texts

请改用 from components。

afrom_texts

异步返回从文本和嵌入初始化的 `VectorStore`。

as_retriever

返回从此 `VectorStore` 初始化的 `VectorStoreRetriever`。

__init__

构造函数。

similarity_search_by_vector_with_score

返回与嵌入最相似的文档及其余弦距离。

from_components

将对象创建移出构造函数。

embeddings 属性

embeddings: Embeddings

如果可用,则访问查询嵌入对象。

add_texts

add_texts(
    texts: Iterable[str],
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    is_complete_overwrite: bool = False,
    **kwargs: Any,
) -> list[str]

通过嵌入运行更多文本并添加到 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的字符串的可迭代对象。

类型: Iterable[str]

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

可选的 ID 列表,用于分配给索引中的文本。如果为 `None`,则会生成唯一的 ID。

类型: list[str] | None 默认值: None

is_complete_overwrite

可选,确定这是追加操作还是覆盖操作。仅与 `BATCH UPDATE` 索引相关。

类型: bool 默认值: False

kwargs

`VectorStore` 特定参数。

类型: Any 默认值: {}

返回 描述
list[str]

将文本添加到 `VectorStore` 后返回的 ID 列表。

delete

delete(ids: list[str] | None = None, **kwargs: Any) -> bool | None

按向量 ID 删除。

参数 描述
ids

要删除的 ID 列表。

类型: list[str] | None 默认值: None

**kwargs

如果添加了 metadata={},则删除与元数据筛选器匹配的文档,并且不需要参数 ID。

类型: Any 默认值: {}

返回 描述
bool | None

如果删除成功,则为 `True`。

引发 描述
ValueError

如果 `ids` 为 `None` 或空列表。

RuntimeError

如果在删除过程中发生错误。

get_by_ids

get_by_ids(ids: Sequence[str]) -> list[Document]

根据 ID 获取文档。

返回的文档应将其 ID 字段设置为文档在向量存储中的 ID。

如果某些 ID 未找到或存在重复的 ID,返回的文档数量可能少于请求的数量。

用户不应假设返回文档的顺序与输入 ID 的顺序相匹配。相反,用户应依赖于返回文档的 ID 字段。

如果某些 ID 未找到文档,此方法不应**抛出异常**。

参数 描述
ids

要检索的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document]

`Document` 对象列表。

aget_by_ids 异步

aget_by_ids(ids: Sequence[str]) -> list[Document]

通过 ID 异步获取文档。

返回的文档应将其 ID 字段设置为文档在向量存储中的 ID。

如果某些 ID 未找到或存在重复的 ID,返回的文档数量可能少于请求的数量。

用户不应假设返回文档的顺序与输入 ID 的顺序相匹配。相反,用户应依赖于返回文档的 ID 字段。

如果某些 ID 未找到文档,此方法不应**抛出异常**。

参数 描述
ids

要检索的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document]

`Document` 对象列表。

adelete 异步

adelete(ids: list[str] | None = None, **kwargs: Any) -> bool | None

按向量 ID 或其他条件异步删除。

参数 描述
ids

要删除的 ID 列表。如果为 `None`,则删除所有。

类型: list[str] | None 默认值: None

**kwargs

子类可能使用的其他关键字参数。

类型: Any 默认值: {}

返回 描述
bool | None

如果删除成功,则为 `True`,否则为 `False`,如果未实现,则为 `None`。

aadd_texts 异步

aadd_texts(
    texts: Iterable[str],
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    **kwargs: Any,
) -> list[str]

通过嵌入异步运行更多文本并添加到 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的字符串的可迭代对象。

类型: Iterable[str]

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

可选列表

类型: list[str] | None 默认值: None

**kwargs

`VectorStore` 特定参数。

类型: Any 默认值: {}

返回 描述
list[str]

将文本添加到 `VectorStore` 后返回的 ID 列表。

引发 描述
ValueError

如果元数据的数量与文本的数量不匹配。

ValueError

如果 ID 的数量与文本的数量不匹配。

add_documents

add_documents(documents: list[Document], **kwargs: Any) -> list[str]

在 `VectorStore` 中添加或更新文档。

参数 描述
documents

要添加到 `VectorStore` 的文档。

TYPE: list[Document]

**kwargs

附加的关键字参数。

如果 kwargs 包含 ID 并且文档也包含 ID,则 kwargs 中的 ID 将优先。

类型: Any 默认值: {}

返回 描述
list[str]

已添加文本的 ID 列表。

aadd_documents 异步

aadd_documents(documents: list[Document], **kwargs: Any) -> list[str]

异步运行更多文档通过嵌入并添加到 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的文档。

TYPE: list[Document]

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
list[str]

已添加文本的 ID 列表。

search

search(query: str, search_type: str, **kwargs: Any) -> list[Document]

使用指定的搜索类型返回与查询最相似的文档。

参数 描述
query

输入文本。

类型: str

search_type

要执行的搜索类型。可以是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'`。

类型: str

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

引发 描述
ValueError

如果 `search_type` 不是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'` 之一。

asearch 异步

asearch(query: str, search_type: str, **kwargs: Any) -> list[Document]

异步返回与查询最相似的文档,使用指定的搜索类型。

参数 描述
query

输入文本。

类型: str

search_type

要执行的搜索类型。可以是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'`。

类型: str

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

引发 描述
ValueError

如果 `search_type` 不是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'` 之一。

similarity_search(
    query: str,
    k: int = 4,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[Document]

返回与查询最相似的文档。

参数 描述
query

将用于搜索相似文档的字符串。

类型: str

k

将检索的邻居数量。

TYPE: int DEFAULT: 4

filter

可选。用于筛选匹配结果的命名空间列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

可选。用于筛选匹配结果的 NumericNamespaces 列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[Document]

k 个匹配文档的列表。

similarity_search_with_score

similarity_search_with_score(
    query: str,
    k: int = 4,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[tuple[Document, float | dict[str, float]]]

返回与查询最相似的文档及其与查询的余弦距离。

参数 描述
query

字符串查询,查找与之相似的文档。

类型: str

k

要返回的文档数量。默认为 4。

TYPE: int DEFAULT: 4

filter

用于筛选匹配结果的 `Namespace` 对象列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

用于筛选匹配结果的 `NumericNamespace` 对象列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[tuple[Document, float | dict[str, float]]]

与查询文本最相似的 `Document` 对象列表以及每个对象的余弦

list[tuple[Document, float | dict[str, float]]]

距离(浮点数)。分数越高表示相似度越高。

asimilarity_search_with_score 异步

asimilarity_search_with_score(
    *args: Any, **kwargs: Any
) -> list[tuple[Document, float]]

异步运行带距离的相似性搜索。

参数 描述
*args

传递给搜索方法的参数。

类型: Any 默认值: ()

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

由 `(doc, similarity_score)` 组成的元组列表。

similarity_search_with_relevance_scores

similarity_search_with_relevance_scores(
    query: str, k: int = 4, **kwargs: Any
) -> list[tuple[Document, float]]

返回文档和在 `[0, 1]` 范围内的相关性分数。

`0` 表示不相似,`1` 表示最相似。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

将传递给相似性搜索的kwargs。应包括`score_threshold`,一个可选的浮点值,介于`0`到`1`之间,用于筛选检索到的文档结果集。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

由 `(doc, similarity_score)` 组成的元组列表。

asimilarity_search_with_relevance_scores 异步

asimilarity_search_with_relevance_scores(
    query: str, k: int = 4, **kwargs: Any
) -> list[tuple[Document, float]]

异步返回文档和在 `[0, 1]` 范围内的相关性分数。

`0` 表示不相似,`1` 表示最相似。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

将传递给相似性搜索的kwargs。应包括`score_threshold`,一个可选的浮点值,介于`0`到`1`之间,用于筛选检索到的文档结果集。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

元组列表 `(doc, similarity_score)`

asimilarity_search(query: str, k: int = 4, **kwargs: Any) -> list[Document]

异步返回与查询最相似的文档。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

similarity_search_by_vector

similarity_search_by_vector(
    embedding: list[float], k: int = 4, **kwargs: Any
) -> list[Document]

返回与嵌入向量最相似的文档。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询向量最相似的 `Document` 对象列表。

asimilarity_search_by_vector 异步

asimilarity_search_by_vector(
    embedding: list[float], k: int = 4, **kwargs: Any
) -> list[Document]

异步返回与嵌入向量最相似的文档。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询向量最相似的 `Document` 对象列表。

max_marginal_relevance_search(
    query: str, k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, **kwargs: Any
) -> list[Document]

返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
query

用于查找相似文档的文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

amax_marginal_relevance_search(
    query: str, k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, **kwargs: Any
) -> list[Document]

异步返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
query

用于查找相似文档的文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

max_marginal_relevance_search_by_vector

max_marginal_relevance_search_by_vector(
    embedding: list[float],
    k: int = 4,
    fetch_k: int = 20,
    lambda_mult: float = 0.5,
    **kwargs: Any,
) -> list[Document]

返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

amax_marginal_relevance_search_by_vector 异步

amax_marginal_relevance_search_by_vector(
    embedding: list[float],
    k: int = 4,
    fetch_k: int = 20,
    lambda_mult: float = 0.5,
    **kwargs: Any,
) -> list[Document]

异步返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

from_documents 类方法

from_documents(documents: list[Document], embedding: Embeddings, **kwargs: Any) -> Self

返回从文档和嵌入初始化的 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的 `Document` 对象列表。

TYPE: list[Document]

embedding

要使用的嵌入函数。

TYPE: Embeddings

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文档和嵌入初始化的 `VectorStore`。

afrom_documents 异步 类方法

afrom_documents(
    documents: list[Document], embedding: Embeddings, **kwargs: Any
) -> Self

异步返回从文档和嵌入初始化的 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的 `Document` 对象列表。

TYPE: list[Document]

embedding

要使用的嵌入函数。

TYPE: Embeddings

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文档和嵌入初始化的 `VectorStore`。

from_texts 类方法

from_texts(
    texts: list[str],
    embedding: Embeddings,
    metadatas: list[dict] | None = None,
    **kwargs: Any,
) -> _BaseVertexAIVectorStore

请改用 from components。

afrom_texts 异步 类方法

afrom_texts(
    texts: list[str],
    embedding: Embeddings,
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    **kwargs: Any,
) -> Self

异步返回从文本和嵌入初始化的 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的文本。

类型: list[str]

embedding

要使用的嵌入函数。

TYPE: Embeddings

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

与文本关联的 ID 可选列表。

类型: list[str] | None 默认值: None

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文本和嵌入初始化的 `VectorStore`。

as_retriever

as_retriever(**kwargs: Any) -> VectorStoreRetriever

返回从此 `VectorStore` 初始化的 `VectorStoreRetriever`。

参数 描述
**kwargs

传递给搜索函数的关键字参数。可以包括

  • `search_type`:定义检索器应执行的搜索类型。可以是 `'similarity'` (默认)、`'mmr'` 或 `'similarity_score_threshold'`。
  • `search_kwargs`:传递给搜索函数的关键字参数。可以包括诸如

    • `k`:要返回的文档数量(默认:`4`)
    • `score_threshold`:`similarity_score_threshold` 的最小相关性阈值
    • `fetch_k`:传递给 MMR 算法的文档数量(默认值:`20`)
    • `lambda_mult`:MMR 返回结果的多样性;`1` 表示最小多样性,0 表示最大多样性。(默认值:`0.5`)
    • `filter`:按文档元数据过滤

类型: Any 默认值: {}

返回 描述
VectorStoreRetriever

`VectorStore` 的检索器类。

示例

# Retrieve more documents with higher diversity
# Useful if your dataset has many similar documents
docsearch.as_retriever(
    search_type="mmr", search_kwargs={"k": 6, "lambda_mult": 0.25}
)

# Fetch more documents for the MMR algorithm to consider
# But only return the top 5
docsearch.as_retriever(search_type="mmr", search_kwargs={"k": 5, "fetch_k": 50})

# Only retrieve documents that have a relevance score
# Above a certain threshold
docsearch.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={"score_threshold": 0.8},
)

# Only get the single most similar document from the dataset
docsearch.as_retriever(search_kwargs={"k": 1})

# Use a filter to only retrieve documents from a specific paper
docsearch.as_retriever(
    search_kwargs={"filter": {"paper_title": "GPT-4 Technical Report"}}
)

__init__

__init__(
    searcher: Searcher,
    document_storage: DocumentStorage,
    embeddings: Embeddings | None = None,
) -> None

构造函数。

参数 描述
searcher

负责搜索和存储索引的对象。

类型: Searcher

document_storage

负责存储和检索文档的对象。

类型: DocumentStorage

embeddings

负责将文本转换为嵌入的对象。

TYPE: Embeddings | None DEFAULT: None

similarity_search_by_vector_with_score

similarity_search_by_vector_with_score(
    embedding: list[float],
    sparse_embedding: dict[str, list[int] | list[float]] | None = None,
    k: int = 4,
    rrf_ranking_alpha: float = 1,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[tuple[Document, float | dict[str, float]]]

返回与嵌入最相似的文档及其余弦距离。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

sparse_embedding

稀疏嵌入字典,将嵌入表示为维度列表和稀疏值列表:即 {"values": [0.7, 0.5], "dimensions": [10, 20]}

类型: dict[str, list[int] | list[float]] | None 默认值: None

k

要返回的文档数量。默认为 4。

TYPE: int DEFAULT: 4

rrf_ranking_alpha

倒数排序融合权重,介于 0 和 1.0 之间的浮点数,用于权衡密集搜索与稀疏搜索,例如: - rrf_ranking_alpha=1:仅密集 - rrf_ranking_alpha=0:仅稀疏 - rrf_ranking_alpha=0.7:密集搜索权重为 0.7,稀疏搜索权重为 0.3

类型: float 默认值: 1

filter

可选。用于筛选匹配结果的命名空间列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

可选。用于筛选匹配结果的 NumericNamespaces 列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[tuple[Document, float | dict[str, float]]]

与查询文本最相似的 `Document` 对象列表,以及每个对象的余弦距离(浮点数),或者在进行混合搜索时,为包含密集和稀疏分数的字典。

分数越高表示相似度越高。

from_components 类方法

from_components(
    project_id: str,
    region: str,
    gcs_bucket_name: str,
    index_id: str,
    endpoint_id: str,
    private_service_connect_ip_address: str | None = None,
    credentials: Credentials | None = None,
    credentials_path: str | None = None,
    embedding: Embeddings | None = None,
    stream_update: bool = False,
    **kwargs: Any,
) -> VectorSearchVectorStore

将对象创建移出构造函数。

参数 描述
project_id

GCP 项目 ID。

类型: str

region

进行 API 调用的默认位置。它必须与 GCS 桶的位置相同,并且必须是区域性的。

类型: str

gcs_bucket_name

为了创建索引而存储向量的位置。

类型: str

index_id

已创建索引的 ID。

类型: str

endpoint_id

已创建端点的 ID。

类型: str

private_service_connect_ip_address

私有服务连接实例的 IP 地址。

类型: str | None 默认值: None

credentials

Google Cloud 凭据对象。

类型: Credentials | None 默认值: None

credentials_path

本地文件系统上 Google 凭据的路径。

类型: str | None 默认值: None

embedding

将用于嵌入文本的 :class:`Embeddings`。

TYPE: Embeddings | None DEFAULT: None

stream_update

是使用流式更新还是批量更新。VectorSearch 索引必须与流式/批量更新兼容。

类型: bool 默认值: False

kwargs

传递给 VertexAIVectorSearch.init() 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
VectorSearchVectorStore

一个已配置的 VertexAIVectorSearch。

VectorSearchVectorStoreDatastore

基类:_BaseVertexAIVectorStore

带有 DatasTore 文档存储的 VectorSearch。

方法 描述
add_texts

通过嵌入运行更多文本并添加到 `VectorStore`。

delete

按向量 ID 删除。

get_by_ids

根据 ID 获取文档。

aget_by_ids

通过 ID 异步获取文档。

adelete

按向量 ID 或其他条件异步删除。

aadd_texts

通过嵌入异步运行更多文本并添加到 `VectorStore`。

add_documents

在 `VectorStore` 中添加或更新文档。

aadd_documents

异步运行更多文档通过嵌入并添加到 `VectorStore`。

search

使用指定的搜索类型返回与查询最相似的文档。

asearch

异步返回与查询最相似的文档,使用指定的搜索类型。

similarity_search

返回与查询最相似的文档。

similarity_search_with_score

返回与查询最相似的文档及其与查询的余弦距离。

asimilarity_search_with_score

异步运行带距离的相似性搜索。

similarity_search_with_relevance_scores

返回文档和在 `[0, 1]` 范围内的相关性分数。

asimilarity_search_with_relevance_scores

异步返回文档和在 `[0, 1]` 范围内的相关性分数。

asimilarity_search

异步返回与查询最相似的文档。

similarity_search_by_vector

返回与嵌入向量最相似的文档。

asimilarity_search_by_vector

异步返回与嵌入向量最相似的文档。

max_marginal_relevance_search

返回使用最大边际相关性选择的文档。

amax_marginal_relevance_search

异步返回使用最大边际相关性选择的文档。

max_marginal_relevance_search_by_vector

返回使用最大边际相关性选择的文档。

amax_marginal_relevance_search_by_vector

异步返回使用最大边际相关性选择的文档。

from_documents

返回从文档和嵌入初始化的 `VectorStore`。

afrom_documents

异步返回从文档和嵌入初始化的 `VectorStore`。

from_texts

请改用 from components。

afrom_texts

异步返回从文本和嵌入初始化的 `VectorStore`。

as_retriever

返回从此 `VectorStore` 初始化的 `VectorStoreRetriever`。

__init__

构造函数。

similarity_search_by_vector_with_score

返回与嵌入最相似的文档及其余弦距离。

from_components

将对象创建移出构造函数。

embeddings 属性

embeddings: Embeddings

如果可用,则访问查询嵌入对象。

add_texts

add_texts(
    texts: Iterable[str],
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    is_complete_overwrite: bool = False,
    **kwargs: Any,
) -> list[str]

通过嵌入运行更多文本并添加到 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的字符串的可迭代对象。

类型: Iterable[str]

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

可选的 ID 列表,用于分配给索引中的文本。如果为 `None`,则会生成唯一的 ID。

类型: list[str] | None 默认值: None

is_complete_overwrite

可选,确定这是追加操作还是覆盖操作。仅与 `BATCH UPDATE` 索引相关。

类型: bool 默认值: False

kwargs

`VectorStore` 特定参数。

类型: Any 默认值: {}

返回 描述
list[str]

将文本添加到 `VectorStore` 后返回的 ID 列表。

delete

delete(ids: list[str] | None = None, **kwargs: Any) -> bool | None

按向量 ID 删除。

参数 描述
ids

要删除的 ID 列表。

类型: list[str] | None 默认值: None

**kwargs

如果添加了 metadata={},则删除与元数据筛选器匹配的文档,并且不需要参数 ID。

类型: Any 默认值: {}

返回 描述
bool | None

如果删除成功,则为 `True`。

引发 描述
ValueError

如果 `ids` 为 `None` 或空列表。

RuntimeError

如果在删除过程中发生错误。

get_by_ids

get_by_ids(ids: Sequence[str]) -> list[Document]

根据 ID 获取文档。

返回的文档应将其 ID 字段设置为文档在向量存储中的 ID。

如果某些 ID 未找到或存在重复的 ID,返回的文档数量可能少于请求的数量。

用户不应假设返回文档的顺序与输入 ID 的顺序相匹配。相反,用户应依赖于返回文档的 ID 字段。

如果某些 ID 未找到文档,此方法不应**抛出异常**。

参数 描述
ids

要检索的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document]

`Document` 对象列表。

aget_by_ids 异步

aget_by_ids(ids: Sequence[str]) -> list[Document]

通过 ID 异步获取文档。

返回的文档应将其 ID 字段设置为文档在向量存储中的 ID。

如果某些 ID 未找到或存在重复的 ID,返回的文档数量可能少于请求的数量。

用户不应假设返回文档的顺序与输入 ID 的顺序相匹配。相反,用户应依赖于返回文档的 ID 字段。

如果某些 ID 未找到文档,此方法不应**抛出异常**。

参数 描述
ids

要检索的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document]

`Document` 对象列表。

adelete 异步

adelete(ids: list[str] | None = None, **kwargs: Any) -> bool | None

按向量 ID 或其他条件异步删除。

参数 描述
ids

要删除的 ID 列表。如果为 `None`,则删除所有。

类型: list[str] | None 默认值: None

**kwargs

子类可能使用的其他关键字参数。

类型: Any 默认值: {}

返回 描述
bool | None

如果删除成功,则为 `True`,否则为 `False`,如果未实现,则为 `None`。

aadd_texts 异步

aadd_texts(
    texts: Iterable[str],
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    **kwargs: Any,
) -> list[str]

通过嵌入异步运行更多文本并添加到 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的字符串的可迭代对象。

类型: Iterable[str]

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

可选列表

类型: list[str] | None 默认值: None

**kwargs

`VectorStore` 特定参数。

类型: Any 默认值: {}

返回 描述
list[str]

将文本添加到 `VectorStore` 后返回的 ID 列表。

引发 描述
ValueError

如果元数据的数量与文本的数量不匹配。

ValueError

如果 ID 的数量与文本的数量不匹配。

add_documents

add_documents(documents: list[Document], **kwargs: Any) -> list[str]

在 `VectorStore` 中添加或更新文档。

参数 描述
documents

要添加到 `VectorStore` 的文档。

TYPE: list[Document]

**kwargs

附加的关键字参数。

如果 kwargs 包含 ID 并且文档也包含 ID,则 kwargs 中的 ID 将优先。

类型: Any 默认值: {}

返回 描述
list[str]

已添加文本的 ID 列表。

aadd_documents 异步

aadd_documents(documents: list[Document], **kwargs: Any) -> list[str]

异步运行更多文档通过嵌入并添加到 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的文档。

TYPE: list[Document]

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
list[str]

已添加文本的 ID 列表。

search

search(query: str, search_type: str, **kwargs: Any) -> list[Document]

使用指定的搜索类型返回与查询最相似的文档。

参数 描述
query

输入文本。

类型: str

search_type

要执行的搜索类型。可以是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'`。

类型: str

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

引发 描述
ValueError

如果 `search_type` 不是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'` 之一。

asearch 异步

asearch(query: str, search_type: str, **kwargs: Any) -> list[Document]

异步返回与查询最相似的文档,使用指定的搜索类型。

参数 描述
query

输入文本。

类型: str

search_type

要执行的搜索类型。可以是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'`。

类型: str

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

引发 描述
ValueError

如果 `search_type` 不是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'` 之一。

similarity_search(
    query: str,
    k: int = 4,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[Document]

返回与查询最相似的文档。

参数 描述
query

将用于搜索相似文档的字符串。

类型: str

k

将检索的邻居数量。

TYPE: int DEFAULT: 4

filter

可选。用于筛选匹配结果的命名空间列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

可选。用于筛选匹配结果的 NumericNamespaces 列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[Document]

k 个匹配文档的列表。

similarity_search_with_score

similarity_search_with_score(
    query: str,
    k: int = 4,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[tuple[Document, float | dict[str, float]]]

返回与查询最相似的文档及其与查询的余弦距离。

参数 描述
query

字符串查询,查找与之相似的文档。

类型: str

k

要返回的文档数量。默认为 4。

TYPE: int DEFAULT: 4

filter

用于筛选匹配结果的 `Namespace` 对象列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

用于筛选匹配结果的 `NumericNamespace` 对象列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[tuple[Document, float | dict[str, float]]]

与查询文本最相似的 `Document` 对象列表以及每个对象的余弦

list[tuple[Document, float | dict[str, float]]]

距离(浮点数)。分数越高表示相似度越高。

asimilarity_search_with_score 异步

asimilarity_search_with_score(
    *args: Any, **kwargs: Any
) -> list[tuple[Document, float]]

异步运行带距离的相似性搜索。

参数 描述
*args

传递给搜索方法的参数。

类型: Any 默认值: ()

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

由 `(doc, similarity_score)` 组成的元组列表。

similarity_search_with_relevance_scores

similarity_search_with_relevance_scores(
    query: str, k: int = 4, **kwargs: Any
) -> list[tuple[Document, float]]

返回文档和在 `[0, 1]` 范围内的相关性分数。

`0` 表示不相似,`1` 表示最相似。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

将传递给相似性搜索的kwargs。应包括`score_threshold`,一个可选的浮点值,介于`0`到`1`之间,用于筛选检索到的文档结果集。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

由 `(doc, similarity_score)` 组成的元组列表。

asimilarity_search_with_relevance_scores 异步

asimilarity_search_with_relevance_scores(
    query: str, k: int = 4, **kwargs: Any
) -> list[tuple[Document, float]]

异步返回文档和在 `[0, 1]` 范围内的相关性分数。

`0` 表示不相似,`1` 表示最相似。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

将传递给相似性搜索的kwargs。应包括`score_threshold`,一个可选的浮点值,介于`0`到`1`之间,用于筛选检索到的文档结果集。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

元组列表 `(doc, similarity_score)`

asimilarity_search(query: str, k: int = 4, **kwargs: Any) -> list[Document]

异步返回与查询最相似的文档。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

similarity_search_by_vector

similarity_search_by_vector(
    embedding: list[float], k: int = 4, **kwargs: Any
) -> list[Document]

返回与嵌入向量最相似的文档。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询向量最相似的 `Document` 对象列表。

asimilarity_search_by_vector 异步

asimilarity_search_by_vector(
    embedding: list[float], k: int = 4, **kwargs: Any
) -> list[Document]

异步返回与嵌入向量最相似的文档。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询向量最相似的 `Document` 对象列表。

max_marginal_relevance_search(
    query: str, k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, **kwargs: Any
) -> list[Document]

返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
query

用于查找相似文档的文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

amax_marginal_relevance_search(
    query: str, k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, **kwargs: Any
) -> list[Document]

异步返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
query

用于查找相似文档的文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

max_marginal_relevance_search_by_vector

max_marginal_relevance_search_by_vector(
    embedding: list[float],
    k: int = 4,
    fetch_k: int = 20,
    lambda_mult: float = 0.5,
    **kwargs: Any,
) -> list[Document]

返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

amax_marginal_relevance_search_by_vector 异步

amax_marginal_relevance_search_by_vector(
    embedding: list[float],
    k: int = 4,
    fetch_k: int = 20,
    lambda_mult: float = 0.5,
    **kwargs: Any,
) -> list[Document]

异步返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

from_documents 类方法

from_documents(documents: list[Document], embedding: Embeddings, **kwargs: Any) -> Self

返回从文档和嵌入初始化的 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的 `Document` 对象列表。

TYPE: list[Document]

embedding

要使用的嵌入函数。

TYPE: Embeddings

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文档和嵌入初始化的 `VectorStore`。

afrom_documents 异步 类方法

afrom_documents(
    documents: list[Document], embedding: Embeddings, **kwargs: Any
) -> Self

异步返回从文档和嵌入初始化的 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的 `Document` 对象列表。

TYPE: list[Document]

embedding

要使用的嵌入函数。

TYPE: Embeddings

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文档和嵌入初始化的 `VectorStore`。

from_texts 类方法

from_texts(
    texts: list[str],
    embedding: Embeddings,
    metadatas: list[dict] | None = None,
    **kwargs: Any,
) -> _BaseVertexAIVectorStore

请改用 from components。

afrom_texts 异步 类方法

afrom_texts(
    texts: list[str],
    embedding: Embeddings,
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    **kwargs: Any,
) -> Self

异步返回从文本和嵌入初始化的 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的文本。

类型: list[str]

embedding

要使用的嵌入函数。

TYPE: Embeddings

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

与文本关联的 ID 可选列表。

类型: list[str] | None 默认值: None

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文本和嵌入初始化的 `VectorStore`。

as_retriever

as_retriever(**kwargs: Any) -> VectorStoreRetriever

返回从此 `VectorStore` 初始化的 `VectorStoreRetriever`。

参数 描述
**kwargs

传递给搜索函数的关键字参数。可以包括

  • `search_type`:定义检索器应执行的搜索类型。可以是 `'similarity'` (默认)、`'mmr'` 或 `'similarity_score_threshold'`。
  • `search_kwargs`:传递给搜索函数的关键字参数。可以包括诸如

    • `k`:要返回的文档数量(默认:`4`)
    • `score_threshold`:`similarity_score_threshold` 的最小相关性阈值
    • `fetch_k`:传递给 MMR 算法的文档数量(默认值:`20`)
    • `lambda_mult`:MMR 返回结果的多样性;`1` 表示最小多样性,0 表示最大多样性。(默认值:`0.5`)
    • `filter`:按文档元数据过滤

类型: Any 默认值: {}

返回 描述
VectorStoreRetriever

`VectorStore` 的检索器类。

示例

# Retrieve more documents with higher diversity
# Useful if your dataset has many similar documents
docsearch.as_retriever(
    search_type="mmr", search_kwargs={"k": 6, "lambda_mult": 0.25}
)

# Fetch more documents for the MMR algorithm to consider
# But only return the top 5
docsearch.as_retriever(search_type="mmr", search_kwargs={"k": 5, "fetch_k": 50})

# Only retrieve documents that have a relevance score
# Above a certain threshold
docsearch.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={"score_threshold": 0.8},
)

# Only get the single most similar document from the dataset
docsearch.as_retriever(search_kwargs={"k": 1})

# Use a filter to only retrieve documents from a specific paper
docsearch.as_retriever(
    search_kwargs={"filter": {"paper_title": "GPT-4 Technical Report"}}
)

__init__

__init__(
    searcher: Searcher,
    document_storage: DocumentStorage,
    embeddings: Embeddings | None = None,
) -> None

构造函数。

参数 描述
searcher

负责搜索和存储索引的对象。

类型: Searcher

document_storage

负责存储和检索文档的对象。

类型: DocumentStorage

embeddings

负责将文本转换为嵌入的对象。

TYPE: Embeddings | None DEFAULT: None

similarity_search_by_vector_with_score

similarity_search_by_vector_with_score(
    embedding: list[float],
    sparse_embedding: dict[str, list[int] | list[float]] | None = None,
    k: int = 4,
    rrf_ranking_alpha: float = 1,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[tuple[Document, float | dict[str, float]]]

返回与嵌入最相似的文档及其余弦距离。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

sparse_embedding

稀疏嵌入字典,将嵌入表示为维度列表和稀疏值列表:即 {"values": [0.7, 0.5], "dimensions": [10, 20]}

类型: dict[str, list[int] | list[float]] | None 默认值: None

k

要返回的文档数量。默认为 4。

TYPE: int DEFAULT: 4

rrf_ranking_alpha

倒数排序融合权重,介于 0 和 1.0 之间的浮点数,用于权衡密集搜索与稀疏搜索,例如: - rrf_ranking_alpha=1:仅密集 - rrf_ranking_alpha=0:仅稀疏 - rrf_ranking_alpha=0.7:密集搜索权重为 0.7,稀疏搜索权重为 0.3

类型: float 默认值: 1

filter

可选。用于筛选匹配结果的命名空间列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

可选。用于筛选匹配结果的 NumericNamespaces 列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[tuple[Document, float | dict[str, float]]]

与查询文本最相似的 `Document` 对象列表,以及每个对象的余弦距离(浮点数),或者在进行混合搜索时,为包含密集和稀疏分数的字典。

分数越高表示相似度越高。

from_components 类方法

from_components(
    project_id: str,
    region: str,
    index_id: str,
    endpoint_id: str,
    index_staging_bucket_name: str | None = None,
    credentials: Credentials | None = None,
    credentials_path: str | None = None,
    embedding: Embeddings | None = None,
    stream_update: bool = False,
    datastore_client_kwargs: dict[str, Any] | None = None,
    exclude_from_indexes: list[str] | None = None,
    datastore_kind: str = "document_id",
    datastore_text_property_name: str = "text",
    datastore_metadata_property_name: str = "metadata",
    **kwargs: dict[str, Any],
) -> VectorSearchVectorStoreDatastore

将对象创建移出构造函数。

参数 描述
project_id

GCP 项目 ID。

类型: str

region

进行 API 调用的默认位置。它必须与 GCS 桶的位置相同,并且必须是区域性的。

类型: str

index_id

已创建索引的 ID。

类型: str

endpoint_id

已创建端点的 ID。

类型: str

index_staging_bucket_name

如果索引通过批量方式更新,则为更新索引前暂存数据的存储桶。仅在更新索引时需要。

类型: str | None 默认值: None

credentials

Google Cloud 凭据对象。

类型: Credentials | None 默认值: None

credentials_path

本地文件系统上 Google 凭据的路径。

类型: str | None 默认值: None

embedding

将用于嵌入文本的 :class:`Embeddings`。

TYPE: Embeddings | None DEFAULT: None

stream_update

是使用流式更新还是批量更新。VectorSearch 索引必须与流式/批量更新兼容。

类型: bool 默认值: False

datastore_client_kwargs

传递给 datastore 客户端的其他关键字参数。

类型: dict[str, Any] | None 默认值: None

exclude_from_indexes

要从 datastore 索引中排除的字段。

类型: list[str] | None 默认值: None

datastore_kind

Datastore 的种类名称。

类型: str 默认值: 'document_id'

datastore_text_property_name

用于存储文本内容的属性名称。

类型: str 默认: 'text'

datastore_metadata_property_name

用于存储元数据的属性名称。

类型: str 默认值: 'metadata'

kwargs

传递给 VertexAIVectorSearch.init() 的其他关键字参数。

类型: dict[str, Any] 默认值: {}

返回 描述
VectorSearchVectorStoreDatastore

一个已配置的 VectorSearchVectorStoreDatastore。

VectorSearchVectorStoreGCS

基类:VectorSearchVectorStore

`VectorSearchVectorStore` 的别名,用于与其他具有不同文档存储后端的向量存储保持一致。

方法 描述
add_texts

通过嵌入运行更多文本并添加到 `VectorStore`。

delete

按向量 ID 删除。

get_by_ids

根据 ID 获取文档。

aget_by_ids

通过 ID 异步获取文档。

adelete

按向量 ID 或其他条件异步删除。

aadd_texts

通过嵌入异步运行更多文本并添加到 `VectorStore`。

add_documents

在 `VectorStore` 中添加或更新文档。

aadd_documents

异步运行更多文档通过嵌入并添加到 `VectorStore`。

search

使用指定的搜索类型返回与查询最相似的文档。

asearch

异步返回与查询最相似的文档,使用指定的搜索类型。

similarity_search

返回与查询最相似的文档。

similarity_search_with_score

返回与查询最相似的文档及其与查询的余弦距离。

asimilarity_search_with_score

异步运行带距离的相似性搜索。

similarity_search_with_relevance_scores

返回文档和在 `[0, 1]` 范围内的相关性分数。

asimilarity_search_with_relevance_scores

异步返回文档和在 `[0, 1]` 范围内的相关性分数。

asimilarity_search

异步返回与查询最相似的文档。

similarity_search_by_vector

返回与嵌入向量最相似的文档。

asimilarity_search_by_vector

异步返回与嵌入向量最相似的文档。

max_marginal_relevance_search

返回使用最大边际相关性选择的文档。

amax_marginal_relevance_search

异步返回使用最大边际相关性选择的文档。

max_marginal_relevance_search_by_vector

返回使用最大边际相关性选择的文档。

amax_marginal_relevance_search_by_vector

异步返回使用最大边际相关性选择的文档。

from_documents

返回从文档和嵌入初始化的 `VectorStore`。

afrom_documents

异步返回从文档和嵌入初始化的 `VectorStore`。

from_texts

请改用 from components。

afrom_texts

异步返回从文本和嵌入初始化的 `VectorStore`。

as_retriever

返回从此 `VectorStore` 初始化的 `VectorStoreRetriever`。

__init__

构造函数。

similarity_search_by_vector_with_score

返回与嵌入最相似的文档及其余弦距离。

from_components

将对象创建移出构造函数。

embeddings 属性

embeddings: Embeddings

如果可用,则访问查询嵌入对象。

add_texts

add_texts(
    texts: Iterable[str],
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    is_complete_overwrite: bool = False,
    **kwargs: Any,
) -> list[str]

通过嵌入运行更多文本并添加到 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的字符串的可迭代对象。

类型: Iterable[str]

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

可选的 ID 列表,用于分配给索引中的文本。如果为 `None`,则会生成唯一的 ID。

类型: list[str] | None 默认值: None

is_complete_overwrite

可选,确定这是追加操作还是覆盖操作。仅与 `BATCH UPDATE` 索引相关。

类型: bool 默认值: False

kwargs

`VectorStore` 特定参数。

类型: Any 默认值: {}

返回 描述
list[str]

将文本添加到 `VectorStore` 后返回的 ID 列表。

delete

delete(ids: list[str] | None = None, **kwargs: Any) -> bool | None

按向量 ID 删除。

参数 描述
ids

要删除的 ID 列表。

类型: list[str] | None 默认值: None

**kwargs

如果添加了 metadata={},则删除与元数据筛选器匹配的文档,并且不需要参数 ID。

类型: Any 默认值: {}

返回 描述
bool | None

如果删除成功,则为 `True`。

引发 描述
ValueError

如果 `ids` 为 `None` 或空列表。

RuntimeError

如果在删除过程中发生错误。

get_by_ids

get_by_ids(ids: Sequence[str]) -> list[Document]

根据 ID 获取文档。

返回的文档应将其 ID 字段设置为文档在向量存储中的 ID。

如果某些 ID 未找到或存在重复的 ID,返回的文档数量可能少于请求的数量。

用户不应假设返回文档的顺序与输入 ID 的顺序相匹配。相反,用户应依赖于返回文档的 ID 字段。

如果某些 ID 未找到文档,此方法不应**抛出异常**。

参数 描述
ids

要检索的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document]

`Document` 对象列表。

aget_by_ids 异步

aget_by_ids(ids: Sequence[str]) -> list[Document]

通过 ID 异步获取文档。

返回的文档应将其 ID 字段设置为文档在向量存储中的 ID。

如果某些 ID 未找到或存在重复的 ID,返回的文档数量可能少于请求的数量。

用户不应假设返回文档的顺序与输入 ID 的顺序相匹配。相反,用户应依赖于返回文档的 ID 字段。

如果某些 ID 未找到文档,此方法不应**抛出异常**。

参数 描述
ids

要检索的 ID 列表。

类型: Sequence[str]

返回 描述
list[Document]

`Document` 对象列表。

adelete 异步

adelete(ids: list[str] | None = None, **kwargs: Any) -> bool | None

按向量 ID 或其他条件异步删除。

参数 描述
ids

要删除的 ID 列表。如果为 `None`,则删除所有。

类型: list[str] | None 默认值: None

**kwargs

子类可能使用的其他关键字参数。

类型: Any 默认值: {}

返回 描述
bool | None

如果删除成功,则为 `True`,否则为 `False`,如果未实现,则为 `None`。

aadd_texts 异步

aadd_texts(
    texts: Iterable[str],
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    **kwargs: Any,
) -> list[str]

通过嵌入异步运行更多文本并添加到 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的字符串的可迭代对象。

类型: Iterable[str]

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

可选列表

类型: list[str] | None 默认值: None

**kwargs

`VectorStore` 特定参数。

类型: Any 默认值: {}

返回 描述
list[str]

将文本添加到 `VectorStore` 后返回的 ID 列表。

引发 描述
ValueError

如果元数据的数量与文本的数量不匹配。

ValueError

如果 ID 的数量与文本的数量不匹配。

add_documents

add_documents(documents: list[Document], **kwargs: Any) -> list[str]

在 `VectorStore` 中添加或更新文档。

参数 描述
documents

要添加到 `VectorStore` 的文档。

TYPE: list[Document]

**kwargs

附加的关键字参数。

如果 kwargs 包含 ID 并且文档也包含 ID,则 kwargs 中的 ID 将优先。

类型: Any 默认值: {}

返回 描述
list[str]

已添加文本的 ID 列表。

aadd_documents 异步

aadd_documents(documents: list[Document], **kwargs: Any) -> list[str]

异步运行更多文档通过嵌入并添加到 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的文档。

TYPE: list[Document]

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
list[str]

已添加文本的 ID 列表。

search

search(query: str, search_type: str, **kwargs: Any) -> list[Document]

使用指定的搜索类型返回与查询最相似的文档。

参数 描述
query

输入文本。

类型: str

search_type

要执行的搜索类型。可以是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'`。

类型: str

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

引发 描述
ValueError

如果 `search_type` 不是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'` 之一。

asearch 异步

asearch(query: str, search_type: str, **kwargs: Any) -> list[Document]

异步返回与查询最相似的文档,使用指定的搜索类型。

参数 描述
query

输入文本。

类型: str

search_type

要执行的搜索类型。可以是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'`。

类型: str

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

引发 描述
ValueError

如果 `search_type` 不是 `'similarity'`、`'mmr'` 或 `'similarity_score_threshold'` 之一。

similarity_search(
    query: str,
    k: int = 4,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[Document]

返回与查询最相似的文档。

参数 描述
query

将用于搜索相似文档的字符串。

类型: str

k

将检索的邻居数量。

TYPE: int DEFAULT: 4

filter

可选。用于筛选匹配结果的命名空间列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

可选。用于筛选匹配结果的 NumericNamespaces 列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[Document]

k 个匹配文档的列表。

similarity_search_with_score

similarity_search_with_score(
    query: str,
    k: int = 4,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[tuple[Document, float | dict[str, float]]]

返回与查询最相似的文档及其与查询的余弦距离。

参数 描述
query

字符串查询,查找与之相似的文档。

类型: str

k

要返回的文档数量。默认为 4。

TYPE: int DEFAULT: 4

filter

用于筛选匹配结果的 `Namespace` 对象列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

用于筛选匹配结果的 `NumericNamespace` 对象列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[tuple[Document, float | dict[str, float]]]

与查询文本最相似的 `Document` 对象列表以及每个对象的余弦

list[tuple[Document, float | dict[str, float]]]

距离(浮点数)。分数越高表示相似度越高。

asimilarity_search_with_score 异步

asimilarity_search_with_score(
    *args: Any, **kwargs: Any
) -> list[tuple[Document, float]]

异步运行带距离的相似性搜索。

参数 描述
*args

传递给搜索方法的参数。

类型: Any 默认值: ()

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

由 `(doc, similarity_score)` 组成的元组列表。

similarity_search_with_relevance_scores

similarity_search_with_relevance_scores(
    query: str, k: int = 4, **kwargs: Any
) -> list[tuple[Document, float]]

返回文档和在 `[0, 1]` 范围内的相关性分数。

`0` 表示不相似,`1` 表示最相似。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

将传递给相似性搜索的kwargs。应包括`score_threshold`,一个可选的浮点值,介于`0`到`1`之间,用于筛选检索到的文档结果集。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

由 `(doc, similarity_score)` 组成的元组列表。

asimilarity_search_with_relevance_scores 异步

asimilarity_search_with_relevance_scores(
    query: str, k: int = 4, **kwargs: Any
) -> list[tuple[Document, float]]

异步返回文档和在 `[0, 1]` 范围内的相关性分数。

`0` 表示不相似,`1` 表示最相似。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

将传递给相似性搜索的kwargs。应包括`score_threshold`,一个可选的浮点值,介于`0`到`1`之间,用于筛选检索到的文档结果集。

类型: Any 默认值: {}

返回 描述
list[tuple[Document, float]]

元组列表 `(doc, similarity_score)`

asimilarity_search(query: str, k: int = 4, **kwargs: Any) -> list[Document]

异步返回与查询最相似的文档。

参数 描述
query

输入文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询最相似的 `Document` 对象列表。

similarity_search_by_vector

similarity_search_by_vector(
    embedding: list[float], k: int = 4, **kwargs: Any
) -> list[Document]

返回与嵌入向量最相似的文档。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询向量最相似的 `Document` 对象列表。

asimilarity_search_by_vector 异步

asimilarity_search_by_vector(
    embedding: list[float], k: int = 4, **kwargs: Any
) -> list[Document]

异步返回与嵌入向量最相似的文档。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

与查询向量最相似的 `Document` 对象列表。

max_marginal_relevance_search(
    query: str, k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, **kwargs: Any
) -> list[Document]

返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
query

用于查找相似文档的文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

amax_marginal_relevance_search(
    query: str, k: int = 4, fetch_k: int = 20, lambda_mult: float = 0.5, **kwargs: Any
) -> list[Document]

异步返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
query

用于查找相似文档的文本。

类型: str

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

max_marginal_relevance_search_by_vector

max_marginal_relevance_search_by_vector(
    embedding: list[float],
    k: int = 4,
    fetch_k: int = 20,
    lambda_mult: float = 0.5,
    **kwargs: Any,
) -> list[Document]

返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

amax_marginal_relevance_search_by_vector 异步

amax_marginal_relevance_search_by_vector(
    embedding: list[float],
    k: int = 4,
    fetch_k: int = 20,
    lambda_mult: float = 0.5,
    **kwargs: Any,
) -> list[Document]

异步返回使用最大边际相关性选择的文档。

最大边际相关性优化查询相似度与所选文档之间的多样性。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

k

要返回的 `Document` 对象数量。

TYPE: int DEFAULT: 4

fetch_k

要获取并传递给 MMR 算法的 `Document` 对象数量。

类型: int 默认值: 20

lambda_mult

一个介于 `0` 和 `1` 之间的数字,决定了结果之间的多样性程度,其中 `0` 对应最大多样性,`1` 对应最小多样性。

类型: float 默认值: 0.5

**kwargs

传递给搜索方法的参数。

类型: Any 默认值: {}

返回 描述
list[Document]

通过最大边际相关性选择的 `Document` 对象列表。

from_documents 类方法

from_documents(documents: list[Document], embedding: Embeddings, **kwargs: Any) -> Self

返回从文档和嵌入初始化的 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的 `Document` 对象列表。

TYPE: list[Document]

embedding

要使用的嵌入函数。

TYPE: Embeddings

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文档和嵌入初始化的 `VectorStore`。

afrom_documents 异步 类方法

afrom_documents(
    documents: list[Document], embedding: Embeddings, **kwargs: Any
) -> Self

异步返回从文档和嵌入初始化的 `VectorStore`。

参数 描述
documents

要添加到 `VectorStore` 的 `Document` 对象列表。

TYPE: list[Document]

embedding

要使用的嵌入函数。

TYPE: Embeddings

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文档和嵌入初始化的 `VectorStore`。

from_texts 类方法

from_texts(
    texts: list[str],
    embedding: Embeddings,
    metadatas: list[dict] | None = None,
    **kwargs: Any,
) -> _BaseVertexAIVectorStore

请改用 from components。

afrom_texts 异步 类方法

afrom_texts(
    texts: list[str],
    embedding: Embeddings,
    metadatas: list[dict] | None = None,
    *,
    ids: list[str] | None = None,
    **kwargs: Any,
) -> Self

异步返回从文本和嵌入初始化的 `VectorStore`。

参数 描述
texts

要添加到 `VectorStore` 的文本。

类型: list[str]

embedding

要使用的嵌入函数。

TYPE: Embeddings

metadatas

与文本关联的元数据可选列表。

类型: list[dict] | None 默认值: None

ids

与文本关联的 ID 可选列表。

类型: list[str] | None 默认值: None

**kwargs

附加的关键字参数。

类型: Any 默认值: {}

返回 描述
Self

从文本和嵌入初始化的 `VectorStore`。

as_retriever

as_retriever(**kwargs: Any) -> VectorStoreRetriever

返回从此 `VectorStore` 初始化的 `VectorStoreRetriever`。

参数 描述
**kwargs

传递给搜索函数的关键字参数。可以包括

  • `search_type`:定义检索器应执行的搜索类型。可以是 `'similarity'` (默认)、`'mmr'` 或 `'similarity_score_threshold'`。
  • `search_kwargs`:传递给搜索函数的关键字参数。可以包括诸如

    • `k`:要返回的文档数量(默认:`4`)
    • `score_threshold`:`similarity_score_threshold` 的最小相关性阈值
    • `fetch_k`:传递给 MMR 算法的文档数量(默认值:`20`)
    • `lambda_mult`:MMR 返回结果的多样性;`1` 表示最小多样性,0 表示最大多样性。(默认值:`0.5`)
    • `filter`:按文档元数据过滤

类型: Any 默认值: {}

返回 描述
VectorStoreRetriever

`VectorStore` 的检索器类。

示例

# Retrieve more documents with higher diversity
# Useful if your dataset has many similar documents
docsearch.as_retriever(
    search_type="mmr", search_kwargs={"k": 6, "lambda_mult": 0.25}
)

# Fetch more documents for the MMR algorithm to consider
# But only return the top 5
docsearch.as_retriever(search_type="mmr", search_kwargs={"k": 5, "fetch_k": 50})

# Only retrieve documents that have a relevance score
# Above a certain threshold
docsearch.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={"score_threshold": 0.8},
)

# Only get the single most similar document from the dataset
docsearch.as_retriever(search_kwargs={"k": 1})

# Use a filter to only retrieve documents from a specific paper
docsearch.as_retriever(
    search_kwargs={"filter": {"paper_title": "GPT-4 Technical Report"}}
)

__init__

__init__(
    searcher: Searcher,
    document_storage: DocumentStorage,
    embeddings: Embeddings | None = None,
) -> None

构造函数。

参数 描述
searcher

负责搜索和存储索引的对象。

类型: Searcher

document_storage

负责存储和检索文档的对象。

类型: DocumentStorage

embeddings

负责将文本转换为嵌入的对象。

TYPE: Embeddings | None DEFAULT: None

similarity_search_by_vector_with_score

similarity_search_by_vector_with_score(
    embedding: list[float],
    sparse_embedding: dict[str, list[int] | list[float]] | None = None,
    k: int = 4,
    rrf_ranking_alpha: float = 1,
    filter: list[Namespace] | None = None,
    numeric_filter: list[NumericNamespace] | None = None,
    **kwargs: Any,
) -> list[tuple[Document, float | dict[str, float]]]

返回与嵌入最相似的文档及其余弦距离。

参数 描述
embedding

用于查找相似文档的嵌入。

类型: list[float]

sparse_embedding

稀疏嵌入字典,将嵌入表示为维度列表和稀疏值列表:即 {"values": [0.7, 0.5], "dimensions": [10, 20]}

类型: dict[str, list[int] | list[float]] | None 默认值: None

k

要返回的文档数量。默认为 4。

TYPE: int DEFAULT: 4

rrf_ranking_alpha

倒数排序融合权重,介于 0 和 1.0 之间的浮点数,用于权衡密集搜索与稀疏搜索,例如: - rrf_ranking_alpha=1:仅密集 - rrf_ranking_alpha=0:仅稀疏 - rrf_ranking_alpha=0.7:密集搜索权重为 0.7,稀疏搜索权重为 0.3

类型: float 默认值: 1

filter

可选。用于筛选匹配结果的命名空间列表。例如:[Namespace("color", ["red"], []), Namespace("shape", [], ["squared"])] 将匹配满足“红色”的数据点,但不包括具有“方形”形状的数据点。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[Namespace] | None 默认值: None

numeric_filter

可选。用于筛选匹配结果的 NumericNamespaces 列表。请参阅 https://cloud.google.com/vertex-ai/docs/matching-engine/filtering#json 了解更多详细信息。

类型: list[NumericNamespace] | None 默认值: None

返回 描述
list[tuple[Document, float | dict[str, float]]]

与查询文本最相似的 `Document` 对象列表,以及每个对象的余弦距离(浮点数),或者在进行混合搜索时,为包含密集和稀疏分数的字典。

分数越高表示相似度越高。

from_components 类方法

from_components(
    project_id: str,
    region: str,
    gcs_bucket_name: str,
    index_id: str,
    endpoint_id: str,
    private_service_connect_ip_address: str | None = None,
    credentials: Credentials | None = None,
    credentials_path: str | None = None,
    embedding: Embeddings | None = None,
    stream_update: bool = False,
    **kwargs: Any,
) -> VectorSearchVectorStore

将对象创建移出构造函数。

参数 描述
project_id

GCP 项目 ID。

类型: str

region

进行 API 调用的默认位置。它必须与 GCS 桶的位置相同,并且必须是区域性的。

类型: str

gcs_bucket_name

为了创建索引而存储向量的位置。

类型: str

index_id

已创建索引的 ID。

类型: str

endpoint_id

已创建端点的 ID。

类型: str

private_service_connect_ip_address

私有服务连接实例的 IP 地址。

类型: str | None 默认值: None

credentials

Google Cloud 凭据对象。

类型: Credentials | None 默认值: None

credentials_path

本地文件系统上 Google 凭据的路径。

类型: str | None 默认值: None

embedding

将用于嵌入文本的 :class:`Embeddings`。

TYPE: Embeddings | None DEFAULT: None

stream_update

是使用流式更新还是批量更新。VectorSearch 索引必须与流式/批量更新兼容。

类型: bool 默认值: False

kwargs

传递给 VertexAIVectorSearch.init() 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
VectorSearchVectorStore

一个已配置的 VertexAIVectorSearch。

VertexAIImageCaptioning

基类:_BaseVertexAIImageCaptioningBaseLLM

将图像字幕模型实现为 LLM。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

__init__
is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

此类未实现。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens

获取文本中存在的 token 数量。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

向模型传递一系列提示并返回生成结果。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

__str__

返回对象的字符串表示形式以供打印。

dict

返回 LLM 的字典。

save

保存 LLM。

name 类属性 实例属性

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType property

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType property

OutputType: type[str]

获取此 Runnable 的输入类型。

input_schema property

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema property

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs property

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets property

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes property

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache class-attribute instance-attribute

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose class-attribute instance-attribute

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks class-attribute instance-attribute

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags class-attribute instance-attribute

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids class-attribute instance-attribute

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

model_name class-attribute instance-attribute

model_name: str = Field(default='imagetext@001')

要使用的模型名称

number_of_results class-attribute instance-attribute

number_of_results: int = Field(default=1)

一次查询返回的结果数量

language class-attribute instance-attribute

language: str = Field(default='en')

查询的语言

project class-attribute instance-attribute

project: str | None = Field(default=None)

Google Cloud 项目

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> str

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke async

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> str

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[LanguageModelInput],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any,
) -> list[str]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch async

abatch(
    inputs: list[LanguageModelInput],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any,
) -> list[str]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed async

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[str]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream async

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[str]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log async

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events async

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform async

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

__init__

__init__(*args: Any, **kwargs: Any) -> None

is_lc_serializable classmethod

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace classmethod

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id classmethod

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt async

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: dict | type, **kwargs: Any
) -> Runnable[LanguageModelInput, dict | BaseModel]

此类未实现。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    prompts: list[str],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    *,
    tags: list[str] | list[list[str]] | None = None,
    metadata: dict[str, Any] | list[dict[str, Any]] | None = None,
    run_name: str | list[str] | None = None,
    run_id: UUID | list[UUID | None] | None = None,
    **kwargs: Any,
) -> LLMResult

向模型传递一系列提示并返回生成结果。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

字符串提示列表。

类型: list[str]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks | list[Callbacks] | None 默认值: None

tags

要与每个提示关联的标签列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: list[str] | list[list[str]] | None 默认值: None

metadata

要与每个提示关联的元数据字典列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: dict[str, Any] | list[dict[str, Any]] | None 默认值: None

运行名称

要与每个提示关联的运行名称列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: str | list[str] | None 默认值: None

run_id

要与每个提示关联的运行 ID 列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: UUID | list[UUID | None] | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

引发 描述
ValueError

如果提示不是列表。

ValueError

如果 `callbacks`、`tags`、`metadata` 或 `run_name`(如果提供)的长度与提示的长度不匹配。

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate async

agenerate(
    prompts: list[str],
    stop: list[str] | None = None,
    callbacks: Callbacks | list[Callbacks] | None = None,
    *,
    tags: list[str] | list[list[str]] | None = None,
    metadata: dict[str, Any] | list[dict[str, Any]] | None = None,
    run_name: str | list[str] | None = None,
    run_id: UUID | list[UUID | None] | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

字符串提示列表。

类型: list[str]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks | list[Callbacks] | None 默认值: None

tags

要与每个提示关联的标签列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: list[str] | list[list[str]] | None 默认值: None

metadata

要与每个提示关联的元数据字典列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: dict[str, Any] | list[dict[str, Any]] | None 默认值: None

运行名称

要与每个提示关联的运行名称列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: str | list[str] | None 默认值: None

run_id

要与每个提示关联的运行 ID 列表。如果提供,列表的长度必须与提示列表的长度匹配。

类型: UUID | list[UUID | None] | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

引发 描述
ValueError

如果 `callbacks`、`tags`、`metadata` 或 `run_name`(如果提供)的长度与提示的长度不匹配。

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

__str__

__str__() -> str

返回对象的字符串表示形式以供打印。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

save

save(file_path: Path | str) -> None

保存 LLM。

参数 描述
file_path

用于保存 LLM 的文件路径。

类型: Path | str

引发 描述
ValueError

如果文件路径不是字符串或 Path 对象。

示例
llm.save(file_path="path/llm.yaml")

VertexAIImageCaptioningChat

基类:_BaseVertexAIImageCaptioning, BaseChatModel

作为聊天实现的图像字幕模型。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

__init__
is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

返回与给定模式匹配的格式化输出的模型包装器。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens

获取文本中存在的 token 数量。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

将一系列提示传递给模型并返回模型生成的内容。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

dict

返回 LLM 的字典。

bind_tools

将工具绑定到模型。

name class-attribute instance-attribute

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType property

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType property

OutputType: Any

获取此 Runnable 的输出类型。

input_schema property

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema property

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs property

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets property

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes property

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache class-attribute instance-attribute

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose class-attribute instance-attribute

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks class-attribute instance-attribute

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags class-attribute instance-attribute

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids class-attribute instance-attribute

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

rate_limiter class-attribute instance-attribute

rate_limiter: BaseRateLimiter | None = Field(default=None, exclude=True)

一个可选的速率限制器,用于限制请求数量。

disable_streaming class-attribute instance-attribute

disable_streaming: bool | Literal['tool_calling'] = False

是否为此模型禁用流式传输。

如果绕过流式传输,则 stream/astream/astream_events 将转而调用 invoke/ainvoke

  • 如果为 True,将始终绕过流式传输情况。
  • 如果为 'tool_calling',仅当模型被调用时带有 tools 关键字参数时,才会绕过流式传输情况。换句话说,仅当提供 tools 参数时,LangChain 才会自动切换到非流式行为 (invoke)。这提供了两全其美的方案。
  • 如果为 False(默认值),则在可用时始终使用流式传输情况。

此标志的主要原因是,代码可能是使用 stream 编写的,而用户可能希望将给定模型换成另一个实现不完全支持流式传输的模型。

output_version class-attribute instance-attribute

output_version: str | None = Field(
    default_factory=from_env("LC_OUTPUT_VERSION", default=None)
)

要存储在消息内容中的 AIMessage 输出格式的版本。

AIMessage.content_blocks 将懒解析 content 的内容为标准格式。此标志可用于额外将标准格式存储在消息内容中,例如,用于序列化目的。

支持的值

  • 'v0':内容中特定于提供商的格式(可以使用 content_blocks 进行懒解析)
  • 'v1':内容中的标准化格式(与 content_blocks 一致)

合作伙伴包(例如 langchain-openai)也可以使用此字段以向后兼容的方式推出新的内容格式。

在版本 1.0 中添加

profile property

profile: ModelProfile

返回模型的性能分析信息。

此属性将依赖于 langchain-model-profiles 包来检索聊天模型的能力,例如上下文窗口大小和支持的功能。

引发 描述
ImportError

如果未安装 langchain-model-profiles

返回 描述
ModelProfile

一个 ModelProfile 对象,包含模型的性能分析信息。

model_name class-attribute instance-attribute

model_name: str = Field(default='imagetext@001')

要使用的模型名称

number_of_results class-attribute instance-attribute

number_of_results: int = Field(default=1)

一次查询返回的结果数量

language class-attribute instance-attribute

language: str = Field(default='en')

查询的语言

project class-attribute instance-attribute

project: str | None = Field(default=None)

Google Cloud 项目

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke async

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch async

abatch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed async

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[AIMessageChunk]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream async

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[AIMessageChunk]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log async

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events async

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform async

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

__init__

__init__(*args: Any, **kwargs: Any) -> None

is_lc_serializable classmethod

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace classmethod

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id classmethod

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt async

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: Dict | type, *, include_raw: bool = False, **kwargs: Any
) -> Runnable[LanguageModelInput, Dict | BaseModel]

返回与给定模式匹配的格式化输出的模型包装器。

参数 描述
模式

输出模式。可以作为以下形式传入:

  • 一个 OpenAI 函数/工具模式,
  • 一个 JSON Schema,
  • 一个 TypedDict 类,
  • 或一个 Pydantic 类。

如果 schema 是一个 Pydantic 类,那么模型输出将是该类的 Pydantic 实例,并且模型生成的字段将由 Pydantic 类进行验证。否则,模型输出将是一个字典,并且不会被验证。

有关在指定 Pydantic 或 TypedDict 类时如何正确指定模式字段的类型和描述的更多信息,请参阅 langchain_core.utils.function_calling.convert_to_openai_tool

类型: Dict | type

包含原始数据

如果为 False,则仅返回解析后的结构化输出。如果在模型输出解析期间发生错误,它将被引发。如果为 True,则将返回原始模型响应(一个 BaseMessage)和解析后的模型响应。如果在输出解析期间发生错误,它将被捕获并一并返回。

最终输出总是一个带有键 'raw''parsed''parsing_error'dict

类型: bool 默认值: False

引发 描述
ValueError

如果有任何不支持的 kwargs

NotImplementedError

如果模型没有实现 with_structured_output()

返回 描述
Runnable[LanguageModelInput, Dict | BaseModel]

一个接受与 langchain_core.language_models.chat.BaseChatModel 相同输入的 Runnable。如果 include_rawFalseschema 是一个 Pydantic 类,则 Runnable 输出一个 schema 的实例(即一个 Pydantic 对象)。否则,如果 include_rawFalse,则 Runnable 输出一个 dict

如果 include_rawTrue,则 Runnable 输出一个带有以下键的 dict

  • 'raw': BaseMessage
  • 'parsed': 如果出现解析错误则为 None,否则类型取决于上面描述的 schema
  • 'parsing_error': BaseException | None

示例:Pydantic 模式 (include_raw=False)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(AnswerWithJustification)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)

# -> AnswerWithJustification(
#     answer='They weigh the same',
#     justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'
# )

示例:Pydantic 模式 (include_raw=True)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(
    AnswerWithJustification, include_raw=True
)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'raw': AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Ao02pnFYXD6GN1yzc0uXPsvF', 'function': {'arguments': '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}', 'name': 'AnswerWithJustification'}, 'type': 'function'}]}),
#     'parsed': AnswerWithJustification(answer='They weigh the same.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'),
#     'parsing_error': None
# }

示例:dict 模式 (include_raw=False)

from pydantic import BaseModel
from langchain_core.utils.function_calling import convert_to_openai_tool


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


dict_schema = convert_to_openai_tool(AnswerWithJustification)
model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(dict_schema)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'answer': 'They weigh the same',
#     'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.'
# }

行为在 0.2.26 版本中已更改

添加了对 TypedDict 类的支持。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate async

agenerate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

bind_tools

bind_tools(
    tools: Sequence[Dict[str, Any] | type | Callable | BaseTool],
    *,
    tool_choice: str | None = None,
    **kwargs: Any,
) -> Runnable[LanguageModelInput, AIMessage]

将工具绑定到模型。

参数 描述
工具

要绑定到模型的工具序列。

类型: Sequence[Dict[str, Any] | type | Callable | BaseTool]

工具选择

要使用的工具。如果为 "any",则可以使用任何工具。

类型: str | None 默认值: None

返回 描述
Runnable[LanguageModelInput, AIMessage]

一个返回消息的 Runnable。

VertexAIImageEditorChat

基类:_BaseVertexAIImageGenerator, BaseChatModel

给定一张图片和一个提示,编辑该图片。目前仅支持无蒙版编辑。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

__init__
is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

返回与给定模式匹配的格式化输出的模型包装器。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens

获取文本中存在的 token 数量。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

将一系列提示传递给模型并返回模型生成的内容。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

dict

返回 LLM 的字典。

bind_tools

将工具绑定到模型。

name class-attribute instance-attribute

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType property

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType property

OutputType: Any

获取此 Runnable 的输出类型。

input_schema property

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema property

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs property

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets property

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes property

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache class-attribute instance-attribute

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose class-attribute instance-attribute

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks class-attribute instance-attribute

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags class-attribute instance-attribute

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata class-attribute instance-attribute

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids class-attribute instance-attribute

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

rate_limiter class-attribute instance-attribute

rate_limiter: BaseRateLimiter | None = Field(default=None, exclude=True)

一个可选的速率限制器,用于限制请求数量。

disable_streaming class-attribute instance-attribute

disable_streaming: bool | Literal['tool_calling'] = False

是否为此模型禁用流式传输。

如果绕过流式传输,则 stream/astream/astream_events 将转而调用 invoke/ainvoke

  • 如果为 True,将始终绕过流式传输情况。
  • 如果为 'tool_calling',仅当模型被调用时带有 tools 关键字参数时,才会绕过流式传输情况。换句话说,仅当提供 tools 参数时,LangChain 才会自动切换到非流式行为 (invoke)。这提供了两全其美的方案。
  • 如果为 False(默认值),则在可用时始终使用流式传输情况。

此标志的主要原因是,代码可能是使用 stream 编写的,而用户可能希望将给定模型换成另一个实现不完全支持流式传输的模型。

output_version class-attribute instance-attribute

output_version: str | None = Field(
    default_factory=from_env("LC_OUTPUT_VERSION", default=None)
)

要存储在消息内容中的 AIMessage 输出格式的版本。

AIMessage.content_blocks 将懒解析 content 的内容为标准格式。此标志可用于额外将标准格式存储在消息内容中,例如,用于序列化目的。

支持的值

  • 'v0':内容中特定于提供商的格式(可以使用 content_blocks 进行懒解析)
  • 'v1':内容中的标准化格式(与 content_blocks 一致)

合作伙伴包(例如 langchain-openai)也可以使用此字段以向后兼容的方式推出新的内容格式。

在版本 1.0 中添加

profile property

profile: ModelProfile

返回模型的性能分析信息。

此属性将依赖于 langchain-model-profiles 包来检索聊天模型的能力,例如上下文窗口大小和支持的功能。

引发 描述
ImportError

如果未安装 langchain-model-profiles

返回 描述
ModelProfile

一个 ModelProfile 对象,包含模型的性能分析信息。

model_name class-attribute instance-attribute

model_name: str = Field(default='imagen-3.0-generate-002')

基础模型的名称

negative_prompt class-attribute instance-attribute

negative_prompt: str | None = Field(default=None)

描述你希望在生成的图像中省略的内容

number_of_results class-attribute instance-attribute

number_of_results: int = Field(default=1)

要生成的图像数量

guidance_scale class-attribute instance-attribute

guidance_scale: float | None = Field(default=None)

控制提示的强度

language class-attribute instance-attribute

language: str | None = Field(default=None)

图像文本提示的语言。支持的值为“en”(英语)、“hi”(印地语)、“ja”(日语)、“ko”(韩语)和“auto”(自动语言检测)

seed class-attribute instance-attribute

seed: int | None = Field(default=None)

用于图像生成的随机种子

project class-attribute instance-attribute

project: str | None = Field(default=None)

Google Cloud 项目 ID

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke async

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch async

abatch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed async

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[AIMessageChunk]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream async

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[AIMessageChunk]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log async

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events async

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform async

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

__init__

__init__(*args: Any, **kwargs: Any) -> None

is_lc_serializable classmethod

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace classmethod

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id classmethod

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt async

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: Dict | type, *, include_raw: bool = False, **kwargs: Any
) -> Runnable[LanguageModelInput, Dict | BaseModel]

返回与给定模式匹配的格式化输出的模型包装器。

参数 描述
模式

输出模式。可以作为以下形式传入:

  • 一个 OpenAI 函数/工具模式,
  • 一个 JSON Schema,
  • 一个 TypedDict 类,
  • 或一个 Pydantic 类。

如果 schema 是一个 Pydantic 类,那么模型输出将是该类的 Pydantic 实例,并且模型生成的字段将由 Pydantic 类进行验证。否则,模型输出将是一个字典,并且不会被验证。

有关在指定 Pydantic 或 TypedDict 类时如何正确指定模式字段的类型和描述的更多信息,请参阅 langchain_core.utils.function_calling.convert_to_openai_tool

类型: Dict | type

包含原始数据

如果为 False,则仅返回解析后的结构化输出。如果在模型输出解析期间发生错误,它将被引发。如果为 True,则将返回原始模型响应(一个 BaseMessage)和解析后的模型响应。如果在输出解析期间发生错误,它将被捕获并一并返回。

最终输出总是一个带有键 'raw''parsed''parsing_error'dict

类型: bool 默认值: False

引发 描述
ValueError

如果有任何不支持的 kwargs

NotImplementedError

如果模型没有实现 with_structured_output()

返回 描述
Runnable[LanguageModelInput, Dict | BaseModel]

一个接受与 langchain_core.language_models.chat.BaseChatModel 相同输入的 Runnable。如果 include_rawFalseschema 是一个 Pydantic 类,则 Runnable 输出一个 schema 的实例(即一个 Pydantic 对象)。否则,如果 include_rawFalse,则 Runnable 输出一个 dict

如果 include_rawTrue,则 Runnable 输出一个带有以下键的 dict

  • 'raw': BaseMessage
  • 'parsed': 如果出现解析错误则为 None,否则类型取决于上面描述的 schema
  • 'parsing_error': BaseException | None

示例:Pydantic 模式 (include_raw=False)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(AnswerWithJustification)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)

# -> AnswerWithJustification(
#     answer='They weigh the same',
#     justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'
# )

示例:Pydantic 模式 (include_raw=True)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(
    AnswerWithJustification, include_raw=True
)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'raw': AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Ao02pnFYXD6GN1yzc0uXPsvF', 'function': {'arguments': '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}', 'name': 'AnswerWithJustification'}, 'type': 'function'}]}),
#     'parsed': AnswerWithJustification(answer='They weigh the same.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'),
#     'parsing_error': None
# }

示例:dict 模式 (include_raw=False)

from pydantic import BaseModel
from langchain_core.utils.function_calling import convert_to_openai_tool


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


dict_schema = convert_to_openai_tool(AnswerWithJustification)
model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(dict_schema)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'answer': 'They weigh the same',
#     'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.'
# }

行为在 0.2.26 版本中已更改

添加了对 TypedDict 类的支持。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate async

agenerate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

bind_tools

bind_tools(
    tools: Sequence[Dict[str, Any] | type | Callable | BaseTool],
    *,
    tool_choice: str | None = None,
    **kwargs: Any,
) -> Runnable[LanguageModelInput, AIMessage]

将工具绑定到模型。

参数 描述
工具

要绑定到模型的工具序列。

类型: Sequence[Dict[str, Any] | type | Callable | BaseTool]

工具选择

要使用的工具。如果为 "any",则可以使用任何工具。

类型: str | None 默认值: None

返回 描述
Runnable[LanguageModelInput, AIMessage]

一个返回消息的 Runnable。

VertexAIImageGeneratorChat

基类:_BaseVertexAIImageGenerator, BaseChatModel

根据提示生成图像。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

__init__
is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

返回与给定模式匹配的格式化输出的模型包装器。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens

获取文本中存在的 token 数量。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

将一系列提示传递给模型并返回模型生成的内容。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

dict

返回 LLM 的字典。

bind_tools

将工具绑定到模型。

name 类属性 实例属性

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType 属性

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType 属性

OutputType: Any

获取此 Runnable 的输出类型。

input_schema 属性

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema 属性

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs 属性

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets 属性

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes 属性

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache 类属性 实例属性

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose 类属性 实例属性

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks 类属性 实例属性

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags 类属性 实例属性

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata 类属性 实例属性

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids 类属性 实例属性

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

rate_limiter 类属性 实例属性

rate_limiter: BaseRateLimiter | None = Field(default=None, exclude=True)

一个可选的速率限制器,用于限制请求数量。

disable_streaming 类属性 实例属性

disable_streaming: bool | Literal['tool_calling'] = False

是否为此模型禁用流式传输。

如果绕过流式传输,则 stream/astream/astream_events 将转而调用 invoke/ainvoke

  • 如果为 True,将始终绕过流式传输情况。
  • 如果为 'tool_calling',仅当模型被调用时带有 tools 关键字参数时,才会绕过流式传输情况。换句话说,仅当提供 tools 参数时,LangChain 才会自动切换到非流式行为 (invoke)。这提供了两全其美的方案。
  • 如果为 False(默认值),则在可用时始终使用流式传输情况。

此标志的主要原因是,代码可能是使用 stream 编写的,而用户可能希望将给定模型换成另一个实现不完全支持流式传输的模型。

output_version 类属性 实例属性

output_version: str | None = Field(
    default_factory=from_env("LC_OUTPUT_VERSION", default=None)
)

要存储在消息内容中的 AIMessage 输出格式的版本。

AIMessage.content_blocks 将懒解析 content 的内容为标准格式。此标志可用于额外将标准格式存储在消息内容中,例如,用于序列化目的。

支持的值

  • 'v0':内容中特定于提供商的格式(可以使用 content_blocks 进行懒解析)
  • 'v1':内容中的标准化格式(与 content_blocks 一致)

合作伙伴包(例如 langchain-openai)也可以使用此字段以向后兼容的方式推出新的内容格式。

在版本 1.0 中添加

profile 属性

profile: ModelProfile

返回模型的性能分析信息。

此属性将依赖于 langchain-model-profiles 包来检索聊天模型的能力,例如上下文窗口大小和支持的功能。

引发 描述
ImportError

如果未安装 langchain-model-profiles

返回 描述
ModelProfile

一个 ModelProfile 对象,包含模型的性能分析信息。

model_name 类属性 实例属性

model_name: str = Field(default='imagen-3.0-generate-002')

基础模型的名称

negative_prompt 类属性 实例属性

negative_prompt: str | None = Field(default=None)

描述你希望在生成的图像中省略的内容

number_of_results 类属性 实例属性

number_of_results: int = Field(default=1)

要生成的图像数量

guidance_scale 类属性 实例属性

guidance_scale: float | None = Field(default=None)

控制提示的强度

language 类属性 实例属性

language: str | None = Field(default=None)

图像文本提示的语言。支持的值为“en”(英语)、“hi”(印地语)、“ja”(日语)、“ko”(韩语)和“auto”(自动语言检测)

seed 类属性 实例属性

seed: int | None = Field(default=None)

用于图像生成的随机种子

project 类属性 实例属性

project: str | None = Field(default=None)

Google Cloud 项目 ID

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke 异步

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch 异步

abatch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed 异步

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[AIMessageChunk]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream 异步

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[AIMessageChunk]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log 异步

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events 异步

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform 异步

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

__init__

__init__(*args: Any, **kwargs: Any) -> None

is_lc_serializable 类方法

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace 类方法

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id 类方法

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt 异步

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: Dict | type, *, include_raw: bool = False, **kwargs: Any
) -> Runnable[LanguageModelInput, Dict | BaseModel]

返回与给定模式匹配的格式化输出的模型包装器。

参数 描述
模式

输出模式。可以作为以下形式传入:

  • 一个 OpenAI 函数/工具模式,
  • 一个 JSON Schema,
  • 一个 TypedDict 类,
  • 或一个 Pydantic 类。

如果 schema 是一个 Pydantic 类,那么模型输出将是该类的 Pydantic 实例,并且模型生成的字段将由 Pydantic 类进行验证。否则,模型输出将是一个字典,并且不会被验证。

有关在指定 Pydantic 或 TypedDict 类时如何正确指定模式字段的类型和描述的更多信息,请参阅 langchain_core.utils.function_calling.convert_to_openai_tool

类型: Dict | type

包含原始数据

如果为 False,则仅返回解析后的结构化输出。如果在模型输出解析期间发生错误,它将被引发。如果为 True,则将返回原始模型响应(一个 BaseMessage)和解析后的模型响应。如果在输出解析期间发生错误,它将被捕获并一并返回。

最终输出总是一个带有键 'raw''parsed''parsing_error'dict

类型: bool 默认值: False

引发 描述
ValueError

如果有任何不支持的 kwargs

NotImplementedError

如果模型没有实现 with_structured_output()

返回 描述
Runnable[LanguageModelInput, Dict | BaseModel]

一个接受与 langchain_core.language_models.chat.BaseChatModel 相同输入的 Runnable。如果 include_rawFalseschema 是一个 Pydantic 类,则 Runnable 输出一个 schema 的实例(即一个 Pydantic 对象)。否则,如果 include_rawFalse,则 Runnable 输出一个 dict

如果 include_rawTrue,则 Runnable 输出一个带有以下键的 dict

  • 'raw': BaseMessage
  • 'parsed': 如果出现解析错误则为 None,否则类型取决于上面描述的 schema
  • 'parsing_error': BaseException | None

示例:Pydantic 模式 (include_raw=False)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(AnswerWithJustification)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)

# -> AnswerWithJustification(
#     answer='They weigh the same',
#     justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'
# )

示例:Pydantic 模式 (include_raw=True)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(
    AnswerWithJustification, include_raw=True
)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'raw': AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Ao02pnFYXD6GN1yzc0uXPsvF', 'function': {'arguments': '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}', 'name': 'AnswerWithJustification'}, 'type': 'function'}]}),
#     'parsed': AnswerWithJustification(answer='They weigh the same.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'),
#     'parsing_error': None
# }

示例:dict 模式 (include_raw=False)

from pydantic import BaseModel
from langchain_core.utils.function_calling import convert_to_openai_tool


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


dict_schema = convert_to_openai_tool(AnswerWithJustification)
model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(dict_schema)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'answer': 'They weigh the same',
#     'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.'
# }

行为在 0.2.26 版本中已更改

添加了对 TypedDict 类的支持。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate 异步

agenerate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

bind_tools

bind_tools(
    tools: Sequence[Dict[str, Any] | type | Callable | BaseTool],
    *,
    tool_choice: str | None = None,
    **kwargs: Any,
) -> Runnable[LanguageModelInput, AIMessage]

将工具绑定到模型。

参数 描述
工具

要绑定到模型的工具序列。

类型: Sequence[Dict[str, Any] | type | Callable | BaseTool]

工具选择

要使用的工具。如果为 "any",则可以使用任何工具。

类型: str | None 默认值: None

返回 描述
Runnable[LanguageModelInput, AIMessage]

一个返回消息的 Runnable。

VertexAIVisualQnAChat

基类:_BaseImageTextModel, BaseChatModel

视觉问答模型的聊天实现。

方法 描述
get_name

获取 Runnable 的名称。

get_input_schema

获取可用于验证 Runnable 输入的 Pydantic 模型。

get_input_jsonschema

获取表示 Runnable 输入的 JSON 模式。

get_output_schema

获取可用于验证 Runnable 输出的 Pydantic 模型。

get_output_jsonschema

获取表示 Runnable 输出的 JSON 模式。

config_schema

Runnable 接受的配置类型,指定为 Pydantic 模型。

get_config_jsonschema

获取表示 Runnable 配置的 JSON 模式。

get_graph

返回此 Runnable 的图形表示。

get_prompts

返回此 Runnable 使用的提示列表。

__or__

Runnable "or" 运算符。

__ror__

Runnable "reverse-or" 运算符。

pipe

管道连接 Runnable 对象。

pick

从此 Runnable 的输出 dict 中选择键。

assign

向此 Runnabledict 输出分配新字段。

invoke

将单个输入转换为输出。

ainvoke

将单个输入转换为输出。

batch

默认实现使用线程池执行器并行运行 invoke。

batch_as_completed

在输入列表上并行运行 invoke

abatch

默认实现使用 asyncio.gather 并行运行 ainvoke

abatch_as_completed

在输入列表上并行运行 ainvoke

stream

stream 的默认实现,它调用 invoke

astream

astream 的默认实现,它调用 ainvoke

astream_log

流式传输 Runnable 的所有输出,如回调系统所报告。

astream_events

生成事件流。

transform

将输入转换为输出。

atransform

将输入转换为输出。

bind

将参数绑定到 Runnable,返回一个新的 Runnable

with_config

将配置绑定到 Runnable,返回一个新的 Runnable

with_listeners

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

with_alisteners

将异步生命周期侦听器绑定到 Runnable

with_types

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

with_retry

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

map

返回一个新的 Runnable,它将输入列表映射到输出列表。

with_fallbacks

Runnable 添加回退机制,返回一个新的 Runnable

as_tool

Runnable 创建一个 BaseTool

__init__
is_lc_serializable

这个类是否可序列化?

get_lc_namespace

获取 LangChain 对象的命名空间。

lc_id

为此类返回一个用于序列化目的的唯一标识符。

to_json

Runnable 序列化为 JSON。

to_json_not_implemented

序列化一个“未实现”的对象。

configurable_fields

在运行时配置特定的 Runnable 字段。

configurable_alternatives

为可在运行时设置的 Runnable 对象配置备选项。

set_verbose

如果 verbose 是 None,则设置它。

generate_prompt

将一系列提示传递给模型并返回模型生成的内容。

agenerate_prompt

异步地将一系列提示传递并返回模型生成的内容。

with_structured_output

返回与给定模式匹配的格式化输出的模型包装器。

get_token_ids

返回文本中 token 的有序 ID。

get_num_tokens

获取文本中存在的 token 数量。

get_num_tokens_from_messages

获取消息中的 token 数量。

generate

将一系列提示传递给模型并返回模型生成的内容。

agenerate

异步地将一系列提示传递给模型并返回生成的内容。

dict

返回 LLM 的字典。

bind_tools

将工具绑定到模型。

name 类属性 实例属性

name: str | None = None

Runnable 的名称。用于调试和追踪。

InputType 属性

InputType: TypeAlias

获取此 Runnable 的输入类型。

OutputType 属性

OutputType: Any

获取此 Runnable 的输出类型。

input_schema 属性

input_schema: type[BaseModel]

Runnable 接受的输入类型,指定为 Pydantic 模型。

output_schema 属性

output_schema: type[BaseModel]

输出模式。

Runnable 产生的输出类型,指定为 Pydantic 模型。

config_specs 属性

config_specs: list[ConfigurableFieldSpec]

列出此 Runnable 的可配置字段。

lc_secrets 属性

lc_secrets: dict[str, str]

构造函数参数名称到密钥 ID 的映射。

例如,{"openai_api_key": "OPENAI_API_KEY"}

lc_attributes 属性

lc_attributes: dict

应包含在序列化 kwargs 中的属性名称列表。

这些属性必须被构造函数接受。

默认为空字典。

cache 类属性 实例属性

cache: BaseCache | bool | None = Field(default=None, exclude=True)

是否缓存响应。

  • 如果为 True,将使用全局缓存。
  • 如果为 False,将不使用缓存
  • 如果为 None,如果设置了全局缓存,则使用全局缓存,否则不使用缓存。
  • 如果是 BaseCache 的实例,将使用提供的缓存。

目前不支持模型的流式方法的缓存。

verbose 类属性 实例属性

verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)

是否打印响应文本。

callbacks 类属性 实例属性

callbacks: Callbacks = Field(default=None, exclude=True)

添加到运行跟踪中的回调。

tags 类属性 实例属性

tags: list[str] | None = Field(default=None, exclude=True)

添加到运行跟踪中的标签。

metadata 类属性 实例属性

metadata: dict[str, Any] | None = Field(default=None, exclude=True)

添加到运行跟踪中的元数据。

custom_get_token_ids 类属性 实例属性

custom_get_token_ids: Callable[[str], list[int]] | None = Field(
    default=None, exclude=True
)

用于计算 token 的可选编码器。

rate_limiter 类属性 实例属性

rate_limiter: BaseRateLimiter | None = Field(default=None, exclude=True)

一个可选的速率限制器,用于限制请求数量。

disable_streaming 类属性 实例属性

disable_streaming: bool | Literal['tool_calling'] = False

是否为此模型禁用流式传输。

如果绕过流式传输,则 stream/astream/astream_events 将转而调用 invoke/ainvoke

  • 如果为 True,将始终绕过流式传输情况。
  • 如果为 'tool_calling',仅当模型被调用时带有 tools 关键字参数时,才会绕过流式传输情况。换句话说,仅当提供 tools 参数时,LangChain 才会自动切换到非流式行为 (invoke)。这提供了两全其美的方案。
  • 如果为 False(默认值),则在可用时始终使用流式传输情况。

此标志的主要原因是,代码可能是使用 stream 编写的,而用户可能希望将给定模型换成另一个实现不完全支持流式传输的模型。

output_version 类属性 实例属性

output_version: str | None = Field(
    default_factory=from_env("LC_OUTPUT_VERSION", default=None)
)

要存储在消息内容中的 AIMessage 输出格式的版本。

AIMessage.content_blocks 将懒解析 content 的内容为标准格式。此标志可用于额外将标准格式存储在消息内容中,例如,用于序列化目的。

支持的值

  • 'v0':内容中特定于提供商的格式(可以使用 content_blocks 进行懒解析)
  • 'v1':内容中的标准化格式(与 content_blocks 一致)

合作伙伴包(例如 langchain-openai)也可以使用此字段以向后兼容的方式推出新的内容格式。

在版本 1.0 中添加

profile 属性

profile: ModelProfile

返回模型的性能分析信息。

此属性将依赖于 langchain-model-profiles 包来检索聊天模型的能力,例如上下文窗口大小和支持的功能。

引发 描述
ImportError

如果未安装 langchain-model-profiles

返回 描述
ModelProfile

一个 ModelProfile 对象,包含模型的性能分析信息。

model_name 类属性 实例属性

model_name: str = Field(default='imagetext@001')

要使用的模型名称

number_of_results 类属性 实例属性

number_of_results: int = Field(default=1)

一次查询返回的结果数量

language 类属性 实例属性

language: str = Field(default='en')

查询的语言

project 类属性 实例属性

project: str | None = Field(default=None)

Google Cloud 项目

get_name

get_name(suffix: str | None = None, *, name: str | None = None) -> str

获取 Runnable 的名称。

参数 描述
后缀

一个可选的后缀,附加到名称上。

类型: str | None 默认值: None

name

一个可选的名称,用于代替 Runnable 的名称。

类型: str | None 默认值: None

返回 描述
str

Runnable 的名称。

get_input_schema

get_input_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输入的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输入模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输入模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输入的 Pydantic 模型。

get_input_jsonschema

get_input_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输入的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输入的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_input_jsonschema())

在 0.3.0 版本中新增。

get_output_schema

get_output_schema(config: RunnableConfig | None = None) -> type[BaseModel]

获取可用于验证 Runnable 输出的 Pydantic 模型。

利用 configurable_fieldsconfigurable_alternatives 方法的 Runnable 对象将具有一个动态输出模式,该模式取决于调用 Runnable 时使用的配置。

此方法允许获取特定配置的输出模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证输出的 Pydantic 模型。

get_output_jsonschema

get_output_jsonschema(config: RunnableConfig | None = None) -> dict[str, Any]

获取表示 Runnable 输出的 JSON 模式。

参数 描述
配置

生成模式时使用的配置。

类型: RunnableConfig | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 输出的 JSON 模式。

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


runnable = RunnableLambda(add_one)

print(runnable.get_output_jsonschema())

在 0.3.0 版本中新增。

config_schema

config_schema(*, include: Sequence[str] | None = None) -> type[BaseModel]

Runnable 接受的配置类型,指定为 Pydantic 模型。

要将字段标记为可配置,请参阅 configurable_fieldsconfigurable_alternatives 方法。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
type[BaseModel]

一个可用于验证配置的 Pydantic 模型。

get_config_jsonschema

get_config_jsonschema(*, include: Sequence[str] | None = None) -> dict[str, Any]

获取表示 Runnable 配置的 JSON 模式。

参数 描述
包含

要包含在配置模式中的字段列表。

类型: Sequence[str] | None 默认值: None

返回 描述
dict[str, Any]

表示 Runnable 配置的 JSON 模式。

在 0.3.0 版本中新增。

get_graph

get_graph(config: RunnableConfig | None = None) -> Graph

返回此 Runnable 的图形表示。

get_prompts

get_prompts(config: RunnableConfig | None = None) -> list[BasePromptTemplate]

返回此 Runnable 使用的提示列表。

__or__

__or__(
    other: Runnable[Any, Other]
    | Callable[[Iterator[Any]], Iterator[Other]]
    | Callable[[AsyncIterator[Any]], AsyncIterator[Other]]
    | Callable[[Any], Other]
    | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any],
) -> RunnableSerializable[Input, Other]

Runnable "or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Any, Other] | Callable[[Iterator[Any]], Iterator[Other]] | Callable[[AsyncIterator[Any]], AsyncIterator[Other]] | Callable[[Any], Other] | Mapping[str, Runnable[Any, Other] | Callable[[Any], Other] | Any]

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

__ror__

__ror__(
    other: Runnable[Other, Any]
    | Callable[[Iterator[Other]], Iterator[Any]]
    | Callable[[AsyncIterator[Other]], AsyncIterator[Any]]
    | Callable[[Other], Any]
    | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any],
) -> RunnableSerializable[Other, Output]

Runnable "reverse-or" 运算符。

将此 Runnable 与另一个对象组合以创建 RunnableSequence

参数 描述
other

另一个 Runnable 或类 Runnable 对象。

类型: Runnable[Other, Any] | Callable[[Iterator[Other]], Iterator[Any]] | Callable[[AsyncIterator[Other]], AsyncIterator[Any]] | Callable[[Other], Any] | Mapping[str, Runnable[Other, Any] | Callable[[Other], Any] | Any]

返回 描述
RunnableSerializable[Other, Output]

一个新的 Runnable

pipe

pipe(
    *others: Runnable[Any, Other] | Callable[[Any], Other], name: str | None = None
) -> RunnableSerializable[Input, Other]

管道连接 Runnable 对象。

将此 Runnable 与类 Runnable 对象组合以构成一个 RunnableSequence

等同于 RunnableSequence(self, *others)self | others[0] | ...

示例
from langchain_core.runnables import RunnableLambda


def add_one(x: int) -> int:
    return x + 1


def mul_two(x: int) -> int:
    return x * 2


runnable_1 = RunnableLambda(add_one)
runnable_2 = RunnableLambda(mul_two)
sequence = runnable_1.pipe(runnable_2)
# Or equivalently:
# sequence = runnable_1 | runnable_2
# sequence = RunnableSequence(first=runnable_1, last=runnable_2)
sequence.invoke(1)
await sequence.ainvoke(1)
# -> 4

sequence.batch([1, 2, 3])
await sequence.abatch([1, 2, 3])
# -> [4, 6, 8]
参数 描述
*其他

其他要组合的 Runnable 或类 Runnable 对象

类型: Runnable[Any, Other] | Callable[[Any], Other] 默认值: ()

name

生成的 RunnableSequence 的一个可选名称。

类型: str | None 默认值: None

返回 描述
RunnableSerializable[Input, Other]

一个新的 Runnable

pick

pick(keys: str | list[str]) -> RunnableSerializable[Any, Any]

从此 Runnable 的输出 dict 中选择键。

选择单个键

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)
chain = RunnableMap(str=as_str, json=as_json)

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3]}

json_only_chain = chain.pick("json")
json_only_chain.invoke("[1, 2, 3]")
# -> [1, 2, 3]

选择键列表

from typing import Any

import json

from langchain_core.runnables import RunnableLambda, RunnableMap

as_str = RunnableLambda(str)
as_json = RunnableLambda(json.loads)


def as_bytes(x: Any) -> bytes:
    return bytes(x, "utf-8")


chain = RunnableMap(str=as_str, json=as_json, bytes=RunnableLambda(as_bytes))

chain.invoke("[1, 2, 3]")
# -> {"str": "[1, 2, 3]", "json": [1, 2, 3], "bytes": b"[1, 2, 3]"}

json_and_bytes_chain = chain.pick(["json", "bytes"])
json_and_bytes_chain.invoke("[1, 2, 3]")
# -> {"json": [1, 2, 3], "bytes": b"[1, 2, 3]"}
参数 描述
keys

从输出字典中选择的一个键或键列表。

类型: str | list[str]

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

assign

向此 Runnabledict 输出分配新字段。

from langchain_community.llms.fake import FakeStreamingListLLM
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.runnables import Runnable
from operator import itemgetter

prompt = (
    SystemMessagePromptTemplate.from_template("You are a nice assistant.")
    + "{question}"
)
model = FakeStreamingListLLM(responses=["foo-lish"])

chain: Runnable = prompt | model | {"str": StrOutputParser()}

chain_with_assign = chain.assign(hello=itemgetter("str") | model)

print(chain_with_assign.input_schema.model_json_schema())
# {'title': 'PromptInput', 'type': 'object', 'properties':
{'question': {'title': 'Question', 'type': 'string'}}}
print(chain_with_assign.output_schema.model_json_schema())
# {'title': 'RunnableSequenceOutput', 'type': 'object', 'properties':
{'str': {'title': 'Str',
'type': 'string'}, 'hello': {'title': 'Hello', 'type': 'string'}}}
参数 描述
**kwargs

一个键到 Runnable 或类 Runnable 对象的映射,这些对象将使用此 Runnable 的整个输出字典来调用。

类型: Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any] | Mapping[str, Runnable[dict[str, Any], Any] | Callable[[dict[str, Any]], Any]] 默认值: {}

返回 描述
RunnableSerializable[Any, Any]

一个新的 Runnable

invoke

invoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

ainvoke 异步

ainvoke(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AIMessage

将单个输入转换为输出。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | None 默认值: None

返回 描述
输出

Runnable 的输出。

batch

batch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用线程池执行器并行运行 invoke。

批处理的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

batch_as_completed

batch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> Iterator[tuple[int, Output | Exception]]

在输入列表上并行运行 invoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
tuple[int, Output | Exception]

由输入索引和 Runnable 输出组成的元组。

abatch 异步

abatch(
    inputs: list[Input],
    config: RunnableConfig | list[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> list[Output]

默认实现使用 asyncio.gather 并行运行 ainvoke

batch 的默认实现对于 IO 密集型的 runnable 效果很好。

如果子类能够更有效地进行批处理,则必须重写此方法;例如,如果底层的 Runnable 使用支持批处理模式的 API。

参数 描述
inputs

Runnable 的输入列表。

类型: list[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | list[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

返回 描述
list[Output]

来自 Runnable 的输出列表。

abatch_as_completed 异步

abatch_as_completed(
    inputs: Sequence[Input],
    config: RunnableConfig | Sequence[RunnableConfig] | None = None,
    *,
    return_exceptions: bool = False,
    **kwargs: Any | None,
) -> AsyncIterator[tuple[int, Output | Exception]]

在输入列表上并行运行 ainvoke

在结果完成时生成它们。

参数 描述
inputs

Runnable 的输入列表。

类型: Sequence[Input]

配置

调用 Runnable 时使用的配置。该配置支持标准键,如用于追踪目的的 'tags''metadata',用于控制并行工作量的 'max_concurrency',以及其他键。请参阅 RunnableConfig 以获取更多详细信息。

类型: RunnableConfig | Sequence[RunnableConfig] | None 默认值: None

返回异常

是否返回异常而不是引发它们。

类型: bool 默认值: False

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[tuple[int, Output | Exception]]

一个由输入索引和 Runnable 输出组成的元组。

stream

stream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> Iterator[AIMessageChunk]

stream 的默认实现,它调用 invoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

astream 异步

astream(
    input: LanguageModelInput,
    config: RunnableConfig | None = None,
    *,
    stop: list[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[AIMessageChunk]

astream 的默认实现,它调用 ainvoke

如果子类支持流式输出,则必须重写此方法。

参数 描述
输入

Runnable 的输入。

类型: Input

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

astream_log 异步

astream_log(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    diff: bool = True,
    with_streamed_output_list: bool = True,
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

流式传输 Runnable 的所有输出,如回调系统所报告。

这包括 LLM、检索器、工具等的所有内部运行。

输出以 Log 对象的形式流式传输,其中包括一个 Jsonpatch 操作列表,描述了运行状态在每一步中如何变化,以及运行的最终状态。

可以按顺序应用 Jsonpatch 操作来构造状态。

参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

差异

是生成每一步之间的差异还是当前状态。

类型: bool 默认值: True

带流式输出列表

是否生成 streamed_output 列表。

类型: bool 默认值: True

包含名称

仅包含具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

包含类型

仅包含具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

包含标签

仅包含具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

排除名称

排除具有这些名称的日志。

类型: Sequence[str] | None 默认值: None

排除类型

排除具有这些类型的日志。

类型: Sequence[str] | None 默认值: None

排除标签

排除具有这些标签的日志。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[RunLogPatch] | AsyncIterator[RunLog]

一个 RunLogPatchRunLog 对象。

astream_events 异步

astream_events(
    input: Any,
    config: RunnableConfig | None = None,
    *,
    version: Literal["v1", "v2"] = "v2",
    include_names: Sequence[str] | None = None,
    include_types: Sequence[str] | None = None,
    include_tags: Sequence[str] | None = None,
    exclude_names: Sequence[str] | None = None,
    exclude_types: Sequence[str] | None = None,
    exclude_tags: Sequence[str] | None = None,
    **kwargs: Any,
) -> AsyncIterator[StreamEvent]

生成事件流。

用于创建一个 StreamEvent 的迭代器,提供有关 Runnable 进度的实时信息,包括来自中间结果的 StreamEvent

一个 StreamEvent 是一个具有以下模式的字典

  • event:事件名称的格式为:on_[runnable_type]_(start|stream|end)
  • name:生成事件的 Runnable 的名称。
  • run_id:与发出事件的 Runnable 的给定执行相关联的随机生成的 ID。作为父 Runnable 执行的一部分被调用的子 Runnable 被分配其自己的唯一 ID。
  • parent_ids:生成事件的父可运行对象的 ID。根 Runnable 将有一个空列表。父 ID 的顺序是从根到直接父级。仅适用于 API 的 v2 版本。API 的 v1 版本将返回一个空列表。
  • tags:生成事件的 Runnable 的标签。
  • metadata:生成事件的 Runnable 的元数据。
  • data:与事件关联的数据。此字段的内容取决于事件的类型。有关更多详细信息,请参见下表。

下表说明了各种链可能发出的某些事件。为简洁起见,已从表中省略了元数据字段。链定义已包含在表之后。

注意

此参考表适用于模式的 v2 版本。

事件 name chunk 输入 output
on_chat_model_start '[model name]' {"messages": [[SystemMessage, HumanMessage]]}
on_chat_model_stream '[model name]' AIMessageChunk(content="hello")
on_chat_model_end '[model name]' {"messages": [[SystemMessage, HumanMessage]]} AIMessageChunk(content="hello world")
on_llm_start '[model name]' {'input': 'hello'}
on_llm_stream '[model name]' '你好'
on_llm_end '[model name]' '你好,人类!'
on_chain_start 'format_docs'
on_chain_stream 'format_docs' 'hello world!, goodbye world!'
on_chain_end 'format_docs' [Document(...)] 'hello world!, goodbye world!'
on_tool_start 'some_tool' {"x": 1, "y": "2"}
on_tool_end 'some_tool' {"x": 1, "y": "2"}
on_retriever_start '[retriever name]' {"query": "hello"}
on_retriever_end '[retriever name]' {"query": "hello"} [Document(...), ..]
on_prompt_start '[template_name]' {"question": "hello"}
on_prompt_end '[template_name]' {"question": "hello"} ChatPromptValue(messages: [SystemMessage, ...])

除了标准事件外,用户还可以分派自定义事件(见下例)。

自定义事件将仅在 API 的 v2 版本中出现!

自定义事件具有以下格式

属性 类型 描述
name str 用户为事件定义的名称。
data 任意 与事件关联的数据。这可以是任何东西,但我们建议使其可 JSON 序列化。

以下是与上面显示的标准事件相关的声明

format_docs:

def format_docs(docs: list[Document]) -> str:
    '''Format the docs.'''
    return ", ".join([doc.page_content for doc in docs])


format_docs = RunnableLambda(format_docs)

some_tool:

@tool
def some_tool(x: int, y: str) -> dict:
    '''Some_tool.'''
    return {"x": x, "y": y}

prompt:

template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are Cat Agent 007"),
        ("human", "{question}"),
    ]
).with_config({"run_name": "my_template", "tags": ["my_template"]})

例如

from langchain_core.runnables import RunnableLambda


async def reverse(s: str) -> str:
    return s[::-1]


chain = RunnableLambda(func=reverse)

events = [event async for event in chain.astream_events("hello", version="v2")]

# Will produce the following events
# (run_id, and parent_ids has been omitted for brevity):
[
    {
        "data": {"input": "hello"},
        "event": "on_chain_start",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"chunk": "olleh"},
        "event": "on_chain_stream",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
    {
        "data": {"output": "olleh"},
        "event": "on_chain_end",
        "metadata": {},
        "name": "reverse",
        "tags": [],
    },
]
示例:分派自定义事件
from langchain_core.callbacks.manager import (
    adispatch_custom_event,
)
from langchain_core.runnables import RunnableLambda, RunnableConfig
import asyncio


async def slow_thing(some_input: str, config: RunnableConfig) -> str:
    """Do something that takes a long time."""
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 1 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    await adispatch_custom_event(
        "progress_event",
        {"message": "Finished step 2 of 3"},
        config=config # Must be included for python < 3.10
    )
    await asyncio.sleep(1) # Placeholder for some slow operation
    return "Done"

slow_thing = RunnableLambda(slow_thing)

async for event in slow_thing.astream_events("some_input", version="v2"):
    print(event)
参数 描述
输入

Runnable 的输入。

类型: Any

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

版本

要使用的模式版本,可以是 'v2''v1'。用户应使用 'v2''v1' 是为了向后兼容,并将在 0.4.0 中弃用。在 API 稳定之前不会分配默认值。自定义事件将仅在 'v2' 中出现。

类型: Literal['v1', 'v2'] 默认值: 'v2'

包含名称

仅包括来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含类型

仅包括来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

包含标签

仅包括来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除名称

排除来自具有匹配名称的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除类型

排除来自具有匹配类型的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

排除标签

排除来自具有匹配标签的 Runnable 对象的事件。

类型: Sequence[str] | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。这些将传递给 astream_log,因为 astream_events 的此实现是建立在 astream_log 之上的。

类型: Any 默认值: {}

YIELDS 描述
AsyncIterator[StreamEvent]

StreamEvent 的异步流。

引发 描述
NotImplementedError

如果版本不是 'v1''v2'

transform

transform(
    input: Iterator[Input], config: RunnableConfig | None = None, **kwargs: Any | None
) -> Iterator[Output]

将输入转换为输出。

transform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的迭代器。

类型: Iterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
输出

Runnable 的输出。

atransform 异步

atransform(
    input: AsyncIterator[Input],
    config: RunnableConfig | None = None,
    **kwargs: Any | None,
) -> AsyncIterator[Output]

将输入转换为输出。

atransform 的默认实现,它缓冲输入并调用 astream

如果子类可以在输入仍在生成时开始产生输出,则必须重写此方法。

参数 描述
输入

Runnable 输入的异步迭代器。

类型: AsyncIterator[Input]

配置

用于 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any | None 默认值: {}

YIELDS 描述
AsyncIterator[Output]

Runnable 的输出。

bind

bind(**kwargs: Any) -> Runnable[Input, Output]

将参数绑定到 Runnable,返回一个新的 Runnable

当链中的 Runnable 需要一个不在前一个 Runnable 的输出中或未包含在用户输入中的参数时非常有用。

参数 描述
**kwargs

要绑定到 Runnable 的参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了参数的新 Runnable

示例
from langchain_ollama import ChatOllama
from langchain_core.output_parsers import StrOutputParser

model = ChatOllama(model="llama3.1")

# Without bind
chain = model | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two three four five.'

# With bind
chain = model.bind(stop=["three"]) | StrOutputParser()

chain.invoke("Repeat quoted words exactly: 'One two three four five.'")
# Output is 'One two'

with_config

with_config(
    config: RunnableConfig | None = None, **kwargs: Any
) -> Runnable[Input, Output]

将配置绑定到 Runnable,返回一个新的 Runnable

参数 描述
配置

要绑定到 Runnable 的配置。

类型: RunnableConfig | None 默认值: None

**kwargs

要传递给 Runnable 的其他关键字参数。

类型: Any 默认值: {}

返回 描述
Runnable[Input, Output]

一个绑定了配置的新 Runnable

with_listeners

with_listeners(
    *,
    on_start: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
    on_end: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None = None,
    on_error: Callable[[Run], None]
    | Callable[[Run, RunnableConfig], None]
    | None = None,
) -> Runnable[Input, Output]

将生命周期侦听器绑定到 Runnable,返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

结束时

Runnable 完成运行后调用,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

出错时

如果 Runnable 抛出错误,则调用此函数,并传入 Run 对象。

类型: Callable[[Run], None] | Callable[[Run, RunnableConfig], None] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda
from langchain_core.tracers.schemas import Run

import time


def test_runnable(time_to_sleep: int):
    time.sleep(time_to_sleep)


def fn_start(run_obj: Run):
    print("start_time:", run_obj.start_time)


def fn_end(run_obj: Run):
    print("end_time:", run_obj.end_time)


chain = RunnableLambda(test_runnable).with_listeners(
    on_start=fn_start, on_end=fn_end
)
chain.invoke(2)

with_alisteners

with_alisteners(
    *,
    on_start: AsyncListener | None = None,
    on_end: AsyncListener | None = None,
    on_error: AsyncListener | None = None,
) -> Runnable[Input, Output]

将异步生命周期侦听器绑定到 Runnable

返回一个新的 Runnable

Run 对象包含有关运行的信息,包括其 idtypeinputoutputerrorstart_timeend_time 以及添加到运行中的任何标签或元数据。

参数 描述
开始时

Runnable 开始运行之前异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

结束时

Runnable 完成运行后异步调用,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

出错时

如果 Runnable 抛出错误,则异步调用此函数,并传入 Run 对象。

类型: AsyncListener | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了监听器的新 Runnable

示例
from langchain_core.runnables import RunnableLambda, Runnable
from datetime import datetime, timezone
import time
import asyncio

def format_t(timestamp: float) -> str:
    return datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat()

async def test_runnable(time_to_sleep: int):
    print(f"Runnable[{time_to_sleep}s]: starts at {format_t(time.time())}")
    await asyncio.sleep(time_to_sleep)
    print(f"Runnable[{time_to_sleep}s]: ends at {format_t(time.time())}")

async def fn_start(run_obj: Runnable):
    print(f"on start callback starts at {format_t(time.time())}")
    await asyncio.sleep(3)
    print(f"on start callback ends at {format_t(time.time())}")

async def fn_end(run_obj: Runnable):
    print(f"on end callback starts at {format_t(time.time())}")
    await asyncio.sleep(2)
    print(f"on end callback ends at {format_t(time.time())}")

runnable = RunnableLambda(test_runnable).with_alisteners(
    on_start=fn_start,
    on_end=fn_end
)
async def concurrent_runs():
    await asyncio.gather(runnable.ainvoke(2), runnable.ainvoke(3))

asyncio.run(concurrent_runs())
Result:
on start callback starts at 2025-03-01T07:05:22.875378+00:00
on start callback starts at 2025-03-01T07:05:22.875495+00:00
on start callback ends at 2025-03-01T07:05:25.878862+00:00
on start callback ends at 2025-03-01T07:05:25.878947+00:00
Runnable[2s]: starts at 2025-03-01T07:05:25.879392+00:00
Runnable[3s]: starts at 2025-03-01T07:05:25.879804+00:00
Runnable[2s]: ends at 2025-03-01T07:05:27.881998+00:00
on end callback starts at 2025-03-01T07:05:27.882360+00:00
Runnable[3s]: ends at 2025-03-01T07:05:28.881737+00:00
on end callback starts at 2025-03-01T07:05:28.882428+00:00
on end callback ends at 2025-03-01T07:05:29.883893+00:00
on end callback ends at 2025-03-01T07:05:30.884831+00:00

with_types

with_types(
    *, input_type: type[Input] | None = None, output_type: type[Output] | None = None
) -> Runnable[Input, Output]

将输入和输出类型绑定到 Runnable,返回一个新的 Runnable

参数 描述
输入类型

要绑定到 Runnable 的输入类型。

类型: type[Input] | None 默认值: None

输出类型

要绑定到 Runnable 的输出类型。

类型: type[Output] | None 默认值: None

返回 描述
Runnable[Input, Output]

一个绑定了类型的新 Runnable

with_retry

with_retry(
    *,
    retry_if_exception_type: tuple[type[BaseException], ...] = (Exception,),
    wait_exponential_jitter: bool = True,
    exponential_jitter_params: ExponentialJitterParams | None = None,
    stop_after_attempt: int = 3,
) -> Runnable[Input, Output]

创建一个新的 Runnable,它在发生异常时重试原始的 Runnable

参数 描述
如果异常类型则重试

一个用于重试的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

指数等待抖动

是否在两次重试之间的等待时间中添加抖动。

类型: bool 默认值: True

尝试后停止

放弃前尝试的最大次数。

类型: int 默认值: 3

指数抖动参数

tenacity.wait_exponential_jitter 的参数。即:initialmaxexp_basejitter(均为 float 值)。

类型: ExponentialJitterParams | None 默认值: None

返回 描述
Runnable[Input, Output]

一个新的 Runnable,它会在发生异常时重试原始的 Runnable。

示例
from langchain_core.runnables import RunnableLambda

count = 0


def _lambda(x: int) -> None:
    global count
    count = count + 1
    if x == 1:
        raise ValueError("x is 1")
    else:
        pass


runnable = RunnableLambda(_lambda)
try:
    runnable.with_retry(
        stop_after_attempt=2,
        retry_if_exception_type=(ValueError,),
    ).invoke(1)
except ValueError:
    pass

assert count == 2

map

map() -> Runnable[list[Input], list[Output]]

返回一个新的 Runnable,它将输入列表映射到输出列表。

使用每个输入调用 invoke

返回 描述
Runnable[list[Input], list[Output]]

一个新的 Runnable,它将输入列表映射到输出列表。

示例
from langchain_core.runnables import RunnableLambda


def _lambda(x: int) -> int:
    return x + 1


runnable = RunnableLambda(_lambda)
print(runnable.map().invoke([1, 2, 3]))  # [2, 3, 4]

with_fallbacks

with_fallbacks(
    fallbacks: Sequence[Runnable[Input, Output]],
    *,
    exceptions_to_handle: tuple[type[BaseException], ...] = (Exception,),
    exception_key: str | None = None,
) -> RunnableWithFallbacks[Input, Output]

Runnable 添加回退机制,返回一个新的 Runnable

新的 Runnable 将在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

示例
from typing import Iterator

from langchain_core.runnables import RunnableGenerator


def _generate_immediate_error(input: Iterator) -> Iterator[str]:
    raise ValueError()
    yield ""


def _generate(input: Iterator) -> Iterator[str]:
    yield from "foo bar"


runnable = RunnableGenerator(_generate_immediate_error).with_fallbacks(
    [RunnableGenerator(_generate)]
)
print("".join(runnable.stream({})))  # foo bar
参数 描述
备用方案

如果原始 Runnable 失败,将尝试的一系列 runnable。

类型: Sequence[Runnable[Input, Output]]

要处理的异常

一个要处理的异常类型元组。

类型: tuple[type[BaseException], ...] 默认值: (Exception,)

异常键

如果指定了 string,则已处理的异常将作为输入的一部分,在指定的键下传递给备选方案。如果为 None,异常将不会传递给备选方案。如果使用,基础 Runnable 及其备选方案必须接受一个字典作为输入。

类型: str | None 默认值: None

返回 描述
RunnableWithFallbacks[Input, Output]

一个新的 Runnable,它会在失败时先尝试原始的 Runnable,然后按顺序尝试每个备选方案。

as_tool

as_tool(
    args_schema: type[BaseModel] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    arg_types: dict[str, type] | None = None,
) -> BaseTool

Runnable 创建一个 BaseTool

as_tool 将从一个 Runnable 实例化一个 BaseTool,该工具具有名称、描述和 args_schema。在可能的情况下,模式会从 runnable.get_input_schema 中推断。或者(例如,如果 Runnable 接受一个字典作为输入,并且特定的字典键没有类型),模式可以通过 args_schema 直接指定。你也可以传递 arg_types 来仅指定必需的参数及其类型。

参数 描述
参数模式

工具的模式。

类型: type[BaseModel] | None 默认值: None

name

工具的名称。

类型: str | None 默认值: None

描述

工具的描述。

类型: str | None 默认值: None

参数类型

一个从参数名称到类型的字典。

类型: dict[str, type] | None 默认值: None

返回 描述
BaseTool

一个 BaseTool 实例。

类型化字典输入

from typing_extensions import TypedDict
from langchain_core.runnables import RunnableLambda


class Args(TypedDict):
    a: int
    b: list[int]


def f(x: Args) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool()
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 args_schema 指定模式

from typing import Any
from pydantic import BaseModel, Field
from langchain_core.runnables import RunnableLambda

def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))

class FSchema(BaseModel):
    """Apply a function to an integer and list of integers."""

    a: int = Field(..., description="Integer")
    b: list[int] = Field(..., description="List of ints")

runnable = RunnableLambda(f)
as_tool = runnable.as_tool(FSchema)
as_tool.invoke({"a": 3, "b": [1, 2]})

dict 输入,通过 arg_types 指定模式

from typing import Any
from langchain_core.runnables import RunnableLambda


def f(x: dict[str, Any]) -> str:
    return str(x["a"] * max(x["b"]))


runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"a": int, "b": list[int]})
as_tool.invoke({"a": 3, "b": [1, 2]})

字符串输入

from langchain_core.runnables import RunnableLambda


def f(x: str) -> str:
    return x + "a"


def g(x: str) -> str:
    return x + "z"


runnable = RunnableLambda(f) | g
as_tool = runnable.as_tool()
as_tool.invoke("b")

__init__

__init__(*args: Any, **kwargs: Any) -> None

is_lc_serializable 类方法

is_lc_serializable() -> bool

这个类是否可序列化?

根据设计,即使一个类继承自 Serializable,它默认也是不可序列化的。这是为了防止意外序列化不应被序列化的对象。

返回 描述
bool

类是否可序列化。默认为 False

get_lc_namespace 类方法

get_lc_namespace() -> list[str]

获取 LangChain 对象的命名空间。

例如,如果类是 langchain.llms.openai.OpenAI,那么命名空间是 ["langchain", "llms", "openai"]

返回 描述
list[str]

命名空间。

lc_id 类方法

lc_id() -> list[str]

为此类返回一个用于序列化目的的唯一标识符。

唯一标识符是一个描述对象路径的字符串列表。

例如,对于类 langchain.llms.openai.OpenAI,id 是 ["langchain", "llms", "openai", "OpenAI"]

to_json

to_json() -> SerializedConstructor | SerializedNotImplemented

Runnable 序列化为 JSON。

返回 描述
SerializedConstructor | SerializedNotImplemented

一个 Runnable 的 JSON 可序列化表示。

to_json_not_implemented

to_json_not_implemented() -> SerializedNotImplemented

序列化一个“未实现”的对象。

返回 描述
SerializedNotImplemented

SerializedNotImplemented.

configurable_fields

configurable_fields(
    **kwargs: AnyConfigurableField,
) -> RunnableSerializable[Input, Output]

在运行时配置特定的 Runnable 字段。

参数 描述
**kwargs

一个要配置的 ConfigurableField 实例的字典。

类型: AnyConfigurableField 默认值: {}

引发 描述
ValueError

如果在 Runnable 中找不到配置键。

返回 描述
RunnableSerializable[Input, Output]

一个配置了字段的新 Runnable

from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(max_tokens=20).configurable_fields(
    max_tokens=ConfigurableField(
        id="output_token_number",
        name="Max tokens in the output",
        description="The maximum number of tokens in the output",
    )
)

# max_tokens = 20
print("max_tokens_20: ", model.invoke("tell me something about chess").content)

# max_tokens = 200
print(
    "max_tokens_200: ",
    model.with_config(configurable={"output_token_number": 200})
    .invoke("tell me something about chess")
    .content,
)

configurable_alternatives

configurable_alternatives(
    which: ConfigurableField,
    *,
    default_key: str = "default",
    prefix_keys: bool = False,
    **kwargs: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]],
) -> RunnableSerializable[Input, Output]

为可在运行时设置的 Runnable 对象配置备选项。

参数 描述
哪个

将用于选择备选项的 ConfigurableField 实例。

类型: ConfigurableField

默认键

如果未选择备选项,则使用的默认键。

类型: str 默认值: 'default'

前缀键

是否用 ConfigurableField id 作为键的前缀。

类型: bool 默认值: False

**kwargs

一个从键到 Runnable 实例或返回 Runnable 实例的可调用对象的字典。

类型: Runnable[Input, Output] | Callable[[], Runnable[Input, Output]] 默认值: {}

返回 描述
RunnableSerializable[Input, Output]

一个配置了备选项的新 Runnable

from langchain_anthropic import ChatAnthropic
from langchain_core.runnables.utils import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatAnthropic(
    model_name="claude-sonnet-4-5-20250929"
).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
)

# uses the default model ChatAnthropic
print(model.invoke("which organization created you?").content)

# uses ChatOpenAI
print(
    model.with_config(configurable={"llm": "openai"})
    .invoke("which organization created you?")
    .content
)

set_verbose

set_verbose(verbose: bool | None) -> bool

如果 verbose 是 None,则设置它。

这允许用户传入 None 作为 verbose 来访问全局设置。

参数 描述
verbose

要使用的详细程度设置。

类型: bool | None

返回 描述
bool

要使用的详细程度设置。

generate_prompt

generate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

agenerate_prompt 异步

agenerate_prompt(
    prompts: list[PromptValue],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
prompts

PromptValue 对象列表。PromptValue 是一个可以转换为匹配任何语言模型格式的对象(对于纯文本生成模型是字符串,对于聊天模型是 BaseMessage 对象)。

类型: list[PromptValue]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generation 对象列表以及额外的模型提供商特定的输出。

with_structured_output

with_structured_output(
    schema: Dict | type, *, include_raw: bool = False, **kwargs: Any
) -> Runnable[LanguageModelInput, Dict | BaseModel]

返回与给定模式匹配的格式化输出的模型包装器。

参数 描述
模式

输出模式。可以作为以下形式传入:

  • 一个 OpenAI 函数/工具模式,
  • 一个 JSON Schema,
  • 一个 TypedDict 类,
  • 或一个 Pydantic 类。

如果 schema 是一个 Pydantic 类,那么模型输出将是该类的 Pydantic 实例,并且模型生成的字段将由 Pydantic 类进行验证。否则,模型输出将是一个字典,并且不会被验证。

有关在指定 Pydantic 或 TypedDict 类时如何正确指定模式字段的类型和描述的更多信息,请参阅 langchain_core.utils.function_calling.convert_to_openai_tool

类型: Dict | type

包含原始数据

如果为 False,则仅返回解析后的结构化输出。如果在模型输出解析期间发生错误,它将被引发。如果为 True,则将返回原始模型响应(一个 BaseMessage)和解析后的模型响应。如果在输出解析期间发生错误,它将被捕获并一并返回。

最终输出总是一个带有键 'raw''parsed''parsing_error'dict

类型: bool 默认值: False

引发 描述
ValueError

如果有任何不支持的 kwargs

NotImplementedError

如果模型没有实现 with_structured_output()

返回 描述
Runnable[LanguageModelInput, Dict | BaseModel]

一个接受与 langchain_core.language_models.chat.BaseChatModel 相同输入的 Runnable。如果 include_rawFalseschema 是一个 Pydantic 类,则 Runnable 输出一个 schema 的实例(即一个 Pydantic 对象)。否则,如果 include_rawFalse,则 Runnable 输出一个 dict

如果 include_rawTrue,则 Runnable 输出一个带有以下键的 dict

  • 'raw': BaseMessage
  • 'parsed': 如果出现解析错误则为 None,否则类型取决于上面描述的 schema
  • 'parsing_error': BaseException | None

示例:Pydantic 模式 (include_raw=False)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(AnswerWithJustification)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)

# -> AnswerWithJustification(
#     answer='They weigh the same',
#     justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'
# )

示例:Pydantic 模式 (include_raw=True)

from pydantic import BaseModel


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(
    AnswerWithJustification, include_raw=True
)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'raw': AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_Ao02pnFYXD6GN1yzc0uXPsvF', 'function': {'arguments': '{"answer":"They weigh the same.","justification":"Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ."}', 'name': 'AnswerWithJustification'}, 'type': 'function'}]}),
#     'parsed': AnswerWithJustification(answer='They weigh the same.', justification='Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume or density of the objects may differ.'),
#     'parsing_error': None
# }

示例:dict 模式 (include_raw=False)

from pydantic import BaseModel
from langchain_core.utils.function_calling import convert_to_openai_tool


class AnswerWithJustification(BaseModel):
    '''An answer to the user question along with justification for the answer.'''

    answer: str
    justification: str


dict_schema = convert_to_openai_tool(AnswerWithJustification)
model = ChatModel(model="model-name", temperature=0)
structured_model = model.with_structured_output(dict_schema)

structured_model.invoke(
    "What weighs more a pound of bricks or a pound of feathers"
)
# -> {
#     'answer': 'They weigh the same',
#     'justification': 'Both a pound of bricks and a pound of feathers weigh one pound. The weight is the same, but the volume and density of the two substances differ.'
# }

行为在 0.2.26 版本中已更改

添加了对 TypedDict 类的支持。

get_token_ids

get_token_ids(text: str) -> list[int]

返回文本中 token 的有序 ID。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
list[int]

与文本中的词元相对应的 ID 列表,按它们在文本中出现的顺序列出。

get_num_tokens

get_num_tokens(text: str) -> int

获取文本中存在的 token 数量。

用于检查输入是否适合模型的上下文窗口。

参数 描述
text

要进行分词的字符串输入。

类型: str

返回 描述
int

文本中的词元整数数量。

get_num_tokens_from_messages

get_num_tokens_from_messages(
    messages: list[BaseMessage], tools: Sequence | None = None
) -> int

获取消息中的 token 数量。

用于检查输入是否适合模型的上下文窗口。

注意

get_num_tokens_from_messages 的基本实现忽略了工具模式。

参数 描述
messages

要进行分词的消息输入。

类型: list[BaseMessage]

工具

如果提供,则为要转换为工具模式的 dict、BaseModel、函数或 BaseTool 对象的序列。

类型: Sequence | None 默认值: None

返回 描述
int

所有消息中词元数量的总和。

generate

generate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

将一系列提示传递给模型并返回模型生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

agenerate 异步

agenerate(
    messages: list[list[BaseMessage]],
    stop: list[str] | None = None,
    callbacks: Callbacks = None,
    *,
    tags: list[str] | None = None,
    metadata: dict[str, Any] | None = None,
    run_name: str | None = None,
    run_id: UUID | None = None,
    **kwargs: Any,
) -> LLMResult

异步地将一系列提示传递给模型并返回生成的内容。

对于提供批量 API 的模型,此方法应利用批量调用。

当你想要

  1. 利用批量调用,
  2. 需要从模型获得比最高生成值更多的输出,
  3. 正在构建与底层语言模型类型无关的链(例如,纯文本补全模型与聊天模型)。
参数 描述
messages

消息列表的列表。

类型: list[list[BaseMessage]]

停止

生成时使用的停止词。模型输出在首次出现这些子字符串中的任何一个时被截断。

类型: list[str] | None 默认值: None

回调

要传递的 Callbacks。用于在生成过程中执行额外的功能,如日志记录或流式处理。

类型: Callbacks 默认值: None

tags

要应用的标签。

类型: list[str] | None 默认值: None

metadata

要应用的元数据。

类型: dict[str, Any] | None 默认值: None

运行名称

运行的名称。

类型: str | None 默认值: None

run_id

运行的 ID。

类型: UUID | None 默认值: None

**kwargs

任意附加的关键字参数。这些通常会传递给模型提供商的 API 调用。

类型: Any 默认值: {}

返回 描述
LLMResult

一个 LLMResult,其中包含每个输入提示的候选 Generations 列表以及额外的模型提供商特定的输出。

dict

dict(**kwargs: Any) -> dict

返回 LLM 的字典。

bind_tools

bind_tools(
    tools: Sequence[Dict[str, Any] | type | Callable | BaseTool],
    *,
    tool_choice: str | None = None,
    **kwargs: Any,
) -> Runnable[LanguageModelInput, AIMessage]

将工具绑定到模型。

参数 描述
工具

要绑定到模型的工具序列。

类型: Sequence[Dict[str, Any] | type | Callable | BaseTool]

工具选择

要使用的工具。如果为 "any",则可以使用任何工具。

类型: str | None 默认值: None

返回 描述
Runnable[LanguageModelInput, AIMessage]

一个返回消息的 Runnable。

create_structured_runnable

create_structured_runnable(
    function: Type[BaseModel] | Sequence[Type[BaseModel]],
    llm: Runnable,
    *,
    prompt: BasePromptTemplate | None = None,
    use_extra_step: bool = False,
) -> Runnable

创建一个使用 OpenAI 函数的可运行序列。

参数 描述
函数

可以是单个 `pydantic.BaseModel` 类或 `pydantic.BaseModels` 类的序列。为了获得最佳结果,`pydantic.BaseModels` 应包含参数的描述。

类型: Type[BaseModel] | Sequence[Type[BaseModel]]

llm

要使用的语言模型,假定支持 Google Vertex 函数调用 API。

类型: Runnable

prompt

要传递给模型的 `BasePromptTemplate`。

类型: BasePromptTemplate | None 默认值: None

use_extra_step

是否需要额外步骤将输出解析为函数

类型: bool 默认值: False

返回 描述
可运行对象

一个可运行的序列,在运行时会将给定的函数传递给模型。

示例

.. code-block:: python

    from typing import Optional

    from langchain_google_vertexai import ChatVertexAI, create_structured_runnable
    from langchain_core.prompts import ChatPromptTemplate
    from pydantic import BaseModel, Field


    class RecordPerson(BaseModel):
        """Record some identifying information about a person."""

        name: str = Field(..., description="The person's name")
        age: int = Field(..., description="The person's age")
        fav_food: Optional[str] = Field(None, description="The person's favorite food")


    class RecordDog(BaseModel):
        """Record some identifying information about a dog."""

        name: str = Field(..., description="The dog's name")
        color: str = Field(..., description="The dog's color")
        fav_food: Optional[str] = Field(None, description="The dog's favorite food")


    llm = ChatVertexAI(model_name="gemini-pro")
    prompt = ChatPromptTemplate.from_template("""
    You are a world class algorithm for recording entities.
    Make calls to the relevant function to record the entities in the following input: {input}
    Tip: Make sure to answer in the correct format"""
                             )
    chain = create_structured_runnable([RecordPerson, RecordDog], llm, prompt=prompt)
    chain.invoke({"input": "Harry was a chubby brown beagle who loved chicken"})
    # -> RecordDog(name="Harry", color="brown", fav_food="chicken")

get_vertex_maas_model

get_vertex_maas_model(model_name, **kwargs)

返回一个相应的 Vertex MaaS 实例。

基于模型名称的工厂方法。

create_context_cache

create_context_cache(
    model: ChatVertexAI,
    messages: list[BaseMessage],
    expire_time: datetime | None = None,
    time_to_live: timedelta | None = None,
    tools: _ToolsType | None = None,
    tool_config: _ToolConfigDict | None = None,
) -> str

为某个模型中的内容创建一个缓存。

参数 描述
model

ChatVertexAI 模型。必须至少是 gemini-2.5-pro 或 gemini-2.0-flash。

类型: ChatVertexAI

messages

要缓存的消息列表。

类型: list[BaseMessage]

expire_time

此资源被视为过期的时间戳。expire_time 和 time_to_live 最多只能设置一个。如果两者都未设置,将使用 API 端的默认 TTL(目前为 1 小时)。

类型: datetime | None 默认值: None

time_to_live

此资源的 TTL(生存时间)。如果提供,过期时间计算为 created_time + TTL。expire_time 和 time_to_live 最多只能设置一个。如果两者都未设置,将使用 API 端的默认 TTL(目前为 1 小时)。

类型: timedelta | None 默认值: None

工具

要绑定到此聊天模型的一系列工具定义。可以是 pydantic 模型、可调用对象或 BaseTool。Pydantic 模型、可调用对象和 BaseTools 将自动转换为其 schema 字典表示形式。

类型: _ToolsType | None 默认值: None

tool_config

可选。不可变。工具配置。此配置对所有工具共享。

类型: _ToolConfigDict | None 默认值: None

引发 描述
ValueError

如果模型不支持上下文缓存。

返回 描述
str

包含已创建缓存标识符的字符串。

© . This site is unofficial and not affiliated with LangChain, Inc.