首页 > 其他分享 >使用Flask做langchain的API

使用Flask做langchain的API

时间:2024-11-03 12:46:52浏览次数:6  
标签:flasgger 翻译 language Flask text langchain json API

文章目录


之前使用langserve可以特别轻松的封装langchain服务为API,这些API开放了链的各种能力。
有时候我们实际上只是需要更加简单的接口,并且希望能够更加灵活的对接口进行控制。此时直接使用flask及相关框架可能是更好的解决方案。

概述

本文讲述了如何使用一个利用本地大模型llama3.1实现语言翻译功能的API。
它用flask很轻松的将langchian服务开放为API,结合flasgger给文档添加注释并生成playground,并且使用jsonschema做json数据校验,轻松验证接口参数。
麻雀虽小,但五脏俱全,应该对langchain入门者有较大帮助。

安装依赖

pip install flask flask-restful
pip install flasgger
pip install jsonschema

定义翻译方法

下面的方法需要两个参数,其中:language是翻译目标语言,text是需要翻译的文本。

# 翻译方法
def translate(language,text):
    # 1. 创建提示词模板
    system_template = "Translate the following into {language}:"
    prompt_template = ChatPromptTemplate.from_messages([
        ('system', system_template),
        ('user', '{text}')
    ])

    # 2. 创建本地大模型
    model = OllamaLLM(model="llama3.1")

    # 3. 创建解析器
    parser = StrOutputParser()

    # 4. 创建链
    chain = prompt_template | model | parser

    #5. 调用链
    result = chain.invoke({"language": language,"text":text})

    return result

定义请求的json数据格式

当前比较流行的做法是客户端的请求以json格式提交给服务端。
使用jsonschema可以轻松的对客户端的输入参数进行校验。

# 定义请求数据json的格式。l:language;t:text
schema={
    "type": "object",
    'required': ['l','t'],
    'properties': {
        'l': {'type': 'string',"minLength": 2,"maxLength": 100},
        't': {'type': 'string',"minLength": 2,"maxLength": 1000}
    }
}

关于jsonschema的详细内容,可参见:jsonschema官网文档

定义接口和路由

使用@app.route可以指定接口路由,接口方法内部的注释可以被flasgger渲染生成playground。

#翻译API
@app.route("/trans", methods=['POST'])
def trans_api():
    # 以下注释将会被flasgger使用。
    """
    翻译文本。
    ---
    tags:
      - 翻译
    description:
        将文本翻译为目标语言。
    consumes:
        - application/json
    produces:
        - application/json
    parameters:
      - name: query
        in: body
        required: true
        description: json格式。例如:{"l":"简体中文","t":"good morning"}            
    responses:
        code==ok: 
            description: 成功。msg的值为返回的内容。
        code==err: 
            description: 失败。例如:{"code":"err","msg":"抱歉,我不知道。"} 。
    """

    try:
        j = request.get_json()
        validate(instance=j, schema=schema)
        r = translate(j["l"].strip(),j["t"].strip())
        return jsonify({"code":"ok","msg":r})
    except Exception as e:
        return jsonify({"code":"err","msg":str(e)})   

关于flasgger详细的说明,请参考:https://github.com/flasgger/flasgger

启动API

if __name__ == '__main__':
    #r = translate("简体中文","good morning")
    #print(r)

    # 设置API 文档。API文档访问地址:http://127.0.0.1:5001/apidocs/
    swagger = Swagger(app=app)

    app.run(port=5001)

出现下图所示,即表示API启动成功。
flask启动成功

验证API

显然,上述API的地址为:http://127.0.0.1:5001/trans。可以使用多种方法验证API。

  1. 使用第三方工具
    下图使用ApiFox来验证接口。
    用ApiFox来验证接口

  2. 使用flasgger生成的API。
    使用浏览器打开地址:http://127.0.0.1:5001/apidocs/,依图示对接口进行测试。
    使用flasgger生成的API
    使用flasgger生成的API
    使用flasgger生成的API
    使用flasgger生成的API

下载源代码


参考:
用Flask做langchain服务的API

标签:flasgger,翻译,language,Flask,text,langchain,json,API
From: https://blog.csdn.net/liupras/article/details/143463985

相关文章

  • 三周精通FastAPI:19 Body - Updates 请求体 - 更新数据
    官网文档:https://fastapi.tiangolo.com/zh/tutorial/body-updates/请求体-更新数据¶用 PUT 更新数据¶更新数据请用 HTTP PUT 操作。把输入数据转换为以JSON格式存储的数据(比如,使用NoSQL数据库时),可以使用 jsonable_encoder。例如,把 datetime 转换为 str。......
  • 三周精通FastAPI:20 Dependencies 依赖项 和类作为依赖项
    官方文档:依赖项-FastAPI依赖项¶FastAPI提供了简单易用,但功能强大的依赖注入系统。这个依赖系统设计的简单易用,可以让开发人员轻松地把组件集成至 FastAPI。什么是「依赖注入」¶编程中的「依赖注入」是声明代码(本文中为路径操作函数 )运行所需的,或要使用的「依赖」......
  • 项目部署重要部分,axios二次封装,API接口统一管理
    5.10axios二次封装目的:1:使用请求拦截器,可以在请求拦截器中处理一些业务(开始进度条、请求头携带公共参数)2:使用响应拦截器,可以在响应拦截器中处理一些业务(进度条结束、简化服务器返回的数据、处理http网络错误)在项目中安装axiospnpmiaxios在src文件下新建util......
  • Springboot使用 jenkins-client 调用Jenkins REST API教程和构建 build时 报错 403
    前言:最近在工作中,遇到一个需求,使用java调用Jenkins进行全自动测试的需求于是在网上查找大量资料,可以使用jenkins-client这个工具可以调用JenkinsRESTAPI在执行GET请求获取Jenkins信息的时候没有任何问题,但是执行POST请求时,比如build构建job,create创建jo......
  • SAP ABAP开发学习——BAPI
    目录 业务对象概念​编辑业务对象浏览BAPIBAPI的浏览BAPI的调用BAPI的确认和返回BAPI的创建MM/SD常用BAPI附加:长文本修改业务对象概念业务对象浏览进入SWO3查看双击BUS2012双击下图上方红色位置可以看到BAPI方法的内容BAPI        BAPI(B......
  • 微信jsapi支付 退款接口
    微信官方退款接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4参数按照文档构造记录出现错误:System.Net.WebException:Theremoteserverreturnedanerror:(400)BadRequest这个是由于退款接口需要传证书证书的话是需要登录商户号进行下载a......
  • ES API,使用Kibana的开发工具用例说明
    @目录创建template,用于滚动索引判断template是否存在测试自定义解析器测试内置解析器查index信息添加document查index下document全部信息查所有template删除index查某一template信息模糊搜索+高亮显示设置滚动索引批量插入本人先关其他文章链接创建template,用于滚动索引PUT_tem......
  • Python数据分析NumPy和pandas(十八、从Web APIs 和 数据库中获取数据)
    一、与WebAPIs进行数据交互很多Web网站都提供公共的API,并通过JSON或其他格式提供数据。那Python也有很多种方法可以访问网站提供的API,其中一种常用的方法是通过使用requests库,使用之前需要先安装它,这里通过pip安装:pipinstall requests下面我通过GitHub网站提供的API......
  • python+flask计算机毕业设计高校图书馆借阅系统后台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校图书馆借阅系统后台的研究,现有研究主要集中在图书馆借阅系统的整体架构与前端功能开发方面12。专门针对高校图书馆借阅系统后......
  • 关于k8s api-server端口范围和node节点范围冲突会导致集群不正常故障总结
    1.故障背景由于需要部署新环境,于是在阿里云新建一个ack集群,部署了业务,结果整晚上的存活探针告警,新集群接近30个业务pod,整晚上将近50多条存活探针告警,这个结果明显不正常。但是查看所有pod状态事件全部正常,阿里云托管的ack也没有事件异常,第一反应确实是集群某些参数不对......