大模型|大模型中的Langchain实战上篇
2026/6/1 0:03:58 网站建设 项目流程

🌞欢迎来到人工智能的世界
🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

📆首发时间:🌹2026年5月30日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

认识 LangChain 和模型调用

LangChain基础认识

模型调用

提示词模板 PromptTemplate

聊天模板和 Few-shot 示例

聊天提示模板

Few-shot 少量样本示例的提示模板

输出解析器 OutputParser

StrOutputParser()

JsonOutputParser()

Chain 和 LCEL 表达式

未使用链

使用 Chain

使用表达式语言(LCEL)

​编辑

Chain 的几种调用方式

认识 LangChain 和模型调用

LangChain基础认识

LangChain 是一个大模型应用开发框架,它把 “读取文件、检索知识、管理对话、调用工具” 这些

重复工作全部封装好,让你不用写大量底层代码,就能快速做出像 “私有知识库问答”“智能对话机

器人” 这样的实用大模型应用。

模型调用
from dotenv import load_dotenv load_dotenv() import os from langchain_openai import ChatOpenAI llm = ChatOpenAI( api_key= "你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) response = llm.invoke("什么是大模型?要简洁的回答") #print(response) print(response.content)

多轮对话

from langchain_core.messages import AIMessage, HumanMessage, SystemMessage messages = [ SystemMessage(content="你是于老师的个人助理。你叫小沐"), HumanMessage(content="我叫同学小张"), HumanMessage(content="你是谁?") ] response = llm.invoke(messages) print(response.content)


提示词模板 PromptTemplate

第一部分我们学习会了直接向模型提问和用角色消息提问。下一步要学的是:不要每次手写完整提

示词,而是把提示词做成模板。

比如你以前可能这样写:

response = llm.invoke("请用简单的话解释 LangChain 是什么")

但如果问题经常变,就可以写成模板:

from langchain_core.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_messages([ ("system", "你是一位擅长通俗解释技术概念的老师"), ("user", "请用简单的话解释:{topic}") ])

然后调用时只传变量:

messages = prompt.format_messages(topic="LangChain") response = llm.invoke(messages) print(response.content)

以后你想解释别的内容,只改变量:

messages = prompt.format_messages(topic="RAG")

完整的代码

from dotenv import load_dotenv load_dotenv() import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate llm = ChatOpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) prompt = ChatPromptTemplate.from_messages([ ("system", "你是一位擅长通俗解释技术概念的老师"), ("user", "请用三句话解释:{topic}") ]) messages = prompt.format_messages(topic="LangChain") response = llm.invoke(messages) print(response.content)


聊天模板和 Few-shot 示例

聊天提示模板

核心就一句:

from dotenv import load_dotenv import os from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI # 加载 .env 文件中的环境变量 load_dotenv() # system 消息:设定模型身份 template = "你是一个数学家,你可以计算任何算式" # human 消息:用户真正输入的问题 human_template = "{text}" # 创建聊天提示模板 chat_prompt = ChatPromptTemplate.from_messages([ ("system", template), ("human", human_template), ]) # 创建模型实例 model = ChatOpenAI( api_key= "你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 把变量 text 填充进 human_template messages = chat_prompt.format_messages( text="我今年18岁,我的舅舅今年38岁,我的爷爷今年72岁,我和舅舅一共多少岁了?" ) # 查看最终生成的消息结构 print(messages) # 调用模型 output = model.invoke(messages) # 打印模型回答 print(output.content)

Few-shot 少量样本示例的提示模板
from dotenv import load_dotenv import os from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate from langchain_openai import ChatOpenAI load_dotenv() # 1. 准备少量示例 examples = [ { "input": "2+2", "output": "4", "description": "加法运算" }, ] # 2. 定义每个示例的格式 example_prompt = PromptTemplate.from_template( "算式:{input}\n结果:{output}\n类型:{description}\n" ) # 3. 创建 Few-shot 提示模板 prompt = FewShotPromptTemplate( examples=examples, example_prompt=example_prompt, prefix="你是一个数学题分类器。请根据示例,判断算式的计算结果和运算类型。", suffix="算式:{input}\n结果:", input_variables=["input"] ) # 4. 创建模型 model = ChatOpenAI( api_key="你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 5. 格式化提示词 final_prompt = prompt.format(input="10-3") print("最终提示词:") print(final_prompt) # 6. 调用模型 result = model.invoke(final_prompt) print(result.content)


输出解析器 OutputParser

目标:让模型输出变成程序更容易处理的格式。

StrOutputParser()
from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 1. 加载 .env 文件里的 API Key load_dotenv() # 2. 创建模型 model = ChatOpenAI( api_key="你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 3. 创建聊天提示模板 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一位非常会讲课的 Python 老师。"), ("user", "请用通俗的话解释:{question}") ]) # 4. 创建输出解析器 # 作用:把模型返回的 AIMessage 转成普通字符串 output_parser = StrOutputParser() # 5. 组成一条链 chain = prompt | model | output_parser # 6. 调用链 result = chain.invoke({ "question": "什么是 LangChain 的输出解析器?" }) # 7. 打印结果 print(result)

JsonOutputParser()
from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import JsonOutputParser # 1. 加载 .env 文件 load_dotenv() # 2. 创建模型 model = ChatOpenAI( api_key="你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 3. 创建提示词模板 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个严谨的问答助手。你必须只输出 JSON,不要输出其它文字。"), ("user", """ 请回答这个问题:{question} 输出格式必须是: {{ "question": "用户的问题", "answer": "你的回答" }} """) ]) # 4. 创建 JSON 输出解析器 output_parser = JsonOutputParser() # 5. 组成链 chain = prompt | model | output_parser # 6. 调用链 result = chain.invoke({ "question": "LangChain 是什么?" }) # 7. 打印结果 print(result) print(type(result)) print(result["question"]) print(result["answer"])


PromptTemplate 是为了复用提示词 ChatPromptTemplate 是为了区分角色 Few-shot 是为了教模型模仿例子 OutputParser 是为了让程序能处理模型结果 LCEL Chain 是为了把它们串起来

Chain 和 LCEL 表达式

未使用链
from dotenv import load_dotenv import os from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI load_dotenv() # 1. 准备一个提示词模板 template = "桌上有{number}个苹果,四个桃子和 3 本书,一共有几个水果?" # 2. 把普通字符串变成 LangChain 的 PromptTemplate prompt_template = PromptTemplate.from_template(template) # 3. 给模板里的变量 number 填值 prompt = prompt_template.format(number=2) print("生成后的提示词:") print(prompt) # 4. 创建模型 model = ChatOpenAI( api_key="你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 5. 手动把 prompt 传给模型 result = model.invoke(prompt) # 6. 打印模型回答 print("模型回答:") print(result.content)

使用 Chain
from dotenv import load_dotenv import os from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI load_dotenv() # 1. 创建提示词模板 prompt = PromptTemplate.from_template( "桌上有{apple_count}个苹果,{peach_count}个桃子,一共有几个水果?" ) # 2. 创建模型 model = ChatOpenAI( api_key="你的api", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 3. 把提示词模板和模型组成一条链 chain = prompt | model # 4. 调用链 result = chain.invoke({ "apple_count": 2, "peach_count": 4 }) # 5. 打印结果 print(result.content)

使用表达式语言(LCEL)
from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser load_dotenv() # 1. 创建提示词模板 prompt = PromptTemplate.from_template( "请围绕主题《{topic}》生成 5 个中文标题。" ) # 2. 创建模型 model = ChatOpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 3. 创建输出解析器 output_parser = StrOutputParser() # 4. 使用 LCEL 组成链 chain = prompt | model | output_parser # 5. 调用链 result = chain.invoke({ "topic": "人工智能如何改变学习方式" }) # 6. 打印结果 print(result)

Chain 的几种调用方式
invoke(): 一次问一个问题,返回一个结果。 batch(): 一次问多个问题,返回多个结果。 stream(): 模型边生成边返回,适合做聊天页面的打字效果。
from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser load_dotenv() # 1. 创建提示词模板 prompt = PromptTemplate.from_template( "请用一句话解释:{topic}" ) # 2. 创建模型 model = ChatOpenAI( api_key="", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen3-vl-flash" ) # 3. 创建输出解析器 output_parser = StrOutputParser() # 4. 创建 Chain chain = prompt | model | output_parser # ========================= # 第一种:invoke() 调用一次 # ========================= result = chain.invoke({ "topic": "LangChain" }) print("invoke 调用结果:") print(result) # ========================= # 第二种:batch() 批量调用 # ========================= results = chain.batch([ {"topic": "PromptTemplate"}, {"topic": "OutputParser"}, {"topic": "LCEL"} ]) print("\nbatch 批量调用结果:") for item in results: print(item) # ========================= # 第三种:stream() 流式输出 # ========================= print("\nstream 流式输出结果:") for chunk in chain.stream({ "topic": "RAG" }): print(chunk, end="")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询