Todos os produtos
Search
Central de documentação

Platform For AI:Implantar um fluxo de aplicação

Última atualização: Jun 27, 2026

Após desenvolver um fluxo de aplicação, implante-o como um serviço Elastic Algorithm Service (EAS). O EAS oferece Auto Scaling e monitoramento abrangente de operações e manutenção, permitindo que sua aplicação responda com flexibilidade a mudanças e ao crescimento dos negócios.

Pré-requisitos

Crie e depure um fluxo de aplicação. Consulte Desenvolvimento de fluxos de aplicação.

Implantar um fluxo de aplicação

Acesse o LangStudio e selecione um workspace. Na aba Application Flow, clique em um fluxo de aplicação já depurado e, em seguida, clique em Deploy no canto superior direito. Certifique-se de iniciar o runtime antes da implantação. Os principais parâmetros estão descritos abaixo.

image

Parâmetro

Descrição

Informações de recursos

Tipo de recurso

Selecione recursos públicos ou um grupo de recursos dedicados criado anteriormente.

Instâncias

Defina o número de instâncias do serviço. Para ambientes de produção, configure múltiplas instâncias para reduzir o risco de ponto único de falha.

Recursos de implantação

Se o fluxo de aplicação for usado apenas para orquestração de fluxos de negócios, selecione recursos de CPU adequados conforme a complexidade do fluxo. Recursos de CPU geralmente são mais econômicos que recursos de GPU. Após a implantação, aplica-se o faturamento de recursos. Consulte Faturamento do Elastic Algorithm Service (EAS).

VPC: O fluxo de aplicação é implantado como um serviço EAS. Para garantir o acesso do cliente, selecione uma VPC. Por padrão, os serviços EAS não acessam a internet. Para habilitar o acesso à internet, configure uma VPC com conectividade externa. Consulte Acesso do EAS a recursos públicos e privados.

Nota

Se um fluxo de aplicação utilizar conexão com banco de dados vetorial (como Milvus), certifique-se de que a VPC configurada corresponda à VPC da instância do banco de dados vetorial ou que ambas estejam interconectadas.

Histórico

Ativar histórico

Aplica-se apenas a fluxos de aplicação do tipo chat. Quando ativado, o sistema armazena e transmite múltiplas rodadas de histórico de conversa. Utilize em conjunto com o parâmetro de cabeçalho da requisição.

Armazenamento de histórico

O armazenamento local não suporta implantação com múltiplas instâncias. Para serviços em produção, utilize armazenamento externo, como ApsaraDB RDS. Para mais informações, consulte Apêndice: Histórico de chat.

Importante

Com o armazenamento local, não há suporte para implantação com múltiplas instâncias nem para dimensionamento de uma única instância para várias. Caso contrário, o histórico de chat pode não funcionar corretamente.

Ativar rastreamento: Ao ativar esta opção, é possível visualizar registros de rastreamento para avaliar o desempenho do fluxo de aplicação após a implantação.

Funções e permissões: No fluxo de aplicação, se você utilizar um banco de dados vetorial Faiss (selecione um banco de dados vetorial Faiss ou Milvus ao criar uma base de conhecimento) ou "Alibaba Cloud IQS Search" (necessário para o modelo de chatbot baseado em busca web IQS), será necessário selecionar uma função apropriada.

Para mais informações sobre configurações de parâmetros, consulte Implantação personalizada.

Depuração online

Chamar o serviço

Depuração online

Após a implantação bem-sucedida, você será redirecionado para o PAI-EAS. Na aba Online Debugging, configure e envie uma requisição. A chave no corpo da requisição deve corresponder ao valor do parâmetro Chat Input no Start Node. Este tópico utiliza o campo padrão question.

image

Fazer chamadas de API

  1. Na aba Overview, obtenha o endpoint e o token.

    image

  2. Envie uma requisição de API.

    Chame o serviço no modo simples ou completo. A tabela a seguir descreve as diferenças.

    Propriedade

    Modo Simples

    Modo Completo

    Caminho da requisição

    <Endpoint>/

    <Endpoint>/run

    Descrição do recurso

    Retorna diretamente os resultados de saída do fluxo de aplicação.

    Retorna uma estrutura complexa, incluindo status dos nós, mensagens de erro e saídas do fluxo de aplicação.

    Cenário

    • Indicado quando apenas a saída final é necessária e os detalhes internos do processamento não são relevantes.

    • Ideal para consultas ou operações simples que exigem obtenção rápida de resultados.

    • Recomendado quando é necessário compreender detalhadamente o processo de execução do fluxo, incluindo o status de cada nó e possíveis mensagens de erro.

    • Adequado para depuração, monitoramento ou análise da execução do fluxo de aplicação.

    Vantagens

    Simples de usar, sem necessidade de analisar estruturas complexas.

    • Fornece informações abrangentes para entender profundamente o processo de execução do fluxo de aplicação.

    • Facilita a solução de problemas e a otimização do desempenho do fluxo.

    Modo simples

    Comando cURL

    O serviço de fluxo de aplicação EAS implantado suporta chamadas com streaming ou sem streaming usando comandos cURL. A tabela a seguir apresenta exemplos de requisição e resposta.

    Exemplo

    Streaming

    Sem streaming

    Exemplo de requisição

    curl -X POST \
         -H "Authorization: Bearer <your_token>" \
         -H "Content-Type: application/json" \
         -H "Accept: text/event-stream" \
         -d '{"question": "Where is the capital of France?"}' \
         "<your_endpoint>"
    curl -X POST \
         -H "Authorization: Bearer <your_token>" \
         -H "Content-Type: application/json" \
         -d '{"question": "Where is the capital of France?"}' \
         "<your_endpoint>"

    Exemplo de resposta

    event: Message
    data: {"answer": ""}
    
    event: Message
    data: {"answer": "The"}
    
    event: Message
    data: {"answer": " capital"}
    
    event: Message
    data: {"answer": " of"}
    
    event: Message
    data: {"answer": " France"}
    
    event: Message
    data: {"answer": " is"}
    
    event: Message
    data: {"answer": " Paris"}
    
    event: Message
    data: {"answer": "."}
    
    event: Message
    data: {"answer": ""}
    {"answer":"The capital of France is Paris."}

    A tabela a seguir descreve os parâmetros da requisição.

    Parâmetro

    Descrição

    -H "Authorization: Bearer <your_token>"

    Cabeçalho HTTP. Substitua <your_token> pelo token obtido na Etapa 1.

    -H "Accept: text/event-stream"

    Indica que o cliente aceita requisições SSE e que as informações retornadas serão em streaming. Observação: O streaming é suportado apenas quando um nó LLM é usado como nó de saída do fluxo de aplicação (um nó LLM é a entrada direta para o nó final).

    -d '{"question": "Where is the capital of France?"}'

    Corpo da requisição, um objeto JSON contendo um par chave-valor com a string da pergunta. A chave deve corresponder ao campo do parâmetro "Chat Input" no "Start Node" do fluxo de aplicação. Neste caso, utiliza-se o campo padrão question.

    "<your_endpoint>"

    URL de destino da requisição. Substitua <your_endpoint> pelo endpoint obtido na Etapa 1.

    Código Python

    Os exemplos a seguir mostram como usar a biblioteca requests para enviar uma requisição POST a um serviço de fluxo de aplicação, com suporte a chamadas com streaming ou sem streaming. Certifique-se de ter instalado essa biblioteca. Caso contrário, execute pip install requests para instalar.

    Exemplo

    Streaming

    Sem streaming

    Exemplo de requisição

    import requests
    import json
    
    url = "http://<your-endpoint-here>"
    token = "<your-token-here>"
    data = {"question": "Where is the capital of France?"}
    
    # Specify a request header, including the token of your application flow service.
    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)
    
    import requests
    import json
    
    url = "http://<your-endpoint-here>"
    token = "<your-token-here>"
    data = {"question": "Where is the capital of France?"}
    
    # Specify a request header, including the token of your application flow service.
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
    
    response = requests.post(url, json=data, headers=headers)
    
    if response.status_code == 200:
        print("Request is successful, results:")
        print(response.text)
    else:
        print(f"Request fails, status code: {response.status_code}")
    

    Exemplo de resposta

    event: Message
    data: {"answer": ""}
    
    event: Message
    data: {"answer": "The"}
    
    event: Message
    data: {"answer": " capital"}
    
    event: Message
    data: {"answer": " of"}
    
    event: Message
    data: {"answer": " France"}
    
    event: Message
    data: {"answer": " is"}
    
    event: Message
    data: {"answer": " Paris"}
    
    event: Message
    data: {"answer": "."}
    
    event: Message
    data: {"answer": ""}
    {"answer":"The capital of France is Paris."}

    A tabela a seguir descreve os parâmetros da requisição.

    Parâmetro

    Descrição

    url

    URL de destino da requisição. Substitua <your-endpoint-here> pelo endpoint obtido na Etapa 1.

    token

    Cabeçalho HTTP. Substitua <your-token-here> pelo token obtido na Etapa 1.

    data

    Corpo da requisição, um objeto JSON contendo um par chave-valor com a string da pergunta. A chave deve corresponder ao campo do parâmetro "Chat Input" no "Start Node" do fluxo de aplicação. Neste caso, utiliza-se o campo padrão question.

    "Accept": "text/event-stream"

    Indica que o cliente aceita requisições SSE e que as informações retornadas serão em streaming. Observação: O streaming é suportado apenas quando um nó LLM é usado como nó de saída do fluxo de aplicação (um nó LLM é a entrada direta para o nó final).

    Modo completo

    O LangStudio suporta Server-Sent Events (SSE), permitindo a saída do status, mensagens de erro e mensagens de resultado de cada nó durante a execução do fluxo de aplicação. Também é possível personalizar o conteúdo de node_run_infos nos eventos. O exemplo a seguir utiliza a depuração online. Adicione /run ao endereço de chamada e edite o corpo da requisição:

    image

    A tabela a seguir descreve os parâmetros do corpo da requisição.

    Nome do campo

    Tipo

    Valor padrão

    Descrição

    inputs

    Mapping[str, Any]

    None

    Dicionário de dados de entrada. As chaves devem corresponder aos nomes dos campos de entrada definidos no fluxo de aplicação. Se o fluxo não tiver entradas, este campo será ignorado.

    stream

    bool

    True

    Controla o formato da resposta. Valor padrão: Dinâmico. Valores válidos:

    • True: Responde com streaming SSE. O Content-Type no cabeçalho da resposta é text/event-stream, e os dados são retornados no formato DataOnly, divididos em diferentes eventos: RunStarted, NodeUpdated, RunOutput e RunTerminated. Para mais informações, consulte as tabelas abaixo.

    • False: Responde com um único corpo JSON. O Content-Type no cabeçalho da resposta é application/json. Consulte as informações de resposta em Depuração online.

    response_config

    Dict[str, Any]

    -

    Controla as informações detalhadas dos nós incluídas na resposta de streaming (quando stream=True).

    ∟ include_node_description

    bool

    False

    (Dentro de response_config) Define se as descrições dos nós devem ser incluídas no fluxo de eventos SSE.

    ∟ include_node_display_name

    bool

    False

    (Dentro de response_config) Define se os nomes de exibição dos nós devem ser incluídos no fluxo de eventos SSE.

    ∟ include_node_output

    bool

    False

    (Dentro de response_config) Define se as saídas dos nós devem ser incluídas no fluxo de eventos SSE.

    ∟ exclude_nodes

    List[str]

    []

    (Dentro de response_config) Lista de nomes de nós a serem excluídos do fluxo de eventos SSE.

    Os dados retornados são divididos em diferentes eventos: RunStarted, NodeUpdated, RunOutput e RunTerminated:

    Evento RunStarted

    • Definição: O evento RunStarted marca o início da execução. Geralmente é enviado como o primeiro evento no fluxo SSE de uma execução.

    • Exemplo de payload:

      data: {"event": "RunStarted", "run_id": "fb745e15-3b3b-4a10-9e0d-0bea08d47411", "timestamp": "2025-06-12T08:15:07.223611Z", "flow_run_info": {"run_id": "fb745e15-3b3b-4a10-9e0d-0bea08d47411", "status": "Running", "error": null, "otel_trace_id": ""}}
    • Descrição dos campos:

      Nome do campo

      Tipo

      Descrição

      event

      string

      Tipo de evento, fixo como RunStarted.

      run_id

      string

      Identificador exclusivo da execução atual.

      timestamp

      string

      Timestamp da ocorrência do evento, seguindo o padrão ISO 8601.

      flow_run_info

      object

      Contém as informações de status final de toda a execução.

      ∟ run_id

      string

      (Dentro de flow_run_info) Identificador exclusivo da execução (igual ao run_id externo).

      ∟ status

      string

      (Dentro de flow_run_info) Status inicial da execução, fixo como Running.

      ∟ error

      object ou null

      (Dentro de flow_run_info) Se a execução falhar, contém um objeto de mensagem de erro; caso contrário, null.

      ∟ otel_trace_id

      string

      (Dentro de flow_run_info) ID de rastreamento OpenTelemetry associado a esta execução (pode estar vazio ou com valor zero).

    Evento NodeUpdated

    • Definição: O evento NodeUpdated indica que o status ou a saída de um ou mais nós no fluxo foi alterado. Durante uma execução, esse evento é normalmente enviado quando os nós iniciam (Running) ou concluem a execução (Completed/Failed). Se response_config estiver definido, este evento também pode incluir descrições, nomes de exibição e saídas dos nós. Observação: Se você especificar exclude_nodes no response_config da requisição, os eventos NodeUpdated desses nós não serão retornados.

    • Exemplo de payload:

      data: {"event": "NodeUpdated", "run_id": "8f92b1a6-4d69-422a-a080-50713e488b56", "timestamp": "2025-04-25T08:57:15.208601Z", "node_run_infos": [{"node_name": "custom_python", "node": "custom_python", "status": "Running", "error": null, "duration": 0.0, "description": null, "display_name": null, "output": null}]}
      data: {"event": "NodeUpdated", "run_id": "8f92b1a6-4d69-422a-a080-50713e488b56", "timestamp": "2025-04-25T08:57:15.209621Z", "node_run_infos": [{"node_name": "custom_python", "node": "custom_python", "status": "Completed", "error": null, "duration": 0.001246, "description": null, "display_name": null, "output": {"text": "echo:hello", "input_length": 2}}]}
    • Descrição dos campos:

      Nome do campo

      Tipo

      Descrição

      event

      string

      Tipo de evento, fixo como NodeUpdated.

      run_id

      string

      Identificador exclusivo da execução atual.

      timestamp

      string

      Timestamp da ocorrência do evento, seguindo o padrão ISO 8601.

      node_run_infos

      array[object]

      Array contendo um ou mais objetos de informação de execução de nó. Cada objeto representa um nó cujo status ou saída foi alterado.

      ∟ node_name

      string

      (Dentro de node_run_infos) Nome do nó (campo legado, igual ao campo node).

      ∟ node

      string

      (Dentro de node_run_infos) Nome do nó.

      ∟ status

      string

      (Dentro de node_run_infos) Status atual de execução do nó, como Running, Completed, Failed.

      ∟ error

      object ou null

      (Dentro de node_run_infos) Se a execução do nó falhar, contém um objeto de mensagem de erro; caso contrário, null.

      ∟ duration

      float

      (Dentro de node_run_infos) Tempo gasto na execução do nó (em segundos). Para o status Running, geralmente é 0.0.

      ∟ description

      string ou null

      (Dentro de node_run_infos) Descrição do nó. Incluída apenas quando response_config.include_node_description é true na requisição; caso contrário, null.

      ∟ display_name

      string ou null

      (Dentro de node_run_infos) Nome de exibição do nó. Incluído apenas quando response_config.include_node_display_name é true na requisição; caso contrário, null.

      ∟ output

      object ou null

      (Dentro de node_run_infos) Dados de saída do nó. Incluídos apenas quando o status do nó é Completed e response_config.include_node_output é true na requisição; caso contrário, null.

    Evento RunOutput

    • Definição: O evento RunOutput indica que a execução gerou sua saída final. Normalmente ocorre antes do evento RunTerminated no final da execução do fluxo.

    • Exemplo de payload:

      data: {"event": "RunOutput", "run_id": "4c185c72-1bb0-4beb-a288-f7a73e37fc3b_llm_3ce063ad-bc9b-417d-9e68-08ce92c3db1b", "timestamp": "2025-04-30T11:55:24.745130Z", "outputs": {"answer": "What can"}, "output_metadata": {"answer": {"is_stream": true, "status": "Streaming"}}}
      
      data: {"event": "RunOutput", "run_id": "4c185c72-1bb0-4beb-a288-f7a73e37fc3b_llm_3ce063ad-bc9b-417d-9e68-08ce92c3db1b", "timestamp": "2025-04-30T11:55:24.829133Z", "outputs": {"answer": " I help you with?"}, "output_metadata": {"answer": {"is_stream": true, "status": "Streaming"}}}
      
      data: {"event": "RunOutput", "run_id": "4c185c72-1bb0-4beb-a288-f7a73e37fc3b_llm_3ce063ad-bc9b-417d-9e68-08ce92c3db1b", "timestamp": "2025-04-30T11:55:24.950055Z", "outputs": {"answer": ""}, "output_metadata": {"answer": {"is_stream": true, "status": "Streaming"}}}
      
      data: {"event": "RunOutput", "run_id": "4c185c72-1bb0-4beb-a288-f7a73e37fc3b_llm_3ce063ad-bc9b-417d-9e68-08ce92c3db1b", "timestamp": "2025-04-30T11:55:24.954983Z", "outputs": {}, "output_metadata": {"answer": {"is_stream": true, "status": "Finished"}}}
      
      data: {"event": "RunOutput", "run_id": "4c185c72-1bb0-4beb-a288-f7a73e37fc3b_python_oHG7_1c9fb0ac-0f45-4dbc-bf97-8e4175fd991c", "timestamp": "2025-04-30T11:55:24.957091Z", "outputs": {"python_output": "Hello: Hello! What can I help you with?"}, "output_metadata": {"python_output": {"is_stream": false, "status": "Finished"}}}
    • Descrição dos campos:

      Nome do campo

      Tipo

      Descrição

      event

      string

      Tipo de evento, fixo como RunOutput.

      run_id

      string

      Identificador exclusivo da execução atual.

      timestamp

      string

      Timestamp da ocorrência do evento, seguindo o padrão ISO 8601.

      outputs

      object

      Dicionário contendo os resultados finais de saída do fluxo. Sua estrutura específica depende das saídas definidas durante o design do fluxo.

      output_metadata

      object

      Dicionário contendo metadados de saída do fluxo. As chaves são os nomes das saídas (correspondentes às chaves em outputs), e os valores são objetos contendo metadados para essa saída (como is_stream e status).

    Evento RunTerminated

    • Definição: O evento RunTerminated marca o fim da execução. Geralmente é enviado como o último evento no fluxo SSE de uma execução.

    • Exemplo de payload:

      data: {"event": "RunTerminated", "run_id": "8f92b1a6-4d69-422a-a080-50713e488b56", "timestamp": "2025-04-25T08:57:15.212791Z", "flow_run_info": {"run_id": "8f92b1a6-4d69-422a-a080-50713e488b56", "status": "Completed", "error": null, "otel_trace_id": "0x00000000000000000000000000000000"}}
    • Descrição dos campos:

      Nome do campo

      Tipo

      Descrição

      event

      string

      Tipo de evento, fixo como RunTerminate.

      run_id

      string

      Identificador exclusivo da execução atual.

      timestamp

      string

      Timestamp da ocorrência, seguindo o padrão ISO 8601.

      flow_run_info

      object

      Contém as informações de status final de toda a execução.

      ∟ run_id

      string

      Identificador exclusivo da execução (dentro de flow_run_info, igual ao run_id externo).

      ∟ status

      string

      Status final da execução (dentro de flow_run_info), como Completed, Failed ou Canceled.

      ∟ error

      object ou null

      (Em flow_run_info) Se a execução falhou, contém o objeto de mensagem de erro; caso contrário, é null.

      ∟ otel_trace_id

      string

      (Em flow_run_info) ID de rastreamento OpenTelemetry associado a esta execução (pode estar vazio ou com valor zero).

Método de chamada compatível com OpenAI

Fluxos de aplicação do tipo chat implantados suportam chamadas compatíveis com OpenAI e podem ser utilizados por clientes que suportam OpenAI.

Método baseado na API OpenAI

Este exemplo demonstra chamadas com streaming usando comandos cURL. Veja os exemplos de requisição e resposta:

Exemplo de requisição:

curl --location '<Endpoint>/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "default",  
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user", 
            "content": "Who are you?"
        }
    ],
    "stream":true
}'

A tabela a seguir descreve os parâmetros da requisição.

Parâmetro

Descrição

--location '<Endpoint>/v1/chat/completions'

URL de destino da requisição. Substitua <Endpoint> pelo endpoint obtido na Etapa 1.

--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Cabeçalho HTTP. Substitua $DASHSCOPE_API_KEY pelo token obtido na Etapa 1.

"model": "default"

Nome do modelo, fixo como default.

"stream":true

Especifica se as informações retornadas serão em streaming. Observação: O streaming é suportado apenas quando um nó LLM é usado como nó de saída do fluxo de aplicação (um nó LLM é a entrada direta para o nó final).

Exemplo de resposta:

data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"finish_reason":null,"delta":{"content":"I am"},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":"a large"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":"language model"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":"created by Alibaba Cloud"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":". I am called Qwen."},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: {"choices":[{"delta":{"content":""},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1715931028,"system_fingerprint":null,"model":"qwen-plus","id":"chatcmpl-3bb05cf5cd819fbca5f0b8d67a025022"}

data: [DONE]

Integração com outros clientes

Este exemplo demonstra a integração com o ChatBox v1.13.4 na plataforma Windows.

  1. Baixe e instale o Chatbox.

  2. Abra o ChatBox e configure o nome do provedor de modelo, como LangStudio, conforme abaixo.

    image

  3. Selecione o provedor de modelo configurado e defina os parâmetros de requisição do serviço.

    image

    A tabela a seguir descreve os principais parâmetros.

    Parâmetro

    Descrição

    API Mode

    Fixo como OpenAI API Compatible.

    API Key

    Defina como o token do serviço implantado. Consulte Obter o endpoint e o token na aba Overview.

    API Host

    Defina como o endpoint do serviço implantado (consulte Obter o endpoint e o token na aba Overview) e adicione o sufixo /v1 ao final. Este exemplo usa um endpoint de internet. Portanto, o host da API é http://langstudio-20250319153409-xdcp.115770327099****.cn-hangzhou.pai-eas.aliyuncs.com/v1.

    API Path

    Fixo como /chat/completions.

    Model

    Clique em New e insira um Model ID personalizado, como qwen3-8b.

  4. Chame o serviço implantado na caixa de diálogo de chat.

    image

Visualizar registros de rastreamento

Após chamar um serviço, o sistema gera automaticamente um registro de rastreamento. Na aba Tracing Analysis, localize o registro de rastreamento desejado e clique em View Trace na coluna Actions.

image

Os dados de rastreamento permitem visualizar as informações de entrada e saída de cada nó no fluxo de aplicação, como os resultados de recuperação do banco de dados vetorial ou as informações de entrada e saída do nó LLM.

Apêndice: Histórico de chat

Para fluxos de aplicação baseados em chat, o LangStudio oferece um recurso para armazenar o histórico de conversas de múltiplas rodadas. Você pode optar por usar armazenamento local ou externo para salvar o histórico de chat.

Tipos de armazenamento

  • Armazenamento local: O serviço utiliza o disco local para criar automaticamente um banco de dados SQLite chamado chat_history.db na instância EAS onde o fluxo de aplicação está implantado, a fim de salvar o histórico de chat. O caminho padrão de armazenamento é /langstudio/flow/. Note que o armazenamento local não suporta implantação com múltiplas instâncias. Verifique regularmente o uso do disco local. Também é possível visualizar ou excluir o histórico de chat usando a API fornecida abaixo. Se uma instância EAS for removida, o histórico de chat relacionado também será apagado.

  • Armazenamento externo: Suporta ApsaraDB RDS for MySQL. Para usar armazenamento externo, configure uma conexão RDS MySQL para armazenar o histórico de chat ao implantar um serviço. Para mais informações, consulte Configuração de conexão de serviço - Banco de dados. O serviço cria automaticamente tabelas com sufixo correspondente ao nome do serviço no banco de dados RDS MySQL configurado. Por exemplo, o serviço cria a tabela langstudio_chat_session_<Service name> para armazenar a sessão de chat e a tabela langstudio_chat_history_<Service name> para armazenar o histórico de chat.

Suporte a sessão ou usuário

Cada requisição de chat para um fluxo de aplicação é stateless. Se desejar que múltiplas requisições sejam tratadas como a mesma conversa, configure manualmente o cabeçalho da requisição. Para informações sobre como fazer chamadas, consulte Fazer chamadas de API.

Cabeçalho da requisição

Tipo de dado

Descrição

Observação

Chat-Session-Id

String

ID da sessão. Para cada requisição de serviço, o sistema atribui automaticamente um identificador exclusivo à sessão para distinguir entre diferentes sessões e o retorna através do campo Chat-Session-Id no Response Header.

IDs de sessão personalizados são suportados. Para garantir unicidade, um ID de sessão deve ter entre 32 e 255 caracteres e pode conter letras, dígitos, sublinhados (_), hífens (-) e dois pontos (:).

Chat-User-Id

String

ID do usuário, que identifica o usuário ao qual o chat pertence. O sistema não atribui automaticamente um ID de usuário. IDs de usuário personalizados são suportados.

-

API de histórico de chat

O serviço de fluxo de aplicação também fornece operações de API para gerenciamento de dados de histórico de chat, permitindo visualizar e excluir esses dados facilmente. Obtenha o esquema completo da API enviando uma requisição GET para {Endpoint}/openapi.json. Esse esquema é construído com base no padrão Swagger. Para uma compreensão e exploração mais intuitivas dessas operações de API, recomendamos o uso do Swagger UI para realizar operações de visualização, tornando o processo mais simples e claro.