【大模型系列】使用fastapi为langchain应用快速对外提供restful api
我们可以通过fastapi为我们的langchain应用向外暴露endpoint,操作如下:
安装依赖
# 安装 LangServe
pip install langserve[all]# 也可以只安装一端
pip install "langserve[client]"
pip install "langserve[server]"pip install uvicorn
pip install fastapi
fastapi 入门可以参考: https://www.runoob.com/fastapi/fastapi-tutorial.html
官网: https://fastapi.tiangolo.com/
接口开发和调试
以下是一个简单的例子
from fastapi import FastAPI
from langchain_openai import ChatOpenAI
from langserve import add_routes
from pydantic import BaseModel
import uvicorn
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParserapp = FastAPI()@app.get("/")
def read_root():return {"message": "Hello, World!"}class Data(BaseModel):output: strdef llm_chain():prompt = PromptTemplate.from_template("写一关于{subject}首诗,30字以内")llm = ChatOpenAI(model="gpt-4o-mini")chain = prompt | llm | StrOutputParser()return chain# Add routes immediately when the module is imported
add_routes(app,llm_chain(),path="/llm_chain",# 注意:如果要允许其他程序通过接口调用,则这个参数需要加;启用enabled_endpoints等n个端点(可以自定义名称,playground,stream_log是调试必须要的)enabled_endpoints=("invoke", "batch", "config_hashes", "playground", "stream_log"),
)if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=8000)
执行main方法启动
浏览器访问:http://localhost:8000/llm_chain/playground/ 可进入api调试界面
点击start,调用接口调试
接口调用
参考如下代码
import requestsresponse = requests.post(
# 这里的请求路径需要在上面的enabled_endpoints白名单里"http://localhost:8000/llm_chain/invoke", json={"input": {"subject": "夏天"}}
)
print(response.json())
返回值如下:
over~~