02 Model I/O 与模型调用
·
tags:/n - langchain
- 模型调用
- Prompt
- LLM
- 面试
aliases:/n - Model IO - 模型输入输出
02 Model I/O 与模型调用
Model I/O 是与语言模型交互的核心组件:输入提示(Prompt)→ 调用模型(Model)→ 输出解析(Parser)。
一、调用在线模型
1.1 LangChain 统一调用
"""
LangChain 调用在线模型
运行方式:python 02_LangChain调用模型.py
"""
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
load_dotenv()
# 创建 LLM 实例
llm = ChatOpenAI(
model="qwen-turbo",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key=os.getenv("DASHSCOPE_API_KEY"),
)
# 调用模型
resp = llm.invoke("你好")
print(type(resp)) # <class 'langchain_core.messages.ai.AIMessage'>
print(resp.content)
1.2 消息类型
| 类型 | 说明 | 示例 |
|---|---|---|
SystemMessage |
系统指令 | 设置角色、行为规范 |
HumanMessage |
用户消息 | 用户的输入 |
AIMessage |
AI 回复 | 模型的输出 |
ToolMessage |
工具结果 | 工具调用的返回值 |
from langchain_core.messages import HumanMessage, SystemMessage, AIMessage
# 方式1:消息对象列表
resp = llm.invoke([
SystemMessage(content="你是一个专业的数学助手"),
HumanMessage(content="你好,你是谁"),
])
# 方式2:元组列表(简洁写法)
resp = llm.invoke([("system", "你是一个专业的数学助手"), ("user", "你好")])
# 方式3:字典列表
resp = llm.invoke([{"role": "system", "content": "你是一个专业的数学助手"}, {"role": "user", "content": "你好"}])
1.3 调用方式
| 方式 | 方法 | 说明 |
|---|---|---|
| 同步调用 | llm.invoke() |
阻塞等待结果 |
| 异步调用 | await llm.ainvoke() |
非阻塞,适合高并发 |
| 流式调用 | llm.stream() |
打字机效果,逐 token 输出 |
| 批次调用 | llm.batch() |
并行多个请求 |
"""
流式调用演示
运行方式:python 02_流式调用.py
"""
# 流式调用
response = llm.stream(input=[("user", "什么是LangChain")])
for chunk in response:
print(chunk.content, end="", flush=True)
print()
# 批次调用
response = llm.batch([
[("user", "什么是LangChain")],
("user", "LangChain的核心价值是什么?"),
])
for resp in response:
print(resp.content)
print("-" * 50)
二、调用本地模型(Ollama)
"""
LangChain 调用本地 Ollama 模型
运行方式:python 02_Ollama调用.py
前提:已安装 Ollama 并下载了 qwen3:8b
"""
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="qwen3:8b",
base_url="http://localhost:11434/v1",
api_key="ollama",
)
resp = llm.invoke("你好")
print(resp.content)
三、模型调用结果解析
3.1 JSON 输出
"""
JsonOutputParser 演示
运行方式:python 02_JSON解析.py
"""
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from pydantic import BaseModel, Field
llm = ChatOpenAI(model="qwen-plus", base_url="...", api_key="...")
class Prime(BaseModel):
prime: list[int] = Field(description="素数列表")
count: list[int] = Field(description="小于该素数的素数个数")
json_parser = JsonOutputParser(pydantic_object=Prime)
res = llm.invoke([
("system", json_parser.get_format_instructions()),
("user", "任意生成2个1-10之间的素数"),
])
parsed_res = json_parser.invoke(res)
print(type(parsed_res)) # <class 'dict'>
print(parsed_res)
3.2 结构化输出(推荐)
"""
LangChain 结构化输出
运行方式:python 02_结构化输出.py
"""
from langchain_openai import ChatOpenAI
from pydantic import BaseModel
llm = ChatOpenAI(model="qwen-turbo", base_url="...", api_key="...")
class CalendarEvent(BaseModel):
name: str
date: str
participants: list[str]
# 开启结构化输出
new_llm = llm.with_structured_output(schema=CalendarEvent)
res = new_llm.invoke("Alice and Bob are going to a science fair on Friday.")
print(res)
print(type(res)) # <class '__main__.CalendarEvent'>
print(f"事件: {res.name}, 日期: {res.date}")
3.3 常用 Output Parser
| Parser | 说明 | 输出类型 |
|---|---|---|
StrOutputParser |
字符串输出 | str |
JsonOutputParser |
JSON 输出 | dict |
PydanticOutputParser |
Pydantic 对象 | BaseModel |
CommaSeparatedListOutputParser |
逗号分隔列表 | list |
相关笔记
[[01-LangChain概述]] · [[03-提示词模板与Chains]] · [[04-RAG检索增强]] · [[05-Agents智能体]]
更多推荐

所有评论(0)