ChatModelUnitTests#
- class langchain_tests.unit_tests.chat_models.ChatModelUnitTests[source]#
聊天模型单元测试的基类。
测试子类必须实现
chat_model_class
和chat_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_details
和output_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模型。测试模型初始化。
测试从环境变量初始化。
测试模型可以使用
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:
model (BaseChatModel)
my_adder_tool (BaseTool)
- Return type:
无
- test_init() None [source]#
测试模型初始化。这应该适用于所有集成。
Troubleshooting
如果此测试失败,请确保:
chat_model_params
已指定,并且可以从这些参数初始化模型;该模型适应标准参数: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:
model (BaseChatModel)
snapshot (SnapshotAssertion)
- 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:
model (BaseChatModel)
schema (Any)
- Return type:
无