yomo es un marco de llamada de funciones LLM de código abierto para crear aplicaciones de IA distribuidas geográficamente. Construido sobre el protocolo de transporte QUIC y la arquitectura Stateful Serverless, hace que su aplicación de IA tenga baja latencia, sea confiable, segura y sencilla.
Nos preocupamos por: la experiencia del cliente en la era de la IA
Características | |
---|---|
⚡️ | Baja latencia garantizada mediante la implementación sobre QUIC QUIC |
? | Seguridad TLS v1.3 en cada paquete de datos por diseño |
? | Stateful Serverless Haga que su GPU sin servidor sea 10 veces más rápida |
? | La arquitectura geodistribuida acerca la inferencia de IA a los usuarios finales |
Y3 un códec más rápido que el tiempo real |
Implementemos una función que llama con sfn-currency-converter
:
curl -fsSL https://get.yomo.run | sh
Verifique si la CLI se instaló correctamente
yomo version
Prepare la configuración como 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
Inicie el servidor:
yomo _LOG_LEVEL=debug yomo serve -c my-agent.yaml
Primero, definamos qué hace esta función y cómo se requieren los parámetros, estos se combinarán para avisar al invocar 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 {}
}
Cree una función Stateful Serverless para obtener la IP y la latencia de un dominio:
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 )
}
Finalmente, ejecutémoslo.
$ 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 "
}
Códigos de llamada de función LLM completos
Lea más sobre yomo en yomo .run/docs.
yomo ❤️ Vercel, nuestro sitio web de documentación es
No es ningún secreto que los usuarios de hoy quieren una inferencia instantánea de IA; cada aplicación de IA es más poderosa cuando responde rápidamente. Pero, actualmente, cuando hablamos de distribution
, representa distribución en el centro de datos . El modelo de IA está lejos de sus usuarios en todo el mundo.
Si una aplicación se puede implementar en cualquier lugar cercano a sus usuarios finales, resuelva el problema, esta es la arquitectura del sistema geodistribuido :
Sistema distribuido geográficamente yomo" src="/uploads/20250101/img_67746bb95618230.png" style="max-width: 100%;">
En primer lugar, gracias por considerar hacer contribuciones. Son las personas como tú las que hacen que yomo sea mejor. Hay muchas formas en las que puedes participar en el proyecto, por ejemplo:
Licencia Apache 2.0