修改通译千问最新接口:1.删除history参数,改用官方推荐的messages参数 2.整理messages参数顺序,补充必要上下文信息 3.用autogen调试测试通过

This commit is contained in:
lichengwu 2023-12-17 07:55:49 +08:00
parent 366b82128f
commit 67020a3c08

View File

@ -13,13 +13,13 @@ import (
// https://help.aliyun.com/document_detail/613695.html?spm=a2c4g.2399480.0.0.1adb778fAdzP9w#341800c0f8w0r // https://help.aliyun.com/document_detail/613695.html?spm=a2c4g.2399480.0.0.1adb778fAdzP9w#341800c0f8w0r
type AliMessage struct { type AliMessage struct {
User string `json:"user"` Content string `json:"content"`
Bot string `json:"bot"` Role string `json:"role"`
} }
type AliInput struct { type AliInput struct {
Prompt string `json:"prompt"` //Prompt string `json:"prompt"`
History []AliMessage `json:"history"` Messages []AliMessage `json:"messages"`
} }
type AliParameters struct { type AliParameters struct {
@ -83,32 +83,78 @@ type AliChatResponse struct {
func requestOpenAI2Ali(request GeneralOpenAIRequest) *AliChatRequest { func requestOpenAI2Ali(request GeneralOpenAIRequest) *AliChatRequest {
messages := make([]AliMessage, 0, len(request.Messages)) messages := make([]AliMessage, 0, len(request.Messages))
prompt := "" if len(messages) == 1 {
messages = append(messages, AliMessage{
Content: request.Messages[0].StringContent(),
Role: "user",
})
} else {
//1. 系统消息在最前面
//2. user和assistant必须交替成对出现
//3. 相邻同role消息合并
lastRole := ""
systemMessage := AliMessage{
Content: "",
Role: "system",
}
for i := 0; i < len(request.Messages); i++ { for i := 0; i < len(request.Messages); i++ {
message := request.Messages[i] message := request.Messages[i]
if message.Role == "system" { content := message.StringContent()
messages = append(messages, AliMessage{ if content == "" || len(content) <= 0 {
User: message.StringContent(),
Bot: "Okay",
})
continue continue
}
if strings.ToLower(message.Role) == "system" {
systemMessage.Content += "\n" + content
lastRole = "system"
} else if strings.ToLower(message.Role) == "user" {
if lastRole == "user" {
messages[len(messages)-1].Content += "\n" + content
} else { } else {
if i == len(request.Messages)-1 {
prompt = message.StringContent()
break
}
messages = append(messages, AliMessage{ messages = append(messages, AliMessage{
User: message.StringContent(), Content: content,
Bot: request.Messages[i+1].StringContent(), Role: "user",
}) })
i++ }
lastRole = "user"
} else {
if lastRole == "assistant" {
messages[len(messages)-1].Content += "\n" + content
} else {
messages = append(messages, AliMessage{
Content: content,
Role: "assistant",
})
}
lastRole = "assistant"
} }
} }
// 用户需要首先提问
if messages[0].Role != "user" {
messages = append([]AliMessage{
{
Content: "?",
Role: "user",
},
}, messages...)
}
// 把系统消息补充到头部
if len(systemMessage.Content) > 0 {
messages = append([]AliMessage{systemMessage}, messages...)
}
//最后如果不是user提问补充一个没有问题了
if messages[len(messages)-1].Role != "user" {
messages = append(messages, AliMessage{
Content: "?",
Role: "user",
})
}
}
return &AliChatRequest{ return &AliChatRequest{
Model: request.Model, Model: request.Model,
Input: AliInput{ Input: AliInput{
Prompt: prompt, //Prompt: prompt,
History: messages, Messages: messages,
}, },
//Parameters: AliParameters{ // ChatGPT's parameters are not compatible with Ali's //Parameters: AliParameters{ // ChatGPT's parameters are not compatible with Ali's
// TopP: request.TopP, // TopP: request.TopP,