LangServe APIHandler:定制化LangChain REST API

LangServe,这一创新性的工具,专为简化LangChain对象及链的部署而生,将它们转化为REST API,从而赋能开发人员构建更为敏捷高效的应用。与FastAPI的深度融合以及Pydantic的精准数据验证,使得LangServe成为构建微服务的理想选择。不仅如此,LangServe还贴心地配备了客户端,无论是Python还是JavaScript开发者,都能轻松调用部署在服务器上的可运行程序,实现了前后端协同开发的新境界。

借助LangServe的API,开发团队只需聚焦于服务端逻辑的实现,FastAPI则负责搭建起对外的接口桥梁。更令人兴奋的是,通过LangServe提供的RemoteRunnable,客户端可以无缝对接服务端资源。值得注意的是,LangServe不仅提供了Python SDK,还支持TypeScript,这意味着前端开发者同样能在JavaScript环境中调用这些服务,开拓了从前端实现复杂逻辑,如流式输出,的可能性。

尽管官方文档中的API封装精良,但在追求高度定制化的场景下,仅凭add_routes难以满足所有需求。为此,LangServe进一步开放了api_handler接口,赋予开发者根据具体业务场景定制功能的自由度。接下来,让我们一同探索如何利用api_handler构建一个定制化模块,以解决RAG(Retrieval-Augmented Generation)应用中常见的挑战。

场景需求分析: 在RAG应用领域,构建提示词模板往往需要嵌入两个关键元素——上下文与用户问题。上下文,由向量检索出的最相关文档片段拼接而成,其token占用量显著,若完全交由客户端处理,无疑会增加不必要的网络负载。理想情况下,上下文的生成与拼接应在服务端完成,直接融入提示词模板,以此减少数据传输,提升整体效率。

解决方案概览: 为了应对上述挑战,我们将运用LangServe的api_handler接口,设计并实现一个定制化模块。该模块的核心任务是在服务端高效地生成上下文,随后将其无缝融合至提示词模板中,避免了客户端与服务端间的大规模数据交换。具体实现细节将在后续代码示例中详细阐述,敬请期待。

通过这一系列优化措施,LangServe不仅简化了LangChain对象的部署与调用流程,更通过开放的api_handler接口,激发了开发者无限的创新潜力,为构建高效、定制化的RAG应用铺平了道路。

Server

def knowledge_qa_handler_runnable(x: Dict[str, Any]):

    user_id = x.get("user_id", '122')

    query = x.get("query", "12")

    max_tokens = x.get("max_token", "5000")

    data = get_prompt_contexts(user_id,query,[],max_tokens=max_tokens)

    template = get_prompt_template("知识库问答","default")

    prompt = ChatPromptTemplate.from_template(template)

    chain = {"context": lambda c: data, "question": RunnablePassthrough()}| prompt | llm

    return APIHandler(chain, path="/simple")

@app.post("/simple/invoke")

async def test_media(request: Request,runnable: Annotated[APIHandler,                                         Depends(knowledge_qa_handler_runnable)],

                                     )->Response:

    return await runnable.invoke(request)

在接口方法@app.post("/simple/invoke")中,参数runnable通过depends中的knowledge_qa_handler_runnable方法来返回APIHandler,并在knowledge_qa_handler_runnable方法中获取上下文,填充提示词模板等逻辑。

在接口返回时,切记需要带上await,我们需要通过 await 关键字等待它完成并获取其结果,否则会报错【TypeError: 'coroutine' object is not iterable】

 client

openai = RemoteRunnable("http://localhost:8000/simple/")

result = openai.invoke({"user_id": '122', "query": '新质生产力的内涵', "max_token": 5000})

print(result)

在客户端,获取到RemoteRunnable后,通过invoke往服务端传递input参数,参数类型要与服务端类型一致,在上例子,服务端接收的是dict,在客户端需要传递的是dict,最后在服务端解析input,根据解析的参数来获取上下文。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S中的某个容器突然出现内存和CPU占用过高的情况解决办法

当K8S中的某个容器突然出现内存和CPU占用过高的情况时&#xff0c;可以采取以下步骤进行处理&#xff1a; 观察和分析&#xff1a; 使用kubectl top pods命令查看集群中各个Pod的CPU和内存占用情况&#xff0c;找出占用资源高的Pod。使用kubectl describe pod <pod-name>…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN&#xff0c;它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件&#xff1a; 输入门&#xff08;input gate&#xff09;&#xff1a;决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…

C盘满了怎么办?用这方法彻底拯救你的C盘

C盘满了怎么办&#xff1f;用这方法彻底拯救你的C盘。我们的C盘是整个电脑运行的核心部分&#xff0c;里面装载了很重要的系统框架和数据&#xff0c;由于使用的时间越来越长&#xff0c;C盘也会积累很多的垃圾&#xff0c;这样就经常容易出现爆满的情况。 对于C盘爆满&#x…

扫扫地,搞搞卫生 ≠ 车间5S管理

在制造业的日常运营中&#xff0c;车间管理是一项至关重要的工作&#xff0c;它直接关系到生产效率、产品质量以及员工的工作环境。然而&#xff0c;许多人常常将简单的“扫扫地&#xff0c;搞搞卫生”等同于车间5S管理&#xff0c;这种误解不仅可能导致管理效果不佳&#xff0…

Halcon 如何让图像自适应窗口

一 如何让图像自适应窗口 read_image(Image,1)get_image_size(Image,Width, Height)dev_close_window()dev_open_window(0,0,Width/2,Height/2,black,WindowHandle)dev_set_part(0,0,Height-800,Width-800)dev_display(Image)二 如何实现彩色图像转化为灰色图像 read_image(I…

浅谈逻辑控制器之Switch控制器

浅谈逻辑控制器之Switch控制器 Switch Controller是Apache JMeter中一个强大的逻辑控制器&#xff0c;它允许用户基于特定的变量值或参数来控制哪些子采样器被执行。与简单地按照配置顺序执行的控制器不同&#xff0c;Switch Controller根据提供的“switch value”来决定执行哪…

鸿蒙HCIP应用开发学什么?

HCIP-HarmonyOS Application Developer 课程大纲 一&#xff1a;HarmonyOS 系统介绍 -&#xff08;3 课时&#xff09; - 系统及应用场景介绍&#xff1b;HarmonyOS 系统介绍&#xff1b;HarmonyOS 定义 HarmonyOS 特征&#xff1b; - 统- OS&#xff0c;弹性部署&#xff1b…

深度相机识别物体——实现数据集准备与数据集分割

一、数据集准备——Labelimg进行标定 1.安装labelimg——pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple 2.建立相应的数据集存放文件夹 3.打开labelimg&#xff0c;直接在命令行输入labelimg即可&#xff0c;并初始化 4.开始标注&#xff0c;设置标注好…

【高考志愿】自动化

目录 一、专业概述 二、课程设计 三、就业前景与方向 四、志愿填报 五、自动化专业排名 一、专业概述 高考志愿自动化专业选择&#xff0c;无疑是迈向现代化工业与科技发展的一把金钥匙。自动化专业&#xff0c;作为现代工程领域的重要支柱&#xff0c;融合了计算机、电子…

Streams.js:简化 JavaScript 数据流处理

在现代的 Web 开发中&#xff0c;数据流处理是一个常见的需求。从处理用户输入到处理大规模数据集&#xff0c;JavaScript 开发者需要一种有效的方式来处理和转换数据流。Streams.js 是一个优秀的 JavaScript 库&#xff0c;提供了强大的工具来简化数据流处理的复杂性。 什么是…

宝兰德开源多款仓颉产品组件,共筑新语言生态

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

【人工智能学习之图像操作(三)】

【人工智能学习之图像操作&#xff08;三&#xff09;】 图像滤波滤波概念卷积平滑算子均值滤波高斯滤波中值滤波双边滤波锐化算子USM锐化梯度算子 傅里叶变换直方图直方图直方图均衡化自适应均衡化2D 直方图直方图反向投影 图像滤波 滤波概念 滤波过程就是把不需要的信号频率…

OpenGL系列(六)摄像机

在 OpenGL系列&#xff08;六&#xff09;变换 中&#xff0c;一个目标物体经过模型矩阵、观察矩阵和投影矩阵的变换才能正常显示出来&#xff0c;其中模型矩阵主要针对目标物体&#xff0c;它会影响物体的位姿。观察矩阵和投影矩阵主要针对观察者而已&#xff0c;这两个变换决…

Navicat安装与连接教程

navicat 的安装 官网&#xff1a;https://www.navicat.com.cn/ 进入官网之后点击左上角的产品&#xff0c;然后往下滑动就可以看见许多类型&#xff0c;我们使用的是MongoDB数据库&#xff0c;所以就下载Navicat 17 for MongoDB 进入到这里之后&#xff0c;选择自己的系统版本…

J2EE框架之mybatis学习——连接数据库实现查询操作

J2EE框架之mybatis学习——连接数据库实现查询操作 作业要求&#xff1a; 作者&#xff1a;杨建东 关于具体内容我正准备更新至我的CSDN【被瞧不起的神】也可移步我的公众号【猿小馆】 结合老师的课件和黑马程序员的课程学习。 因为我上课老师已经讲过了基本的概念和理解&a…

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

LabVIEW网络开发资源

在LabVIEW开发中&#xff0c;利用网络资源进行学习和查找资料是提高技能和解决问题的重要途径。以下几个国内外优质资源可以帮助开发者获得丰富的技术支持和交流机会&#xff1a; 1. NI Community (NI社区) 简介: National Instruments官方运营的社区&#xff0c;提供丰富的资…

sql想查询一个数据放在第一个位置

sql想查询一个数据放在第一个位置 背景:比如在查询后台账号的时候想将管理员账号始终放在第一个,其他账号按照创建时间倒序排序, 可以这样写sql: SELECTid,create_time FROMuser ORDER BY CASEWHEN id 1 THEN1 ELSE 2 END ASC, create_time DESC 运行截图: 可以看到id…

[单master节点k8s部署]11.服务service

service service是一个固定接入层&#xff0c;客户端 可以访问service的ip和端口&#xff0c;访问到service关联的后端pod&#xff0c;这个service工作依赖于dns服务&#xff08;coredns&#xff09; 每一个k8s节点上都有一个组件叫做kube-proxy&#xff0c;始终监视着apiser…

专业报考628

目录 掌上高考相关专业两步走 研招网、软科最后 刚才看了&#xff0c;挺有用的育 就是一点&#xff0c; 查找相关专业 掌上高考 如果不知道喜欢什么专业&#xff0c;直接查大学&#xff0c;就查那个大学有什么不是物化强行绑定的 看**招生计划**一栏 如果有明确目标&#xf…