🎯 核心概念速览

Model I/O 三要素

  • Format → Prompt Template(提示模板)
  • Predict → Model(模型调用)
  • Parse → Output Parser(输出解析)

🤖 模型调用详解

模型分类对比

类型 输入格式 输出格式 适用场景
LLMs 字符串 字符串 单次任务:摘要、翻译、代码生成
ChatModels 消息列表 AIMessage对象 多轮对话、客服机器人
Embedding Models 文本 向量列表 检索、语义搜索

关键参数说明

ChatOpenAI(
    model="gpt-4o-mini",           # 模型名称
    temperature=0.7,               # 随机性:0-1
    max_tokens=512,                # 最大输出长度
    api_key=os.getenv("API_KEY"),  # 密钥
    base_url=os.getenv("BASE_URL") # API地址
)

调用方法汇总

方法 说明 适用场景
invoke() 同步调用 常规请求
stream() 流式输出 实时对话
batch() 批量处理 多条数据
ainvoke() 异步调用 高并发

💬 消息类型完全指南

核心消息类型

from langchain_core.messages import *

# 系统角色设定
SystemMessage(content="你是一个{role}")

# 用户输入  
HumanMessage(content="{user_input}")

# AI回复
AIMessage(content="{ai_response}")

# 自定义角色
ChatMessage(role="analyst", content="{custom_content}")

# 工具调用
ToolMessage(content="{tool_result}")

多轮对话结构

conversation = [
    SystemMessage(content="你是AI助手小智"),
    HumanMessage(content="你好"),
    AIMessage(content="你好!有什么可以帮你?"),
    HumanMessage(content="机器学习是什么?")
]

📝 提示模板完全指南

PromptTemplate(基础模板)

from langchain.prompts import PromptTemplate

# 创建模板
template = PromptTemplate(
    template="请评价{product}的{aspect}",
    input_variables=["product", "aspect"]
)

# 使用方式
prompt = template.format(product="手机", aspect="电池")
# 或
prompt = template.invoke({"product": "手机", "aspect": "电池"})

ChatPromptTemplate(对话模板)

from langchain_core.prompts import ChatPromptTemplate

# 多种创建方式
chat_template = ChatPromptTemplate.from_messages([
    ("system", "你是{role}"),
    ("human", "{question}")
])

# 格式化方法对比
messages = chat_template.format_messages(role="专家", question="问题")  # → 消息列表
text = chat_template.format(role="专家", question="问题")              # → 字符串

FewShot模板(示例学习)

from langchain.prompts import FewShotPromptTemplate

examples = [{"input": "2+2", "output": "4"}]
example_prompt = PromptTemplate.from_template("输入:{input}→输出:{output}")

prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="输入:{input}→输出:",
    input_variables=["input"]
)

MessagesPlaceholder(动态消息)

from langchain_core.prompts import MessagesPlaceholder

template = ChatPromptTemplate.from_messages([
    ("system", "你是助手"),
    MessagesPlaceholder("history"),  # 动态插入历史
    ("human", "{question}")
])

🔧 输出解析器完全指南

解析器类型对比

解析器 输入 → 输出 使用场景
StrOutputParser AIMessage → str 普通文本提取
JsonOutputParser 文本 → dict API响应、结构化数据
XMLOutputParser 文本 → dict XML格式处理
CommaSeparatedListOutputParser 文本 → list 列表数据
DatetimeOutputParser 文本 → datetime 时间日期

JSON解析示例

from langchain_core.output_parsers import JsonOutputParser

parser = JsonOutputParser()
format_instructions = parser.get_format_instructions()

prompt = PromptTemplate(
    template="回答:{query}\n{format_instructions}",
    partial_variables={"format_instructions": format_instructions}
)

chain = prompt | model | parser
result = chain.invoke({"query": "生成JSON格式的笑话"})

🖥️ 本地模型调用(Ollama)

安装与配置

# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh

# 下载模型
ollama run deepseek-r1:7b

LangChain调用

from langchain_community.chat_models import ChatOllama

ollama_llm = ChatOllama(
    model="deepseek-r1:7b",
    base_url="http://localhost:11434"  # 默认地址
)

response = ollama_llm.invoke("你好")

🚀 实战代码模板

完整对话流程

import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 1. 初始化模型
chat_model = ChatOpenAI(
    model="gpt-4o-mini",
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL")
)

# 2. 创建提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是{role}"),
    ("human", "{question}")
])

# 3. 构建处理链
chain = prompt | chat_model | StrOutputParser()

# 4. 执行调用
result = chain.invoke({
    "role": "AI专家", 
    "question": "解释机器学习"
})

流式输出实现

# 启用流式输出
chat_model = ChatOpenAI(streaming=True)

for chunk in chat_model.stream(messages):
    print(chunk.content, end="", flush=True)
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐