yomo est un framework d'appel de fonctions LLM open source pour créer des applications d'IA géo-distribuées. Construit sur le protocole de transport QUIC et l'architecture sans serveur avec état, rend votre application d'IA à faible latence, fiable, sécurisée et simple.
Nous nous soucions de : l’expérience client à l’ère de l’IA
Caractéristiques | |
---|---|
⚡️ | Faible latence garantie par la mise en œuvre sur QUIC QUIC |
? | Sécurité TLS v1.3 sur chaque paquet de données dès la conception |
? | Stateful Serverless Rendez votre GPU sans serveur 10 fois plus rapide |
? | L'architecture géodistribuée rapproche l'inférence de l'IA des utilisateurs finaux |
Y3, un codec plus rapide que le temps réel |
Implémentons une fonction appelant avec sfn-currency-converter
:
curl -fsSL https://get.yomo.run | sh
Vérifiez si la CLI a été installée avec succès
yomo version
Préparez la configuration en tant que 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
Démarrez le serveur :
yomo _LOG_LEVEL=debug yomo serve -c my-agent.yaml
Tout d'abord, définissons ce que fait cette fonction et quels sont les paramètres requis, ceux-ci seront combinés pour être demandés lors de l'appel de 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 {}
}
Créez une fonction sans serveur avec état pour obtenir l'adresse IP et la latence d'un domaine :
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 )
}
Enfin, exécutons-le
$ 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 "
}
Codes d'appel de fonction LLM complète
En savoir plus sur yomo sur yomo .run/docs.
yomo ❤️ Vercel, notre site de documentation est
Ce n'est un secret pour personne que les utilisateurs d'aujourd'hui souhaitent une inférence instantanée par l'IA. Chaque application d'IA est plus puissante lorsqu'elle répond rapidement. Mais, actuellement, lorsque nous parlons de distribution
, cela représente la distribution dans un centre de données . Le modèle d’IA est loin de ses utilisateurs du monde entier.
Si une application peut être déployée n'importe où à proximité de ses utilisateurs finaux, résolvez le problème, il s'agit de l'architecture système géo-distribuée :
Système géo-distribué yomo" src="/uploads/20250101/img_67746bb95618230.png" style="max-width: 100%;">
Tout d’abord, merci d’avoir envisagé de contribuer. Ce sont les gens comme toi qui rendent yomo meilleur. Il existe de nombreuses manières de participer au projet, par exemple :
Licence Apache 2.0