使用 LangServe 提供服务
LangServe 帮助开发者将 LangChain 链部署为 REST API。
参考文档
安装方式:
pip install "langserve[all]"
这个文件将包含我们服务应用的逻辑。它由三部分组成:
- 我们刚刚构建的链的定义
- 我们的 FastAPI 应用
- 一个定义用于服务链的路由,这通过 langserve.add_routes 完成
FastAPI
## 提示词工程示例
import uvicorn
from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate
from langchain_core.output_parsers import StrOutputParser
from fastapi import FastAPI
from langchain_deepseek import ChatDeepSeek
from langserve import add_routes
from pydantic import SecretStr
# 1. 创建提示词模板
chatprompt = ChatPromptTemplate.from_messages(
[
SystemMessagePromptTemplate.from_template("你是一个人工智能AI助手, 你的名字是{name}"),
HumanMessagePromptTemplate.from_template("{input}")
]
)
# 2. 创建大模型
model = ChatDeepSeek(
model="deepseek-chat",
api_key=SecretStr("你的apikey"),
base_url="https://api.deepseek.com",
temperature=0.7,
max_tokens=512
)
# 3.创建输出解析器
parser = StrOutputParser()
# 4.创建链
chain = chatprompt | model | parser
# 5.Fast API
app = FastAPI(
title="Langchain Server",
version="0.1.0",
description="Language Chain Server",
)
# 6.添加chain 路由
add_routes(
app,
chain,
path="/chain"
)
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=8081)
启动命令:
python serve.py
可以看到我们的chain的服务路径
使用浏览器访问并且输入请求参数
LangChain CLI
使用LangChain CLI 快速启动LangServer项目。
安装脚手架
pip install langchain-cli
创建Langserver项目
langchin app new langchin-cli
目录结构
项目依赖
[tool.poetry.dependencies]
python = "^3.11"
uvicorn = "^0.23.2"
langserve = {extras = ["server"], version = ">=0.0.30"}
pydantic = ">=2.7.4"
使用Poetry管理项目
# 安装pipx
pip install pipx
# 加入到环境变量,需要重启pycharm
pipx ensurepath
# 安装poetry
pipx install poetry
# 添加项目依赖
poetry add langchain
poetry add langchain_deepseek
安装依赖之后:
[tool.poetry.dependencies]
python = "^3.11"
uvicorn = "^0.23.2"
langserve = {extras = ["server"], version = ">=0.0.30"}
pydantic = ">=2.7.4"
langchain = "^0.3.25"
langchain-deepseek = "^0.1.3"
启动项目:
poetry run langchain serve --port=8000
客户端调用
from langserve import RemoteRunnable
remote_chain = RemoteRunnable("http://localhost:8081/chain/")
str = remote_chain.invoke({"name":"liaogui", "input":"你是谁?"})
print(str)