feat: 添加项目提示词配置并更新系统提示词生成逻辑
This commit is contained in:
51
config.yml
51
config.yml
@@ -70,3 +70,54 @@ modelPrompts:
|
|||||||
你是一个全模态智能处理助手,能够同时理解、分析与生成文本、图片、音频、视频等多种模态内容,并支持跨模态转换、多模态融合推理、联合内容生成与复杂场景交互,能够根据不同输入形式自动匹配最合理的处理策略与输出方式。
|
你是一个全模态智能处理助手,能够同时理解、分析与生成文本、图片、音频、视频等多种模态内容,并支持跨模态转换、多模态融合推理、联合内容生成与复杂场景交互,能够根据不同输入形式自动匹配最合理的处理策略与输出方式。
|
||||||
在执行多模态任务时,你需要以全链路AI内容架构师、多模态交互专家、综合内容生成系统的身份完成处理,重点保证不同模态之间的语义一致性、风格统一性、信息完整性与交互连贯性,避免出现跨模态语义断裂或输出不一致的问题。
|
在执行多模态任务时,你需要以全链路AI内容架构师、多模态交互专家、综合内容生成系统的身份完成处理,重点保证不同模态之间的语义一致性、风格统一性、信息完整性与交互连贯性,避免出现跨模态语义断裂或输出不一致的问题。
|
||||||
当用户提供混合输入内容时,需要结合文本、图片、音频、视频等多种信息共同分析用户真实目标,并根据任务场景自动决定最终输出形式;若涉及跨模态生成,则必须保证生成结果能够准确映射原始语义与核心信息。
|
当用户提供混合输入内容时,需要结合文本、图片、音频、视频等多种信息共同分析用户真实目标,并根据任务场景自动决定最终输出形式;若涉及跨模态生成,则必须保证生成结果能够准确映射原始语义与核心信息。
|
||||||
|
|
||||||
|
projectPrompts: |
|
||||||
|
你是【语义理解 + 结构对齐】的JSON生成专家,必须严格遵守以下所有规则。
|
||||||
|
【强制阅读规则 · 必须100%%遵守】
|
||||||
|
1. 必须完整通读全部文本、上下文、规则、表单内容,严禁跳读、略读;
|
||||||
|
2. 未读完全部信息前,禁止输出任何内容;
|
||||||
|
3. 必须全覆盖所有约束、所有细节、所有字段后再推理;
|
||||||
|
4. 禁止断章取义,禁止遗漏任何参数;
|
||||||
|
5. 必须严格区分系统表单、用户表单。
|
||||||
|
|
||||||
|
【绝对优先级规则 · 最高优先级】
|
||||||
|
1. 用户自然语言描述 > 用户表单(UserForm) > 系统表单(Form)
|
||||||
|
2. 高优先级内容 100%% 覆盖低优先级内容,禁止冲突
|
||||||
|
3. 所有参数最终以【优先级最高】的描述为准
|
||||||
|
|
||||||
|
【核心语义规则】
|
||||||
|
1. Form = 系统提示词、系统参数、默认配置
|
||||||
|
2. UserForm = 用户真实输入全文,所有字段都必须作为用户提示词来源
|
||||||
|
3. 若 UserForm 字段与 Form 含义相同 → UserForm 严格覆盖 Form
|
||||||
|
4. 必须完整使用 UserForm 所有内容,不得遗漏任何一个字段
|
||||||
|
|
||||||
|
【数量计算规则 · 必须严格遵守 · 带示例】
|
||||||
|
1. 文案与图片为【一一对应关系】:1条文案对应1张图
|
||||||
|
2. 示例1:2条文案,各配1张图 → 最终数量number=2
|
||||||
|
3. 示例2:3条文案,各配1张图 → 最终数量number=3
|
||||||
|
4. 禁止错误计算:2条文案×2张图=4(这种逻辑严禁出现)
|
||||||
|
5. 最终number = 文案总条数 = 图片总张数(一一对应)
|
||||||
|
6. 自动补全默认值:size=1024*1024(为空时必须填充)
|
||||||
|
|
||||||
|
【任务】
|
||||||
|
根据双表单内容,智能填充JSON结构:
|
||||||
|
1. 理解意图:图片/文案
|
||||||
|
2. 按【优先级规则】确定最终参数
|
||||||
|
3. 按【数量一一对应规则】计算number
|
||||||
|
4. 严格按结构输出,不修改字段
|
||||||
|
|
||||||
|
【输出结构】
|
||||||
|
%s
|
||||||
|
【字段映射关系】
|
||||||
|
%s
|
||||||
|
【完整输入信息】
|
||||||
|
%s
|
||||||
|
|
||||||
|
【输出铁律】
|
||||||
|
1. 只输出单行JSON,无任何多余字符
|
||||||
|
2. 禁止换行、禁止转义、禁止解释
|
||||||
|
3. 内容准确、无废话、不编造
|
||||||
|
4. 必须完整读取 UserForm 全部内容
|
||||||
|
5. 严格遵守【优先级】和【数量计算规则】
|
||||||
|
|
||||||
|
请输出最终JSON:
|
||||||
@@ -28,7 +28,7 @@ func buildInferenceRequest(ctx context.Context, req *dto.ComposeMessagesReq, ses
|
|||||||
messages := []map[string]any{}
|
messages := []map[string]any{}
|
||||||
messages = append(messages, map[string]any{
|
messages = append(messages, map[string]any{
|
||||||
"role": "system",
|
"role": "system",
|
||||||
"content": GetSystemPrompt(req, model),
|
"content": GetSystemPrompt(ctx, req, model),
|
||||||
})
|
})
|
||||||
|
|
||||||
// 2. 历史对话 - 动态添加(新增部分)
|
// 2. 历史对话 - 动态添加(新增部分)
|
||||||
@@ -77,82 +77,45 @@ func buildCombinedInput(req *dto.ComposeMessagesReq, prompt string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetSystemPrompt 定义获取系统提示词的函数
|
// GetSystemPrompt 定义获取系统提示词的函数
|
||||||
func GetSystemPrompt(req *dto.ComposeMessagesReq, model *entity.AsynchModel) string {
|
// GetSystemPrompt 从配置文件读取提示词 + 格式化变量
|
||||||
|
func GetSystemPrompt(ctx context.Context, req *dto.ComposeMessagesReq, model *entity.AsynchModel) string {
|
||||||
|
// 1. 从配置文件读取提示词模板
|
||||||
|
promptTpl := g.Cfg().MustGet(ctx, "projectPrompts", "").String()
|
||||||
|
if promptTpl == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 构建字段映射说明
|
||||||
mappingBytes, _ := json.Marshal(model.RequestMapping)
|
mappingBytes, _ := json.Marshal(model.RequestMapping)
|
||||||
mappingStr := string(mappingBytes)
|
mappingStr := string(mappingBytes)
|
||||||
|
|
||||||
// 解析 mapping
|
|
||||||
var mapping map[string]string
|
var mapping map[string]string
|
||||||
_ = json.Unmarshal(mappingBytes, mapping)
|
_ = json.Unmarshal(mappingBytes, &mapping)
|
||||||
|
|
||||||
// 字段映射说明
|
|
||||||
var fieldDesc strings.Builder
|
var fieldDesc strings.Builder
|
||||||
for key, path := range mapping {
|
for key, path := range mapping {
|
||||||
fieldDesc.WriteString(fmt.Sprintf("- %s → %s\n", key, path))
|
fieldDesc.WriteString(fmt.Sprintf("- %s → %s\n", key, path))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================
|
// 3. 拼接 UserForm 全文(必须完整阅读)
|
||||||
// 【核心】UserForm 全部内容完整展开,让模型必须全文阅读
|
|
||||||
// 严格按你的业务定义:所有字段作为用户提示词来源
|
|
||||||
// ======================
|
|
||||||
var userFormContent strings.Builder
|
var userFormContent strings.Builder
|
||||||
for k, v := range req.UserForm {
|
for k, v := range req.UserForm {
|
||||||
userFormContent.WriteString(fmt.Sprintf("%s=%v;", k, v))
|
userFormContent.WriteString(fmt.Sprintf("%s=%v;", k, v))
|
||||||
}
|
}
|
||||||
userFormFullText := strings.TrimSuffix(userFormContent.String(), ";")
|
userFormFullText := strings.TrimSuffix(userFormContent.String(), ";")
|
||||||
|
|
||||||
// 拼接双表单
|
// 4. 双表单信息
|
||||||
formInfo := fmt.Sprintf(`
|
formInfo := fmt.Sprintf(`
|
||||||
【系统表单(系统提示词/参数)】
|
【系统表单(系统提示词/参数)】
|
||||||
%s
|
%s
|
||||||
|
【用户表单全文(必须完整阅读,全部作为用户提示词来源)】
|
||||||
【用户表单全文(必须完整阅读,全部作为用户提示词)】
|
|
||||||
%s
|
%s
|
||||||
`, formToJSON(req.Form), userFormFullText)
|
`, formToJSON(req.Form), userFormFullText)
|
||||||
|
// 5. 格式化最终提示词(替换配置里的 %s)
|
||||||
// 最终提示词(严格遵守你所有规则)
|
return fmt.Sprintf(promptTpl, mappingStr, fieldDesc.String(), formInfo)
|
||||||
systemPrompt := fmt.Sprintf(`
|
|
||||||
你是【语义理解 + 结构对齐】的JSON生成专家,必须严格遵守以下所有规则。
|
|
||||||
|
|
||||||
【强制阅读规则 · 必须100%%遵守】
|
|
||||||
1. 必须完整通读全部文本、上下文、规则、表单内容,严禁跳读、略读;
|
|
||||||
2. 未读完全部信息前,禁止输出任何内容;
|
|
||||||
3. 必须全覆盖所有约束、所有细节、所有字段后再推理;
|
|
||||||
4. 禁止断章取义,禁止遗漏任何参数;
|
|
||||||
5. 必须严格区分系统表单、用户表单。
|
|
||||||
|
|
||||||
【核心语义规则】
|
|
||||||
1. Form = 系统提示词、系统参数、默认配置
|
|
||||||
2. UserForm = 用户真实输入全文,所有字段都必须作为用户提示词来源
|
|
||||||
3. 若 UserForm 字段与 Form 含义相同 → UserForm 严格覆盖 Form
|
|
||||||
4. 必须完整使用 UserForm 所有内容,不得遗漏任何一个字段
|
|
||||||
|
|
||||||
【任务】
|
|
||||||
根据双表单内容,智能填充JSON结构:
|
|
||||||
1. 理解意图:图片/文案
|
|
||||||
2. 自动推导数量:各2张=4,一共3张=3
|
|
||||||
3. 自动补全默认值:size=1024*1024
|
|
||||||
4. 严格按结构输出,不修改字段
|
|
||||||
|
|
||||||
【输出结构】
|
|
||||||
%s
|
|
||||||
【字段映射关系】
|
|
||||||
%s
|
|
||||||
【完整输入信息】
|
|
||||||
%s
|
|
||||||
|
|
||||||
【输出铁律】
|
|
||||||
1. 只输出单行JSON,无任何多余字符
|
|
||||||
2. 禁止换行、禁止转义、禁止解释
|
|
||||||
3. 内容准确、无废话、不编造
|
|
||||||
4. 必须完整读取 UserForm 全部内容
|
|
||||||
|
|
||||||
请输出最终JSON:
|
|
||||||
`, mappingStr, fieldDesc.String(), formInfo)
|
|
||||||
|
|
||||||
return systemPrompt
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// formToJSON 工具函数不变
|
||||||
func formToJSON(form map[string]any) string {
|
func formToJSON(form map[string]any) string {
|
||||||
if form == nil {
|
if form == nil {
|
||||||
return "{}"
|
return "{}"
|
||||||
|
|||||||
Reference in New Issue
Block a user