2个不稳定版本

0.3.0 2023年8月31日
0.2.0 2023年5月8日

#36#有状态

每月 23次下载
用于 yomo

Apache-2.0

5KB
60

YoMo Go codecov Discord

YoMo是一个开源的LLM函数调用框架,用于构建地理分布式的AI应用程序。基于QUIC传输协议和有状态无服务器架构构建,使您的AI应用具有低延迟、可靠、安全且易于使用。

💚 我们关注: 人工智能时代的客户体验

🌶 特性

特性
⚡️ 低延迟 通过实现基于QUIC 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{}
}

创建一个有状态的 Serverless 函数以获取域的 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"
}

完整示例代码

完整 LLM 函数调用代码

📚 文档

了解更多关于 YoMo 的信息,请访问 yomo.run/docs.

YoMo ❤️ Vercel,我们的文档网站是

Vercel Logo

🎯 专注于地理分布式 AI 推理基础设施

今天,用户希望即时 AI 推理,当 AI 应用能够快速响应时,每个 AI 应用都更加强大。但是,目前当我们谈论 distribution 时,它代表的是 数据中心内的分布式。AI 模型离全球的用户都很远。

如果应用程序可以在接近最终用户的地方部署,解决这个问题,这就是 地理分布式系统架构

yomo geo-distributed system

🦸 贡献

首先,感谢您考虑为 YoMo 做出贡献。像您这样的人使 YoMo 更好。您可以通过许多方式参与项目,例如

  • 提交一个 错误报告。请确保包括您使用的 YoMo 版本、操作系统信息以及重现错误的步骤。
  • 建议一个新功能。
  • 阅读我们的 贡献指南 了解我们正在寻找哪些类型的贡献。
  • 我们还采用了 行为准则,我们希望项目参与者遵守。

许可

Apache License 2.0


lib.rs:

YoMo Rust开发SDK(宏)

此包旨在让开发者使用 Rust 语言实现自己的 YoMo 应用程序。

依赖项

~1.5MB
~35K SLoC