3. 使用LangChain构建多步骤推理链

使用LangChain构建多步骤推理链 学习卡片

任务目标

使用 LangChain 构建一个多步骤推理链,使模型能够针对需要多个逻辑步骤的问题(例如数学应用题、多条件判断)依次执行推理,并输出中间步骤与最终答案。

环境依赖

需要安装 langchain、langchain-,并配置 兼容的 (可通过环境变量 _ 或代码中直接指定)。

pip install langchain langchain-

核心实现

使用 LangChain 的 LLMChain 与 SimpleSequentialChain 串联两个步骤:第一步将问题拆解为子问题,第二步依次求解并汇总。通过 verbose=True 可观察中间推理过程。

from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.prompts import PromptTemplate
from langchain_ import ChatOpenAI

# 初始化模型(需设置 _ 环境变量)
llm = ChatOpenAI(model="-mini", temperature=0)

# 第一步:将复杂问题拆解为可执行的子问题
step1_prompt = PromptTemplate(
    input_variables=["question"],
    template="""请将以下问题拆解为2~3个按顺序执行的子问题,每个子问题必须能独立求解。
问题:{question}

输出格式(每行一个子问题):
1. ...
2. ...
3. ...""",
)
step1_chain = LLMChain(llm=llm, prompt=step1_prompt, output_key="sub_questions")

# 第二步:根据子问题逐步求解并给出最终答案
step2_prompt = PromptTemplate(
    input_variables=["sub_questions"],
    template="""请依次回答以下子问题,并给出最终答案。
子问题列表:
{sub_questions}

要求:
- 先逐步回答每个子问题;
- 最后一行以"最终答案:"开头给出结论。""",
)
step2_chain = LLMChain(llm=llm, prompt=step2_prompt, output_key="answer")

# 串联为多步骤推理链
overall_chain = SimpleSequentialChain(
    chains=[step1_chain, step2_chain],
    verbose=True,
)

# 执行推理
question = "一个农场有鸡和兔子共35只,脚共94只,问鸡和兔子各有多少只?"
result = overall_chain.invoke(question)
print(result["output"])

运行与验证

直接运行上述脚本。当 verbose=True 时,控制台会依次打印两个步骤的输入与输出,可据此确认推理链确实分步执行。

通过条件:最终输出包含逐步推理过程,且最后一行以“最终答案:”开头,给出鸡23只、兔12只的正确结论。若模型输出格式不符或答案错误,可调整提示词中的格式要求后重试。

常见问题

  • 未设置:运行前执行 export _="your-key",或在代码中通过 ChatOpenAI(_="...") 指定。
  • 输出不稳定:将 temperature 设为 0 可降低随机性;若仍不稳定,可在提示词中增加“请用算术方程求解”等约束。