三种调用 ChatOllama 的方式

复制代码
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 最简测试
相关推荐
EatFan1 分钟前
AI Agent Harness 元年:从框架混战到运行时收敛,2026 年 Agent 基础设施分层重构解读
大数据·人工智能·重构·ai agent·mcp·a2a·agent harness
浪淘沙jkp5 分钟前
【ComfyUI 国产模型炼丹记】第六篇:Wan2.2 I2V 提示词工程之影视级美学——从“微风拂面“到“电影级运镜“的 V100 实战公式
人工智能·文生视频·comfyui·ai模型·wan2.2
霸道流氓气质10 分钟前
轻量级 AI 代码生成平台搭建实战:Ollama 本地模型 + Continue.dev + Open Code Review 的低成本方案
人工智能·代码复审
BOBY_KEJI11 分钟前
AI交互技术赋能线下展示终端:多模式智能运行机制解析
人工智能
java资料站16 分钟前
十三、SpringAl 知识库AI问答系统简单实现
人工智能
该逃避避26 分钟前
Chrome 插件开发实战指南
人工智能
larance31 分钟前
[菜鸟教程] 机器学习教程十课-Python 机器学习应用
人工智能·python·机器学习
Aloudata33 分钟前
Metric Layer 建设指南:如何先从核心指标层启动企业语义工程
大数据·人工智能·数据分析·data agent·语义层
聪明蛋子哟34 分钟前
不仅仅是向量检索:结合知识图谱与Tool Calling的混合增强生成(Hybrid RAG)方案
人工智能·算法·知识图谱