3 个版本 (重大更改)
0.3.0 | 2023 年 8 月 31 日 |
---|---|
0.2.0 | 2023 年 5 月 8 日 |
0.1.3 | 2023 年 1 月 28 日 |
#27 in #serverless
3KB
YoMo
YoMo 是一个开源的 LLM 函数调用框架,用于构建地理分布式的 AI 应用程序。基于 QUIC 传输协议和有状态的无服务器架构构建,使您的 AI 应用程序具有低延迟、可靠、安全且易于使用。
💚 我们关注: 人工智能时代的客户体验
🌶 功能
功能 | |
---|---|
⚡️ | 低延迟 通过在 QUIC 上实现保证 |
🔐 | 安全 每个数据包都设计为使用 TLS v1.3 |
📸 | 有状态无服务器 使您的 GPU 无服务器 10 倍更快 |
🌎 | 地理分布式架构 将 AI 推理更接近最终用户 |
🚀 | Y3 一种比实时更快的 编解码器 |
🚀 入门
让我们用 sfn-currency-converter
实现函数调用
步骤 1. 安装 CLI
curl -fsSL https://get.yomo.run | sh
验证 CLI 是否安装成功
yomo version
步骤 2. 启动服务器
准备配置,如 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
启动服务器
YOMO_LOG_LEVEL=debug yomo serve -c my-agent.yaml
步骤 3. 编写函数
首先,让我们定义这个函数的功能和所需的参数,这些将在调用 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{}
}
创建一个有状态的无服务器函数,获取域名 IP 和延迟
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)
}
最后,让我们运行它
$ 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 -X POST -H "Content-Type: application/json" -d '{"prompt":"compare nike and puma website speed"}' http://127.0.0.1:8000/invoke
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"
}
完整示例代码
📚 文档
了解更多关于YoMo的信息,请访问 yomo.run/docs。
🎯 专注于地理分布式的AI推理基础设施
如今,用户都希望实现即时AI推理,每个AI应用在快速响应时都更加强大。然而,目前当我们谈论分布
时,它代表的是数据中心内的分布
。AI模型与全球各地的用户相距甚远。
如果可以将应用程序部署在靠近其最终用户的地方,解决问题,这就是地理分布式系统架构
🦸 贡献
首先,感谢您考虑为YoMo做出贡献。像您这样的人让YoMo变得更好。您可以通过多种方式参与项目,例如
- 提交一个错误报告。请确保包括您使用的YoMo版本、操作系统类型以及重现错误的步骤。
- 建议一个新功能。
- 阅读我们的贡献指南,了解我们正在寻找哪些类型的贡献。
- 我们还采用了一个行为准则,我们希望项目参与者遵守。
许可
lib.rs
:
YoMo Rust 开发 SDK
此crate是为开发者设计的,用于使用Rust语言实现自己的YoMo应用程序。
依赖项
~1.5MB
~35K SLoC