游乐游手机版
首页/AI热点日报/热点详情

天学会AI应用开发:LangChain封装AI执行链

类型:热点整理2026-07-19
在前一篇文章中,我们已初步体验了LangChain的基础调用方法。然而,LangChain的真正价值远不止于此——它能够将多个AI组件封装为可执行的链式任务,实现复杂流程的自动化编排。就像把一个个独立零件组装成高效流水线,让大模型依次完成每一步操作,无需人工干预。 一、构造大模型实例 在开始之前,先

在前一篇文章中,我们已初步体验了LangChain的基础调用方法。然而,LangChain的真正价值远不止于此——它能够将多个AI组件封装为可执行的链式任务,实现复杂流程的自动化编排。就像把一个个独立零件组装成高效流水线,让大模型依次完成每一步操作,无需人工干预。

15天学会AI应用开发(十五)使用LangChain封装AI执行链

一、构造大模型实例

在开始之前,先导入所需的工具模块。这里需要引入LangChain的OllamaLLM模块,从而与本地运行的Ollama大模型建立连接:

from langchain_ollama import OllamaLLM

接下来,创建一个OllamaLLM实例。其中model参数是必填项,用于指定要加载的大模型名称,例如:

# 连接本地离线大模型(Ollama)
llm = OllamaLLM(model="qwen2:1.5b")

model外,OllamaLLM还提供了多个可选参数,方便开发者根据实际应用场景灵活调整模型行为。以下是几个核心参数的详细说明:

  • model:模型名称,例如"qwen:7b"、"llama3"、"deepseek-r1"等。
  • base_url:服务地址,默认本地地址为"http://localhost:11434"。
  • temperature:模型温度,即随机性。取值范围0~1,默认0.8。值越低,回答越严谨、确定;值越高,回答越具创意和跳跃性。
  • num_ctx:上下文Token的最大数量,默认2048。值越大,模型能记住的对话内容越长。
  • num_predict:回答内容Token的最大数量,默认128。设置为-1表示不限制输出长度,-2表示填满整个上下文。
  • keep_alive:模型在内存中常驻的时长,频繁调用时建议开启。默认"5m"表示5分钟,"-1"表示永久常驻,"0"表示用完即关。
  • validate_model_on_init:初始化时是否校验模型是否存在,默认True表示启动时检查。

举例来说,以下代码创建了一个定制了多个参数的大模型实例:

llm = OllamaLLM(
    model="qwen2:1.5b",
    base_url="http://localhost:11434",
    temperature=0.7,
    num_ctx=4096,
    num_predict=1024,
    keep_alive="-1",
    validate_model_on_init=True
)

二、构建提示词模板

导入PromptTemplate模块,这是构建提示词模板的核心工具:

from langchain_core.prompts import PromptTemplate

PromptTemplate的from_template方法接受一个字符串作为模板。字符串开头是提示词内容,末尾用{input}占位,表示用户输入的问题将在此处插入。

例如,以下代码构建了一个简单的提示词模板:

prompt = PromptTemplate.from_template("""
    你是专业助手,请简洁回答:
    {input}
""")

提示词的第一句“你是专业助手,请简洁回答”为模型划定了回答风格——简明扼要,避免冗长。后面的{input}是占位符,实际调用时会将用户输入的问题替换进去。

三、组装 AI 执行链

为什么LangChain要引入“执行链”这一概念?这需要从传统调用方式说起。按照程序设计顺序控制流程,每次接口调用都需要经历三步:封装请求内容→执行接口调用→解析应答内容,写成代码大致如下:

# 无链 → 手写每一步,巨繁琐!
prompt_text = prompt.format(input="你的问题")    # 1 手动拼模板
response = llm.invoke(prompt_text)               # 2 手动调模型
result = parser.parse(response)                  # 3 手动解析

可以看到,虽然上一行代码的输出就是下一行代码的输入,但每次都需要拆成三个语句依次调用,非常繁琐。

LangChain的执行链正是为解决这一痛点而设计。它将“构建提示词、调用模型、记忆(可选)、检索(可选)、解析应答”等操作,按顺序串联成一条自动流水线。只需一次性启动组装好的执行链,LangChain就会自动完成全流程,无需再写多条语句。

组装执行链之前,先导入所需的工具包:

from langchain_core.runnables import RunnableSequence
from langchain_core.output_parsers import StrOutputParser

然后,用RunnableSequence将三个操作串联起来:

chain = RunnableSequence(
    prompt
    | llm
    | StrOutputParser()
)

实际上,RunnableSequence这个类名完全可以省略,直接用管道操作符|连接各环节,代码更简洁:

chain = (
    prompt
    | llm
    | StrOutputParser()
)

甚至还能进一步简化,去掉外围的圆括号,变成一行代码:

chain = prompt | llm | StrOutputParser()

这样一来,组装过程中所有方法调用和参数传递都消失了,只剩下各环节的实例名称,代码量大幅减少,可读性也显著提升。

四、通过执行链调用离线大模型

现在,将前面三步串联起来,实现一个完整的AI对话功能。

首先,在命令行执行下面的pip安装命令,确保所有依赖包都已安装:

pip install langchain langchain-core langchain-ollama

接着,启动Ollama并加载离线大模型:

ollama serve

然后,编写下面的Python聊天测试代码,让用户在控制台输入问题,实现实时交互:

from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import OllamaLLM

def main():
    # 1. 连接本地Ollama离线模型,替换成你本地模型名
    llm = OllamaLLM(
        model="qwen2:1.5b",
        base_url="http://127.0.0.1:11434",
        temperature=0.7  # 随机性 0严谨~1创意
    )

    # 2. 构建对话模板
    prompt = PromptTemplate.from_template("""
        你是专业助手,请简洁回答:
        {input}
    """)

    # 3. 组装执行链
    chain = prompt | llm | StrOutputParser()

    # 4. 循环问答聊天
    print("===== 离线AI聊天助手(输入exit退出)=====")
    while True:
        user_text = input("请输入问题:")
        if user_text.lower() in ["exit", "quit", "退出"]:
            print("对话结束")
            break
        print("AI思考中...")
        response = chain.invoke(user_text)
        print(f"AI回复:{response}n")

if __name__ == "__main__":
    main()

运行这段代码,根据提示输入问题“LangChain是什么?”,输出结果如下:

===== 离线AI聊天助手(输入exit退出)=====
请输入问题:LangChain是什么?
AI思考中...
AI回复:Langchain 是一个基于 PyTorch 的开源语言模型推理框架,用于构建和训练大型的预训练模型。它提供了一个简单的 API 来处理输入数据,然后返回文本或代码作为输出。

通过调用LangChain的执行链,一个简单的AI对话功能已经跑通。接下来,我们还将继续探索如何给AI对话添加记忆功能,让模型能够记住上下文,实现更自然、连贯的连续对话。

来源:https://developer.volcengine.com/articles/7663933878565863433

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。