
Ollama 的 OpenAI 相容 API:將微調模型直接嵌入任何 OpenAI 整合
Ollama 提供 OpenAI 相容的 REST API。任何為 OpenAI SDK 編寫的代碼——Langchain、LlamaIndex、您自己的應用——只需更改一個 URL 即可使用您的微調本地模型。以下是您需要了解的。
Ollama 在 http://localhost:11434/v1 提供 OpenAI 相容的 REST API。這意味著每個與 OpenAI 整合的庫、框架和應用程式都可以通過單行更改指向您的本地微調模型。
無需新的 SDK。無需 API 包裝代碼。只需更改 baseURL 和模型名稱。
「OpenAI 相容」實際上意味著什麼
Ollama 實現了 OpenAI Chat Completions API 格式:
POST /v1/chat/completions— 主要端點- 請求正文格式與 OpenAI 相同(model、messages、temperature、max_tokens、stream 等)
- 回應格式相同(choices、message.content、usage 等)
並非所有 OpenAI 功能都已實現。支援的功能:
- Chat Completions(最重要的)
- 通過
stream: true的流式傳輸 - 通過
POST /v1/embeddings的嵌入(選定模型) - 通過
GET /v1/models的模型列表
不支援的功能:
- 通過 API 進行微調(您可以在 Ertas 中進行)
- 圖像生成
- 語音/音頻 API
- Assistants API(有狀態的線程/運行界面)
- OpenAI 特定功能,如帶有嚴格架構的審核或 JSON 模式
對於推理(絕大多數使用案例),相容性是完整的。
一行遷移
JavaScript / Node.js:
// 之前(OpenAI 雲端)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY
});
// 之後(Ollama 本地模型)——一行更改
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama' // 必填欄位但 Ollama 不驗證
});
// 您的生成代碼保持不變
const response = await client.chat.completions.create({
model: 'your-fine-tuned-model', // 這改為您的 Ollama 模型名稱
messages: [
{ role: 'user', content: 'Your prompt here' }
]
});
console.log(response.choices[0].message.content);
Python:
# 之前
from openai import OpenAI
client = OpenAI(api_key="sk-...")
# 之後——一行更改
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 不驗證
)
# 相同的生成代碼
response = client.chat.completions.create(
model="your-fine-tuned-model",
messages=[{"role": "user", "content": "Your prompt"}]
)
print(response.choices[0].message.content)
Curl:
# 之前
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}'
# 之後——更改 URL 和模型
curl http://localhost:11434/v1/chat/completions \
-H "Authorization: Bearer ollama" \
-H "Content-Type: application/json" \
-d '{"model": "your-fine-tuned-model", "messages": [{"role": "user", "content": "Hello"}]}'
立即可用的框架和庫
因為 Ollama 與 OpenAI 相容,所有這些都可以在 baseURL 之外不進行任何代碼更改的情況下使用:
| 框架 / 庫 | 配置 |
|---|---|
| LangChain (JS/Python) | ChatOpenAI({ baseUrl: "http://localhost:11434/v1" }) |
| LlamaIndex | OpenAI(api_base="http://localhost:11434/v1") |
| Vercel AI SDK | createOpenAI({ baseURL: "http://localhost:11434/v1" }) |
| OpenAI Agents SDK | 設置 OPENAI_BASE_URL 環境變數 |
| Instructor | 傳入帶 Ollama baseURL 的 OpenAI 客戶端 |
| DSPy | lm = dspy.LM("ollama/your-model") |
| Semantic Kernel | 帶自定義端點的 OpenAI 連接器 |
| Flowise | 帶基本路徑覆蓋的 OpenAI 節點 |
| n8n | 帶 baseURL 覆蓋的 OpenAI 節點 |
大多數支援「帶自定義 base URL 的 OpenAI」的工具都能使用。大多數具有硬編碼 OpenAI URL 的工具不能使用。
遠端 Ollama 伺服器
當您的 Ollama 在 VPS(而非 localhost)上運行時,您需要暴露它:
在 VPS 上:
# 設置 OLLAMA_HOST 時,Ollama 默認監聽 0.0.0.0
OLLAMA_HOST=0.0.0.0:11434 ollama serve
安全說明: 永遠不要將 Ollama 的端口直接暴露到網路。在前面放置 Nginx,帶有基本身份驗證或 API 金鑰驗證:
server {
listen 443 ssl;
server_name ollama.yourdomain.com;
location /v1/ {
# 簡單的 API 金鑰檢查
if ($http_authorization != "Bearer your-secret-key") {
return 401 '{"error": "Unauthorized"}';
}
proxy_pass http://localhost:11434/v1/;
}
}
然後在您的代碼中:
const client = new OpenAI({
baseURL: 'https://ollama.yourdomain.com/v1',
apiKey: 'your-secret-key'
});
這為您提供了一個完全安全、可遠端訪問的微調模型 API,與 OpenAI 相容。一次部署 Ollama 伺服器,從任何客戶端使用它。
流式回應
流式傳輸與 OpenAI 的工作方式完全相同:
const stream = await client.chat.completions.create({
model: 'your-fine-tuned-model',
messages: [{ role: 'user', content: 'Generate a long document...' }],
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}
對於 UI 應用程式(使用 Vercel AI SDK 的 Next.js,帶流式傳輸的 React):
// Vercel AI SDK + Ollama
import { createOpenAI } from '@ai-sdk/openai';
import { streamText } from 'ai';
const ollama = createOpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
});
// 在您的 API 路由中
const result = streamText({
model: ollama('your-fine-tuned-model'),
messages: [...],
});
return result.toDataStreamResponse();
流式格式與 OpenAI 的相同,因此您現有的流式 UI 組件可以無更改地使 用。
Ship AI that runs on your users' devices.
Ertas early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
延伸閱讀
- Claude Desktop 本地模型設置 — 通過 MCP 在 Claude Desktop 中使用 Ollama
- MCP 伺服器零 API 成本 — 本地推理的成本論據
- LangChain + 微調本地模型 — 深入的 LangChain 整合
- 無 API 成本構建 AI SaaS — 本地模型的單位經濟學
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
Keep reading

MCP + Fine-Tuned Local Model: Connect Claude to Your Domain-Specific AI
Model Context Protocol (MCP) lets Claude Desktop talk to any server — including your own Ollama-hosted fine-tuned model. Here's the architecture and setup for routing Claude requests to a custom domain model.

LangChain + Fine-Tuned Local Model: Build Pipelines Without API Costs
LangChain works with any OpenAI-compatible API — including Ollama. Replace the API calls in your LangChain pipelines with a fine-tuned local model. Same chain structure, zero per-token costs.

Replit App AI Costs Exploding? Replace OpenAI with a Fine-Tuned Local Model
Replit's always-on deployment and easy AI integration create a specific API cost problem. Here's how to replace OpenAI with a fine-tuned local model and cut costs to flat rate.