三种调用 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 标准消息类型
    • 无法直接用于 ConversationBufferMemoryAgentExecutor 等组件
  • 底层行为
    • 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)
    • 可被 RunnablePromptTemplate 等组件识别
    • 支持多轮对话历史管理
  • 缺点
    • 需要导入额外类(但这是最佳实践)

强烈推荐用于正式项目,尤其是构建智能体或带记忆的对话系统。

方式三:纯字符串(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 最简测试
相关推荐
“码”力全开2 分钟前
解耦异构算力:基于 Docker 与边缘计算的 AI 视频管理平台,实现 GB28181/RTSP 统一接入与源码交付深度解析
人工智能·docker·边缘计算
老饼讲解-BP神经网络5 分钟前
具体说说-RBF神经网络-newrbe函数和newrb函数的区别
人工智能·深度学习·神经网络
coft5 分钟前
Hermes 多角色实战:我做了一个智能投研系统
人工智能
code_pgf6 分钟前
3D点云目标检测(PointPillars)部署pipeline
人工智能·目标检测·3d
AIGS0016 分钟前
向量空间JBoltAI:重塑工业智能的四大支柱
java·人工智能·ai大模型应用
2301_764441337 分钟前
用户用部署在手机上的ai模型都做些什么
人工智能·智能手机
Hali_Botebie11 分钟前
PyTorch 2.x核心变革torch.compile(),Triton 是其中最重要的 kernel 生成方式之一
人工智能·pytorch·python
weifengma-wish12 分钟前
test测试 用
人工智能
赫媒派13 分钟前
Claude Code 实战技巧:从 Prompt 范式转变说起
人工智能
道友可好13 分钟前
用 Linter 驾驭 AI:机械化执行的艺术
前端·人工智能·后端