yomo adalah Kerangka Pemanggil Fungsi LLM sumber terbuka untuk membangun aplikasi AI yang terdistribusi secara geografis. Dibangun di atas QUIC Transport Protocol dan arsitektur Stateful Serverless, menjadikan aplikasi AI Anda berlatensi rendah, andal, aman, dan mudah.
Kami peduli dengan: Pengalaman Pelanggan di Era AI
Fitur | |
---|---|
⚡️ | Latensi rendah Dijamin dengan penerapan di atas QUIC QUIC |
? | Keamanan TLS v1.3 pada setiap paket data berdasarkan desain |
? | Stateful Serverless Jadikan GPU Anda tanpa server 10x lebih cepat |
? | Arsitektur Terdistribusi Geo Membawa inferensi AI lebih dekat ke pengguna akhir |
Y3 lebih cepat dari codec waktu nyata |
Mari kita implementasikan pemanggilan fungsi dengan sfn-currency-converter
:
curl -fsSL https://get.yomo.run | sh
Verifikasi apakah CLI berhasil diinstal
yomo version
Siapkan konfigurasi sebagai my-agent.yaml
name : ai-zipper
host : 0.0.0.0
port : 9000
auth :
type : token
token : SECRET_TOKEN
bridge :
ai :
server :
addr : 0.0.0.0:8000 # # Restful API endpoint
provider : openai # # LLM API Service we will use
providers :
azopenai :
api_endpoint : https://<RESOURCE>.openai.azure.com
deployment_id : <DEPLOYMENT_ID>
api_key : <API_KEY>
api_version : <API_VERSION>
openai :
api_key : sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx
model : gpt-4-1106-preview
gemini :
api_key : <GEMINI_API_KEY>
cloudflare_azure :
endpoint : https://gateway.ai.cloudflare.com/v1/<CF_GATEWAY_ID>/<CF_GATEWAY_NAME>
api_key : <AZURE_API_KEY>
resource : <AZURE_OPENAI_RESOURCE>
deployment_id : <AZURE_OPENAI_DEPLOYMENT_ID>
api_version : 2023-12-01-preview
Mulai server:
yomo _LOG_LEVEL=debug yomo serve -c my-agent.yaml
Pertama, mari kita tentukan fungsi fungsi ini dan bagaimana parameter yang diperlukan, ini akan digabungkan untuk meminta saat memanggil LLM.
type Parameter struct {
Domain string `json:"domain" jsonschema:"description=Domain of the website,example=example.com"`
}
func Description () string {
return `if user asks ip or network latency of a domain, you should return the result of the giving domain. try your best to dissect user expressions to infer the right domain names`
}
func InputSchema () any {
return & Parameter {}
}
Buat Fungsi Tanpa Server Stateful untuk mendapatkan IP dan Latensi domain:
func Handler ( ctx serverless. Context ) {
var msg Parameter
ctx . ReadLLMArguments ( & msg )
// get ip of the domain
ips , _ := net . LookupIP ( msg . Domain )
// get ip[0] ping latency
pinger , _ := ping . NewPinger ( ips [ 0 ]. String ())
pinger . Count = 3
pinger . Run ()
stats := pinger . Statistics ()
val := fmt . Sprintf ( "domain %s has ip %s with average latency %s" , msg . Domain , ips [ 0 ], stats . AvgRtt )
ctx . WriteLLMResult ( val )
}
Terakhir, mari kita jalankan
$ yomo run app.go
time=2024-03-19T21:43:30.583+08:00 level=INFO msg= " connected to zipper " component=StreamFunction sfn_id=B0ttNSEKLSgMjXidB11K1 sfn_name=fn-get-ip-from-domain zipper_addr=localhost:9000
time=2024-03-19T21:43:30.584+08:00 level=INFO msg= " register ai function success " component=StreamFunction sfn_id=B0ttNSEKLSgMjXidB11K1 sfn_name=fn-get-ip-from-domain zipper_addr=localhost:9000 name=fn-get-ip-from-domain tag=16
$ curl -i http://127.0.0.1:9000/v1/chat/completions -H " Content-Type: application/json " -d ' {
"messages": [
{
"role": "system",
"content": "You are a test assistant."
},
{
"role": "user",
"content": "Compare website speed between Nike and Puma"
}
],
"stream": false
} '
HTTP/1.1 200 OK
Content-Length: 944
Connection: keep-alive
Content-Type: application/json
Date: Tue, 19 Mar 2024 13:30:14 GMT
Keep-Alive: timeout=4
Proxy-Connection: keep-alive
{
" Content " : " Based on the data provided for the domains nike.com and puma.com which include IP addresses and average latencies, we can infer the following about their website speeds:
- Nike.com has an IP address of 13.225.183.84 with an average latency of 65.568333 milliseconds.
- Puma.com has an IP address of 151.101.194.132 with an average latency of 54.563666 milliseconds.
Comparing these latencies, Puma.com is faster than Nike.com as it has a lower average latency.
Please be aware, however, that website speed can be influenced by many factors beyond latency, such as server processing time, content size, and delivery networks among others. To get a more comprehensive understanding of website speed, you would need to consider additional metrics and possibly conductreal-time speed tests. " ,
" FinishReason " : " stop "
}
Kode Panggilan Fungsi LLM Lengkap
Baca selengkapnya tentang yomo di yomo .run/docs.
yomo ❤️ Vercel, situs dokumentasi kami adalah
Bukan rahasia lagi bahwa pengguna saat ini menginginkan inferensi AI instan, setiap aplikasi AI menjadi lebih kuat ketika merespons dengan cepat. Namun saat ini jika kita berbicara tentang distribution
, itu mewakili distribusi di pusat data . Model AI jauh dari penggunanya di seluruh dunia.
Jika suatu aplikasi dapat diterapkan di mana saja dekat dengan pengguna akhir, selesaikan masalahnya, ini adalah Arsitektur Sistem Terdistribusi Geo :
sistem terdistribusi geografis yomo" src="/uploads/20250101/img_67746bb95618230.png" style="max-width: 100%;">
Pertama, terima kasih telah mempertimbangkan untuk memberikan kontribusi. Orang-orang sepertimulah yang membuat yomo lebih baik. Ada banyak cara untuk berpartisipasi dalam proyek ini, misalnya:
Lisensi Apache 2.0