- Ollama menyematkan kompatibilitas awal dengan Chat Completions API milik OpenAI, sehingga alat dan aplikasi untuk OpenAI dapat langsung dihubungkan ke model lokal
- Setelah instalasi, pengguna dapat mengunduh model seperti
llama2 atau mistral, lalu memanggilnya dengan hanya mengganti host sambil mempertahankan format permintaan OpenAI
- Library OpenAI Python dan JavaScript dapat bekerja dengan menetapkan
base_url/baseURL ke endpoint lokal dan mengisi nilai api_key yang wajib tetapi tidak digunakan
- Disediakan contoh untuk menghubungkan aplikasi chat streaming Vercel AI SDK dan framework multi-agent Autogen dari Microsoft ke Ollama
- Dukungan saat ini masih berada pada tahap dukungan eksperimental awal, sementara Embeddings API, pemanggilan fungsi, dukungan vision, dan peningkatan Logprobs dipertimbangkan untuk tahap berikutnya
Memanggil Ollama dengan format OpenAI API
- Ollama menyediakan endpoint yang kompatibel dengan OpenAI Chat Completions API, sehingga model lokal bisa digunakan dari alat yang sudah berbasis OpenAI
- Untuk memulai, instal Ollama lalu unduh model seperti Llama 2 atau Mistral
ollama pull llama2
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
- Library OpenAI Python menetapkan
base_url ke endpoint lokal Ollama
api_key='ollama' wajib diisi tetapi tidak digunakan
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1',
api_key='ollama',
)
response = client.chat.completions.create(
model="llama2",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The LA Dodgers won in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
print(response.choices[0].message.content)
- Library OpenAI JavaScript menetapkan
baseURL ke http://localhost:11434/v1
apiKey: 'ollama' juga wajib diisi tetapi tidak digunakan
import OpenAI from 'openai'
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
})
const completion = await openai.chat.completions.create({
model: 'llama2',
messages: [{ role: 'user', content: 'Why is the sky blue?' }],
})
console.log(completion.choices[0].message.content)
Integrasi contoh dan rencana ke depan
- Vercel AI SDK adalah library open source untuk membangun aplikasi streaming interaktif, dan contoh Next.js OpenAI dapat diubah agar menggunakan Ollama
npx create-next-app --example https://github.com/vercel/ai/tree/main/examples/next-openai example
cd example
- Di
app/api/chat/route.ts, ubah konfigurasi klien OpenAI ke endpoint lokal Ollama
const openai = new OpenAI({
baseURL: 'http://localhost:11434/v1',
apiKey: 'ollama',
});
- Permintaan chat completion menggunakan model
llama2 dan stream: true
const response = await openai.chat.completions.create({
model: 'llama2',
stream: true,
messages,
});
npm run dev
- Autogen adalah framework open source dari Microsoft untuk aplikasi multi-agent, dan contohnya menggunakan Code Llama
ollama pull codellama
pip install pyautogen
from autogen import AssistantAgent, UserProxyAgent
config_list = [
{
"model": "codellama",
"base_url": "http://localhost:11434/v1",
"api_key": "ollama",
}
]
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding", "use_docker": False})
user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")
- Contoh dijalankan dengan
python example.py, dan asisten akan menulis kode untuk menggambar grafik
python example.py
- Dukungan OpenAI API saat ini masih berada pada tahap dukungan eksperimental awal
- Item yang dipertimbangkan untuk peningkatan berikutnya adalah Embeddings API, pemanggilan fungsi, dukungan vision, dan Logprobs
- Masukan melalui GitHub issue diterima, dan informasi lebih lanjut dapat dilihat di dokumentasi kompatibilitas OpenAI
1 komentar
Komentar Hacker News
Kecepatan peningkatan kemudahan penggunaan hosting LLM lokal dalam beberapa bulan terakhir benar-benar mengejutkan. Baru beberapa jam lalu saya masih membicarakan betapa mudahnya https://github.com/Mozilla-Ocho/llamafile[1], dan sekarang malah bingung harus memakai yang mana
[1] Secara harfiah baru beberapa jam lalu: https://euri.ca/blog/2024-llm-self-hosting-is-easy-now/
ollama serve, naikkanollama web-uidi Docker, tambahkan model asisten coding dari OllamaHub lewat UI web, lalu unggah dokumenTanpa menulis kode, kita bisa punya LLM self-hosted yang menjawab dengan dokumen sebagai konteks. Di tempat kami, deepseek coder 33b cukup cepat di Mac Studio RAM 64GB, dan memberikan saran yang lumayan bagus berdasarkan dokumentasi coding internal
Beberapa model juga bisa dicampur di dalam satu file model, fitur yang sedang dieksperimenkan belakangan ini. Tidak harus bergantung pada pustaka model Ollama; model buatan sendiri juga bisa dipakai. Dukungan model baru masuk lewat binding
llama.cppllamafilekarena mudah dijalankan, tetapi merasa kurang puas dengan antarmuka chat yang cukup lengkap, jadi saya membuat https://recurse.chat/ di atasnyaUntuk beberapa pekerjaan masih perlu GPT-4, tetapi untuk penggunaan sehari-hari ini sudah menggantikan banyak penggunaan ChatGPT, dan saya terutama suka karena seluruh riwayat chat ChatGPT bisa diimpor. Saya juga penasaran orang-orang ingin melakukan apa dengan AI lokal
llamacpp -m -p, dan di MacBook saya memakai Mixtral 8x7b + CodeLlama 70b dengan baik seperti alat sehari-hari. Saya penasaran apakah alternatif Llama.cpp punya fitur penentu, dan tidak ingin ketinggalan arus baru yang menarikSaya profesor bisnis, dan membuat panduan untuk menjalankan Ollama dan web-ui di Google Cloud agar mahasiswa bisa mencobanya[1]. Jika memakai spot instance, biayanya 18 sen per jam
[1] https://docs.google.com/document/d/1OpZl4P3d0WKH9XtErUZib5_2...
git-bash. Itu juga tidak lebih sulit secara teknis daripada hal-hal yang sudah Anda panduSaya tahu beberapa orang diam-diam merasa tidak nyaman karena kompatibilitas OpenAI API makin menjadi standar komunitas. Selain kejanggalan seperti
data.choices.text.responseatau nesting skema yang terlalu defensif tanpa perlu, saya tidak punya banyak keluhanSaya penasaran titik sakit apa saja yang muncul dalam proses API menjadi standar, dan apakah ada yang pernah mencoba standar alternatif yang layak dipertimbangkan
Tidak masalah kalau ini menjadi standar komunitas, tetapi harus ada spesifikasi yang sangat solid tentang apa yang dimaksud komunitas dengan kompatibel dengan OpenAI API. Terutama, standar itu harus tetap stabil meskipun OpenAI merilis fitur baru pagi ini
Yang saya inginkan adalah spesifikasi API yang kuat termasuk kondisi error, kumpulan pengujian untuk memastikan implementasi baru mengikuti spesifikasi, dan sebuah nama. Misalnya ketika sebuah software dikatakan kompatibel dengan
OpenAI-API-Spec v3, saya ingin tahu artinya. Kalau hanya disebut “kompatibel dengan OpenAI API” seperti sekarang, informasinya kurang. Tidak jelas bagian API yang mana, dan disesuaikan dengan API pada titik waktu yang manaKalau kami menambahkan fitur yang keren, baru, dan berbeda ke Ollama tetapi tidak ada padanannya di OpenAI API, saya tidak tahu apakah orang-orang akan bisa memakainya
llama.cpplewat binding bahasa yang diinginkan itu sangat mudah, jadi ini tidak terlalu penting. Kalau butuh kontrol lebih, cukup tambahkan sedikit pekerjaan, dan tidak harus memakai alat plug-and-play seperti iniDi tempat kerja kami sedang membuat versi yang lebih baik daripada Copilot, dan juga mendukung cara pengguna membawa LLM sendiri. Belakangan ini kami menambahkan backend yang kompatibel dengan OpenAI; cukup beri tahu endpoint API kompatibel OpenAI dan harus diperlakukan seperti model apa, lalu kami bisa memformat prompt, stop sequence, max token, dan lainnya sesuai semantik model itu
Untuk pengujian di lingkungan pengembangan lokal, ini persis yang kami butuhkan. Jika Ollama mendukung ini, pengujian terhadap banyak sekali LLM yang harus kami dukung akan jauh lebih mudah. Melihat berbagai alat seperti OpenLLM juga mengimplementasikan API yang sama, sepertinya semuanya memang berkumpul ke kompatibilitas OpenAI API
Rasanya benar-benar menyenangkan membangun startup AI saat ini
Awalnya kami kesulitan dengan batas token, tetapi itu sudah teratasi; masalah keluaran JSON yang konsisten juga sudah teratasi; batas kecepatan dan masalah performa pada model pihak ketiga besar juga sudah teratasi; dan keinginan untuk mengurangi biaya dengan meng-host sendiri model open-source untuk tugas kecil hingga menengah kompleksitasnya juga sudah teratasi
Setiap kali ada kemajuan besar pada LLM, rasanya produk otomatis menjadi lebih murah, lebih stabil, dan lebih mudah diskalakan. Tentu saja, tetap harus fokus membangun pertahanan dan berdiferensiasi pada semua hal yang “bukan AI”
Kalau dikatakan kompatibel dengan OpenAI, orang jadi mengharapkan sampai function calling atau tool calling, jadi menurut saya ini bisa sedikit menyesatkan
Adanya struktur peran dan konten memang bagus, tetapi implementasi itu sejak awal cukup sederhana. Kalau masuk ke agen, perlu eksekusi aksi nyata. Pada sistem hosting agen yang saya mulai, saya memasukkan scripting engine, sehingga saya sempat berpikir bahwa setelah keamanan dan perizinan dibereskan, bukankah agen sebaiknya dibiarkan menjalankan kode begitu saja. Memang saya memulainya seperti itu
Jadi saya tidak yakin function/tool calling itu benar-benar wajib. Namun jika banyak orang menstandardisasi tool calling, mungkin saya harus memasukkannya ke framework saya meskipun sudah ada eksekusi skrip arbitrer
Function calling/pemilihan tool ditangani di tingkat aplikasi dan saat ini tidak ada format standar. Bahkan yang banyak dipakai pun pada dasarnya lebih mirip prompt sistem kustom yang tidak efisien: https://github.com/langchain-ai/langchain/blob/master/libs/l...
Bagaimanapun, mungkin lebih baik tidak merilis dukungan yang tidak berfungsi
Sebagai catatan, skrip instalasi Linux Ollama bekerja dengan cara “standar” yang umum pada alat-alat masa kini:
curl https://ollama.ai/install.sh | shNamun terakhir kali saya cek, skrip ini meminta hak root lewat
sudo. Kalau ingin memakai alatnya, sebaiknya unduh skripnya lalu periksa atau sesuaikan dengan kebutuhanchmod +x ollama-linux-amd64), lalu jalankan; itu sudah berjalan baik. Tidak perlu hak root[0] https://github.com/ollama/ollama/blob/main/docs/linux.md#man...
[1] https://ollama.ai/download/ollama-linux-amd64
ollamamasuk ke/usr/bin; tidak harus begitu, tetapi memang praktis. Saya belum mengecek hal lain apa yang membutuhkan akses rootLapisan kompatibilitas juga bisa dibuat di dalam library. Misalnya
llm()milik LangChain dapat bekerja dengan berbagai backend LLM. Saya penasaran mana yang lebih disukaiMasalah lainnya adalah jika dunia telanjur menstandardisasi pada library buruk seperti LangChain, biaya pemeliharaan backend yang tidak seragam akan membunuh pemain yang datang belakangan dan membuat kita terkunci lama. Jadi untuk saat ini API yang seragam tampaknya pilihan yang lebih baik demi kenyamanan
Meski tidak sempurna, adanya API standar itu bagus. Pada saat yang sama, tidak masalah juga jika ada API kedua seperti B2 milik Backblaze yang memungkinkan memakai seluruh potensinya. Tidak ada pendekatan satu untuk semua model, dan jika model punya kemampuan berbeda, menurut saya sebaiknya kedua opsi tersedia
Saya sedang membuat proyek yang memudahkan mengganti-ganti model open-source (HF, lewat VLLM) dan model komersial (OpenAI, Google, Anthropic, Together) di Python: https://github.com/datadreamer-dev/DataDreamer
Jika ingin memakainya langsung dari Python tanpa HTTP API, ini cara yang sedikit lebih mudah
Saya penasaran apa kegunaan Ollama. Kenapa tidak memakai
llama.cpplangsung?llama.cpplangsung, yang sekarang juga punya server bawaan kompatibel OpenAI