
上一篇文章末尾给出了LangChain的简单调用例子,当然LangChain还支持更丰富的功能设置,接下来就介绍如何使用LangChain封装AI执行链,以实现更复杂的功能调用。
一、构造大模型实例
在构造大模型实例之前,要先添加下面的导包语句,表示引入LangChain的大模型工具OllamaLLM:
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表示填满上下文(跟上下文的Token数一致)。
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
)二、构建提示词模板
在构建提示词模板之前,要先添加下面的导包语句,表示引入LangChain的提示模板工具PromptTemplate:
from langchain_core.prompts import PromptTemplatePromptTemplate的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就自动跑完全流程,无需拆成多条语句来调用。
在组装执行链之前,要先添加下面的导包语句,表示引入LangChain的执行链工具RunnableSequence,以及默认的应答内容解析器StrOutputParser:
from langchain_core.runnables import RunnableSequence
from langchain_core.output_parsers import StrOutputParser然后编写下面代码串起“构建提示词、调用模型、解析应答”这三个操作:
chain = RunnableSequence(
prompt
| llm
| StrOutputParser()
)为了方便起见,可省略掉构造方法的工具名称RunnableSequence,简化代码如下:
chain = (
prompt
| llm
| StrOutputParser()
)还能进一步省略掉外围的圆括号,变成如下的一行代码:
chain = prompt | llm | StrOutputParser()这下清爽多了,完全去掉了组装过程中的各种方法调用及其输入输出参数,只留下各环节用到的实例名称,极大地简化了代码篇幅。
四、通过执行链调用离线大模型
接下来结合构造大模型实例、构建提示词模板、组装 AI 执行链等三个步骤,通过执行链调用实现离线大模型的快速问答功能。
在编写Python代码前,要先在命令行执行下面的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()运行上面的Python代码,根据提示输入问题内容“LangChain是什么?”,输出日志结果如下:
===== 离线AI聊天助手(输入exit退出)=====
请输入问题:LangChain是什么?
AI思考中...
AI回复:Langchain 是一个基于 PyTorch 的开源语言模型推理框架,用于构建和训练大型的预训练模型。它提供了一个简单的 API 来处理输入数据,然后返回文本或代码作为输出。由日志信息发现,通过调用LangChain的执行链,初步实现了简单的AI对话功能,下一篇文章将介绍如何给AI对话添加记忆功能。
本系列的AI应用开发文章目录为《15天学会AI应用开发全目录(零基础小白,零Token消耗)》。