LangChain 入门实战:从模型调用到提示词模板
·
LangChain 入门实战:从模型调用到提示词模板
LangChain是什么?
LangChain 是一个用于开发基于大语言模型(LLM)应用程序的框架。它的核心思想是提供一套标准化的接口和组件,让开发者能够更方便地连接和组合各种大模型、工具和数据源,从而快速构建复杂的 AI 应用(如 Agent、对话机器人、RAG 系统等)。
简单来说,LangChain 就像一个 “AI 应用的 USB 集线器”:
- 它定义了统一的接口,让不同厂商的大模型(如 OpenAI、通义千问、DeepSeek 等)都能以相同的方式被调用
- 它将各种组件(模型调用、提示词模板、记忆管理、工具调用等)链接在一起,降低开发复杂度
- 开发者可以专注于业务逻辑,而不需要关心不同模型 API 的细节差异

LangChain 与 LangGraph 的关系
LangChain 是学习 AI-Agent 开发框架的基础版本,适合入门和快速原型开发。其生产版本为 LangGraph,提供了更细致的 Agent 控制流程和状态管理。建议先掌握 LangChain 的基本用法,再深入学习 LangGraph。
安装模块
pip install langchain langchain-community langchain-deepseek
一、模型调用接口 💻 ☁️
在调用模型前需要将各自模型服务商的API Key存入环境变量,具体变量名可以查看每个模型类的函数文档。
- 找到API Key变量名后在PYCharm项目运行设置中添加对应环境变量,模型类一般会自动查找环境变量读取自己家的 API key变量名

- 模型API网关一般也内置在模型类中,不需要手动填写base url参数

Jupyter Notebook项目中:


常规Python项目中:


# 目前 LangChain 支持三种模型调用
LangChain 主要支持以下三种类型的模型调用:
1. 大模型调用(LLM)
传统的大语言模型接口,主要用于文本续写任务。
使用方法
使用 langchain_community.llms 模块下的各类大模型接入类:
# 导入通义千问大模型
from langchain_community.llms.tongyi import Tongyi
# 选择大模型版本创建模型对象
tongyi_model = Tongyi(model="qwen-max")
# 调用模型
response = tongyi_model.invoke("你好,告诉我你是谁?")
print(response)
2. 对话模型调用(ChatModel)
支持多轮对话、角色区分(System/Human/AI)的现代对话接口。
import os
from IPython.display import display, Markdown
from langchain_community.chat_models.tongyi import ChatTongyi
# 创建对话模型对象
tongyi_chat_model = ChatTongyi(model="qwen3-max")
# 调用对话模型(支持消息列表)
response = tongyi_chat_model.invoke([
("system", "你是一名翻译官,精通中英互译..."),
("human", "peter out是什么意思?")
])
print(response)
display(Markdown(response.content))
3. 文本嵌入模型调用(Embeddings)
用于将文本转换为向量表示,常用于 RAG、语义搜索等场景。
from langchain_community.embeddings import DashScopeEmbeddings
# 创建文本嵌入模型对象
dashscope_embedding = DashScopeEmbeddings()
# 单文本向量化
text_vector = dashscope_embedding.embed_query("测试文本")
print(f"向量维度:{len(text_vector)}")
# 多文本向量化
texts = ["文本1", "文本2", "文本3"]
vectors = dashscope_embedding.embed_documents(texts)
print(f"向量数量:{len(vectors)}")
大模型和对话模型的区别
大模型(LLM)
传统文本续写模型,主要用于单轮文本生成任务。
特点:
- 接口输入:纯文本字符串
- 接口输出:纯文本字符串
- 会话角色:没有 System/Human/AI 消息角色概念,只做文本续写
- 适用场景:简单的文本生成、补全、翻译等单轮任务
对话模型(ChatModel)
现代对话接口,支持多轮对话、角色区分和多模态。
特点:
- 接口输入:消息对象列表
[SystemMessage, HumanMessage, AIMessage, ...] - 接口输出:消息对象(通常是 AIMessage)
- 会话角色:明确区分 System/Human/AI 角色,支持多轮对话上下文
- 适用场景:对话机器人、AI Agent、RAG 系统等需要上下文管理的应用
为什么 ChatModel 更适合现代 AI 应用?
LLM 链路需要手动拼接消息为长文本,容易丢失角色信息和上下文。ChatModel 天然支持消息列表,能更好地管理:
- 对话历史:自动维护多轮对话上下文
- 角色设定:通过 SystemMessage 设定 AI 角色和指令
- 记忆管理:方便集成记忆组件
- 工具调用:支持 Function Calling 等高级功能
因此,ChatModel 更适用于 Agent、对话机器人、RAG 等复杂工程场景。
from langchain_core.embeddings import Embeddings
# 导入阿里千问的嵌入模型调用对象
from langchain_community.embeddings import DashScopeEmbeddings
# 导入百度千帆的嵌入模型调用对象
from langchain_community.embeddings import QianfanEmbeddingsEndpoint
# 导入百川智能的百川嵌入模型调用对象
from langchain_community.embeddings import BaichuanTextEmbeddings
# 创建一个文本嵌入模型对象,默认使用的是text-embedding-v1嵌入模型将文本转为向量
dashscope_embedding = DashScopeEmbeddings()
#没有下面两个服务商的token plan 注释掉避免API key为空报错
# qianfan_embedding = QianfanEmbeddingsEndpoint()
# baichuan_embedding = BaichuanTextEmbeddings()
prompt = "测试文本向量化的一段提示词"
prompt_list = [
"提示词1",
"提示词2",
"提示词3"
]
def Text_Vectorize(prompt:str, prompt_list:list, model_brand:str, model:Embeddings):
# 单字符串向量化
text_vector = model.embed_query(prompt)
print(f"{model_brand}嵌入模型会将任何长度的一段文本向量化为一个:{len(text_vector)} 维数组")
print("[",text_vector[:9],"………… ]")
# 字符串列表向量化 embed_documents方法可以一次向量化多个文本
text_vector_list = model.embed_documents(prompt_list)
print(f"字符串列表向量化时,返回的数组外层包含 {len(text_vector_list)} 个字符串的向量列表")
num=1
for i in text_vector_list:
print(f"第{num}个字符串的是{len(i)}维数组")
num+=1
Text_Vectorize(prompt, prompt_list, "DashScope", dashscope_embedding)
# Text_Vectorize(prompt, prompt_list, "Qianfan", qianfan_embedding)
# Text_Vectorize(prompt, prompt_list, "Baichuan", baichuan_embedding)
DashScope嵌入模型会将任何长度的一段文本向量化为一个:1536 维数组
[ [-2.2869248390197754, 5.077755928039551, -2.937793016433716, 1.8150824308395386, 6.147032260894775, -4.180476665496826, -5.197314262390137, -1.9464890956878662, -2.2935221195220947] ………… ]
字符串列表向量化时,返回的数组外层包含 3 个字符串的向量列表
第1个字符串的是1536维数组
第2个字符串的是1536维数组
第3个字符串的是1536维数组
创建提示词模板需要引入 PromptTemplate 类接口:
- 传统 LLM 接口:使用
langchain_core.prompts中的PromptTemplate类 - 对话模型接口:使用
langchain_core.prompts中的ChatPromptTemplate类
提示词模板的主要作用是:
- 标准化输入格式:统一提示词结构
- 变量替换:动态注入上下文信息
- 复用性:一次定义,多次使用
- 可组合性:多个模板可以组合使用
mptTemplate`
1.零样本提示词模板调用
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
# 创建一个模型对象用于调用云端模型
tongyi_model = Tongyi(model="qwen-max")
########
# 模型直接调用注入好的提示词模板
########
# 从一段模板文本中提取提示词模板,作为一个PromptTemplate对象使用它,可以通过format注入变量值
prompt_template = PromptTemplate.from_template("你好,我是{name},你是谁啊?")
# 为提示词模板对象中的占位符变量名
prompt = prompt_template.format(name="帅炸过一条街的男人")
# 将提示词交给模型,发起问询
print(tongyi_model.invoke(prompt)+'\n'+"#"*100)
########
# 通过链式调用提示词模板
#######
# 使用Runnable对象自带的魔法函数管道符号,将模板作为模型的输入内容,创建一个链
chain = prompt_template | tongyi_model
# 为模板中的变量名赋值,这里需要注意链式调用invoke中要传递input参数,键值对用字典传入input
print(chain.invoke(input={"name":"帅炸过一条街的男人"}))
你好!我是来自阿里云的大规模语言模型,我叫通义千问。你的名字真有趣,很高兴认识你!
####################################################################################################
你好!我是来自阿里云的大规模语言模型,我叫通义千问。你这个介绍真是非常有个性啊,听起来就让人印象深刻。作为你的助手,我的目标是帮助你解答问题、提供信息和支持。有什么我可以帮到你的吗?
2. 少量样本提示词模板调用
from langchain_community.llms.tongyi import Tongyi
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
# 创建用于云端模型调用的模型对象
tongyi_model = Tongyi(
model="qwen-max"
)
# 从模板字符串中提取样本消息内容的提示词模板
example_prompt_template = PromptTemplate.from_template('单词:{word}\t词性:{word_class}\t中文:{chinese}')
# 这是示例消息样本的字典列表
examples = [
{"word": "capable" , "word_class":"adj" , "chinese":"有能力的,能胜任的"},
{"word": "hamburger" , "word_class":"n" , "chinese":"汉堡"},
{"word": "peter out" , "word_class":"phrase" , "chinese":"逐渐停止,慢慢消失"},
]
# 将示例字典融合进提示词模板
prompt = FewShotPromptTemplate(
# 示例内容部分的模板
example_prompt= example_prompt_template,
# 示例的内容列表,注意键名是否与模板中变量名一致
examples = examples,
# 这里是前缀于 注入好值的示例内容文本之前的提示词文本
prefix = "你是一名英文翻译专家,精通中英双语,现在需要你按照下面的示例,为用户提供单词翻译服务",
# 这是后缀在 注入值后示例内容文本之后的提示词内容,可以再使用模板设置用户问询内容的变量
suffix = "严格根据以上示例的字段结构,输出{english}翻译后的json对象,保持字段名和字段数量一致",
# 这个就是在前缀或后缀中有模板变量的话,将变量名列表写出来,invoke时填写的就是这个列表的形参列表
input_variables = ['english']
)
# 这里我设置一个短语作为用户询问的文本内容
inquiry = "While you are at it. 这个短语在什么情境下使用,怎么搭配"
chain = prompt| tongyi_model
print(chain.invoke(input={"english": inquiry}))
```json
{
"单词": "While you are at it",
"词性": "phrase",
"中文": "既然你在做这件事;趁这个机会"
}
```
这个短语通常用于建议某人在执行某个任务时,顺便也做另一件相关的事情。例如,在英语中可以说:“While you are at the store, could you pick up some milk?” 翻译成中文就是:“你去商店的时候,能不能顺便买点牛奶?”
剩余部分仍待学习,我将每日更新langchain的学习过程。
如果觉得我的笔记对你有所帮助,请不要吝惜你的大拇指,为我点个赞吧👍Salute!
更多推荐



所有评论(0)