Skip to content

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()长文本/聊天逐块返回生成内容