Skip to content

Commit c7aed25

Browse files
committed
Extract the prompt to a single markdown file.
1 parent 5f443f0 commit c7aed25

6 files changed

Lines changed: 205 additions & 32 deletions

File tree

electron.vite.config.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,21 @@ import { resolve } from 'path'
22
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
33
import react from '@vitejs/plugin-react'
44
import tailwindcss from '@tailwindcss/vite'
5+
import { viteStaticCopy } from 'vite-plugin-static-copy'
56

67
export default defineConfig({
78
main: {
8-
plugins: [externalizeDepsPlugin()]
9+
plugins: [
10+
externalizeDepsPlugin(),
11+
viteStaticCopy({
12+
targets: [
13+
{
14+
src: 'src/main/prompts.md',
15+
dest: '.'
16+
}
17+
]
18+
})
19+
]
920
},
1021
preload: {
1122
plugins: [externalizeDepsPlugin()]

package-lock.json

Lines changed: 156 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"prettier": "^3.6.2",
8686
"tailwindcss": "^4.1.12",
8787
"typescript": "^5.8.3",
88-
"vite": "^7.0.5"
88+
"vite": "^7.0.5",
89+
"vite-plugin-static-copy": "^3.1.4"
8990
}
9091
}

src/main/ai.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import { readFileSync } from 'node:fs'
2+
import { join } from 'node:path'
13
import { streamText } from 'ai'
24
import { createOpenAI } from '@ai-sdk/openai'
3-
import { PROMPT_SYSTEM } from './prompts'
45
import { settings } from './settings'
56

7+
export const PROMPT_SYSTEM = readFileSync(join(import.meta.dirname, 'prompts.md'), 'utf-8').trim()
8+
69
export function getSolutionStream(base64Image: string, abortSignal?: AbortSignal) {
710
const openai = createOpenAI({
811
baseURL: settings.apiBaseURL,
@@ -11,14 +14,15 @@ export function getSolutionStream(base64Image: string, abortSignal?: AbortSignal
1114

1215
const { textStream } = streamText({
1316
model: openai(settings.model || 'gpt-4o-mini'),
14-
system: settings.customPrompt || PROMPT_SYSTEM,
17+
system:
18+
settings.customPrompt || PROMPT_SYSTEM + `\n使用编程语言:${settings.codeLanguage} 解答。`,
1519
messages: [
1620
{
1721
role: 'user',
1822
content: [
1923
{
2024
type: 'text',
21-
text: `以下是一张截图。编程语言:${settings.codeLanguage || '未指定'}。请严格将所有代码放在 Markdown 代码块中(使用三反引号,若可请标注语言),解释文字放在代码块之外。`
25+
text: `这是屏幕截图`
2226
},
2327
{
2428
type: 'image',

src/main/prompts.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
你是一名经验丰富的程序员,负责根据截图快速分析问题并给出可直接运行的解决方案。
2+
3+
使用中文回答。
4+
5+
## 回答要求
6+
7+
- 先简要概括截图中题目/需求与关键点;
8+
- 给出清晰的解题思路与步骤,优先选择实现难度低的方案;
9+
- 依据思路输出完整代码,包含必要的注释;
10+
- 如有多种实现或注意事项,列出权衡与扩展建议;
11+
12+
## 代码输出规范(重要)
13+
14+
- 所有代码必须使用 Markdown 代码块包裹,使用三反引号 \`\`\` 开始与结束;
15+
- 在开头三反引号后标注语言(例如 \`\`\`ts、\`\`\`python);
16+
- 解释性文字必须放在代码块之外,禁止把解释写进代码块;
17+
- 如有多段代码,分别使用独立的代码块;
18+
- 若需要补充命令行或配置,也使用独立代码块并标注对应语言(如 \`\`\`bash、\`\`\`json)。
19+
20+
## 当截图无法明确题目时
21+
22+
- 如果发现有多个题目时,检查是否有题目被选中,若有则选择对应的题目;
23+
- 可合理推断题目并给出自洽的示例与实现;
24+
- 或指出缺失信息并给出可执行的最小示例与后续补全建议。
25+

src/main/prompts.ts

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,4 @@
1-
export const PROMPT_SYSTEM = `
2-
你是一名经验丰富的程序员,负责根据截图快速分析问题并给出可直接运行的解决方案。
3-
请使用简洁中文回答,并遵循以下要求:
1+
import { readFileSync } from 'node:fs'
2+
import { join } from 'node:path'
43

5-
- 先简要概括截图中题目/需求与关键点;
6-
- 给出清晰的解题思路与步骤,优先选择实现难度更低、鲁棒性更好的方案;
7-
- 依据思路输出完整代码,包含必要的注释;
8-
- 如有多种实现或注意事项,列出权衡与扩展建议;
9-
10-
格式与代码输出规范(重要):
11-
- 所有代码必须使用 Markdown 代码块包裹,使用三反引号 \`\`\` 开始与结束;
12-
- 若已知编程语言,请在开头三反引号后标注语言(例如 \`\`\`ts、\`\`\`python);
13-
- 解释性文字必须放在代码块之外,禁止把解释写进代码块;
14-
- 如有多段代码,分别使用独立的代码块;
15-
- 若需要补充命令行或配置,也使用独立代码块并标注对应语言(如 \`\`\`bash、\`\`\`json)。
16-
17-
当截图无法明确题目时:
18-
- 如果发现有多个题目时,检查是否有题目被选中,若有则选择对应的题目;
19-
- 可合理推断题目并给出自洽的示例与实现;
20-
- 或指出缺失信息并给出可执行的最小示例与后续补全建议。
21-
`
4+
export const PROMPT_SYSTEM = readFileSync(join(import.meta.dirname, 'prompts.md'), 'utf-8').trim()

0 commit comments

Comments
 (0)