Pular para o conteúdo principal

Guia da API Seedance 2.0: tutorial passo a passo de geração de vídeo

Aprenda a usar a Seedance 2 API com este tutorial passo a passo em Python. Domine text-to-video, interpolação de imagens e entradas multimodais via BytePlus Ark.
Actualizado 23 de set. de 2026

Explore com IA

ChatGPTClaudePerplexity

Neste tutorial, vou mostrar como usar a API BytePlus Ark para interagir com a Seedance 2 usando Python. 

Seedance 2 é um poderoso modelo de IA generativa da ByteDance que funciona como um "diretor multimodal", capaz de processar texto, imagens, vídeo e áudio ao mesmo tempo para criar sequências cinematográficas com áudio sincronizado. Seja para animar imagens estáticas ou dar vida a prompts de texto complexos, este guia vai te conduzir pela configuração e implementação. 

Gerando uma chave de API da Seedance 2

Para começar, precisamos criar uma conta na BytePlus e gerar uma chave de API. Para isso:

  1. Acesse o site oficial da BytePlus e crie uma conta.
  2. Vá para a página de criação da chave de API e clique em “Create API Key”.

Essa chave é usada para fazer requisições à ModelArk API, a API oficial deles. 

A boa prática é armazenar a chave em um arquivo chamado .env na mesma pasta onde escrevemos nossos scripts Python. Mantenha a chave em sigilo, pois qualquer pessoa pode usá-la para interagir com a API pela sua conta.

Cole a chave de API no arquivo .env com o seguinte formato:

ARK_API_KEY=<paste_api_key_here>

Ativando o modelo Seedance 2 e estrutura de preços

Para usar a Seedance 2, primeiro precisamos ativar o modelo: 

Interface screenshot showing how to activate the Seedance 2.0 model.

Observe que o uso da API não é gratuito e ativar a Seedance 2 exige a compra de créditos específicos do modelo. Para este artigo, comprei um pacote de 7 milhões de tokens para a Seedance 2 por US$ 30,10. 

Screenshot of the Seedance 2 token purchase interface.

Infelizmente, os tokens são específicos por modelo. Isso significa que, se comprarmos tokens para as versões fast ou mini da Seedance 2, não poderemos usá-los no modelo base.

Abaixo está uma tabela com os planos de preços da API:

Como gerar vídeos com a Seedance 2 API em Python

Incluí os scripts completos correspondentes ao código criado neste tutorial neste repositório do GitHub.

Nesta seção, vamos aprender a fazer uma requisição de texto para vídeo para gerar este vídeo:

1. Configurando seu ambiente Python e SDK

Para conectar à API BytePlus Ark usando Python, vamos usar o pacote oficial byteplus-python-sdk-v2. 

A forma mais fácil de configurar as dependências deste projeto é criar um ambiente Anaconda e instalar o arquivo requirements.txt, assim:

git clone git@github.com:fran-aubry/seedance2-tutorial.git
conda create --name seedance2 python=3.11
conda activate seedance2
pip install -r requirements.txt

2. Inicializando o cliente Python do BytePlus Ark

Crie um novo script chamado text_to_video.py na mesma pasta do arquivo .env que criamos antes.

Primeiro, precisamos importar os pacotes necessários:

import os
from byteplussdkarkruntime import Ark
from dotenv import load_dotenv

Em seguida, carregamos a chave de API do arquivo .env usando a função load_dotenv():

load_dotenv()
API_KEY = os.getenv("ARK_API_KEY")

Agora inicializamos o cliente Ark, que permite fazer requisições para a API BytePlus Ark. 

Usamos a biblioteca os para obter a chave de API das variáveis de ambiente e definimos a base URL apropriada para acesso internacional à API:

client = Ark(
    api_key=os.getenv("ARK_API_KEY"),
    base_url="https://ark.ap-southeast.bytepluses.com/api/v3"
)

Por fim, definimos um prompt e usamos a função content_generation.tasks.create() do cliente para gerar o vídeo:

prompt = """
A cinematic close-up of a weary but hopeful female astronaut inside a dimly lit, dusty spaceship cabin. 
Soft blue light illuminates her face. 
She takes a deep breath, showing subtle emotional relief, looks directly into the camera, and says: 
'We finally made it. The atmosphere is stable.' 
The ambient sound of a low, rhythmic spaceship engine hums in the background.
"""
response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        }
    ],
    generate_audio=True,
    ratio="16:9",
    duration=8,
    watermark=True,
    resolution="480p",
)
task_id = response.id
print(f"Task successfully submitted! Task ID: {task_id}")

Após solicitar a geração do vídeo, não recebemos o vídeo imediatamente, pois ele leva algum tempo para ser criado. 

Isso significa que a variável response não é o vídeo em si. 

Em vez disso, é um objeto que contém informações sobre a tarefa de geração do vídeo. 

Em particular, ele contém o identificador da tarefa, que permite acompanhar o andamento da geração e fazer o download assim que o modelo terminar.

3. Acompanhando o status da geração (polling de tarefa)

Podemos recuperar o status de uma tarefa informando o identificador à função content_generation.tasks.get(), assim:

task = client.content_generation.tasks.get(task_id=task_id)
status = task.status
print(f"Status: {status}")

Para facilitar o acompanhamento, criamos um novo script utils.py na mesma pasta e adicionamos esta função que acompanha o progresso do vídeo, dado o cliente e o id da tarefa:

import time
import requests

def poll_task(client, task_id, poll_interval=5):
    while True:
        try:
            task_status = client.content_generation.tasks.get(task_id=task_id)
            status = getattr(task_status, "status", None) or (task_status.get("status") if isinstance(task_status, dict) else None)
            
            if status == "succeeded":
                print("\nTask completed successfully.")
                return task_status.content.video_url
                
            elif status == "failed":
                error_details = getattr(task_status, "error", "Unknown error occurred during processing.")
                raise RuntimeError(f"Task failed: {error_details}")
                
            print(".", end="", flush=True)
            time.sleep(poll_interval)
        except Exception as e:
            if isinstance(e, RuntimeError):
                raise
            print(f"\nWarning: Error polling task (will retry): {e}")
            time.sleep(poll_interval)

4. Baixando o vídeo gerado com Python requests

A função poll_task() que implementamos acima retorna o vídeo

Agora que conseguimos acompanhar o processo de geração, só precisamos de uma forma de baixá-lo quando terminar. 

Como a API BytePlus Ark retorna uma URL direta para o arquivo de vídeo gerado dentro da resposta da tarefa, podemos baixá-lo usando a biblioteca requests.

Aqui vai uma função que faz isso:

def download_video(url, output_path = "video.mp4"):
    try:
        print(f"Downloading video from {url} to {output_path}...")
        response = requests.get(url, stream=True)
        response.raise_for_status()
        
        with open(output_path, 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"Video successfully downloaded to '{output_path}'")
        return True
    except Exception as e:
        print(f"Error downloading video: {e}")
        return False

Script Python completo: texto para vídeo com Seedance 2

Juntando tudo, aqui está um script completo para gerar um vídeo a partir de um prompt de texto usando a Seedance 2:

import os
from byteplussdkarkruntime import Ark
from dotenv import load_dotenv
import utils

load_dotenv()
API_KEY = os.getenv("ARK_API_KEY")

client = Ark(
    api_key=os.getenv("ARK_API_KEY"),
    base_url="https://ark.ap-southeast.bytepluses.com/api/v3"
)

prompt = """
A cinematic close-up of a weary but hopeful female astronaut inside a dimly lit, dusty spaceship cabin. 
Soft blue light illuminates her face. 
She takes a deep breath, showing subtle emotional relief, looks directly into the camera, and says: 
'We finally made it. The atmosphere is stable.' 
The ambient sound of a low, rhythmic spaceship engine hums in the background.
"""

response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        }
    ],
    generate_audio=True,
    ratio="16:9",
    duration=8,
    watermark=True,
    resolution="480p",
)

task_id = response.id
print(f"Task successfully submitted! Task ID: {task_id}")

# Wait for the video to finish generating
video_url = utils.poll_task(client, task_id)

utils.download_video(video_url, "./videos/space.mp4")

Referência dos principais parâmetros da Seedance 2 API

Abaixo está uma lista de valores aceitos para os parâmetros centrais de uma requisição de geração de vídeo:

A table displaying the core parameters of Seedance 2 their available values. The 'duration' parameter accepts values from 4s to 15s. The 'aspect_ratio' parameter accepts 16:9, 4:3, 1:1, 3:4, 9:16, and 21:9. The 'resolution' parameter accepts 480p, 720p, 1080p, and 4k

Guia avançado: recursos de image-to-video da Seedance 2.0

Na seção anterior, aprendemos a gerar um vídeo usando um prompt de texto. A Seedance 2 também aceita entradas de imagem, vídeo e áudio, então vamos começar por imagens.

Usando imagens de referência para consistência de personagens

Para testar entradas de imagem, gerei dois personagens com IA para usar em uma cena no estilo sitcom.

image9.png

Podemos fornecer imagens de referência ao modelo adicionando-as ao campo content da requisição, assim:

response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        },
        {
            "type": "image_url",
            "image_url": {
                "url": utils.load_image("./images/male-character.png")
            },
            "role": "reference_image"
        },
        {
            "type": "image_url",
            "image_url": {
                "url": utils.load_image("./images/female-character.png")
            },
            "role": "reference_image"
        }
    ],
    generate_audio=True,
    ratio="16:9",
    duration=15,
    watermark=True,
    resolution="480p",
)

Para este vídeo, usei o seguinte prompt:

Context: A cozy, warmly lit independent coffee shop counter with wooden accents.
Reference: 
- The male barista's face and clothing follow @Image1.
- The female customer's face and styling follow @Image2.

Action & Dialogue (10 Seconds Total):

0:00 - 0:04: 
Medium close-up on the male barista (@Image1) standing behind the counter,
next to the coffee machine. He leans across the counter with a smooth, 
flirtatious smirk, acting like he is making a highly exclusive offer: 
"The WiFi password? It's actually my phone number: five-five-five, zero-one—"

0:04 - 0:07: 
Camera cuts to the female customer (@Image2), instantly interrupting him. 
She holds up her phone screen toward him, entirely unimpressed: 
"Your network is called 'Free_Guest_WiFi' and there is literally no password."

0:07 - 0:08: Quick cut back to the two-shot. 
Flustered, the barista becomes visibly embarrassed, his confident smirk 
instantly vanishing as he nervously breaks eye contact.

0:08 - 0:10: Camera cuts back to a medium shot of the female customer (@Image2). 
She lowers her phone, tapping her fingers lightly on the counter, 
and delivers her order with perfect deadpan clarity: 
"It will be an espresso please. No milk, no sugar, and no phone number."

Framing/Timing: 
Clean cuts to perfectly pace the comedic timing over exactly 10 seconds.

Tone/Audio: 
Lighthearted sitcom vibe. Synchronized voice generation for the dialogue, a subtle low cafe background hum, and the sound of the customer's fingers lightly tapping the wooden counter at the end.

Note que o prompt usa @Image1 e @Image2 para se referir às imagens na ordem em que foram fornecidas na lista.

Infelizmente, ao tentar gerar este vídeo, recebi um erro dizendo: 

The request failed because the input image may contain a real person.

Percebi isso de forma consistente ao tentar usar a Seedance 2 com imagem de referência contendo um humano realista, mesmo gerado por IA. 

Para contornar, converti os personagens em estilo cartoon e tentei novamente.

Dessa vez funcionou perfeitamente e o resultado ficou exatamente como eu queria.

O código completo deste exemplo está no arquivo image_to_video.py.

Definindo o primeiro e o último quadro para animação guiada

O exemplo anterior mostrou como usar imagens como referência definindo ”role”: “reference_image” na requisição.

A Seedance 2 aceita outras duas funções de imagem:

  • ”first_frame”: instrui o modelo a usar a imagem fornecida como o quadro inicial exato do vídeo gerado. É a configuração padrão para geração direta de Image-to-Video.
  • ”last_frame”: instrui o modelo a encerrar o vídeo gerado nessa imagem específica. Observação: você só pode usar isso se também fornecer um first_frame na mesma requisição, pedindo ao modelo para interpolar o vídeo entre as duas imagens.

Testei isso gerando uma sequência de quadros iniciais mostrando um laboratório de IA robótico tentando recriar plantas em um mundo onde a vida natural desapareceu. 

image11.png

Para cada quadro, gerei um vídeo usando esse quadro como first frame. Veja como estruturar cada requisição:

response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        },
        {
            "type": "image_url",
            "image_url": {
                "url": utils.load_image("./images/robot-lab1.jpeg")
            },
            "role": "first_frame"
        }
    ],
    generate_audio=False,
    ratio="16:9",
    duration=4,
    watermark=True,
    resolution="480p",
)

Gerei os vídeos sem áudio porque o áudio não ficaria consistente, já que cada vídeo foi gerado separadamente. Aqui está o resultado de juntar os cinco clipes:

O script completo usado para gerar um vídeo com base em um quadro inicial está aqui.

Interpolação de imagens com last_frame

Neste exemplo, fornecemos um first_frame e um last_frame para gerar um vídeo entre os dois.

Gerei duas imagens do mesmo cômodo, uma vazia sem mobília e outra com o ambiente totalmente mobiliado. A ideia é gerar um vídeo que anime o processo de mobiliar o cômodo.

image5.png

O prompt que usei descreveu como eu queria que os móveis aparecessem no vídeo:

A dynamic, fast-paced sequence where furniture pops into existence piece by piece. First, a rug rapidly unfolds itself, then the sofa drops from just above the floor with a heavy, realistic bounce. Lamps, artwork, and plants quickly spring into reality one after another. Vibrant lighting, photorealistic materials, lively and snappy energetic rhythm.

Aqui está a requisição:

response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        },
        {
            "type": "image_url",
            "image_url": {
                "url": utils.load_image("./images/room-start.png")
            },
            "role": "first_frame"
        },
        {
            "type": "image_url",
            "image_url": {
                "url": utils.load_image("./images/room-end.png")
            },
            "role": "last_frame"
        }
    ],
    generate_audio=True,
    ratio="16:9",
    duration=8,
    watermark=True,
    resolution="480p",
)

E aqui está o resultado:

O script completo está aqui.

Entradas multimodais da Seedance 2.0: adicionando referências de áudio e vídeo

Como modelo multimodal, a Seedance 2 vai além de texto e imagens. Ela também aceita entradas de vídeo e áudio. Essas entradas podem ser usadas como referências de estilo, para conduzir movimento ou para edição de vídeo.

Este exemplo do site oficial ilustra isso muito bem. Eles pegaram uma cena de dois atores lutando e usaram isso para conduzir a ação, substituindo os atores por imagens de referência:

Enviando uma entrada de vídeo

Assim como com imagens, entradas de vídeo são fornecidas no parâmetro content da requisição. 

No entanto, até o momento, entradas de vídeo aceitam apenas URLs. Isso significa que, se quisermos usar um vídeo salvo localmente na máquina, teremos que hospedá-lo antes.

Para este exemplo, usei este vídeo de skate gratuito do Marc Espejo. A ideia foi usar a Seedance 2 para adicionar alguns VFX. Aqui está o resultado:

Para gerar isso, usei a seguinte requisição:

response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        },
        {
            "type": "video_url", 
            "video_url": {
                "url": "https://www.pexels.com/download/video/38213009/"
            },
            "role": "reference_video" 
        }
    ],
    generate_audio=True,
    ratio="16:9",
    duration=6,
    watermark=True,
    resolution="480p",
)

O script completo está aqui. O prompt que usei foi:

The original skater, environment, and camera movement must remain 
unchanged and untouched. 

Only add gaming-style visual effects: intense glowing sparks and electric arcs 
streaming from the skateboard-rail contact point during the grind, and a 
brilliant energy shockwaves and dust burst at the jump/pop. 

Enviando uma entrada de áudio

Para testar entradas de áudio, gerei uma imagem para um personagem e usei Fish Audio para gerar uma faixa de áudio com diferentes emoções.

image8.png

No áudio, eu queria algumas emoções distintas para ver se a Seedance 2 conseguiria identificá-las ao gerar o vídeo. 

O Fish Audio AI permite especificar emoções usando [emotion] no prompt, então foi perfeito para a tarefa. Aqui está o prompt de áudio que usei:

[sighing] Nothing much is happening today. [surprised] Wait a minute... what are those on my ears?[laughing] Oh my gosh, I can't believe I got piercings last night! [angry] But hold on, I specifically told you not to let me do it!

Para carregar o arquivo de áudio, escrevi esta função que adicionei ao utils.py:

def load_audio(file_path):
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"Audio file not found at: {file_path}")

    # Guess the mime type (e.g., audio/mpeg for mp3, audio/wav for wav)
    mime_type, _ = mimetypes.guess_type(file_path)
    if mime_type is None:
        mime_type = "audio/mpeg" # Fallback to mp3 just in case

    with open(file_path, "rb") as audio_file:
        encoded_string = base64.b64encode(audio_file.read()).decode('utf-8')
        
    return f"data:{mime_type};base64,{encoded_string}"

Fornecer o áudio ao modelo funciona de forma muito semelhante às imagens. 

Carregamos como data URI em base64 e enviamos ao modelo no parâmetro contents, assim:

response = client.content_generation.tasks.create(
    model="dreamina-seedance-2-0-260128",
    content=[
        {
            "type": "text",
            "text": prompt,
        },
        {
            "type": "image_url",
            "image_url": {
                "url": utils.load_image("./images/cat.png")
            },
            "role": "reference_image"
        },
        {
            "type": "audio_url",
            "audio_url": {
                "url": utils.load_audio("./audio/voice.mp3")
            },
            "role": "reference_audio"
        }
    ],
    ratio="16:9",
    duration=11,
    watermark=True,
    resolution="480p",
)

Este é o vídeo que a Seedance 2 gerou:

No geral, acho que o desempenho foi bem sólido. 

De algum modo, perto do fim, o personagem começou a chorar, o que não era exatamente o que eu esperava para uma emoção de raiva. 

Mas vale notar que a Seedance 2 não recebeu o prompt de áudio; ela só recebeu o arquivo final.

O script completo está aqui.

Ideia de projeto com Seedance 2.0: construindo uma ferramenta de transição de vídeo com IA

Se você quer um projeto divertido para fixar o que aprendeu aqui, sugiro escrever um script Python que receba dois vídeos como entrada e:

  1. Extraia o último quadro do primeiro vídeo.
  2. Extraia o primeiro quadro do segundo vídeo.
  3. Use a interpolação de vídeo que vimos aqui para gerar uma transição entre os dois vídeos. 
  4. Por fim, faça o merge dos três vídeos em um único arquivo.

Conclusão

Neste artigo, exploramos como usar a Seedance 2 API para gerar vídeos a partir de texto, imagens e áudio. 

Cobrimos a configuração do ambiente, a conexão com a API e o gerenciamento das diferentes mídias necessárias para tirar ideias do papel. O processo é direto, e a possibilidade de combinar essas entradas abre possibilidades criativas interessantes.

No geral, achei o modelo confiável e com resultados consistentes. 

No entanto, não parece um grande salto em relação a outros modelos de geração de vídeo do mercado. Ele cumpre bem o papel, mas não necessariamente muda o jogo.

Por fim, embora eu entenda os motivos das diretrizes de segurança que restringem o uso de rostos humanos reais nas entradas, achei que essas regras limitam bastante o uso prático do modelo. 

Quando tentei usar a ferramenta para aprimorar meu próprio conteúdo, ela rejeitou consistentemente qualquer vídeo que mostrasse meu rosto. 

Isso cria uma barreira para criadores que querem produzir mídia personalizada, e é algo a considerar se você pretende usar a ferramenta em projetos profissionais ou pessoais.

Seedance 2.0: perguntas frequentes

O que é a Seedance 2?

Seedance 2 é um modelo de IA generativa multimodal da ByteDance que funciona como um "diretor multimodal", capaz de processar simultaneamente entradas de texto, imagem, vídeo e áudio para criar sequências cinematográficas.

Existe um plano gratuito para a Seedance?

Não. Não há um plano gratuito; ativar e usar a Seedance 2 API exige a compra de créditos específicos do modelo pelo console da BytePlus Ark.

Posso usar imagens de referência com rostos humanos realistas nos meus vídeos Seedance?

Não. A API rejeita de forma consistente entradas com rostos humanos realistas, mesmo que gerados por IA, geralmente retornando um erro. Converter personagens para estilo cartoon é uma alternativa sugerida.

A Seedance 2 é multimodal?

Sim. A Seedance 2 é um modelo multimodal, ou seja, consegue processar e integrar entradas de texto, imagens, vídeo e áudio para criar conteúdo com vídeo e áudio sincronizados.


François Aubry's photo
Author
François Aubry
LinkedIn
Engenheiro de pilha completa e fundador da CheapGPT. Ensinar sempre foi minha paixão. Desde meus primeiros dias como estudante, eu buscava ansiosamente oportunidades para dar aulas particulares e ajudar outros alunos. Essa paixão me levou a fazer um doutorado, onde também atuei como assistente de ensino para apoiar meus esforços acadêmicos. Durante esses anos, encontrei imensa satisfação no ambiente tradicional da sala de aula, promovendo conexões e facilitando o aprendizado. Entretanto, com o advento das plataformas de aprendizagem on-line, reconheci o potencial transformador da educação digital. Na verdade, participei ativamente do desenvolvimento de uma dessas plataformas em nossa universidade. Estou profundamente comprometido com a integração dos princípios tradicionais de ensino com metodologias digitais inovadoras. Minha paixão é criar cursos que não sejam apenas envolventes e informativos, mas também acessíveis aos alunos nesta era digital.
Temas
Inteligência Artificial
Modelos de idiomas grandes

Principais cursos da DataCamp

Curso

Noções Básicas de Engenharia de Prompts.

1 h
236.5K
Saiba como escrever prompts eficazes com o ChatGPT para aplicar em seu fluxo de trabalho hoje mesmo.
Ver detalhesRight Arrow
Começar Curso
Ver maisRight Arrow
Relacionado

blog

Os 7 melhores geradores de vídeo com IA para 2026, com vídeos de exemplo

Conheça os melhores geradores de vídeo com IA disponíveis hoje, incluindo RunwayML, Synthesia, Colossyan, Pictory, DeepBrain AI, Invideo e os super esperados Sora e Veo da DeepMind.
Dr Ana Rojo-Echeburúa's photo

Dr Ana Rojo-Echeburúa

9 min

Tutorial

Primeiros passos com o Claude 3 e a API do Claude 3

Saiba mais sobre os modelos Claude 3, benchmarks de desempenho detalhados e como acessá-los. Além disso, descubra a nova API Python do Claude 3 para geração de texto, acesso a recursos de visão e streaming.
Abid Ali Awan's photo

Abid Ali Awan

Tutorial

Como criar aplicativos LLM com o tutorial LangChain

Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Moez Ali's photo

Moez Ali

12 min

Tutorial

Tutorial da API de assistentes da OpenAI

Uma visão geral abrangente da API Assistants com nosso artigo, que oferece uma análise aprofundada de seus recursos, usos no setor, orientação de configuração e práticas recomendadas para maximizar seu potencial em vários aplicativos de negócios.
Zoumana Keita 's photo

Zoumana Keita

14 min

Tutorial

Tutorial de Python: Streamlit

Este tutorial sobre o Streamlit foi criado para ajudar cientistas de dados ou engenheiros de aprendizado de máquina que não são desenvolvedores da Web e não estão interessados em passar semanas aprendendo a usar essas estruturas para criar aplicativos da Web.
Nadia mhadhbi's photo

Nadia mhadhbi

15 min

Tutorial

Criando agentes LangChain para automatizar tarefas em Python

Um tutorial abrangente sobre a criação de agentes LangChain com várias ferramentas para automatizar tarefas em Python usando LLMs e modelos de bate-papo usando OpenAI.
Ver MaisVer Mais