首先启动 Ollama 服务 

 Linux 系统(服务器)

# 启动 Ollama 服务(终端关闭即停止)
ollama serve

# 手动拉取 qwen3:8b 模型(下载到 /root/.ollama/models)
ollama pull qwen3:8b

Windows 系统(本地)

# 查看已安装的所有模型
ollama list

# 查看正在运行的模型
ollama ps

ollama run qwen3:8b  # 会自动下载模型(如果未安装)


# 使用命令行运行模型
# 运行 qwen3:8b 模型,并发送问题
ollama run qwen3:8b "你好,请介绍一下你自己。"

# 简单提问
ollama run qwen3:8b "你好"
  • ollama run 会自动下载模型(如果未安装)
  • 模型默认保存路径:
    • Linux/root/.ollama/models
    • WindowsC:\Users\XXX\.ollama\models
  • 输入结束后输入 /bye 可退出交互模式

一、第一种:原生 Ollama API(ollama.chat()

import ollama

response = ollama.chat(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "什么水果有益健康"}
    ]
)
out = response['message']['content']
print(out)

 作用:

  • 直接通过 Python 调用 Ollama 的 /api/chat 接口
  • 发送 JSON 请求给本地运行的 Qwen 模型
  • 获取模型回复内容

底层行为:

POST http://127.0.0.1:11434/api/chat
{
  "model": "qwen3:8b",
  "messages": [
    {"role": "user", "content": "什么水果有益健康"}
  ]
}

特点:

  • 最接近原生 API,适合快速测试
  • 不依赖 LangChain,轻量级
  • 返回原始 JSON 结构,需手动解析

注意:response['message'] 实际上是 response['messages'][0],建议写成:

out = response['messages'][0]['content']

二、第二种:LangChain 的 OllamaLLM(简化版)

from langchain_ollama.llms import OllamaLLM

llm = OllamaLLM(model="qwen3:8b")
out = llm.invoke("西游记的主人公")
print(out)

 作用:

  • 使用 LangChain 封装的 OllamaLLM 类
  • 简化调用流程,自动处理 HTTP 请求
  • 支持 invoke() 方法直接传入字符串

内部逻辑:

# 自动转换为:
messages = [HumanMessage(content="西游记的主人公")]
# 然后调用 ollama.chat(...)

 特点:

  • 更符合 LangChain 统一接口风格
  • 可无缝集成到 Chains、Agents 中
  • 不支持 system prompt(除非用消息列表)

推荐用于简单问答场景

三、第三种:LangChain 的 OllamaLLM + 多轮对话(推荐)

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_ollama.llms import OllamaLLM

llm = OllamaLLM(model="qwen3:8b")

system_message = SystemMessage(content="你是一名医生。")
human_message = HumanMessage(content="解释一下为什么不能空腹吃柿子?")

messages = [
    system_message,
    human_message
]

response = llm.invoke(messages)
print(response.content)

作用:

  • 完整构建一个“系统提示 + 用户提问”的对话上下文
  • 使用 LangChain 标准消息对象(SystemMessageHumanMessage
  • 支持复杂角色设定与多轮对话管理

内部逻辑:

# 自动转换为:
messages = [
  {"role": "system", "content": "你是一名医生。"},
  {"role": "user", "content": "解释一下为什么不能空腹吃柿子?"}
]
# 再调用 ollama.chat()

特点:

  • 支持系统指令(如“你是医生”)
  • 兼容 LangChain 的 Memory、Agent、Tools
  • 是构建智能体的标准方式

强烈推荐用于正式项目!

四、第四种:LangChain 的 ChatOpenAI(对接 DeepSeek)

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model_name="deepseek-chat",
    api_key="sk-...",
    base_url="https://api.deepseek.com"
)

llm.invoke("太阳的美称")

作用:

  • 使用 LangChain 对接外部 API 模型(DeepSeek)
  • 支持自定义 base_url 和 api_key
  • 调用远程大模型服务

 内部逻辑:

# 发送请求到 https://api.deepseek.com/v1/chat/completions
# 使用 OpenAI 兼容接口

特点:

  • 适用于无法本地部署的模型(如 DeepSeek、通义千问 API)
  • 需要网络连接和 API Key
  • 与 OllamaLLM 接口一致,可替换使用

适合企业级应用或需要高并发的服务

五、通过 LangChain 调用阿里云通义千问 API的示例

from langchain_community.chat_models import ChatTongyi

llm = ChatTongyi(
    model="qwen-max",
    top_p=0.8,
    top_k=50,
    api_key="sk-43e112...f9bcf2",
    temperature=0.1
)

print(llm.invoke("2024年中国上海的GDP"))
参数详解:
参数含义建议值
model="qwen-max"指定使用哪个 Qwen 模型版本
• qwen-max:最大规模,能力最强
• qwen-plus:性价比高
• qwen-turbo:最快最便宜
根据需求选择
top_p=0.8核采样概率(Nucleus Sampling),控制生成多样性
• 越高越随机,越低越保守
0.7~0.9
top_k=50从 Top-K 个词中采样,限制候选词汇数量
• 与 top_p 结合使用
10~100
api_key="..."阿里云通义千问的 API Key,用于身份验证必须正确填写
temperature=0.1控制输出随机性
• 越小越确定性(适合问答)
• 越大越创造性(适合写作)
0.1~0.8
from langchain_community.chat_models import ChatTongyi
from dotenv import load_dotenv
import os

load_dotenv()

llm = ChatTongyi(
    model="qwen-max",
    top_p=0.8,
    top_k=50,
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    temperature=0.1
)

try:
    response = llm.invoke("2024年中国上海的GDP")
    print(response.content)
except Exception as e:
    print(f"调用失败: {e}")

更多推荐