Model组件及使用技巧 - 学习笔记
概述
本章节学习 LangChain 中 Model 组件的核心使用方法,包括基础调用、批处理和流式输出三大技巧。
1. LLM与ChatModel基础使用
核心知识点
- ChatPromptTemplate: 用于结构化提示词模板
- .partial(): 预填充部分变量,避免重复传入
- .invoke(): 调用模型并获取完整响应
完整示例
python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
# 1.编排prompt
prompt = ChatPromptTemplate.from_messages([
("system", "你是OpenAI开发的聊天机器人,请回答用户的问题,现在的时间是{now}"),
("human", "{query}"),
]).partial(now=datetime.now())
# 2.创建大语言模型
llm = ChatOpenAI(model="moonshot-v1-8k")
ai_message = llm.invoke(prompt.invoke({"query": "现在是几点,请讲一个程序员的冷笑话"}))
print(ai_message.type)
print(ai_message.content)
print(ai_message.response_metadata)返回结果解析
- ai_message.type: 消息类型
- ai_message.content: 模型生成的文本内容
- ai_message.response_metadata: 响应元数据(如token使用情况、模型信息等)
使用技巧
✅ 使用 .partial() 预填充静态变量
- 减少重复传参
- 提高代码可读性
- 适合系统提示词中的固定参数
2. Model批处理 (Batch)
核心知识点
- .batch(): 批量处理多个请求,提高效率
- 适用于需要同时处理多个查询的场景
完整示例
python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
# 1.编排prompt
prompt = ChatPromptTemplate.from_messages([
("system", "你是OpenAI开发的聊天机器人,请回答用户的问题,现在的时间是{now}"),
("human", "{query}"),
]).partial(now=datetime.now())
# 2.创建大语言模型
llm = ChatOpenAI(model="moonshot-v1-8k")
ai_messages = llm.batch([
prompt.invoke({"query": "你好,你是?"}),
prompt.invoke({"query": "请讲一个关于程序员的冷笑话"}),
])
for ai_message in ai_messages:
print(ai_message.content)
print("====================")使用场景
📌 适合批量处理的场景
- 批量问答
- 多文本总结
- 批量翻译
- 并行请求处理
3. Model流式输出 (Streaming)
核心知识点
- .stream(): 流式输出,实时生成内容
- 逐块返回生成结果,改善用户体验
完整示例
python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()
# 1.编排prompt
prompt = ChatPromptTemplate.from_messages([
("system", "你是OpenAI开发的聊天机器人,请回答用户的问题,现在的时间是{now}"),
("human", "{query}"),
]).partial(now=datetime.now())
# 2.创建大语言模型
llm = ChatOpenAI(model="moonshot-v1-8k")
response = llm.stream(prompt.invoke({"query": "你能简单介绍下LLM和LLMOps吗?"}))
for chunk in response:
print(chunk.content, flush=True, end="")使用场景
🌊 适合流式输出的场景
- 聊天对话应用
- 长文本生成
- 实时内容展示
- 需要快速反馈的场景
三种方式对比
| 方式 | 方法 | 适用场景 | 响应方式 |
|---|---|---|---|
| 单次调用 | .invoke() | 简单请求 | 一次性返回全部内容 |
| 批处理 | .batch() | 多个并行请求 | 返回所有结果列表 |
| 流式输出 | .stream() | 长文本/聊天 | 逐块返回生成内容 |