LangChain & LangGraph 核心方法实用讲解:测试工程师必备技能

RAG(检索增强生成)型智能问答机器人,已成为测试与知识管理领域的热门工具。LangChain 和 LangGraph 提供了灵活的开发能力,帮助你轻松构建多轮对话、知识检索和业务自动化应用。本篇专为测试工程师,系统讲解实际代码中涉及的 LangChain 和 LangGraph 主要方法和应用场景,并对文档拆解与向量化做适当扩展。


一、文档加载与拆分

1. WebBaseLoader

作用:从网页地址加载网页正文内容,自动过滤无关元素。

常见用法:

from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader(web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",))
docs = loader.load()  # 返回 Document 列表

场景举例:

  • 测试工具知识收集:自动抓取 Selenium、Postman 等工具的官方文档,构建本地知识库。
  • 缺陷模式分析:周期性抓取 JIRA 中的缺陷描述,辅助测试团队发现高频问题。

通俗例子
假设你负责测试一个电商平台,需要快速了解 Selenium 的最新 API 用法。通过 WebBaseLoader 加载 Selenium 官方文档链接,即可将关键章节内容导入到你的 RAG 系统中,后续通过提问“如何用 Selenium 实现多浏览器兼容测试?”直接获取答案。


2. RecursiveCharacterTextSplitter

作用:将长文档智能拆分为适合大模型检索的小块(chunk),保证语义连续性和检索效果。

常见用法:

from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)

参数解释

  • chunk_size:每块最大字符数,太大检索慢,太小丢上下文,一般500~1500合适。
  • chunk_overlap:块之间重叠部分,避免重要信息被切断。

扩展技巧

  • 自定义拆分规则:对 Markdown 技术文档,按标题、代码块、段落拆分,提升检索精度。
  • 测试用例优化:针对跨块的测试用例描述(如前置条件+操作步骤+预期结果),设置 chunk_overlap=200 保留上下文。

通俗例子
假设你有一份 5000 字的 API 测试用例文档,使用 chunk_size=800chunk_overlap=100 拆分后,会生成 7 个块,每个块包含部分测试步骤。当用户问“如何测试登录接口的异常码?”时,系统能精准定位到包含“401 Unauthorized”描述的块。


二、文本向量化与向量库管理

3. OpenAIEmbeddings

作用:将文本转为向量,支持后续相似度搜索。

常见用法:

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

应用场景:

  • 测试用例检索:将历史测试用例向量化,支持语义搜索(如“如何测试支付接口的超时重试?”)。
  • 缺陷模式匹配:将缺陷描述向量化,自动关联历史相似缺陷的解决方案。

通俗例子
当测试人员输入“用户无法完成支付”,系统通过向量化匹配历史缺陷库中的“支付失败,提示网络异常”,推荐修复方案:“检查网络超时配置”。


4. InMemoryVectorStore

作用:简易内存型向量数据库,适合小型演示和本地实验。

常见用法:

from langchain_core.vectorstores import InMemoryVectorStore

vector_store = InMemoryVectorStore(embeddings)
vector_store.add_documents(documents=splits)

生产级替代方案

  • FAISS:适合中等规模数据(万级文档)。
  • Milvus:支持 PB 级数据,适合企业级测试知识库。

通俗例子
在 CI/CD 流程中,用 InMemoryVectorStore 快速搭建测试用例检索系统,开发人员提交代码时自动查询“该功能已有的测试用例”,避免重复编写。


5. similarity_search

作用:根据向量相似度检索与查询最接近的文档块

常见用法:

results = vector_store.similarity_search("How does task decomposition work?", k=2)

参数说明

  • k:最多返回前k个最相似的文档

应用场景

  • 缺陷根因分析:当测试人员遇到“数据库连接超时”问题时,系统检索历史类似问题的解决方法。
  • 测试用例复用:根据需求描述,推荐已有的测试用例。

通俗例子
测试人员提问“如何验证注册接口的手机号格式?”,系统返回包含“正则表达式校验手机号”和“边界值测试”的文档块,节省编写新用例的时间。


三、LangGraph对话流程管理

6. MessagesState

作用:统一管理多轮对话历史,包括用户消息、AI回复、工具调用、检索结果等。

常见用法:

from langgraph.graph import MessagesState

# 内部维护一个消息列表,自动追加,每步可读取历史

应用场景

  • 多轮测试咨询:用户问“如何测试支付功能?”,AI 逐步引导用户明确需求、环境、用例设计。
  • 缺陷复盘:自动关联当前缺陷与历史类似问题的解决过程。

通俗例子
用户问“我的登录测试失败了”,AI 通过 MessagesState 记录上下文,后续提问“是否检查过数据库凭证?”或“是否模拟过弱网环境?”。


7. StateGraph

作用:定义对话流程图(节点+边),像搭积木一样管理多步业务逻辑。

常见用法:

from langgraph.graph import StateGraph

graph_builder = StateGraph(MessagesState)
graph_builder.add_node(query_or_respond)
graph_builder.add_node(tools)
graph_builder.add_node(generate)
# ...配置边和流程
graph = graph_builder.compile()

通俗例子
构建一个测试流程助手:

  1. 用户提问:“如何测试搜索功能?”
  2. 工具调用:检索测试用例库中的“搜索功能测试用例”。
  3. 生成答案:结合检索结果,输出测试步骤和注意事项。
  4. 多轮交互:用户确认后,生成测试脚本模板。

8. ToolNode 与 @tool 装饰器

作用:将Python工具函数(如知识检索、API调用等)包装成对话节点,供LLM主动调用。

常见用法:

from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode

@tool(response_format="content_and_artifact")
def retrieve(query: str):
    # ...检索逻辑
    return result

tools = ToolNode([retrieve])

应用场景

  • 测试用例检索:自动查找已有的测试用例。
  • CI/CD 集成:调用 Jenkins 接口触发测试任务。

通俗例子
用户提问“运行冒烟测试”,系统调用 ToolNode 中的 Jenkins API 节点,触发 CI 流水线,并返回构建状态。


9. SystemMessage

作用:赋予AI角色、规则或行为指令,影响每步生成风格和业务规范。

常见用法:

from langchain_core.messages import SystemMessage

system_msg = SystemMessage("You are an assistant for question-answering tasks. Use the following context...")

应用场景

  • 统一输出格式:要求 AI 输出测试用例时包含前置条件、操作步骤、预期结果。
  • 安全规范:禁止 AI 提供不安全的测试建议(如暴力破解)。

通俗例子
设置 SystemMessage 指令:“请输出测试用例时,必须包含用例编号、优先级、测试步骤。”,确保 AI 生成的用例符合团队规范。


10. 流式输出与调试

作用:逐步输出每个对话节点结果,实时观察生成和检索过程。

常见用法:

for step in graph.stream(
    {"messages": [{"role": "user", "content": input_message}]},
    stream_mode="values",
):
    step["messages"][-1].pretty_print()

应用场景

  • 调试复杂流程:观察 AI 在检索、生成、工具调用各阶段的表现。
  • 质量追溯:记录 AI 推理路径,便于分析错误原因。

通俗例子
当 AI 生成的测试用例不符合预期时,通过流式输出查看哪些文档块被检索到,判断是否是切分或向量化问题。


四、文档拆解与向量化扩展建议

技术文档拆分策略

  • API 文档:按接口路径(如 /login)拆分,确保每个接口独立。
  • 测试用例库:按用例编号(如 TC-001)拆分,避免跨用例信息丢失。
  • 缺陷报告:按缺陷 ID 拆分,便于关联历史解决方案。

多源异构数据处理

  • Excel/CSV:用 Pandas 读取后转为文本。
  • PDF:用 PyPDF2 提取文本,处理表格时保留结构。
  • 图片:OCR 转文本后,结合上下文补充说明。

向量化效果优化

  • 定期更新:增量同步新文档,避免知识过时。
  • 评估指标:用 MRR(Mean Reciprocal Rank)衡量检索精度,优化切分策略。

五、实战Tips与常见误区

1. 块大小与重叠设置

  • 错误案例:某团队设置 chunk_size=2000,导致大模型检索时频繁遗漏关键步骤。
  • 解决方案:通过 A/B 测试调整参数,使用 chunk_overlap=200 保留上下文。

2. 向量库选择

  • 错误案例:某项目用 InMemoryVectorStore 存储 10 万条测试用例,导致内存溢出。
  • 解决方案:切换至 FAISS 或 Milvus,支持持久化存储。

3. SystemMessage 的滥用

  • 错误案例:某团队在 SystemMessage 中写入过多规则,导致 AI 生成速度变慢。
  • 解决方案:仅保留核心规则(如输出格式),复杂逻辑通过工具调用实现。

4. 工具调用链设计

  • 错误案例:某系统将所有工具集中调用,导致 AI 无法判断优先级。
  • 解决方案:用 StateGraph 明确流程(如先检索、再调用 API、最后生成答案)。

5. 流式调试的重要性

  • 错误案例:某团队忽略流式输出,导致无法定位 AI 生成错误的原因。
  • 解决方案:在开发阶段强制使用流式调试,记录每一步的输入输出。

六、结语

掌握 LangChain & LangGraph 这些核心方法,测试工程师不仅能构建强大的智能问答和知识检索助手,还能把 AI 能力嵌入到测试流程的每个环节,让你的团队在自动化、智能化道路上快人一步!

建议:

  1. 从小规模开始:用 10 个测试用例或 5 个缺陷描述搭建原型,验证效果。
  2. 持续迭代优化:根据实际需求调整文档切分策略、向量化模型和对话流程。
  3. 结合团队规范:将 SystemMessage 与团队的测试标准、安全要求深度绑定。

最终目标
通过 RAG 系统,让测试工程师从重复的文档检索、用例编写中解放出来,专注于复杂问题分析和测试策略设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python测试之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值