Saltar para o conteúdo principal
Versão: 2.0.0

Tradução agêntica em Gaia

A tradução agêntica do Prof. Andrew Ng é uma excelente demonstração de como coordenar vários "agentes" LLM para trabalhar numa única tarefa. Permite que vários LLMs mais pequenos (como o Llama-3 ou o Gemma-2) trabalhem em conjunto e produzam melhores resultados do que um único LLM grande (como o ChatGPT).

Gaia, com mais de 2000 nós que executam todos os tipos de LLms e bases de conhecimento ajustadas, oferece uma enorme oportunidade para as aplicações agênticas escolherem e utilizarem os seus próprios backends LLM.

Introdução ao agente de tradução do LLM

Este agente de tradução LLM foi concebido para facilitar a tradução exacta e eficiente em várias línguas. Ele emprega LLMs (Large Language Models) de código aberto para fornecer traduções de alta qualidade. Pode usar os seus próprios modelos afinados ou quaisquer LLMs no Hugging Face como o Meta's Llama 3.

Para obter comandos detalhados sobre como iniciar e executar este agente, visite GitHub - Second State/translation-agent.

Para começar, clone o Agente de Tradução.

git clone https://github.com/second-state/translation-agent.git

cd translation-agent
git checkout use_llamaedge

Em seguida, instalaremos um nó Gaia local, que fornece os serviços de API de back-end exigidos pelo agente. É claro que você pode usar nós Gaia da comunidade se não quiser começar o seu próprio.

curl -sSfL 'https://github.com/GaiaNet-AI/gaianet-node/releases/latest/download/install.sh' | bash

Você também precisará das seguintes configurações e pré-requisitos para executar o aplicativo do agente. Se você estiver usando um nó público do Gaia em vez do seu nó local, substitua o http://localhost:8080 com https://node_id.us.gaianet.network.

export OPENAI_BASE_URL="http://localhost:8080/v1"
export PYTHONPATH=${PWD}/src
export OPENAI_API_KEY="GAIANET"

pip install python-dotenv
pip install openai tiktoken icecream langchain_text_splitters

Demonstração 1: Executando agentes de tradução com Llama-3-8B

Primeiro, vamos executar o agente de tradução com o popular modelo Llama-3 da Meta AI. Seleccionamos o modelo Llama-3 mais pequeno (o modelo 8b) para esta demonstração. A tarefa de tradução é de chinês para inglês. O nosso texto de partida está em chinês, uma breve introdução ao antigo palácio real chinês, a Cidade Proibida.

Passo 1.1: Executar um nó Llama-3-8B Gaia

Configurar e descarregar o modelo. Uma vez que o tamanho do modelo é de 5,73 GB. Pode demorar algum tempo a descarregar.

gaianet init --config https://raw.githubusercontent.com/GaiaNet-AI/node-configs/main/llama-3-8b-instruct/config.json

Em seguida, utilize o seguinte comando para iniciar o nó Gaia.

início da gaianet

Passo 1.2 Executar o agente de tradução em cima da Llama-3-8B

Encontrar o exemplos/exemplo_script.py no repositório do seu agente clonado e revise seu código. Ele informa ao agente onde encontrar seu documento e como traduzi-lo. Altere o nome do modelo para o que está a usar, aqui estamos a usar Meta-Llama-3-8B-Instruct-Q5_K_M também altere as línguas de origem e de destino que pretende (aqui colocámos Chinês como língua de partida e Inglês como língua de chegada).

import os
import translation_agent as ta

if __name__ == "__main__":
source_lang, target_lang, country = "Chinese", "English", "Britain"

relative_path = "sample-texts/forbiddencity.txt"
script_dir = os.path.dirname(os.path.abspath(__file__))

full_path = os.path.join(script_dir, relative_path)

with open(full_path, encoding="utf-8") as file:
source_text = file.read()

print(f"Source text:\n\n{source_text}\n------------\n")

translation = ta.translate(
source_lang=source_lang,
target_lang=target_lang,
source_text=source_text,
country=country,
model="Meta-Llama-3-8B-Instruct-Q5_K_M",
)

print(f"Translation:\n\n{translation}")

Depois, pode encontrar um exemplos/textos de exemplo no seu repositório clonado. Coloque o ficheiro que pretende traduzir nesta pasta e obtenha o seu caminho. Aqui, porque nomeámos o nosso texto de origem forbiddencity.txto caminho relativo para o documento seria sample-texts/forbiddencity.txt.

Execute os comandos abaixo para que o seu ficheiro de texto seja traduzido para inglês.

cd exemplos
python exemplo_script.py

Aguarde alguns minutos e verá aparecer no ecrã do seu terminal uma versão totalmente traduzida.

Demonstração 2: Executando agentes de tradução com gemma-2-27b

A vantagem de executar o Agente de Tradução com o Gaia é a possibilidade de os utilizadores escolherem e incorporarem diferentes LLMs para diferentes tarefas agênticas. Para demonstrar este ponto, vamos agora alterar o LLM do agente de tradução de Llama-3-8b para o gemma-2-27b do Google, que tem um tamanho semelhante, mas tem uma pontuação mais elevada em muitos parâmetros de referência relacionados com a língua.

A tarefa de tradução é a mesma que a anterior. O nosso texto de partida está em chinês, uma breve introdução ao antigo palácio real chinês, a Cidade Proibida. O objetivo da tradução é o inglês.

Passo 2.1 Executar um nó Gaia gemma-2-27b

Configurar e descarregar o modelo. Uma vez que o tamanho do modelo é de 6,40 G, a transferência pode demorar algum tempo.

gaianet init --config https://raw.githubusercontent.com/GaiaNet-AI/node-configs/main/gemma-2-27b-it/config.json

Em seguida, utilize o seguinte comando para iniciar o nó Gaia.

início da gaianet

Passo 2.2 Executar o Agente de Tradução para correr em cima do gemma-2-27b

Encontrar o exemplos/exemplo_script.py no repositório do seu agente clonado e revise seu código. Ele informa ao agente onde encontrar seu documento e como traduzi-lo. Altere o nome do modelo para o que está a usar, aqui estamos a usar gemma-2-27b-it-Q5_K_M também altere as línguas de origem e de destino que pretende (aqui colocámos Chinês como língua de partida e Inglês como língua de chegada).

import os  
import translation_agent as ta

if __name__ == "__main__":
source_lang, target_lang, country = "Chinese", "English", "Britain"

relative_path = "sample-texts/forbiddencity.txt"
script_dir = os.path.dirname(os.path.abspath(__file__))

full_path = os.path.join(script_dir, relative_path)

with open(full_path, encoding="utf-8") as file:
source_text = file.read()

print(f"Source text:\n\n{source_text}\n------------\n")

translation = ta.translate(
source_lang=source_lang,
target_lang=target_lang,
source_text=source_text,
country=country,
model="gemma-2-27b-it-Q5_K_M",
)

print(f"Translation:\n\n{translation}")

Depois, pode encontrar um exemplos/textos de exemplo no seu repositório clonado. Coloque o ficheiro que pretende traduzir nesta pasta e obtenha o seu caminho. Aqui, porque nomeámos o nosso texto de partida forbiddencity.txto caminho relativo para o documento seria sample-texts/forbiddencity.txt.

Execute os comandos abaixo para que o seu ficheiro de texto seja traduzido para inglês.

cd exemplos    
python exemplo_script.py

O resultado traduzido em inglês pode ser consultado aqui.

Demonstração 3: Execução de agentes de tradução com o modelo de contexto longo Phi-3-Medium

Os modelos Llama-3 e Gemma-2 são óptimos LLMs, mas têm janelas de contexto relativamente pequenas. O agente requer que todo o texto caiba na janela de contexto do LLM, o que limita o tamanho dos artigos que pode traduzir. Para resolver este problema, poderíamos selecionar um LLM de código aberto com uma janela de contexto grande. Para esta demonstração, escolhemos o modelo Phi-3-medium-128k da Microsoft, que tem uma janela de contexto enorme de 128k (mais de 100 mil palavras ou o tamanho de vários livros).

Publicamos um longo artigo chinês sobre a colaboração da Cidade Proibida com o Palácio de Varsóvia através do nosso Agente de Tradução alimentado por um modelo Phi-3-medium-128k que iniciámos localmente.

Passo 3.1: Executar um nó Gaia Phi-3-medium-128k

Configurar e descarregar o modelo.

gaianet init --config https://raw.githubusercontent.com/GaiaNet-AI/node-configs/main/phi-3-medium-instruct-128k/config_full.json

Em seguida, utilize o seguinte comando para iniciar o nó Gaia com uma janela de contexto de 128k.

início da gaianet

Passo 3.2 Clonar e executar o Agente de Tradução em cima do Phi-3-medium-128k

Encontrar o exemplos/exemplo_script.py no repositório do seu agente clonado e revise seu código. Ele informa ao agente onde encontrar seu documento e como traduzi-lo. Altere o nome do modelo para o que está a usar, aqui estamos a usar Phi-3-medium-128k-instruct-Q5_K_M também altere as línguas de origem e de destino que pretende (aqui colocámos Chinês como língua de partida e Inglês como língua de chegada).

import os  
import translation_agent as ta

if __name__ == "__main__":
source_lang, target_lang, country = "Chinese", "English", "Britain"

relative_path = "sample-texts/long_article.txt"
script_dir = os.path.dirname(os.path.abspath(__file__))

full_path = os.path.join(script_dir, relative_path)

with open(full_path, encoding="utf-8") as file:
source_text = file.read()

print(f"Source text:\n\n{source_text}\n------------\n")

translation = ta.translate(
source_lang=source_lang,
target_lang=target_lang,
source_text=source_text,
country=country,
model="Phi-3-medium-128k-instruct-Q5_K_M",
)

print(f"Translation:\n\n{translation}")

Depois, pode encontrar um exemplos/textos de exemplo no seu repositório clonado. Coloque o ficheiro que pretende traduzir nesta pasta e obtenha o seu caminho. Aqui, porque nomeámos o nosso texto de origem artigo_longo.txto caminho relativo para o documento seria sample-texts/long_article.txt.

cd exemplos
python exemplo_script.py

Os resultados traduzidos foram impressionantes, com a tradução a captar as nuances e o contexto do texto original com grande fidelidade.

Avaliação da qualidade da tradução

Os três modelos, Llama-3-8B, gemma-2-27b e Phi-3-medium, apresentaram diferentes níveis de desempenho na tradução de conteúdos históricos e culturais complexos do chinês para o inglês.

A Llama-3-8B fornece uma tradução que capta eficazmente o conteúdo factual, mas mostra ocasionalmente rigidez na linguagem, possivelmente indicando uma abordagem de tradução direta que não adapta totalmente as expressões idiomáticas. Não mantém o título da secção e o formato do texto original e deixa algumas partes por traduzir.

Em contraste, a tradução de gemma-2-27b é bastante exacta e mantém o significado original do pequeno artigo introdutório da Cidade Proibida. A tradução de gemma-2-27b apresenta um fluxo suave e natural do inglês, sugerindo uma compreensão sofisticada das estruturas gramaticais da língua de partida e da língua de chegada. A escolha de palavras e de estruturas frásicas na produção de gemma-2-27b demonstra um elevado grau de subtileza linguística, sugerindo que pode ser adequada para traduzir textos formais e historicamente matizados.

O modelo Phi-3-medium-128k pode traduzir textos de livros de chinês para inglês. Demonstra capacidades robustas no tratamento de grandes volumes de conteúdo complexo, sugerindo um tratamento avançado da memória e consciência contextual. A qualidade da tradução mantém-se consistente mesmo com o aumento do tamanho do texto, indicando a utilidade do Phi em projectos que requerem traduções extensas e detalhadas. Mas pode ver-se que comete alguns erros, como confundir "Wenhua Hall" com "também conhecida como Cidade Proibida" no primeiro parágrafo.

No geral, cada modelo tem os seus pontos fortes, com o gemma-2-27b a destacar-se pela delicadeza linguística e o Phi-3-medium-128k por lidar com textos longos.

Conclusão

O Gaia proporciona uma forma fácil de selecionar e utilizar diferentes LLM de código aberto nas suas aplicações agênticas, de modo a tirar pleno partido das suas capacidades aperfeiçoadas para tarefas específicas.

Quando tiveres um nó local Gaia a funcionar, podes partilhá-lo com outros e ganhar $$$ ao aderir à rede Gaia!