应用流部署

更新时间:2025-03-20 08:44:11

在应用流开发完成后,您可以将其部署为EAS服务。EAS提供自动扩缩容和全面的运维监控等功能,能够确保应用灵活应对业务需求的变化和增长,提升系统的稳定性与性能,从而更好地支持生产环境的需求。

前提条件

已创建应用流,并完成调试。详情请参见应用流开发

部署应用流

进入LangStudio,选择工作空间后,在应用流页签下单击已调试完的应用流,然后在页面右上角单击部署(仅当运行时启动时才可进行部署)。关键参数说明:

image

参数

描述

参数

描述

资源部署

资源类型

选择公共资源组或您创建的专属资源组

实例数

配置服务实例数。在生产阶段,建议配置多个服务实例,以降低单点故障的风险。

部署资源

如果仅作为业务流调度使用,您可以根据业务流复杂程度选择合适的CPU资源。相对于GPU资源,CPU资源通常更加经济实惠。部署后会产生EAS相关的资源费用,计费详情请参见模型在线服务(EAS)计费说明

专有网络:由于部署应用流实际上是将其部署为EAS服务,为确保服务部署后客户端能正常访问EAS在线服务,您可以选择专有网络连通方案,将客户端与EAS服务间的网络连通。需要注意的是,EAS服务内部默认与公网不通,如果您有EAS服务访问公网的需求,需配置具备公网访问能力的VPC,详情请参见配置网络连通

说明

如果应用流中包含向量数据库连接(如Milvus),请确保配置的专有网络与向量数据库实例所在的专有网络一致,或确保两者网络互通。

对话历史

开启对话历史

仅适用于“对话型”应用流的配置,开启后支持存储和传递多轮对话的历史消息,需要配合服务请求头参数使用。

对话历史存储

本地存储不支持多实例部署,如果您部署的服务为生产使用,建议使用外部存储,如阿里云数据库RDS。详情请参见附录:对话历史

重要

采用本地存储方案时,不支持多实例部署,也不支持单实例扩容到多实例,否则会导致对话历史功能出现异常。

链路追踪:开启后,可在服务部署完成后查看Trace详情,以评估应用流的效果。

更多参数配置说明,请参见服务部署:控制台

调用服务

在线调试

部署成功后,跳转到PAI-EAS,在在线调试页签下配置并发送请求。请求Body中的Key与应用流中“开始节点”中的参数“对话输入”字段一致,本文使用默认字段question

image

API调用

  1. 概览页签下获取调用服务的EndpointToken。

    image

  2. 发送API请求。支持以下三种API调用方式:

    cURL命令
    Python脚本
    SSE

    部署的EAS应用流服务支持使用cURL命令进行远程调用。示例命令如下:

    curl -X POST \
         -H "Authorization: Bearer <your_token>" \
         -H "Content-Type: application/json" \
         -d '{"question": "who are u?"}' \
         "<your_endpoint>"

    其中关键配置说明如下:

    参数

    描述

    -H "Authorization: Bearer <your_token>"

    HTTP头部信息。其中<your_token>需要替换为步骤1中获取的Token。

    -d '{"question": "who are u?"}'

    请求的主体数据。格式为JSON对象,包含一个Key-Value对,即问题字符串。其中Key需要与应用流中“开始节点”中的参数“对话输入”字段一致,此处为默认字段question

    "<your_endpoint>"

    请求的目标URL。其中<your_endpoint>需要替换为步骤1中获取的Endpoint。

    以下示例展示了如何使用 requests 库向应用流服务发送一个POST请求。请确保您已安装该库;如果尚未安装,可以通过运行 pip install requests 命令来进行安装。

    import requests
    import json
    
    url = "http://<your-endpoint-here>"
    token = "<your-token-here>"
    data = {"question": "who are u?"}
    
    # 设置请求头,包含您的token
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
    
    response = requests.post(url, json=data, headers=headers)
    
    if response.status_code == 200:
        print("请求成功,返回结果:")
        print(response.text)
    else:
        print(f"请求失败,状态码: {response.status_code}")
    

    变量

    描述

    url

    请求的目标URL。其中<your-endpoint-here>需要替换为步骤1中获取的Endpoint。

    token

    HTTP头部信息。其中<your-token-here>需要替换为步骤1中获取的Token。

    data

    请求的主体数据。格式为JSON对象,包含一个Key-Value对,即问题字符串。其中Key需要与应用流中“开始节点”中的参数“对话输入”字段一致,此处为默认字段question

    通过Server-Sent Events(SSE,服务器发送事件)技术,服务器能够实时将数据推送至浏览器,适用于实时对话等场景,例如LangStudio的大模型应用流中的对话场景。在使用SSE调用API时,客户端(如浏览器)通常会建立一个HTTP长连接请求,服务器则通过该连接持续向客户端推送数据,直到连接关闭或出现错误。

    说明

    仅当LLM节点作为应用流的输出节点时(结束节点的直接输入必须是LLM节点),才支持流式调用。

    应用流部署的服务支持SSE,您可以使用Python通过SSE调用带有Endpoint、Token及参数的接口。示例代码如下:

    import requests
    import json
    
    url = "http://<your-endpoint-here>"
    token = "<your-token-here>"
    data = {"question": "who are u?"}
    
    # 设置请求头,包含您的token
    headers = {
        "Authorization": f"Bearer {token}",
        "Accept": "text/event-stream",
        "Content-Type": "application/json"
    }
    
    if __name__ == '__main__':
        with requests.post(url, json=data, headers=headers, stream=True) as r:
            for line in r.iter_lines(chunk_size=1024):
                print(line)
    

    参数

    描述

    url

    请求的目标URL。其中<your-endpoint-here>需要替换为步骤1中获取的Endpoint。

    token

    HTTP头部信息。其中<your-token-here>需要替换为步骤1中获取的Token。

    data

    请求的主体数据。格式为JSON对象,包含一个Key-Value对,即问题字符串。其中Key需要与应用流中“开始节点”中的参数“对话输入”字段一致,此处为默认字段question

查看Trace

在调用服务后,系统会自动生成一条Trace记录。您可以在链路追踪页签下单击指定链路操作列的查看链路,通过查看Trace详情进行应用流效果的评估。

image

Trace数据支持您查看应用流中各个节点的输入和输出信息,如向量数据库召回的结果,或LLM节点的输入和输出信息等。

附录:对话历史

对于“对话型”应用流,LangStudio提供了多轮对话的历史消息存储功能。您可以选择使用本地存储或外部存储来保存对话历史。

存储类型

  • 本地存储:服务将利用本地磁盘,在部署应用流的EAS实例上自动创建一个名为chat_history.dbSQLite数据库来保存对话历史记录,默认存储路径为/langstudio/flow/需要注意,本地存储方案不支持多实例部署。请定期检查本地磁盘的使用情况,您也可以通过下文提供的API接口进行对话历史数据的查询和删除操作。当EAS实例被移除时,相关的对话历史数据也将一并被清除。

  • 外部存储:目前支持使用RDS MySQL进行存储。您需要在部署服务时,为对话历史存储配置一个RDS MySQL连接,具体配置方法请参见服务连接配置-数据库。服务将在您配置的RDS MySQL数据库中自动创建以服务名称为后缀的表,例如langstudio_chat_session_<服务名称>langstudio_chat_history_<服务名称>,分别用于存储对话Session及对话历史消息。

Session/User支持

每一次对应用流服务的对话请求都是无状态的,当您希望多次请求被当作是同一个对话时,需要通过手动配置请求头的方式完成。服务请求方式详情请参见API调用

请求头名称

数据类型

说明

备注

请求头名称

数据类型

说明

备注

Chat-Session-Id

String

会话ID,每一次对服务的请求,系统会自动向本次会话分配唯一标识符,用以区分不同会话,并通过Response HeaderChat-Session-Id字段返回。

支持使用自定义会话ID,为了保证唯一性,会话ID规范为长度为32-255个字符,支持大小写字母、数字、下划线(_)、中划线(-)、英文冒号(:)。

Chat-User-Id

String

用户ID,标识对话所属用户。系统不会自动分配,支持用户自定义。

-

对话历史API

应用流服务还提供了对话历史数据管理API,您可以方便地通过API来查看和删除这些数据。只需通过GET请求访问 {Endpoint}/openapi.json,即可获取完整的API Schema。该Schema基于Swagger标准构建,为了更直观地理解和探索这些API,建议您使用Swagger UI进行可视化操作,使操作更加简单明了。

  • 本页导读 (1)
  • 前提条件
  • 部署应用流
  • 调用服务
  • 在线调试
  • API调用
  • 查看Trace
  • 附录:对话历史
  • 存储类型
  • Session/User支持
  • 对话历史API