Skip to main content
标准测试确保您的集成按预期工作。 无论是为自己创建自定义类,还是为了在 LangChain 集成中发布,都必须添加测试以确保其按预期工作。LangChain 为每种集成类型都提供了一套全面的 测试套件。本指南将介绍如何将 LangChain 的标准测试套件添加到每种集成类型中。

设置

首先,安装所需的依赖项:

langchain-core

定义我们想要导入的接口,用于定义我们的自定义组件

langchain-tests

提供运行标准测试所需的测试和 pytest 插件
由于 langchain-tests 新版本中新增的测试可能会破坏您的 CI/CD 流水线,我们建议将 langchain-tests 锁定到最新版本,以避免意外变更。
pip install -U langchain-core
pip install -U langchain-tests
langchain-tests 包中有 2 个命名空间:
位置langchain_tests.unit_tests设计用于独立测试组件,且无法访问外部服务查看 API 参考
Location: langchain_tests.integration_tests旨在测试能够访问外部服务的组件(特别是该组件设计用于与之交互的外部服务)查看 API 参考
两种类型的测试都实现为 pytest 基于类的测试套件。

实现标准测试

根据您的集成类型,您需要实现单元测试和集成测试中的其中之一或两者。 通过继承您的集成类型的标准测试套件,您将获得该类型的全套标准测试。要使测试运行成功,只有当模型支持正在测试的能力时,某个测试才应该通过。否则,应该跳过该测试。 因为不同的集成提供独特的功能集,LangChain 提供的大多数标准测试默认是选择性加入的,以防止误报。因此,你需要覆盖属性来指明你的集成支持哪些功能 - 请看下面的示例以作说明。
tests/integration_tests/test_standard.py
# Indicate that a chat model supports image inputs

class TestChatParrotLinkStandard(ChatModelIntegrationTests):
    # ... other required properties

    @property
    def supports_image_inputs(self) -> bool:
        return True  # (The default is False)
您应该将测试组织在软件包根目录下的这些子目录中:
  • tests/unit_tests 用于单元测试
  • tests/integration_tests 用于集成测试
要查看可配置功能及其默认值的完整列表,请访问标准测试的 API 参考 以下是一些流行集成中标准测试的示例实现:

ChatOpenAI

Unit tests

ChatAnthropic

Unit tests

ChatGenAI

Unit tests

运行测试

如果从模板引导创建集成,会提供一个 Makefile,其中包含运行单元测试和集成测试的目标:
make test
make integration_test
否则,如果你遵循推荐的目录结构,你可以使用以下方式运行测试:
# Run all tests
uv run --group test pytest tests/unit_tests/
uv run --group test --group test_integration pytest -n auto tests/integration_tests/

# For certain unit tests, you may need to set certain flags and environment variables:
TIKTOKEN_CACHE_DIR=tiktoken_cache uv run --group test pytest --disable-socket --allow-unix-socket tests/unit_tests/

# Run a specific test file
uv run --group test pytest tests/integration_tests/test_chat_models.py

# Run a specific test function in a file
uv run --group test pytest tests/integration_tests/test_chat_models.py::test_chat_completions

# Run a specific test function within a class
uv run --group test pytest tests/integration_tests/test_chat_models.py::TestChatParrotLinkIntegration::test_chat_completions

故障排除

要查看可用的标准测试套件完整列表、其中包含的测试信息以及常见问题的排查方法,请参阅 标准测试 API 参考

LangGraph.js

LangGraph.js 是一个用于构建有状态、多智能体应用程序的库,专为 JavaScript/TypeScript 设计。它通过将步骤构建为图中的边和节点,扩展了 LangChain 表达式语言,从而实现卓越的编排和持久化能力。

核心概念

LangGraph.js 的设计旨在简化创建智能体和链的过程,这些智能体和链可以:
  • 跨调用保持状态:在多次运行之间保存上下文。
  • 支持并发执行:并行运行多个步骤以提高效率。
  • 可控的循环:实现复杂的循环逻辑,包括条件分支。
  • 优先处理人机协作:轻松集成人工批准和反馈循环。

主要特性

有状态图

LangGraph.js 的核心是 StateGraph 类,它允许你定义一个图,该图维护一个共享状态对象,并在图的每个节点之间传递。
import { StateGraph } from "@langchain/langgraph";

// 定义图的状态
interface AgentState {
  messages: BaseMessage[];
}

// 创建一个有状态图
const workflow = new StateGraph(AgentState);

持久化

LangGraph.js 内置了检查点功能,允许你保存和恢复图的状态。这对于创建能够中断和恢复的长期运行智能体至关重要。
import { MemorySaver } from "@langchain/langgraph";

// 创建一个内存检查点保存器
const memory = new MemorySaver();

// 将检查点保存器附加到图
const app = workflow.compile({ checkpointer: memory });

人机协作模式

LangGraph.js 提供了内置支持,用于创建需要人工输入的智能体。你可以轻松地暂停图的执行,等待人工批准,然后继续。
// 在图中添加一个等待人工输入的节点
workflow.addNode("human_approval", humanApprovalNode);

// 设置条件边,在需要时暂停
workflow.addConditionalEdges(
  "agent",
  shouldContinue,
  {
    continue: "action",
    human: "human_approval",
  }
);

快速开始

安装

npm install @langchain/langgraph

基本示例

这是一个创建简单智能体的示例,该智能体使用工具来回答问题。
pip
    pip install -U langchain-core
    pip install -U langchain-tests

架构

LangGraph.js 构建于 LangChain.js 之上,但可以独立使用。它提供了一个声明式的 API,用于定义图结构,并处理执行、状态管理和持久化的复杂性。

组件

  • :定义工作流的结构。
  • 节点:代表工作流中的单个步骤或函数。
  • :定义节点之间的转换逻辑。
  • 状态:在图的执行过程中维护和传递的数据。

执行流程

  1. 使用初始状态调用图。
  2. 当前节点处理状态并返回更新后的状态。
  3. 根据边逻辑确定下一个节点。
  4. 重复此过程,直到达到终止条件。

高级用法

时间旅行

使用检查点,你可以“时间旅行”到图的任何先前状态,并从那里分支出新的执行路径。
// 获取过去的配置
const pastConfig = { configurable: { thread_id: "1" } };

// 获取特定时间点的状态
const pastState = await app.getState(pastConfig, { step: -1 });

// 从该状态分支出新的执行
const result = await app.invoke(null, pastConfig);

流式处理

LangGraph.js 支持流式处理,允许你实时观察图的执行过程。
const stream = await app.stream(initialState);

for await (const chunk of stream) {
  console.log(chunk);
}

与 LangSmith 集成

LangGraph.js 与 LangSmith 无缝集成,提供可视化、调试和监控你的智能体工作流的能力。
import { Client } from "langsmith";

// LangSmith 会自动检测环境变量
// LANGCHAIN_TRACING_V2=true
// LANGCHAIN_API_KEY="your-api-key"

更多资源

贡献

我们欢迎社区贡献!请查看我们的 贡献指南 了解如何开始。

许可证

LangGraph.js 使用 MIT 许可证。详情请参阅 LICENSE 文件。
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.