AI大模型探索之路-应用篇8:Langchain框架LangServe模块-专注于AI模型的部署

目录

前言

一、概述

二、功能特性

三、REST API 开发

四、Postman调用测试

五、Client调用测试

总结


前言

随着AI大语言模型(LLM)的技术的不断演进,AI应用的开发和部署变得越来越复杂。在这样的背景下,LangServe应运而生——一个旨在简化AI服务部署和运维的框架。专为大模语言模型(LLM)的部署和管理而设计;本篇旨在讲解LangServe的功能特点和实践运用。


一、概述

LangServe 则提供了一整套将LLM部署成产品服务的解决方案。它可以将 LLM应用链接入到常见的Python的 Web框架(比如:FastAPI、Pydantic、uvloop、asyncio),进而生成一套RESTful API; 减少了开发人员运维部署的任务,可以更专注于LLM应用开发;不仅简化了从开发到生产的过渡,还确保了服务的高性能和安全性;提供了包括模型管理器、请求处理器、推理引擎、结果缓存、监控与日志记录以及API网关各类组件;降低了技术门槛、加速了AI应用的上架,LangServe的目标是让开发者能够轻松集成、部署和管理AI模型。开发者可以“从零到一”无缝地实现 LLM 应用从原型到产品的过渡

二、功能特性

LangServe的功能集是为满足现代AI服务的需求而设计的。以下是一些关键特性:

1.多个模型支持:
LangServe支持部署多种类型的AI模型,包括文本生成、图像识别、语音处理等,开发人员能够按需切换。
2.高效推理缓存:
为了提高响应速度和节省计算资源,LangServe包含了一个高效的结果缓存系统,它可以智能地存储和管理热点数据。
3.安全访问控制:
通过角色和策略的管理,LangServe提供了灵活的访问控制机制,确保了服务的安全性和数据的隐私性。
4.实时监控与日志
内置的监控系统可以实时跟踪服务的运行状态,而详尽的日志记录则有助于问题的调试和分析。
5.API接口简单易用
LangServe的API设计简洁直观,易于理解和使用,大大减少了开发者的学习成本

三、REST API 开发

1.环境准备:

安装依赖:pip install "langserve[all]"  (包含了服务端和客户端的安装)

环境变量:OPENAI_API_KEY=<your valid openai api key>

2.代码开发:

以下代码样例中,将开发一个最简单的translator翻译接口(除了LangServe之外,代码中还引入了web框架FastAPI和web服务器uvicorn
创建一个app.py

from fastapi import FastAPI

from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain_openai import ChatOpenAI
from langserve import add_routes

##FastAPI是一个基于Python的Web框架,用于构建高性能、可扩展的API。它提供了一种简单、直观的方式来定义API端点,以及处理HTTP请求和响应。
app = FastAPI(
  title="LangChain Server",
  version="1.0",
  description="A simple api server using Langchain's Runnable interfaces",
)
# 接口1
add_routes(
    app,
    ChatOpenAI(),
    path="/openai",
)

## 接口2
system_message_prompt = SystemMessagePromptTemplate.from_template("""
    You are a helpful assistant that translates {input_language} to {output_language}.
""")
human_message_prompt = HumanMessagePromptTemplate.from_template("{text}")

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

add_routes(
    app,
    chat_prompt | ChatOpenAI(),
    path="/translate",
)

if __name__ == "__main__":
    import uvicorn
    ## Python的web服务器
    uvicorn.run(app, host="localhost", port=9999)

3.启动运行

python app.py

四、Postman调用测试

备注:通常情况下可以直接访问http://localhost:9999/docs,在浏览器在线的接口文档中找到对应的接口,直接在网页上测试即可;目前新的pydantic 版本存在兼容性问题,无法生成OpenAPI文档,因此暂时先采用Postman进行接口测试。

五、Client调用测试

直接在后台开发langserve 的客户端,进行远程调用REST API

from langchain.prompts.chat import ChatPromptTemplate
from langserve import RemoteRunnable

#配置远程接口
openai_llm = RemoteRunnable("http://localhost:9999/openai/")

#创建提示词
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "你是一名资深的AI大模型专家",
        ),
        ("human", "请帮忙讲解一下,有哪些常用的通用开源大模型,中外各自罗列5个"),
    ]
).format_messages()

#LLM 接口调用
openai_llm.invoke(prompt)

#输出:
AIMessage(content='当谈论通用开源大模型时,常常会提到自然语言处理(NLP)领域中的预训练模型。以下是中外各自常用的5个通用开源大模型:

**国外:**
1. BERT(Bidirectional Encoder Representations from Transformers):由Google开发,是一种基于Transformer架构的预训练模型,用于各种NLP任务。
2. GPT-3(Generative Pre-trained Transformer 3):由OpenAI发布,是一个非常大的语言生成模型,可以用于文本生成等任务。
3. RoBERTa(A Robustly Optimized BERT Approach):由Facebook发布的预训练模型,基于BERT进行了一些优化,用于提高性能。
4. T5(Text-to-Text Transfer Transformer):由Google发布,是一个通用的文本生成模型,可以应用于多种NLP任务。
5. XLNet:由谷歌Brain团队发布,是一种自回归预训练模型,结合Transformer-XL和自回归方法。

**国内:**
1. ERNIE(Enhanced Representation through kNowledge Integration):由百度发布,是一种基于Transformer架构的多语言预训练模型,融合了知识融合的方法。
2. GPT-2(Generative Pre-trained Transformer 2):由哈工大讯飞联合实验室发布,是一个类似于GPT-3的语言生成模型,用于文本生成等任务。
3. HFL/THU Bert:由清华大学自然语言处理与社会人文计算实验室发布,是一个BERT的中文预训练模型,适用于中文NLP任务。
4. RoFormer:由华为发布,是一种优化的中文预训练模型,用于中文NLP任务。
5. PaddleNLP:由百度发布,是一个NLP模型库,提供了多种预训练模型,包括BERT、ERNIE等,适用于各种NLP任务。

以上列举的是一些常用的通用开源大模型,它们在各自领域都有着广泛的应用和影响。', response_metadata={'token_usage': {'completion_tokens': 590, 'prompt_tokens': 61, 'total_tokens': 651}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_b28b39ffa8', 'finish_reason': 'stop', 'logprobs': None})


总结

LangServe作为一款专注于AI模型部署和运维的平台,通过其精心设计的架构和丰富的功能集合,显著降低了AI项目的门槛,提升了开发效率和服务稳定性。无论是初创公司还是大型企业,LangServe都提供了一个可靠的解决方案,以应对AI领域中的挑战和机遇。随着AI技术的不断进步,LangServe将继续在AI服务的革新和发展中扮演关键角色。

探索未知,分享所知;点击关注,码路同行,寻道人生!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/533739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 中画线

前言&#xff1a; 在Unity项目中&#xff0c;调试和可视化是开发过程中不可或缺的部分。其中&#xff0c;绘制线条是一种常见的手段&#xff0c;可以用于在Scene场景和Game视图中进行调试和展示。本篇博客将为你介绍多种不同的绘制线条方法&#xff0c;帮助你轻松应对各种调试…

第三资本:铸就辉煌非凡的资历

第三资本香港有限公司在在金融投资领域一直以专业精神和不懈追求获得良好名声,近几年在国际资本市场上更是写下了辉煌的章节。针对第三资本而言,专业是基本,也是成功的唯一途径。投资总监刘国海解释道:“金融从业者务必深入把握专业能力,对行业现状敏感,重视风险管控,才能在这个…

炫我桌面云流系统,不一样的云桌面系统

云桌面&#xff0c;又称桌面虚拟化、云电脑&#xff0c;是替代传统电脑的一种新模式。它采用虚拟化技术&#xff0c;将物理服务器划分为多个虚拟机&#xff0c;以提供多个独立的虚拟桌面环境。每个虚拟机都具有自己的操作系统、计算资源和应用程序等&#xff0c;可以实现多用户…

vue快速入门(十四)reduce求和

注释很详细&#xff0c;直接上代码 上一篇 新增内容 非嵌套情况求和嵌套情况求和 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…

ZYNQ7000 PL与PS交互总结

这里写目录标题 一、ZYNQ7000整体框架二、AXI总线与接口2.1 AXI总线协议分类2.1.1 AXI_Lite协议2.1.2 AXI_Full协议2.1.3 AXI_Stream协议 2.2 AXI接口分类 三、PS与PL交互方式总结3.1 PL中断3.2 AXI_Lite协议配合AXI GP接口进行寄存器访问3.3 AXI_Full协议配合AXI HP接口进行内…

Flutter第七弹 网格列表GridView

1) Flutter提供了网格列表&#xff0c;怎么设置列数&#xff1f; 2&#xff09;怎么初始化每个列表项Item&#xff1f; 一、GridView简介 Flutter也存在网格列表组建GridView&#xff0c;用于展示多行多列的列表。 1.1 GridView构建 采用GridView.count() 进行构建 1.2 Gr…

模型训练基本概念-赛博炼丹

文章目录 拓展知识基础名词解释&#xff08;语义库更新&#xff09;机器学习任务流程模型训练基本流程模型训练详细流程正向传播与反向传播正向传播-求误差值反向传播-求参数值 学习率激活函数激活函数-为什么希望激活函数输出均值为0&#xff1f;激活函数 — softmax & ta…

Pytorch张量的数学运算:向量基础运算

文章目录 一、简单运算二、广播运算1.广播的基本规则2.广播操作的例子 三、运算函数 参考&#xff1a;与凤行 张量的数学运算是深度学习和科学计算中的基础。张量可以被视为一个多维数组&#xff0c;其在数学和物理学中有广泛的应用。这些运算包括但不限于加法、减法、乘法、除…

312_C++_QT表格的剪切、拷贝、粘贴,轻量化操作

:拷贝 + 粘贴 :剪切 + 粘贴 void CustomTableWidget::cut() {copy();// 获取所有选定的单元格项QList<QTableWidgetItem*> selectedItemsList

若依安装过程

文章目录 参考博客环境准备下载redisjdk1.8下载nacos 后端mysqlnacos运行npm 参考博客 https://blog.csdn.net/qq_31536117/article/details/134603862 环境准备 下载redis 参考https://redis.com.cn/redis-installation.html jdk1.8下载 参考 https://zhuanlan.zhihu.co…

新质生产力与数字化转型:驱动经济转型升级的双引擎

引言 随着时代的发展和科技的进步&#xff0c;新质生产力与数字化转型已成为当今经济转型升级的双引擎。新质生产力代表着经济发展的内在动力&#xff0c;数字化转型则为其提供了技术支撑和路径指引。本文将探讨新质生产力与数字化转型的概念&#xff0c;并分析它们对经济发展的…

读所罗门的密码笔记16_直通心智

1. 直通心智 1.1. 如今&#xff0c;科学家已经可以诱发触觉、压觉、痛觉和大约250种其他感觉 1.1.1. DARPA支持的触觉技术第一次让一位受伤的人能够用假肢和手指感知到被触碰的物体 1.1.2. 可以建立人工系统&#xff0c;来替换和弥补受损大脑的部分区域 1.1.3. 神经科学家能…

基于springboot实现医院管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现医院管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求&#xff0c;创建了一个计算机管理医院管理系统的方案。文章介绍了医院管理系…

【Qt编译】ARM环境 Qt5.14.2-QtWebEngine库编译 (完整版)

ARM 编译Qt5.14.2源码 1.下载源码 下载Qt5.14.2源代码&#xff08;可根据自己的需求下载不同版本&#xff09; 下载网站&#xff1a;https://download.qt.io/new_archive/qt/5.14/5.14.2/single/ 2.相关依赖(如果需要的话) 2.1 QtWebEngine相关依赖 sudo apt-get instal…

思科模拟器——跨交换机划分vlan

参考博客 一、原理图 二、划分vlan 将Switch0的f0/1和f0/2端口划到vlan10 具体端口看自己连的端口&#xff0c;Options → Prefrences → 勾选Always Show Port Labels。Ctrl R快捷打开Prefrences。 xialin>enable //进入特权模式 xialin#configure terminal //进入全局…

Python | Leetcode Python题解之第21题合并两个有序链表

题目&#xff1a; 题解&#xff1a; class Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:prehead ListNode(-1)prev preheadwhile l1 and l2:if l1.val < l2.val:prev.next l1l1 l1.nextelse:prev.next l2l2 l2.next pr…

java算法day50 | ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 思路&#xff1a; 这道题的关键就是如何设置dp数组的状态。用五种状态表示对股票持有或售出的不同阶段。代码随想录讲解视频 class Solution {public int maxProfit(int[] prices) {int[][] dpnew int[prices.length][5];dp[0][0]0;dp[0][1]-prices…

成功解决> 错误: 无效的源发行版:17

运行项目的时候出现下面的报错&#xff1a; Execution failed for task ‘:device_info_plus:compileDebugJavaWithJavac’. 错误: 无效的源发行版&#xff1a;17 原因&#xff1a;没有设置好自己项目的JDK版本 解决&#xff1a;1.检查自己项目的JDK版本 将自己的项目改为JDK 1…

09 Php学习:数组和排序

数组概念 在PHP中&#xff0c;数组是一种复合数据类型&#xff0c;用于存储多个值。以下是关于PHP数组的详细解释&#xff1a; 索引数组&#xff1a;索引数组是最基本的数组类型&#xff0c;其中每个元素都有一个唯一的数字索引&#xff0c;从0开始递增。 关联数组&#xff…

总结C/C++中程序内存区域划分

C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很⾼…