三种调用 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 最简测试
相关推荐
莫非王土也非王臣17 小时前
TensorFlow中卷积神经网络相关函数
人工智能·cnn·tensorflow
焦耳热科技前沿17 小时前
西华大学Adv. Sci.:超高温焦耳热冲击制备拓扑缺陷碳,用于催化碳纳米管可控生长
大数据·人工智能·能源·材料工程·电池
亿坊电商17 小时前
AI数字人开发框架如何实现多模态交互?
人工智能·交互
GOSIM 全球开源创新汇18 小时前
科班出身+跨界双轨:陈郑豪用 AI 压缩技术,让 4K 游戏走进普通设备|Open AGI Forum
人工智能·游戏·agi
sinat_2869451918 小时前
AI Coding LSP
人工智能·算法·prompt·transformer
IT_陈寒18 小时前
Java并发编程实战:从入门到精通的5个关键技巧,让我薪资涨了40%
前端·人工智能·后端
码上宝藏18 小时前
ComfyUI新插件上线!多模态多视角生成,中文场景适配拉满——手把手教你玩转ComfyUI-qwenmultiangle
人工智能·comfyui
故乡de云18 小时前
Google Cloud与AWS大数据AI服务对比:2026年企业选型指南
大数据·人工智能·aws
●VON18 小时前
可信 AI 认证:从技术承诺到制度信任
人工智能·学习·安全·制造·von
AI架构师易筋18 小时前
AIOps 告警归因中的提示工程:从能用到可上生产(4 阶梯)
开发语言·人工智能·llm·aiops·rag