调用大模型的方式
·
首先启动 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 - Windows:
C:\Users\XXX\.ollama\models
- Linux:
- 输入结束后输入
/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 标准消息对象(
SystemMessage,HumanMessage) - 支持复杂角色设定与多轮对话管理
内部逻辑:
# 自动转换为:
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}")
更多推荐
所有评论(0)