在本地大模型推理生态中,Ollama 提供了一套简洁统一的 HTTP API,使开发者可以快速将大模型能力集成到应用中。其中最核心的两个接口就是 /api/generate 与 /api/chat。理解它们的设计差异与适用场景,是构建高质量 AI 应用的关键。
一、Ollama API 的整体设计思路
Ollama 的 API 设计遵循一个核心原则:用最少的复杂度覆盖不同的对话模型调用方式。
-
/api/generate:面向“单次文本生成”的基础接口 -
/api/chat:面向“多轮对话”的结构化接口
两者底层都调用同一个模型推理引擎,但在输入结构、上下文管理方式以及返回格式上存在明显区别。
二、/api/generate 接口详解
1. 基本用途
/api/generate 是最基础的文本生成接口,适用于:
-
文本补全
-
文章生成
-
Prompt 直接输出结果
-
单轮问答任务
它的特点是“无状态”,不会自动维护对话历史。
2. 请求结构
典型请求如下:
JSON{
"model": "llama3",
"prompt": "解释什么是向量数据库",
"stream": false
}
3. 参数说明
-
model:指定模型名称
-
prompt:输入提示词
-
stream:是否流式输出(true/false)
-
options:可选参数(如 temperature、top_p 等)
4. 返回结果
返回的是纯文本生成结果:
JSON{
"response": "向量数据库是一种专门用于存储向量表示的数据系统……",
"done": true
}
5. 使用场景
/api/generate 更适合:
-
SEO 内容生成
-
单轮问答系统
-
文本改写
-
批量内容生成任务
它的优势是简单、直接、低开销。
三、/api/chat 接口详解
1. 基本用途
/api/chat 是面向对话模型设计的接口,支持多轮上下文管理,适用于:
-
聊天机器人
-
AI 助手
-
复杂任务分解对话
-
多轮上下文推理
2. 请求结构
JSON{
"model": "llama3",
"messages": [
{ "role": "system", "content": "你是一个专业SEO助手" },
{ "role": "user", "content": "帮我写一段关于向量数据库的介绍" }
],
"stream": false
}
3. messages 结构解析
messages 是 chat API 的核心,它包含三种角色:
-
system:系统设定(规则、身份)
-
user:用户输入
-
assistant:模型历史回复
这种结构让模型具备“记忆能力”。
4. 返回结果
JSON{
"message": {
"role": "assistant",
"content": "向量数据库是一种专门用于存储高维向量的数据系统……"
},
"done": true
}
5. 使用场景
/api/chat 更适合:
-
智能客服系统
-
AI 对话应用
-
多轮任务执行
-
Agent 系统设计
四、/api/chat 与 /api/generate 的核心区别
1. 输入结构不同
-
generate:单一 prompt
-
chat:messages 数组(多角色)
2. 是否支持上下文
-
generate:不自动记忆上下文
-
chat:天然支持多轮对话
3. 输出结构不同
-
generate:直接返回 response 字段
-
chat:返回 message 对象
4. 设计定位不同
| 对比维度 | /api/generate | /api/chat |
|---|---|---|
| 交互方式 | 单轮生成 | 多轮对话 |
| 复杂度 | 低 | 中高 |
| 适用场景 | 内容生成 | 智能对话 |
| 上下文能力 | 手动管理 | 自动维护 |
五、流式输出(Stream)机制
两个接口都支持 stream: true,用于实时返回 token。
流式优势:
-
提升用户体验(逐字输出)
-
降低等待延迟
-
适合前端聊天 UI
示例返回(片段):
data: {"response":"向量"}
data: {"response":"数据库"}
data: {"response":"是一种..."}
在 chat 接口中则以 message content 逐步拼接方式输出。
六、如何选择接口
1. 选择 /api/generate 的情况
-
SEO 文章批量生成
-
Prompt 工程实验
-
单次任务处理
-
无需上下文的问答
2. 选择 /api/chat 的情况
-
需要上下文记忆
-
构建 AI 助手
-
多轮交互产品
-
Agent 工作流
七、工程实践建议
在实际项目中,两者可以组合使用:
-
前端聊天 →
/api/chat -
后端内容生成 →
/api/generate -
Prompt 优化阶段 →
/api/generate -
上线产品交互 →
/api/chat
这种分层设计可以同时保证性能与体验。
八、常见问题解析
1. chat 是否比 generate 更慢?
在同模型下,计算速度基本一致,差异主要来自上下文长度。
2. 是否可以用 generate 模拟 chat?
可以,但需要手动拼接历史对话:
User: ...
Assistant: ...
User: ...
但可维护性较差。
3. chat 是否更消耗资源?
是的,因为 messages 会随着对话增长而变长。
九、总结性理解(开发视角)
从工程设计角度看:
-
/api/generate是“函数式调用” -
/api/chat是“状态化会话”
前者强调“输入→输出”,后者强调“上下文→连续交互”。
在 Ollama 的 API 体系中,这种双接口设计让开发者既可以构建轻量工具,也可以搭建完整对话系统。