@nine-lab/nine-connector 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/core/init.js +7 -53
- package/src/core/prompts.js +48 -0
- package/prompts/query-generator.md +0 -24
- package/prompts/table-filter.md +0 -21
package/package.json
CHANGED
package/src/core/init.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import readline from 'readline';
|
|
4
|
+
import { DEFAULT_PROMPTS } from './prompts.js'; // 분리한 프롬프트 가져오기
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* 1. .env 파일 생성 담당 함수
|
|
@@ -40,7 +41,7 @@ async function createEnvFile(rl) {
|
|
|
40
41
|
|
|
41
42
|
const envContent = Object.entries(answers)
|
|
42
43
|
.map(([key, val]) => `${key}=${val}`)
|
|
43
|
-
.join('\n');
|
|
44
|
+
.join('\n') + '\n';
|
|
44
45
|
|
|
45
46
|
fs.writeFileSync(envPath, envContent);
|
|
46
47
|
console.log('.env 파일 생성이 완료되었습니다.');
|
|
@@ -57,61 +58,14 @@ function createPromptFiles() {
|
|
|
57
58
|
fs.mkdirSync(promptDir, { recursive: true });
|
|
58
59
|
}
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
당신은 SQL 전문가입니다. 사용자의 질문을 분석하여 데이터베이스에서 조회해야 할 필수 테이블들만 선정하세요.
|
|
63
|
-
|
|
64
|
-
[전체 테이블 목록]
|
|
65
|
-
{schema_summary}
|
|
66
|
-
|
|
67
|
-
[사용자 질문]
|
|
68
|
-
"{question}"
|
|
69
|
-
|
|
70
|
-
[응답 규칙]
|
|
71
|
-
1. 반드시 JSON 형식으로만 응답하세요.
|
|
72
|
-
2. 질문을 해결하기 위해 반드시 참조해야 하는 테이블 이름만 'selected_tables' 배열에 넣으세요.
|
|
73
|
-
3. 만약 질문이 데이터베이스 조회와 관련이 없거나, 제공된 테이블 정보로 답할 수 없다면 'is_executable'을 false로 설정하세요.
|
|
74
|
-
4. 'reasoning' 필드에는 왜 해당 테이블들을 선택했는지 간략하게 설명하세요.
|
|
75
|
-
|
|
76
|
-
[응답 포맷]
|
|
77
|
-
{{
|
|
78
|
-
"reasoning": "선정 이유를 여기에 작성",
|
|
79
|
-
"selected_tables": ["table1", "table2"],
|
|
80
|
-
"is_executable": true
|
|
81
|
-
}}`,
|
|
82
|
-
|
|
83
|
-
'query-generator.md': `## SQL_GENERATE_PROMPT
|
|
84
|
-
당신은 SQL 생성기입니다. 제공된 테이블의 컬럼 정보를 바탕으로 사용자의 질문에 답하는 최적의 SQL 쿼리를 작성하세요.
|
|
85
|
-
|
|
86
|
-
[선택된 테이블 정보]
|
|
87
|
-
{detailed_schema}
|
|
88
|
-
|
|
89
|
-
[사용자 질문]
|
|
90
|
-
"{question}"
|
|
91
|
-
|
|
92
|
-
[데이터베이스 타입]
|
|
93
|
-
{db_type}
|
|
94
|
-
|
|
95
|
-
[응답 규칙]
|
|
96
|
-
1. 반드시 JSON 형식으로만 응답하세요.
|
|
97
|
-
2. SQL은 {db_type} 문법에 완벽하게 맞아야 하며, 즉시 실행 가능해야 합니다.
|
|
98
|
-
3. 쿼리문 안에 마크다운 코드 블록(\`\`\`sql)을 포함하지 마세요. 오직 순수 문자열로만 작성하세요.
|
|
99
|
-
4. 사용자가 이해하기 쉽도록 쿼리에 대한 설명(explanation)을 친절하게 작성하세요.
|
|
100
|
-
5. 존재하지 않는 컬럼이나 테이블은 절대 사용하지 마세요.
|
|
101
|
-
|
|
102
|
-
[응답 포맷]
|
|
103
|
-
{{
|
|
104
|
-
"sql": "SELECT ... FROM ... WHERE ...",
|
|
105
|
-
"explanation": "이 쿼리는 어떤 데이터를 어떻게 조회하는지에 대한 설명입니다."
|
|
106
|
-
}}`
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
Object.entries(prompts).forEach(([filename, content]) => {
|
|
61
|
+
// 외부에서 가져온 DEFAULT_PROMPTS 사용
|
|
62
|
+
Object.entries(DEFAULT_PROMPTS).forEach(([filename, content]) => {
|
|
110
63
|
const filePath = path.join(promptDir, filename);
|
|
111
|
-
|
|
64
|
+
// trim() 후 개행문자 추가하여 깔끔하게 저장
|
|
65
|
+
fs.writeFileSync(filePath, content.trim() + '\n', 'utf-8');
|
|
112
66
|
});
|
|
113
67
|
|
|
114
|
-
console.log('프롬프트 파일 생성이 완료되었습니다.');
|
|
68
|
+
console.log('프롬프트 파일(prompts/*.md) 생성이 완료되었습니다.');
|
|
115
69
|
}
|
|
116
70
|
|
|
117
71
|
/**
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export const DEFAULT_PROMPTS = {
|
|
2
|
+
'table-filter.md': `### TABLE_FILTER_PROMPT
|
|
3
|
+
당신은 SQL 전문가입니다. 사용자의 질문을 분석하여 데이터베이스에서 조회해야 할 필수 테이블들만 선정하세요.
|
|
4
|
+
|
|
5
|
+
[전체 테이블 목록]
|
|
6
|
+
{schema_summary}
|
|
7
|
+
|
|
8
|
+
[사용자 질문]
|
|
9
|
+
"{question}"
|
|
10
|
+
|
|
11
|
+
[응답 규칙]
|
|
12
|
+
1. 반드시 JSON 형식으로만 응답하세요.
|
|
13
|
+
2. 질문을 해결하기 위해 반드시 참조해야 하는 테이블 이름만 'selected_tables' 배열에 넣으세요.
|
|
14
|
+
3. 만약 질문이 데이터베이스 조회와 관련이 없거나, 제공된 테이블 정보로 답할 수 없다면 'is_executable'을 false로 설정하세요.
|
|
15
|
+
4. 'reasoning' 필드에는 왜 해당 테이블들을 선택했는지 간략하게 설명하세요.
|
|
16
|
+
|
|
17
|
+
[응답 포맷]
|
|
18
|
+
{{
|
|
19
|
+
"reasoning": "선정 이유를 여기에 작성",
|
|
20
|
+
"selected_tables": ["table1", "table2"],
|
|
21
|
+
"is_executable": true
|
|
22
|
+
}}`,
|
|
23
|
+
|
|
24
|
+
'query-generator.md': `### SQL_GENERATE_PROMPT
|
|
25
|
+
당신은 SQL 생성기입니다. 제공된 테이블의 컬럼 정보를 바탕으로 사용자의 질문에 답하는 최적의 SQL 쿼리를 작성하세요.
|
|
26
|
+
|
|
27
|
+
[선택된 테이블 정보]
|
|
28
|
+
{detailed_schema}
|
|
29
|
+
|
|
30
|
+
[사용자 질문]
|
|
31
|
+
"{question}"
|
|
32
|
+
|
|
33
|
+
[데이터베이스 타입]
|
|
34
|
+
{db_type}
|
|
35
|
+
|
|
36
|
+
[응답 규칙]
|
|
37
|
+
1. 반드시 JSON 형식으로만 응답하세요.
|
|
38
|
+
2. SQL은 {db_type} 문법에 완벽하게 맞아야 하며, 즉시 실행 가능해야 합니다.
|
|
39
|
+
3. 쿼리문 안에 마크다운 코드 블록(\`\`\`sql)을 포함하지 마세요. 오직 순수 문자열로만 작성하세요.
|
|
40
|
+
4. 사용자가 이해하기 쉽도록 쿼리에 대한 설명(explanation)을 친절하게 작성하세요.
|
|
41
|
+
5. 존재하지 않는 컬럼이나 테이블은 절대 사용하지 마세요.
|
|
42
|
+
|
|
43
|
+
[응답 포맷]
|
|
44
|
+
{{
|
|
45
|
+
"sql": "SELECT ... FROM ... WHERE ...",
|
|
46
|
+
"explanation": "이 쿼리는 어떤 데이터를 어떻게 조회하는지에 대한 설명입니다."
|
|
47
|
+
}}`
|
|
48
|
+
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
### SQL_GENERATE_PROMPT
|
|
2
|
-
당신은 SQL 생성기입니다. 제공된 테이블의 컬럼 정보를 바탕으로 사용자의 질문에 답하는 최적의 SQL 쿼리를 작성하세요.
|
|
3
|
-
|
|
4
|
-
[선택된 테이블 정보]
|
|
5
|
-
{detailed_schema}
|
|
6
|
-
|
|
7
|
-
[사용자 질문]
|
|
8
|
-
"{question}"
|
|
9
|
-
|
|
10
|
-
[데이터베이스 타입]
|
|
11
|
-
{db_type}
|
|
12
|
-
|
|
13
|
-
[응답 규칙]
|
|
14
|
-
1. 반드시 JSON 형식으로만 응답하세요.
|
|
15
|
-
2. SQL은 {db_type} 문법에 완벽하게 맞아야 하며, 즉시 실행 가능해야 합니다.
|
|
16
|
-
3. 쿼리문 안에 마크다운 코드 블록(```sql)을 포함하지 마세요. 오직 순수 문자열로만 작성하세요.
|
|
17
|
-
4. 사용자가 이해하기 쉽도록 쿼리에 대한 설명(explanation)을 친절하게 작성하세요.
|
|
18
|
-
5. 존재하지 않는 컬럼이나 테이블은 절대 사용하지 마세요.
|
|
19
|
-
|
|
20
|
-
[응답 포맷]
|
|
21
|
-
{{
|
|
22
|
-
"sql": "SELECT ... FROM ... WHERE ...",
|
|
23
|
-
"explanation": "이 쿼리는 어떤 데이터를 어떻게 조회하는지에 대한 설명입니다."
|
|
24
|
-
}}
|
package/prompts/table-filter.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
### TABLE_FILTER_PROMPT
|
|
2
|
-
당신은 SQL 전문가입니다. 사용자의 질문을 분석하여 데이터베이스에서 조회해야 할 필수 테이블들만 선정하세요.
|
|
3
|
-
|
|
4
|
-
[전체 테이블 목록]
|
|
5
|
-
{schema_summary}
|
|
6
|
-
|
|
7
|
-
[사용자 질문]
|
|
8
|
-
"{question}"
|
|
9
|
-
|
|
10
|
-
[응답 규칙]
|
|
11
|
-
1. 반드시 JSON 형식으로만 응답하세요.
|
|
12
|
-
2. 질문을 해결하기 위해 반드시 참조해야 하는 테이블 이름만 'selected_tables' 배열에 넣으세요.
|
|
13
|
-
3. 만약 질문이 데이터베이스 조회와 관련이 없거나, 제공된 테이블 정보로 답할 수 없다면 'is_executable'을 false로 설정하세요.
|
|
14
|
-
4. 'reasoning' 필드에는 왜 해당 테이블들을 선택했는지 간략하게 설명하세요.
|
|
15
|
-
|
|
16
|
-
[응답 포맷]
|
|
17
|
-
{{
|
|
18
|
-
"reasoning": "선정 이유를 여기에 작성",
|
|
19
|
-
"selected_tables": ["table1", "table2"],
|
|
20
|
-
"is_executable": true
|
|
21
|
-
}}
|