这里想讨论的应用不仅仅是一份应用代码,我们都知道,一个应用可能会依赖很多后端服务,比如 LangChain 应用会用数据库来保存会话历史,用向量数据库存储知识库的 Embedding 。
然后,我发现将这样的依赖多个服务的综合应用(或者叫多应用?)部署到云上挺麻烦的,目前大致有两种方式:IaC 、手动。但是这两种方式,我分析下来有下面这几个问题。或许这也是 LangSmith、Modal、LaptonAI 之类的 AI Infra 产品出现的原因?
[ol]
[/ol]
区别于 AI Infra ,我从另一个角度出发来尝试解决这些问题:能不能直接从应用代码中直接推导出应用的基础设施资源需求,然后自动在 AWS 等云平台上创建相应的资源实例,通过这种方式来简化资源创建和应用部署的流程。
基于这个想法,我做了一个研发工具,叫做 Pluto 。基于 Pluto 实现的 LangChain 应用长下面这个样子,就和普通 Python 应用一样,但是,只需要执行 pluto deploy,Pluto 就能在 AWS 平台上自动创建 API Gateway 、Lambda 资源实例,并且配置好 API Gateway 到 Lambda 的路由、触发器、权限等。
import os
from pluto_client import Router, HttpRequest, HttpResponse
from langchain_core.pydantic_v1 import SecretStr
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")
model = ChatOpenAI(
model="gpt-3.5-turbo",
api_key=SecretStr(os.environ["OPENAI_API_KEY"]),
)
output_parser = StrOutputParser()
def handler(req: HttpRequest) -> HttpResponse:
chain = prompt | model | output_parser
topic = req.query.get("topic", "ice cream")
joke = chain.invoke({"topic": topic})
return HttpResponse(status_code=200, body=joke)
router = Router("pluto")
router.get("/", handler)
你觉得这种方式可以让云更好用么?你会喜欢么?
最后最后,走过路过的大佬,求个 star🌟 👉 https://github.com/pluto-lang/pluto