thiagonishimura commited on
Commit
71f0c20
·
verified ·
1 Parent(s): bbae018

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +64 -1
README.md CHANGED
@@ -45,4 +45,67 @@ Para rodar o modelo localmente utilizando apenas CPU, recomendamos a biblioteca
45
 
46
  ### Instalação
47
  ```bash
48
- pip install llama-cpp-python
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
  ### Instalação
47
  ```bash
48
+ pip install llama-cpp-python
49
+ ```
50
+
51
+ ### Exemplo de Código (Python)
52
+ ```bash
53
+ from llama_cpp import Llama
54
+
55
+ def generate_spatial_query(prompt: str, model_path: str) -> str:
56
+ """
57
+ Gera uma consulta PostGIS a partir de linguagem natural utilizando o TerraModel.
58
+
59
+ Args:
60
+ prompt (str): A pergunta em linguagem natural.
61
+ model_path (str): O caminho local para o arquivo .gguf.
62
+
63
+ Returns:
64
+ str: A consulta SQL gerada pelo modelo.
65
+ """
66
+ # Instanciação do modelo otimizada para CPU
67
+ llm = Llama(
68
+ model_path=model_path,
69
+ n_ctx=2048, # Janela de contexto
70
+ n_threads=8, # Ajuste para a quantidade de núcleos físicos da sua CPU
71
+ verbose=False
72
+ )
73
+
74
+ # System Prompt exato utilizado no fine-tuning do TerraModel
75
+ system_prompt = """Você é o TerraModel, um especialista em análise geoespacial e PostgreSQL/PostGIS.
76
+ Sua tarefa é traduzir perguntas em linguagem natural para consultas SQL rigorosas e otimizadas.
77
+
78
+ Você deve basear sua sintaxe ESTRITAMENTE no seguinte esquema de banco de dados:
79
+ CREATE TABLE public.dados_deter (gid integer, fid varchar, classname varchar, quadrant varchar, path_row varchar, view_date date, sensor varchar, satellite varchar, areauckm numeric, uc varchar, areamunkm numeric, municipali varchar, geocodibge varchar, uf varchar, geom geometry);
80
+ Nota: Use unaccent() para buscar textos."""
81
+
82
+ # Formatação ChatML requerida pelo Qwen2.5-Coder
83
+ formatted_prompt = f"<|im_start|>system\n{system_prompt}<|im_end|>\n<|im_start|>user\n{prompt}<|im_end|>\n<|im_start|>assistant\n"
84
+
85
+ # Inferência
86
+ response = llm(
87
+ formatted_prompt,
88
+ max_tokens=256,
89
+ stop=["<|im_end|>"],
90
+ temperature=0.1 # Temperatura baixa para garantir determinismo na sintaxe SQL
91
+ )
92
+
93
+ return response['choices'][0]['text'].strip()
94
+
95
+ # Exemplo de uso
96
+ if __name__ == "__main__":
97
+ pergunta = "Calcule a área total em hectares dos polígonos que representam áreas de desmatamento e que estão dentro de um raio de 10 km de um ponto específico."
98
+ caminho_gguf = "./terramodel-7b-q4_k_m.gguf"
99
+
100
+ sql_gerado = generate_spatial_query(pergunta, caminho_gguf)
101
+ print("Query Gerada:\n", sql_gerado)
102
+ ```
103
+
104
+ ## 📊 Avaliação e Desempenho
105
+ O modelo foi submetido a um rigoroso benchmark empírico. A versão TerraModel 7B Q8 atingiu uma Acurácia de Execução de 82.00% no PostGIS, superando APIs comerciais como o GPT-4o-mini em cenários de inferência zero-shot focados no esquema do projeto.
106
+
107
+ Para aprofundamento metodológico, métricas de Throughput de memória e validação semântica (RAGAS), consulte o artigo científico completo vinculado a este projeto.
108
+
109
+ ## 🔗 Conjunto de Dados e Reprodutibilidade
110
+ O dataset sintético com as 3.000 amostras (pares NL-SQL) utilizadas para a injeção de conhecimento topológico e as métricas de benchmark estão disponíveis no repositório do GitHub:
111
+ 👉 [Acesse o Repositório](https://github.com/thiagonishimura/terramodel)