三种调用 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 最简测试
相关推荐
观测云3 小时前
观测云产品更新 | 统一目录、Obsy AI、错误中心、场景、基础设施等
人工智能·可观测性·产品迭代·观测云
gregmankiw3 小时前
公理引擎(Project Axiom):基于神经符号验证的可执行智能体架构设计方案
人工智能
火山引擎开发者社区3 小时前
ArkClaw 社群挑战赛|群虾整活大赏
人工智能
云烟成雨TD4 小时前
Spring AI Alibaba 1.x 系列【31】集成 Studio 模块实现可视化 Agent 调试
java·人工智能·spring
kimi-2224 小时前
CLIP 与 Qwen-VL 模型架构主要区别
人工智能·语言模型
与芯同行4 小时前
单声道音频Codec在语音交互产品中的工程设计要点与常见问题分析
人工智能·语音识别·ai语音对话芯片·tp9311·天源中芯tpower
citi4 小时前
OpenViking 源代码编译指南
人工智能·context
MediaTea4 小时前
Scikit-learn:数据集
人工智能·python·机器学习·scikit-learn
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章52-交点查找
图像处理·人工智能·opencv·算法·计算机视觉
冬奇Lab5 小时前
一天一个开源项目(第81篇):YC 总裁亲自写代码,把自己的大脑开源了
人工智能·开源·资讯