LangChain 中会经常遇到 .run() 和 .invoke(),理解它们的区别和联系能更灵活地控制链的执行方式

✅区别:

.run() 是早期 LangChain 中用于简单链(如 LLMChain)的快捷方法,只接受一个输入字段的字典或值
.invoke() 是新框架下通用的执行方法,能处理多个输入、支持组合链(Runnable)执行


🧠 核心区别表格对比

项目.run().invoke()
使用场景传统 LLMChain 等老 API推荐的新式 Runnable 接口
输入格式字典(要求只有一个字段)或单个值字典(可以多个字段),支持复杂结构
能否传多个输入❌ 不行(除非 prompt 只用一个字段)✅ 可以传多个 key,比如 question + schema
错误提示错误信息可能较模糊更清晰、规范
推荐程度✅ 适合快速使用✅✅ 推荐用于任何复杂链或结构化 prompt 的场景

✅ 用数值 + 代码例子对比

我们以一个生成 Cypher 查询的场景为例:


🧪 示例 1:简单的 LLMChain(只需要一个输入)

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI

prompt = PromptTemplate.from_template("用 Cypher 查询图数据库中:{question}")
llm_chain = LLMChain(llm=ChatOpenAI(), prompt=prompt)

# ✅ run() 简洁明了
result = llm_chain.run("查询所有患者的名字")
print(result)

# 等价的写法(invoke)
result2 = llm_chain.invoke({"question": "查询所有患者的名字"})
print(result2)

输出示例:

MATCH (p:Patient) RETURN p.name

🧪 示例 2:复杂 chain,有多个输入字段(question + schema)

from operator import itemgetter
from langchain_core.runnables import RunnableLambda

# prompt 需要两个字段
prompt = PromptTemplate.from_template("""
根据 schema:{schema}
和问题:{question}
生成一个 Cypher 查询。
""")

# 使用 Runnable chain
chain = (
    {
        "schema": itemgetter("schema"),
        "question": itemgetter("question"),
    }
    | prompt
    | ChatOpenAI()
)

# ✅ invoke 可以传多个字段
result = chain.invoke({
    "schema": "(:Patient)-[:HAS_DISEASE]->(:Disease)",
    "question": "查询患有高血压的病人"
})
print(result)

# ❌ run 不支持,因为输入字段不是一个
# chain.run(...) 会报错

✅ 总结重点

.run() 适合.invoke() 适合
简单 LLMChain多输入、多步骤组合链
快速实验更复杂的工程结构
老版本接口LangGraph、Runnable 新框架

✅ 建议你记住的规则:

如果你用的是简单的 LLMChain,只有一个输入字段,可以用 .run()
只要有多个字段、组合结构、嵌套 prompt,一定要用 .invoke(),更稳更灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值