@@ -470,41 +470,54 @@ async function createCompletionStream(
470
470
*
471
471
* @param messages 参考gpt系列消息格式,多轮对话请完整提供上下文
472
472
*/
473
- function messagesPrepare ( messages : any [ ] ) {
474
- let content ;
475
- if ( messages . length < 2 ) {
476
- content = messages . reduce ( ( content , message ) => {
477
- if ( _ . isArray ( message . content ) ) {
478
- return (
479
- message . content . reduce ( ( _content , v ) => {
480
- if ( ! _ . isObject ( v ) || v [ "type" ] != "text" ) return _content ;
481
- return _content + ( v [ "text" ] || "" ) + "\n" ;
482
- } , content )
483
- ) ;
484
- }
485
- return content + `${ message . content } \n` ;
486
- } , "" ) ;
487
- logger . info ( "\n透传内容:\n" + content ) ;
488
- }
489
- else {
490
- content = (
491
- messages . reduce ( ( content , message ) => {
492
- if ( _ . isArray ( message . content ) ) {
493
- return (
494
- message . content . reduce ( ( _content , v ) => {
495
- if ( ! _ . isObject ( v ) || v [ "type" ] != "text" ) return _content ;
496
- return _content + ( `${ message . role } :` + v [ "text" ] || "" ) + "\n" ;
497
- } , content )
498
- ) ;
499
- }
500
- return ( content += `${ message . role } :${ message . content } \n` ) ;
501
- } , "" ) + "assistant:"
502
- )
503
- // 移除MD图像URL避免幻觉
504
- . replace ( / \! \[ .+ \] \( .+ \) / g, "" ) ;
505
- logger . info ( "\n对话合并:\n" + content ) ;
473
+ function messagesPrepare ( messages : any [ ] ) : string {
474
+ // 处理消息内容
475
+ const processedMessages = messages . map ( message => {
476
+ let text : string ;
477
+ if ( Array . isArray ( message . content ) ) {
478
+ // 过滤出 type 为 "text" 的项并连接文本
479
+ const texts = message . content
480
+ . filter ( ( item : any ) => item . type === "text" )
481
+ . map ( ( item : any ) => item . text ) ;
482
+ text = texts . join ( '\n' ) ;
483
+ } else {
484
+ text = String ( message . content ) ;
485
+ }
486
+ return { role : message . role , text } ;
487
+ } ) ;
488
+
489
+ if ( processedMessages . length === 0 ) return '' ;
490
+
491
+ // 合并连续相同角色的消息
492
+ const mergedBlocks : { role : string ; text : string } [ ] = [ ] ;
493
+ let currentBlock = { ...processedMessages [ 0 ] } ;
494
+
495
+ for ( let i = 1 ; i < processedMessages . length ; i ++ ) {
496
+ const msg = processedMessages [ i ] ;
497
+ if ( msg . role === currentBlock . role ) {
498
+ currentBlock . text += `\n\n${ msg . text } ` ;
499
+ } else {
500
+ mergedBlocks . push ( currentBlock ) ;
501
+ currentBlock = { ...msg } ;
502
+ }
506
503
}
507
- return content ;
504
+ mergedBlocks . push ( currentBlock ) ;
505
+
506
+ // 添加标签并连接结果
507
+ return mergedBlocks
508
+ . map ( ( block , index ) => {
509
+ if ( block . role === "assistant" ) {
510
+ return `<|Assistant|>${ block . text } <|end▁of▁sentence|>` ;
511
+ }
512
+
513
+ if ( block . role === "user" || block . role === "system" ) {
514
+ return index > 0 ? `<|User|>${ block . text } ` : block . text ;
515
+ }
516
+
517
+ return block . text ;
518
+ } )
519
+ . join ( '' )
520
+ . replace ( / \! \[ .+ \] \( .+ \) / g, "" ) ;
508
521
}
509
522
510
523
/**
0 commit comments