from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen3:8b", base_url="http://127.0.0.1:11434")
message = [
("system", "XXX"),
("human", "XXX")
]
out = llm.invoke(message)
print(out)
# 获取流式响应
# for chunk in llm.stream([("human", "你好")]):
# print(chunk.content, end="", flush=True)
方式一:元组列表(Tuple List)
from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen3:8b", base_url="http://127.0.0.1:11434")
message = [
("system", "你是一名旅游专家"),
("human", "上海最推荐的地方")
]
out = llm.invoke(message)
- 格式 :
List[Tuple[role: str, content: str]] - 优点 :
- 写起来简洁
- 接近 Ollama 原生 API 的 JSON 格式
- 缺点 :
- 不是 LangChain 标准消息类型
- 无法直接用于
ConversationBufferMemory、AgentExecutor等组件
- 底层行为 :
ChatOllama会自动将其转换为内部消息对象再发送
适合快速测试,但不推荐用于复杂应用。
方式二:标准消息对象(Recommended)
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen3:8b", base_url="http://127.0.0.1:11434")
messages = [
SystemMessage(content="你是一名旅游专家"),
HumanMessage(content="上海最推荐的地方")
]
response = llm.invoke(messages)
- 格式 :
List[BaseMessage](LangChain 官方标准) - 优点 :
- 完全兼容 LangChain 生态(Memory、Agent、Tools、Chains)
- 可被
Runnable、PromptTemplate等组件识别 - 支持多轮对话历史管理
- 缺点 :
- 需要导入额外类(但这是最佳实践)
强烈推荐用于正式项目,尤其是构建智能体或带记忆的对话系统。
方式三:纯字符串(String Only)
from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen3:8b", base_url="http://127.0.0.1:11434")
response = llm.invoke("上海最推荐的地方")
-
格式 :
str -
内部行为 :
-
LangChain 会自动包装成
[HumanMessage(content="上海最推荐的地方")] -
没有 system prompt
-
相当于:
1llm.invoke([HumanMessage(content="上海最推荐的地方")])
-
-
适用场景 :
- 单轮问答
- 无角色设定的简单查询
-
限制 :
- 无法设置系统提示(如"你是一个医生")
- 无法传递多轮上下文
如果你需要角色设定或上下文,不要用这种方式。
最佳实践建议
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
messages = [
SystemMessage(content="你是一名专业旅游顾问,回答需简洁实用。"),
HumanMessage(content="上海最推荐的地方?")
]
response = llm.invoke(messages)
总结对比表对比表
| 调用方式 | 输入类型 | 是否支持 System Prompt | LangChain 标准消息 | 适用场景 |
|---|---|---|---|---|
1. 元组列表 [("system", "..."), ("human", "...")] |
List[Tuple[str, str]] |
支持 | 非标准对象 | 快速原型、简单脚本 |
2. 消息对象列表 [SystemMessage(...), HumanMessage(...)] |
List[BaseMessage] |
支持 | 完全兼容 | LangChain 工作流(Agent/Memory/Tool) |
3. 纯字符串 "上海最推荐的地方" |
str |
不支持 | 自动包装为 HumanMessage |
最简测试 |