ChatModelUnitTests#

class langchain_tests.unit_tests.chat_models.ChatModelUnitTests[source]#

聊天模型单元测试的基类。

测试子类必须实现 chat_model_classchat_model_params 属性,以指定要测试的模型及其 初始化参数。

示例:

from typing import Type

from langchain_tests.unit_tests import ChatModelUnitTests
from my_package.chat_models import MyChatModel


class TestMyChatModelUnit(ChatModelUnitTests):
    @property
    def chat_model_class(self) -> Type[MyChatModel]:
        # Return the chat model class to test here
        return MyChatModel

    @property
    def chat_model_params(self) -> dict:
        # Return initialization parameters for the model.
        return {"model": "model-001", "temperature": 0}

注意

个别测试方法的API参考包括故障排除提示。

测试子类必须实现以下两个属性:

chat_model_class

要测试的聊天模型类,例如 ChatParrotLink

示例:

@property
def chat_model_class(self) -> Type[ChatParrotLink]:
    return ChatParrotLink
chat_model_params

聊天模型的初始化参数。

示例:

@property
def chat_model_params(self) -> dict:
    return {"model": "bird-brain-001", "temperature": 0}

此外,测试子类可以通过选择性地覆盖以下属性来控制测试哪些功能(例如工具调用或多模态)。展开以查看详细信息:

has_tool_calling

布尔属性,指示聊天模型是否支持工具调用。

默认情况下,这由聊天模型的bind_tools方法是否被重写决定。通常在测试类上不需要重写它。

示例覆盖:

@property
def has_tool_calling(self) -> bool:
    return True
tool_choice_value

在测试中使用的工具选择的值。

一些用于工具调用功能的测试尝试通过tool_choice参数强制工具调用。此参数的常见值为“any”。默认为None

注意:如果值设置为“tool_name”,则每个测试中使用的工具名称将设置为tool_choice的值。

示例:

@property
def tool_choice_value(self) -> Optional[str]:
    return "any"
has_structured_output

布尔属性,指示聊天模型是否支持结构化输出。

默认情况下,这取决于聊天模型的with_structured_output方法是否被重写。如果打算使用基本实现,则应重写此方法。

参见:https://python.langchain.com/docs/concepts/structured_outputs/

示例:

@property
def has_structured_output(self) -> bool:
    return True
supports_json_mode

布尔属性,指示聊天模型是否支持在with_structured_output中使用JSON模式。

参见:https://python.langchain.com/docs/concepts/structured_outputs/#json-mode

示例:

@property
def supports_json_mode(self) -> bool:
    return True
supports_image_inputs

布尔属性,指示聊天模型是否支持图像输入。 默认为 False

如果设置为True,聊天模型将使用以下形式的内容块进行测试

[
    {"type": "text", "text": "describe the weather in this image"},
    {
        "type": "image_url",
        "image_url": {"url": f"data:image/jpeg;base64,{image_data}"},
    },
]

参见 https://python.langchain.com/docs/concepts/multimodality/

示例:

@property
def supports_image_inputs(self) -> bool:
    return True
supports_video_inputs

布尔属性,指示聊天模型是否支持图像输入。 默认为 False。目前没有为此功能编写测试。

returns_usage_metadata

布尔属性,指示聊天模型是否在调用和流式响应时返回使用元数据。

usage_metadata 是 AIMessages 上的一个可选字典属性,用于跟踪输入和输出令牌:https://python.langchain.com/api_reference/core/messages/langchain_core.messages.ai.UsageMetadata.html

示例:

@property
def returns_usage_metadata(self) -> bool:
    return False
supports_anthropic_inputs

布尔属性,指示聊天模型是否支持Anthropic风格的输入。

这些输入可能包含“工具使用”和“工具结果”内容块,例如,

[
    {"type": "text", "text": "Hmm let me think about that"},
    {
        "type": "tool_use",
        "input": {"fav_color": "green"},
        "id": "foo",
        "name": "color_picker",
    },
]

如果设置为 True,将使用此表单的内容块测试聊天模型。

示例:

@property
def supports_anthropic_inputs(self) -> bool:
    return False
supports_image_tool_message

布尔属性,指示聊天模型是否支持包含图像内容的ToolMessages,例如,

ToolMessage(
    content=[
        {
            "type": "image_url",
            "image_url": {"url": f"data:image/jpeg;base64,{image_data}"},
        },
    ],
    tool_call_id="1",
    name="random_image",
)

如果设置为 True,聊天模型将使用包含此类 ToolMessages 的消息序列进行测试。

示例:

@property
def supports_image_tool_message(self) -> bool:
    return False
supported_usage_metadata_details

属性控制在使用和流中发出哪些使用元数据详细信息。

usage_metadata 是 AIMessages 上的一个可选字典属性,用于跟踪输入和输出令牌:https://python.langchain.com/api_reference/core/messages/langchain_core.messages.ai.UsageMetadata.html

它包括可选的键 input_token_detailsoutput_token_details,可以跟踪与特殊类型令牌相关的使用详情,例如缓存的、音频的或推理的。

只有在提供这些详细信息时才需要重写。

Testing initialization from environment variables

一些单元测试可能需要测试从环境变量初始化的功能。 这些测试可以通过覆盖init_from_env_params 属性来启用(见下文):

init_from_env_params

此属性用于单元测试中,以测试从环境变量进行的初始化。它应返回三个字典的元组,这些字典指定了环境变量、额外的初始化参数以及要检查的预期实例属性。

默认为空字典。如果未覆盖,则跳过测试。

示例:

@property
def init_from_env_params(self) -> Tuple[dict, dict, dict]:
    return (
        {
            "MY_API_KEY": "api_key",
        },
        {
            "model": "bird-brain-001",
        },
        {
            "my_api_key": "api_key",
        },
    )

属性

chat_model_class

要测试的聊天模型类,例如 ChatParrotLink

chat_model_params

聊天模型的初始化参数。

has_structured_output

(bool) 聊天模型是否支持结构化输出。

has_tool_calling

(bool) 模型是否支持工具调用。

init_from_env_params

(元组) 环境变量,额外的初始化参数,以及用于测试从环境变量初始化的预期实例属性。

returns_usage_metadata

(bool) 聊天模型在调用和流式响应时是否返回使用元数据。

supported_usage_metadata_details

(dict) 在调用和流中发出的使用元数据详细信息。

supports_anthropic_inputs

(bool) 聊天模型是否支持Anthropic风格的输入。

supports_image_inputs

(bool) 聊天模型是否支持图像输入,默认为 False

supports_image_tool_message

(bool) 聊天模型是否支持包含图像内容的ToolMessages。

supports_json_mode

(bool) 聊天模型是否支持JSON模式。

supports_video_inputs

(bool) 聊天模型是否支持视频输入,默认为 False

tool_choice_value

(None 或 str) 用于测试时的工具选择。

方法

test_bind_tool_pydantic(model, my_adder_tool)

测试聊天模型是否正确处理传递给bind_tools的Pydantic模型。

test_init()

测试模型初始化。

test_init_from_env()

测试从环境变量初始化。

test_init_streaming()

测试模型可以使用streaming=True进行初始化。

test_serdes(model, snapshot)

测试模型的序列化和反序列化。

test_standard_params(model)

测试模型是否正确生成标准参数。

test_with_structured_output(model, schema)

测试 with_structured_output 方法。

test_bind_tool_pydantic(model: BaseChatModel, my_adder_tool: BaseTool) None[source]#

测试聊天模型是否正确处理传递给bind_tools的Pydantic模型。如果测试类上的has_tool_calling属性为False,则跳过测试。

Troubleshooting

如果此测试失败,请确保模型的bind_tools方法 正确处理Pydantic V2模型。langchain_core实现了一个实用函数,可以适应大多数格式:https://python.langchain.com/api_reference/core/utils/langchain_core.utils.function_calling.convert_to_openai_tool.html

查看 bind_tools 的示例实现:https://python.langchain.com/api_reference/_modules/langchain_openai/chat_models/base.html#BaseChatOpenAI.bind_tools

Parameters:
Return type:

test_init() None[source]#

测试模型初始化。这应该适用于所有集成。

Troubleshooting

如果此测试失败,请确保:

  1. chat_model_params 已指定,并且可以从这些参数初始化模型;

  2. 该模型适应标准参数:https://python.langchain.com/docs/concepts/chat_models/#standard-parameters

Return type:

test_init_from_env() None[source]#

测试从环境变量初始化。依赖于init_from_env_params属性。如果未设置该属性,则跳过测试。

Troubleshooting

如果此测试失败,请确保正确指定了init_from_env_params,并且在初始化期间从环境变量中正确设置了模型参数。

Return type:

test_init_streaming() None[source]#

测试模型可以使用streaming=True进行初始化。这是为了向后兼容的目的。

Troubleshooting

如果此测试失败,请确保模型可以使用布尔值 streaming 参数进行初始化。

Return type:

test_serdes(model: BaseChatModel, snapshot: SnapshotAssertion) None[source]#

测试模型的序列化和反序列化。如果聊天模型类上的is_lc_serializable属性未被重写以返回True,则跳过测试。

Troubleshooting

如果此测试失败,请检查测试类上的init_from_env_params属性是否正确设置。

Parameters:
Return type:

test_standard_params(model: BaseChatModel) None[source]#

测试模型是否正确生成标准参数。这些参数用于追踪目的。

Troubleshooting

如果此测试失败,请检查模型是否适应标准参数: https://python.langchain.com/docs/concepts/chat_models/#standard-parameters

还要检查模型类是否按照约定命名 (例如,ChatProviderName)。

Parameters:

模型 (BaseChatModel)

Return type:

test_with_structured_output(model: BaseChatModel, schema: Any) None[source]#

测试 with_structured_output 方法。如果测试类上的 has_structured_output 属性为 False,则跳过测试。

Troubleshooting

如果此测试失败,请确保模型的bind_tools方法 正确处理Pydantic V2模型。langchain_core实现了一个实用函数,可以适应大多数格式:https://python.langchain.com/api_reference/core/utils/langchain_core.utils.function_calling.convert_to_openai_tool.html

查看with_structured_output的示例实现:https://python.langchain.com/api_reference/_modules/langchain_openai/chat_models/base.html#BaseChatOpenAI.with_structured_output

Parameters:
Return type: