Skip to content

Commit ff7433f

Browse files
committed
[feat][prompt] add no render
1 parent fa7260f commit ff7433f

4 files changed

Lines changed: 198 additions & 21 deletions

File tree

backend/kitex_gen/coze/loop/prompt/domain/prompt/k-prompt.go

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

backend/kitex_gen/coze/loop/prompt/domain/prompt/prompt.go

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

backend/modules/prompt/domain/entity/prompt_detail.go

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ type Message struct {
5959
Parts []*ContentPart `json:"parts,omitempty"`
6060
ToolCallID *string `json:"tool_call_id,omitempty"`
6161
ToolCalls []*ToolCall `json:"tool_calls,omitempty"`
62+
NoRender *bool `json:"no_render,omitempty"`
6263

6364
Metadata map[string]string `json:"metadata,omitempty"`
6465
}
@@ -246,36 +247,80 @@ func (pt *PromptTemplate) formatMessages(messages []*Message, variableVals []*Va
246247
formattedMessages = append(formattedMessages, placeholderMessage)
247248
}
248249
}
249-
default:
250-
if templateStr := ptr.From(message.Content); templateStr != "" {
251-
formattedStr, err := formatText(pt.TemplateType, templateStr, defMap, valMap)
252-
if err != nil {
250+
251+
case RoleTool:
252+
// Tool:不渲染
253+
formattedMessages = append(formattedMessages, message)
254+
255+
case RoleSystem, RoleUser:
256+
// System/User:渲染,除非 NoRender=true
257+
if message.NoRender == nil || !ptr.From(message.NoRender) {
258+
// 需要渲染
259+
if err := pt.renderMessage(message, defMap, valMap); err != nil {
253260
return nil, err
254261
}
255-
message.Content = ptr.Of(formattedStr)
256262
}
257-
for _, part := range message.Parts {
258-
if part.Type == ContentTypeText && ptr.From(part.Text) != "" {
259-
formattedStr, err := formatText(pt.TemplateType, ptr.From(part.Text), defMap, valMap)
260-
if err != nil {
261-
return nil, err
262-
}
263-
part.Text = ptr.Of(formattedStr)
263+
formattedMessages = append(formattedMessages, message)
264+
265+
case RoleAssistant:
266+
// Assistant:仅当 NoRender=false(显式标记,通常来自原始 prompt)才渲染;nil 或 true 均不渲染
267+
if message.NoRender != nil && !ptr.From(message.NoRender) {
268+
// NoRender=false,需要渲染
269+
if err := pt.renderMessage(message, defMap, valMap); err != nil {
270+
return nil, err
264271
}
265272
}
266-
message.Parts = formatMultiPart(message.Parts, defMap, valMap)
273+
formattedMessages = append(formattedMessages, message)
274+
275+
default:
276+
// 其他角色默认不渲染
267277
formattedMessages = append(formattedMessages, message)
268278
}
269279
}
270280
return formattedMessages, nil
271281
}
272282

283+
func (pt *PromptTemplate) renderMessage(message *Message, defMap map[string]*VariableDef, valMap map[string]*VariableVal) error {
284+
// 渲染消息内容
285+
if templateStr := ptr.From(message.Content); templateStr != "" {
286+
formattedStr, err := formatText(pt.TemplateType, templateStr, defMap, valMap)
287+
if err != nil {
288+
return err
289+
}
290+
message.Content = ptr.Of(formattedStr)
291+
}
292+
293+
// 渲染消息部分
294+
for _, part := range message.Parts {
295+
if part.Type == ContentTypeText && ptr.From(part.Text) != "" {
296+
formattedStr, err := formatText(pt.TemplateType, ptr.From(part.Text), defMap, valMap)
297+
if err != nil {
298+
return err
299+
}
300+
part.Text = ptr.Of(formattedStr)
301+
}
302+
}
303+
304+
// 格式化多部分内容
305+
message.Parts = formatMultiPart(message.Parts, defMap, valMap)
306+
return nil
307+
}
308+
273309
func (pt *PromptTemplate) getTemplateMessages(messages []*Message) []*Message {
274310
if pt == nil {
275311
return nil
276312
}
277313
var messagesToFormat []*Message
278-
messagesToFormat = append(messagesToFormat, pt.Messages...)
314+
315+
// 对于来自pt的messages(原始托管的message),统一设置no_render为false,表示一定要渲染
316+
for _, msg := range pt.Messages {
317+
if msg != nil {
318+
msg.NoRender = ptr.Of(false)
319+
messagesToFormat = append(messagesToFormat, msg)
320+
}
321+
}
322+
323+
// 入参的messages的no_render不需要改变,保持原状
279324
messagesToFormat = append(messagesToFormat, messages...)
280325
return messagesToFormat
281326
}

idl/thrift/coze/loop/prompt/domain/prompt.thrift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ struct Message {
140140
4: optional list<ContentPart> parts
141141
5: optional string tool_call_id
142142
6: optional list<ToolCall> tool_calls
143+
7: optional bool no_render // 是否不需要渲染
143144

144145
100: optional map<string, string> metadata
145146
}

0 commit comments

Comments
 (0)