yomo ist ein Open-Source-LLM-Funktionsaufruf-Framework zum Erstellen geografisch verteilter KI-Anwendungen. Basierend auf dem QUIC-Transportprotokoll und der Stateful Serverless-Architektur sorgt es dafür, dass Ihre KI-Anwendung mit geringer Latenz, zuverlässig, sicher und einfach ist.
Uns liegt am Herzen: Kundenerlebnis im Zeitalter der KI
Merkmale | |
---|---|
⚡️ | Garantierte niedrige Latenz durch Implementierung auf QUIC QUIC |
? | Sicherheit TLS v1.3 für jedes Datenpaket |
? | Stateful Serverless Machen Sie Ihre GPU serverlos 10x schneller |
? | Geoverteilte Architektur bringt KI-Inferenz näher an Endbenutzer |
Y3 ist ein Codec, der schneller als Echtzeit ist |
Lassen Sie uns einen Funktionsaufruf mit sfn-currency-converter
implementieren:
curl -fsSL https://get.yomo.run | sh
Überprüfen Sie, ob die CLI erfolgreich installiert wurde
yomo version
Bereiten Sie die Konfiguration als my-agent.yaml
vor
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
Starten Sie den Server:
yomo _LOG_LEVEL=debug yomo serve -c my-agent.yaml
Definieren wir zunächst, was diese Funktion tut und wie die erforderlichen Parameter sind. Diese werden zur Eingabeaufforderung beim Aufruf von LLM kombiniert.
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 {}
}
Erstellen Sie eine Stateful Serverless-Funktion, um die IP und Latenz einer Domäne abzurufen:
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 )
}
Zum Schluss lassen Sie es uns ausführen
$ 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 "
}
Vollständige LLM-Funktionsaufrufcodes
Lesen Sie mehr über yomo unter yomo .run/docs.
yomo ❤️ Vercel, unsere Dokumentationswebsite ist
Es ist kein Geheimnis, dass die Benutzer von heute eine sofortige KI-Inferenz wünschen. Jede KI-Anwendung ist leistungsfähiger, wenn sie schnell reagiert. Wenn wir derzeit jedoch über distribution
sprechen, bezieht sich dies auf die Verteilung im Rechenzentrum . Das KI-Modell ist weit entfernt von seinen Nutzern aus aller Welt.
Wenn eine Anwendung irgendwo in der Nähe ihrer Endbenutzer bereitgestellt werden kann, lösen Sie das Problem. Dies ist eine geoverteilte Systemarchitektur :
Yomo geoverteiltes System“ src="/uploads/20250101/img_67746bb95618230.png" style="max-width: 100%;">
Zunächst einmal vielen Dank, dass Sie darüber nachdenken, Beiträge zu leisten. Es sind Menschen wie Sie, die yomo besser machen. Es gibt viele Möglichkeiten, wie Sie sich am Projekt beteiligen können, zum Beispiel:
Apache-Lizenz 2.0