yomo é uma estrutura de chamada de função LLM de código aberto para a construção de aplicativos de IA distribuídos geograficamente. Construído sobre o protocolo de transporte QUIC e a arquitetura Stateful Serverless, torna seu aplicativo de IA de baixa latência, confiável, seguro e fácil.
Nós nos preocupamos com: Experiência do cliente na era da IA
Características | |
---|---|
⚡️ | Baixa latência garantida pela implementação sobre QUIC QUIC |
? | Segurança TLS v1.3 em todos os pacotes de dados por design |
? | Stateful Serverless Torne sua GPU sem servidor 10x mais rápida |
? | Arquitetura geodistribuída aproxima a inferência de IA dos usuários finais |
Y3, um codec mais rápido que em tempo real |
Vamos implementar uma chamada de função com sfn-currency-converter
:
curl -fsSL https://get.yomo.run | sh
Verifique se a CLI foi instalada com sucesso
yomo version
Prepare a configuração 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 o servidor:
yomo _LOG_LEVEL=debug yomo serve -c my-agent.yaml
Primeiro, vamos definir o que esta função faz e como são os parâmetros necessários, que serão combinados para avisar ao invocar o 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 {}
}
Crie uma função sem servidor com estado para obter o IP e a latência de um domínio:
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, vamos executá-lo
$ 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 completos de chamada de função LLM
Leia mais sobre yomo em yomo .run/docs.
yomo ❤️ Vercel, nosso site de documentação é
Não é nenhum segredo que os usuários de hoje desejam inferência instantânea de IA; cada aplicativo de IA é mais poderoso quando responde rapidamente. Mas, atualmente, quando falamos em distribution
, representa distribuição em data center . O modelo de IA está longe de seus usuários em todo o mundo.
Se um aplicativo puder ser implantado em qualquer lugar próximo aos seus usuários finais, resolva o problema, esta é a Arquitetura de Sistema Distribuída Geograficamente :
sistema yomo geo-distribuído" src="/uploads/20250101/img_67746bb95618230.png" style="max-width: 100%;">
Em primeiro lugar, obrigado por considerar fazer contribuições. São pessoas como você que tornam yomo melhor. Existem muitas maneiras pelas quais você pode participar do projeto, por exemplo:
Licença Apache 2.0