参考 · 内置节点速查
本页汇总所有内置节点:角色、构造参数、输入输出字段、最小用法。字段名/类型与源码 NodeDeclaration 一致,是最权威的速查。
所有节点统一 Node(name=..., **params):name 是工作流内唯一实例名;**params 里的键会与「输入 schema」对齐解析(常量 / wf.ref 引用 / 注入对象)。
速查表
| 节点 |
角色 |
输出节点 |
一句话 |
ChatLLM |
对话生成 |
默认是(output 可关) |
组装消息调模型,流式生成 reply |
Answer |
指定回复 |
是 |
输出固定文本 / 引用 / {{key}} 变量,收口最终回答 |
IfElse |
条件判断 |
否 |
condition 产 branch 做条件路由,可当纯计算节点 |
QuestionClassify |
模型分类 |
否 |
把问题归到预定义类别,产稳定 branch |
HttpRequest |
HTTP 调用 |
否 |
GET/POST 等,输出 status_code/text/json |
KnowledgeBaseSearch |
知识库检索 |
否 |
检索当前问题,输出 results/text/has_results |
UserSelect |
交互选择 |
否 |
暂停让用户选一项(需 checkpointer) |
UserInput |
交互输入 |
否 |
暂停让用户输入一段(需 checkpointer) |
VariableUpdate |
写内部变量 |
否 |
记 ctx.variables,不回传 |
VariableOutput |
回传变量 |
否 |
显式声明回传前端的变量键 |
1. ChatLLM
组装 system + history + context + 当前问题 调模型,流式输出。
| 构造参数 |
说明 |
chat_model |
LLM 客户端(LLMClient 或任意可调用对象,测试注入 mock;必填) |
system |
系统提示(可选) |
output |
是否输出节点,默认 True;设 False 由 Answer 收口 |
| 输入 |
类型 |
必填 |
user_input |
str |
否(缺省取历史最后一条 user 消息) |
history |
chatHistory |
否 |
context |
str |
否(参考上下文,注入 user 前,如知识库文本) |
wf.add_node(
ChatLLM(
name="llm",
chat_model=model,
system="你是客服",
user_input=wf.ref("input"),
context=wf.ref("kb.text"),
output=False,
)
)
2. Answer
输出最终回复(统一转 str,支持 {{key}} 变量渲染)。is_output=True。
wf.add_node(Answer(name="ans", text="正在为您转接…")) # 固定文本
wf.add_node(Answer(name="ans", text=wf.ref("llm.reply"))) # 引用节点输出
wf.add_node(Answer(name="ans", text="你好{{user_name}}")) # 变量占位符
3. IfElse
condition 产出路由键 branch,配合条件边路由;也常当纯计算节点(branch 被下游当数据引用)。
| 输入 |
类型 |
必填 |
condition |
any(常量或 (inputs,ctx)->分支值) |
否 |
left |
any |
否(待判断值,供 condition 读取) |
| 输出 |
类型 |
branch |
any(bool 二分支或任意可哈希值多分支) |
wf.add_node(
IfElse(
name="judge", left=wf.ref("llm.reply"), condition=lambda i, ctx: "转人工" in str(i["left"])
)
)
wf.add_conditional_edge("judge", {True: "handoff", False: "auto"})
condition 三种形态:可调用 (inputs,ctx)(可读 ctx.variables)/ 常量 / 缺失(抛 ValueError)。
4. QuestionClassify
让模型把问题归到预定义类别;未命中归 "其他"。确定性匹配保证 branch 稳定对应条件边。
| 构造参数 |
说明 |
chat_model |
LLM 客户端(必填) |
categories |
类别 [{name, description?}, ...](必填) |
description |
分类提示说明,默认「判断用户的意图」 |
query |
待分类问题(一般 wf.ref) |
| 输入 |
类型 |
必填 |
query |
str |
是 |
history |
chatHistory |
否 |
| 输出 |
类型 |
branch / category |
str(命中类别名) |
confidence |
float(占位 1.0) |
wf.add_node(
QuestionClassify(
name="cls",
chat_model=model,
categories=[{"name": "退款"}, {"name": "物流"}],
query=wf.ref("input"),
)
)
wf.add_conditional_edge("cls", {"退款": "refund", "物流": "logistics", "其他": "default"})
5. HttpRequest
调第三方接口。headers/body 支持输入与参数互备;body dict/list 自动 JSON,str 原样。可注入 client=httpx.Client。
| 输入 |
类型 |
必填 |
url |
str |
是 |
method |
str |
否(默认 GET) |
headers |
dict |
否 |
body |
any |
否 |
| 输出 |
类型 |
status_code |
int |
text |
str |
json |
dict(解析失败 None) |
wf.add_node(HttpRequest(name="api", url="https://httpbin.org/get", method="GET"))
wf.add_node(Answer(name="ans", text=wf.ref("api.text")))
6. KnowledgeBaseSearch
检索当前问题(query 缺省取最近 user 消息),输出拼接检索文本供 LLM 上下文。
| 构造参数 |
说明 |
retriever |
检索器(见专题 RAG,必填) |
| 输入 |
类型 |
必填 |
query |
str |
否(缺省取最近 user 消息) |
| 输出 |
类型 |
results |
list([{source, chunk_index, text, score}]) |
text |
str([来源-块#n] 内容,块间空行) |
has_results |
bool |
wf.add_node(KnowledgeBaseSearch(name="kb", retriever=retriever))
wf.add_node(ChatLLM(name="llm", chat_model=model, context=wf.ref("kb.text"), output=False))
暂停发 interactive 载荷,用户答复后恢复。必须 wf.compile(store=...) 才能跨请求恢复(见指南 04)。
UserSelect
| 输入 |
类型 |
必填 |
description |
str |
是(给用户的问题) |
options |
list([{key, value}, ...]) |
是 |
| 输出 |
类型 |
selected |
any(用户选中的 value) |
wf.add_node(
UserSelect(
name="choose",
description="请选择业务类型",
options=[{"key": "a", "value": "贷款"}, {"key": "b", "value": "还款"}],
)
)
| 输入 |
类型 |
必填 |
description |
str |
是 |
wf.add_node(UserInput(name="ask", description="请输入您的手机号"))
8. VariableUpdate(写内部变量)
写 ctx.variables[key]=value,不回传前端。
| 输入 |
类型 |
必填 |
key |
str |
是 |
value |
any |
是(支持 wf.ref) |
wf.add_node(VariableUpdate(name="set_name", key="user_name", value=wf.ref("llm.reply")))
9. VariableOutput(显式回传变量)
variables 的 value:显式值 / None(从内部变量取)/ wf.ref。回传的键才进 updateVariables。
| 输入 |
类型 |
必填 |
variables |
dict({key: value}) |
是 |
wf.add_node(VariableOutput(name="out", variables={"session_id": "s-123"})) # 显式
wf.add_node(VariableOutput(name="out", variables={"currentStage": None})) # 取内部
wf.add_node(VariableOutput(name="out", variables={"name": wf.ref("llm.reply")})) # 引用
附:工作流构建 API 速查
| 方法 |
作用 |
Workflow(name) |
建图 |
add_node(node) |
加节点(实例名唯一) |
add_edge(src, dst) |
普通边(dst 可用 "__end__") |
add_conditional_edge(src, mapping) |
条件边(mapping = {分支值: 目标}) |
wf.ref(expr) |
引用 "input" 或 "节点.输出键" |
wf.compile(store=None) |
编译为原生 LangGraph 图 |
下一步
- 每个节点的详细用法与完整配图 → 见各指南
- 想加自己的节点 → 指南 07