feat: 初始化AI写作工坊项目
- 实现基于Vue 3 + Vite的模块化架构 - 集成DeepSeek API进行内容生成 - 支持写作范式分析功能 - 添加环境变量配置支持 - 完整的项目结构和文档
This commit is contained in:
36
src/utils/config.js
Normal file
36
src/utils/config.js
Normal file
@@ -0,0 +1,36 @@
|
||||
// 环境变量配置
|
||||
export const config = {
|
||||
// API 配置
|
||||
apiUrl: import.meta.env.VITE_API_URL || 'https://api.deepseek.com/chat/completions',
|
||||
apiKey: import.meta.env.VITE_API_KEY || 'YOUR_KEY',
|
||||
|
||||
// 应用配置
|
||||
appVersion: '1.0.0',
|
||||
isDev: import.meta.env.DEV,
|
||||
mode: import.meta.env.MODE
|
||||
}
|
||||
|
||||
// 验证必需的环境变量
|
||||
export const validateConfig = () => {
|
||||
const errors = []
|
||||
|
||||
if (!config.apiUrl) {
|
||||
errors.push('API URL 未配置')
|
||||
}
|
||||
|
||||
if (!config.apiKey || config.apiKey === 'YOUR_KEY') {
|
||||
errors.push('API Key 未配置或使用默认值')
|
||||
}
|
||||
|
||||
return errors
|
||||
}
|
||||
|
||||
// 获取配置摘要(用于调试)
|
||||
export const getConfigSummary = () => {
|
||||
return {
|
||||
apiUrl: config.apiUrl,
|
||||
hasApiKey: config.apiKey !== 'YOUR_KEY',
|
||||
mode: config.mode,
|
||||
isDev: config.isDev
|
||||
}
|
||||
}
|
||||
43
src/utils/promptBuilder.js
Normal file
43
src/utils/promptBuilder.js
Normal file
@@ -0,0 +1,43 @@
|
||||
export const buildPrompt = (task, constraints, references) => {
|
||||
let prompt = `# Role\n你是一个资深的专业写作助手,请严格按照以下要求进行创作。\n\n`
|
||||
|
||||
// 1. 注入规范
|
||||
prompt += `# System Constraints (必须遵守)\n`
|
||||
constraints.forEach(tag => prompt += `- ${tag}\n`)
|
||||
prompt += `\n`
|
||||
|
||||
// 2. 注入参考案例 (Few-Shot)
|
||||
if (references.length > 0) {
|
||||
prompt += `# Reference Cases (请模仿以下风格)\n`
|
||||
references.forEach((ref, idx) => {
|
||||
prompt += `<case_${idx + 1} title="${ref.title}">\n${ref.content}\n</case_${idx + 1}>\n\n`
|
||||
})
|
||||
}
|
||||
|
||||
// 3. 注入用户任务
|
||||
prompt += `# Current Task (User Input)\n${task}`
|
||||
|
||||
return prompt
|
||||
}
|
||||
|
||||
export const parseStreamResponse = (chunk) => {
|
||||
const lines = chunk.split('\n').filter(line => line.trim())
|
||||
const contents = []
|
||||
|
||||
for (const line of lines) {
|
||||
if (line.startsWith('data: ')) {
|
||||
const data = line.slice(6)
|
||||
if (data === '[DONE]') continue
|
||||
|
||||
try {
|
||||
const parsed = JSON.parse(data)
|
||||
const content = parsed.choices?.[0]?.delta?.content || ''
|
||||
if (content) contents.push(content)
|
||||
} catch (e) {
|
||||
// 忽略解析错误
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return contents.join('')
|
||||
}
|
||||
Reference in New Issue
Block a user