1 poin oleh GN⁺ 2024-02-09 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-02-09
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/

    • Menurut saya sekarang perusahaan jadi lebih mudah melakukan self-hosting untuk server inferensi dengan dukungan RAG dasar. Beli Mac Mini atau Mac Studio, jalankan ollama serve, naikkan ollama web-ui di Docker, tambahkan model asisten coding dari OllamaHub lewat UI web, lalu unggah dokumen
      Tanpa 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
    • Secara pribadi saya merekomendasikan Ollama. Cara manajemen modelnya tertata bagus mirip Docker, dan dukungan API-nya juga lebih luas
      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.cpp
    • Laju perkembangan bidang ini benar-benar mencengangkan. Saya suka llamafile karena mudah dijalankan, tetapi merasa kurang puas dengan antarmuka chat yang cukup lengkap, jadi saya membuat https://recurse.chat/ di atasnya
      Untuk 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
    • Saya memakai Ollama dan Mixtral-7B untuk pengembangan lokal di MBP, dan sangat puas
    • Selama ini saya selalu hanya memakai 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 menarik
  • Saya 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...

    • Dengan konfigurasi seperti ini, mahasiswa bisa kehilangan kontrol hak admin dan instansnya dapat diambil alih. Ini sangat tidak aman. Saya sangat menyarankan memakai SSH key di git-bash. Itu juga tidak lebih sulit secara teknis daripada hal-hal yang sudah Anda pandu
    • Banyak hal juga bisa dijalankan gratis di Google Colab. KoboldCPP punya lingkungan eksekusi siap pakai yang bagus di situs webnya, dan model lain juga bisa dimuat
  • Saya tahu beberapa orang diam-diam merasa tidak nyaman karena kompatibilitas OpenAI API makin menjadi standar komunitas. Selain kejanggalan seperti data.choices.text.response atau nesting skema yang terlalu defensif tanpa perlu, saya tidak punya banyak keluhan
    Saya penasaran titik sakit apa saja yang muncul dalam proses API menjadi standar, dan apakah ada yang pernah mencoba standar alternatif yang layak dipertimbangkan

    • Perlu dokumentasi
      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 mana
    • Terus terang, sebelum menambahkan ini kami banyak berdiskusi secara internal. Rasanya aneh bahwa API pihak lain bisa menentukan fitur apa yang harus, atau tidak harus, kami masukkan ke proyek kami karena kami terikat pada API mereka
      Kalau 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
    • Jadi bagus kalau disediakan sebagai opsi. Ini mengurangi friksi dan menurunkan ketergantungan pada moat OpenAI
    • Menurut saya standar yang tidak sempurna selalu lebih baik daripada tidak ada standar
    • Membuat web server yang langsung memanggil fungsi llama.cpp lewat 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 ini
  • Di 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”

    • Saya penasaran, apa maksudnya batas token sudah teratasi? Apakah maksudnya batas konteks pada versi-versi terbaru jauh lebih besar, tetapi biayanya juga jauh lebih mahal?
  • 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

    • Dokumentasinya dengan jelas menyebutkan fitur yang dikecualikan: https://github.com/ollama/ollama/blob/main/docs/openai.md
      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...
    • Gemini Pro menarik karena mendukung function/tool calling, tetapi dalam praktiknya bekerja sangat buruk. Saya belum mencoba Gemini Ultra, dan juga belum jelas apakah bisa lewat API
      Bagaimanapun, mungkin lebih baik tidak merilis dukungan yang tidak berfungsi
    • Bagi orang yang pernah memakai OpenAI API, ini pilihan yang mudah dipahami
  • Sebagai catatan, skrip instalasi Linux Ollama bekerja dengan cara “standar” yang umum pada alat-alat masa kini:
    curl https://ollama.ai/install.sh | sh
    Namun terakhir kali saya cek, skrip ini meminta hak root lewat sudo. Kalau ingin memakai alatnya, sebaiknya unduh skripnya lalu periksa atau sesuaikan dengan kebutuhan

    • Ada panduan instalasi manual[0]. Dari situ tampaknya ia menyiapkan layanan SystemD yang berjalan otomatis saat startup. Jika tujuannya hanya untuk mencoba, cukup unduh [1], jadikan executable (chmod +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
    • Binary ollama masuk ke /usr/bin; tidak harus begitu, tetapi memang praktis. Saya belum mengecek hal lain apa yang membutuhkan akses root
    • Di zaman sekarang ada yang namanya package manager
  • Lapisan kompatibilitas juga bisa dibuat di dalam library. Misalnya llm() milik LangChain dapat bekerja dengan berbagai backend LLM. Saya penasaran mana yang lebih disukai

    • Saya lebih suka jika ada di dalam library, tetapi saat ini ada cukup banyak masalah. Masalah terbesar adalah ekosistem bergerak terlalu cepat sehingga wrapper library tidak bisa mengejar
      Masalah 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
    • Jika begitu, setiap library harus mendukung setiap LLM. Menurut saya ini sama seperti di object storage, yang pada akhirnya hampir semua orang mendukung API kompatibel S3
      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
    • Sebelum OpenAI merilis aplikasinya, saya memakai LangChain di sistem buatan saya. Itu adalah antarmuka SMS yang sangat sederhana untuk LLM, dan saya lebih suka bekerja dengan abstraksi LangChain daripada langsung berhadapan dengan GPT-4 API
  • 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.cpp langsung?

    • Ini seperti Docker/package manager untuk LLM. Dengan CLI yang terstandardisasi dan sederhana, model bisa dipasang dengan mudah, model baru bisa ditemukan, dan pembaruan bisa dilakukan. Auto-update juga tidak merepotkan
    • Saya punya pertanyaan yang sama. Ollama tampaknya banyak dipromosikan dan responsnya juga bagus, tetapi saya penasaran persisnya apa keunggulannya dibanding memakai llama.cpp langsung, yang sekarang juga punya server bawaan kompatibel OpenAI