三种调用 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 最简测试
相关推荐
IT_陈寒10 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
miaowu35710 小时前
AI智能体推动数字化转型:从流程自动化到决策辅助的完整路线图
大数据·人工智能·自动化
阿里云大数据AI技术10 小时前
阿里云 Elasticsearch 日志采集与加工服务:让日志链路少一串组件,多一份稳定
人工智能·elasticsearch
ksueh11 小时前
AI写小说长篇创作中的上下文局限与外部记忆系统实践
人工智能
互联网江湖11 小时前
珞石机器人:向左科技股,向右零部件制造商?
大数据·人工智能
阿里云大数据AI技术11 小时前
从数据湖到多模态湖仓-基于阿里云EMR Serverless StarRocks与DLF Paimon构建AI时代的统一分析检索架构
人工智能
前端的阶梯11 小时前
浅谈Workflow和Agent的区别
人工智能
正在走向自律11 小时前
Deepseek V4 Flash 高效应用实战指南
人工智能·deepseek·deepseek v4·ai赋能中心
Xzaveir12 小时前
别把所有“认证”都塞进 AuthService:实名、一键登录与号码身份的领域拆分
android·人工智能
BerrySen17812 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能