fix: make AI polish neutral
This commit is contained in:
@@ -15,12 +15,18 @@ export const chatCompletions = (data) =>
|
||||
// 流式对话补全
|
||||
export const streamChatCompletions = async function* (data, signal, options = {}) {
|
||||
const text = data?.messages?.at?.(-1)?.content || data?.goal || ''
|
||||
const response = await fetch('/api/creative/copy', {
|
||||
const systemPrompt = data?.messages?.find?.((message) => message?.role === 'system')?.content || ''
|
||||
const response = await fetch('/api/prompt/polish', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ goal: typeof text === 'string' ? text : JSON.stringify(text), seconds: 15 }),
|
||||
body: JSON.stringify({
|
||||
text: typeof text === 'string' ? text : JSON.stringify(text),
|
||||
system_prompt: systemPrompt,
|
||||
mode: 'chat',
|
||||
target_language: 'keep'
|
||||
}),
|
||||
signal
|
||||
})
|
||||
|
||||
@@ -30,6 +36,5 @@ export const streamChatCompletions = async function* (data, signal, options = {}
|
||||
}
|
||||
|
||||
const json = await response.json()
|
||||
const variant = json.variants?.[0]
|
||||
yield variant?.image_prompt_en || variant?.video_prompt_en || ''
|
||||
yield json.text || ''
|
||||
}
|
||||
|
||||
@@ -695,7 +695,9 @@ const formatOptions = [
|
||||
const chatHook = computed(() => {
|
||||
return useChat({
|
||||
systemPrompt: systemPrompt.value,
|
||||
model: model.value
|
||||
model: model.value,
|
||||
mode: 'chat',
|
||||
targetLanguage: 'keep'
|
||||
})
|
||||
})
|
||||
|
||||
@@ -838,7 +840,9 @@ const handleGenerate = async () => {
|
||||
|
||||
const { send } = useChat({
|
||||
systemPrompt: resolvedSystemPrompt,
|
||||
model: model.value
|
||||
model: model.value,
|
||||
mode: 'chat',
|
||||
targetLanguage: 'keep'
|
||||
})
|
||||
|
||||
// 如果 user 消息为空,使用简单提示
|
||||
|
||||
@@ -116,8 +116,10 @@ const isApiConfigured = computed(() => !!modelStore.currentApiKey)
|
||||
|
||||
// Chat hook for polish | 润色用的 Chat hook
|
||||
const { send: sendChat } = useChat({
|
||||
systemPrompt: '你是一个专业的AI绘画提示词专家。将用户输入的内容美化成高质量的生图提示词,包含风格、光线、構图、细节等要素。直接返回提示词,不要其他解释。',
|
||||
model: 'gpt-4o-mini'
|
||||
systemPrompt: '你是一个专业的 AI 绘画提示词编辑。只优化用户已经给出的主体、风格、光线、构图和细节,不添加用户没有提到的品牌、产品或营销话术。直接返回提示词,不要其他解释。',
|
||||
model: 'gpt-4o-mini',
|
||||
mode: 'image',
|
||||
targetLanguage: 'en'
|
||||
})
|
||||
|
||||
// Local content state | 本地内容状态
|
||||
|
||||
@@ -127,7 +127,7 @@ export const useApiState = () => {
|
||||
return { loading, error, status, reset, setLoading, setError, setSuccess }
|
||||
}
|
||||
|
||||
export const useChat = () => {
|
||||
export const useChat = (options = {}) => {
|
||||
const { loading, error, status, reset, setLoading, setError, setSuccess } = useApiState()
|
||||
const messages = ref([])
|
||||
const currentResponse = ref('')
|
||||
@@ -137,12 +137,17 @@ export const useChat = () => {
|
||||
setLoading(true)
|
||||
stopped = false
|
||||
try {
|
||||
const response = await requestJson('/creative/copy', {
|
||||
const mode = options.mode || 'chat'
|
||||
const response = await requestJson('/prompt/polish', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ goal: content, seconds: 15 })
|
||||
body: JSON.stringify({
|
||||
text: content,
|
||||
system_prompt: options.systemPrompt || '',
|
||||
mode,
|
||||
target_language: options.targetLanguage || (mode === 'chat' ? 'keep' : 'en')
|
||||
})
|
||||
})
|
||||
const variant = response.variants?.[0]
|
||||
const result = variant?.image_prompt_en || variant?.video_prompt_en || content
|
||||
const result = response.text || content
|
||||
if (!stopped) {
|
||||
currentResponse.value = result
|
||||
messages.value.push({ role: 'user', content })
|
||||
|
||||
@@ -299,12 +299,12 @@ onMounted(() => {
|
||||
const CHAT_TEMPLATES = {
|
||||
imagePrompt: {
|
||||
name: '生图提示词',
|
||||
systemPrompt: '你是一个专业的AI绘画提示词专家。将用户输入的内容美化成高质量的生图提示词,包含风格、光线、構图、细节等要素。直接返回提示词,不要其他解释。',
|
||||
systemPrompt: '你是一个专业的 AI 绘画提示词编辑。只优化用户已经给出的主体、风格、光线、构图和细节,不添加用户没有提到的品牌、产品或营销话术。直接返回提示词,不要其他解释。',
|
||||
model: 'gpt-4o-mini'
|
||||
},
|
||||
videoPrompt: {
|
||||
name: '视频提示词',
|
||||
systemPrompt: '你是一个专业的AI视频提示词专家。将用户输入的内容美化成高质量的视频生成提示词,包含运动、场景、镜头等要素。直接返回提示词,不要其他解释。',
|
||||
systemPrompt: '你是一个专业的 AI 视频提示词编辑。只优化用户已经给出的主体、动作、场景、镜头和节奏,不添加用户没有提到的品牌、产品或营销话术。直接返回提示词,不要其他解释。',
|
||||
model: 'gpt-4o-mini'
|
||||
}
|
||||
}
|
||||
@@ -320,7 +320,9 @@ const {
|
||||
send: sendChat
|
||||
} = useChat({
|
||||
systemPrompt: CHAT_TEMPLATES.imagePrompt.systemPrompt,
|
||||
model: CHAT_TEMPLATES.imagePrompt.model
|
||||
model: CHAT_TEMPLATES.imagePrompt.model,
|
||||
mode: 'image',
|
||||
targetLanguage: 'en'
|
||||
})
|
||||
|
||||
// Workflow orchestrator hook | 工作流编排 hook
|
||||
|
||||
Reference in New Issue
Block a user