LangChain_openai实例化大模型
首先我们需要安装LangChain_openai环境
uv add langchain_openai
from langchain_openai import ChatOpenAI
import os
llm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
stream = True,
)
print(llm)
提示词模版
llm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
stream=True,
)
for chunk in llm.stream("你是谁?"):
print(chunk.content, end="", flush=True)

字符串提示词模版PromptTemplate
适用场景:
- 用于文本补全模型,输入是纯文本(单字符串);
- 适用于简单的任务,列如生成一段文本,回答问题或者执行命令。
特点:
- 输入变量插值:通过
{}占位符动态替换变量; - 模版格式:支持
f-string; - 输出形式:生成一个完整的字符串作为模型输入。
案例:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
import os
llm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
template = PromptTemplate.from_template("今天是{something}")
prompt = template.format(something="晴天")
print(prompt)

聊天提示词模版(ChatPromptTemplate)
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
import os
llm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
template = ChatPromptTemplate.from_messages([
("system", "你是一位{role}专家,擅长回答{domain}领域的问题,简短回答.50个字"),
("user", "用户提问{question},请给出一个回答"),
]
)
prompt = template.format_messages(
role = "编程专家",
domain = "编程",
question = "如何使用langchain进行编程"
)
print(prompt)
print(llm.invoke( prompt).content)

消息体的抽象和复用
ChatMessagePromptTemplate可以结合ChatPromptTemplate使用,同时对提示词模版和消息体进行抽象和复用
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate,SystemMessagePromptTemplate
import os
llm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
system_message = SystemMessagePromptTemplate.from_template(
template = "你是一位{role}专家,擅长回答{domain}领域问题,请给出一个回答.50个字以内",
role = "system"
)
user_message = SystemMessagePromptTemplate.from_template(
template = "用户提问{question},请给出一个回答",
role = "user"
)
template = ChatPromptTemplate.from_messages([
system_message,
user_message
]
)
prompt = template.format_messages(
role = "编程专家",
domain = "编程",
question = "如何使用langchain进行编程"
)
print(prompt)
print(llm.invoke( prompt).content)
少样本提示词模版(FewShotPromptTemplate)
使用场景:
- 用于,在提示中包含示例,帮助模型理解任务;
- 适用于复杂任务(如翻译,分类,推理),需要通过示例引导模型行为。
特点:
-
示例嵌入:通过examples参数提供示例输出和输入;
-
动态示例选择:支持ExampleSelector动态选择最相关的示例;
-
模版格式:通过包含前缀(Prefix),示例(Examples)和后缀(Suffix)。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, FewShotPromptTemplate,
PromptTemplate
import osllm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)example = [
{
"input": "good night",
"output": "晚上好"
},
{
"input": "good morning",
"output": "早上好"
}
]
example_template = "输入:{input}\n 输出:{output}"shot_prompt = FewShotPromptTemplate(
examples=example,
example_prompt=PromptTemplate.from_template(example_template),
prefix = "请将输入的英文翻译成中文",
suffix = "输入:{text}\n输出:",
input_variables = ["text"],
)prompts = shot_prompt.format(text="Thank")
print(llm.invoke(prompts).content)

总结对比
常见模版类特性和使用场景对比
|-----------------------|--------|---------|----------------|
| 子类 | 使用模版类型 | 输入类型 | 主要用途 |
| PromptTemplate | 文本补全模型 | 单字符串 | 生成单轮文本任务的提示 |
| ChatPromptTemplate | 聊天模型 | 多消息列表 | 模拟多轮对话或者角色扮演 |
| FewShotPromptTemplate | 所以模型 | 包含示例的模版 | 通过示例引导模型完成复杂任务 |
链式调用大模型
我们可以使用管道符: |进行链式调用大模型
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, FewShotPromptTemplate, \
PromptTemplate
import os
llm=ChatOpenAI(
model="qwen-max",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
example = [
{
"input": "good night",
"output": "晚上好"
},
{
"input": "good morning",
"output": "早上好"
}
]
example_template = "输入:{input}\n 输出:{output}"
shot_prompt = FewShotPromptTemplate(
examples=example,
example_prompt=PromptTemplate.from_template(example_template),
prefix = "请将输入的英文翻译成中文",
suffix = "输入:{text}\n输出:",
input_variables = ["text"],
)
chain = shot_prompt | llm
res = chain.invoke({"text": "Thank"})
print(res.content)
自定义工具全流程开发
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from app.bailian.common import chain, shot_prompt, llm
from langchain_core.tools import Tool
from langchain_core.messages import HumanMessage
def add(a,b):
return a+b
add_tool = Tool(
func=add,
name="add",
description="add two numbers"
)
llm_with_tools = llm.bind_tools([add_tool])
chain = shot_prompt | llm_with_tools
input_msg = HumanMessage(content="计算1+1的结果")
res = chain.stream(input=[input_msg])
for chunk in res:
if hasattr(chunk, 'tool_calls') and chunk.tool_calls:
for tool_call in chunk.tool_calls:
print(tool_call)
args = tool_call["args"]
print(args)
func = tool_call["name"]
print(func)
if func == "add":
print(f"计算结果:{add(float(args['a']), float(args['b']))}")