refactor(v2): upgrade module to github.com/alibaba/higress/v2 (#2922)

Signed-off-by: Xijun Dai <daixijun1990@gmail.com>
This commit is contained in:
Xijun Dai
2025-09-21 14:29:07 +08:00
committed by GitHub
parent cd2082033c
commit 47827ad271
235 changed files with 1077 additions and 1045 deletions

View File

@@ -19,13 +19,17 @@ import (
)
// 用于统计函数的递归调用次数
const ToolCallsCount = "ToolCallsCount"
const StreamContextKey = "Stream"
const (
ToolCallsCount = "ToolCallsCount"
StreamContextKey = "Stream"
)
// react的正则规则
const ActionPattern = `Action:\s*(.*?)[.\n]`
const ActionInputPattern = `Action Input:\s*(.*)`
const FinalAnswerPattern = `Final Answer:(.*)`
const (
ActionPattern = `Action:\s*(.*?)[.\n]`
ActionInputPattern = `Action Input:\s*(.*)`
FinalAnswerPattern = `Final Answer:(.*)`
)
func main() {}
@@ -76,7 +80,7 @@ func firstReq(ctx wrapper.HttpContext, config PluginConfig, prompt string, rawRe
rawRequest.Stream = false
}
//replace old message and resume request qwen
// replace old message and resume request qwen
newbody, err := json.Marshal(rawRequest)
if err != nil {
return types.ActionContinue
@@ -96,7 +100,7 @@ func onHttpRequestBody(ctx wrapper.HttpContext, config PluginConfig, body []byte
log.Debug("onHttpRequestBody start")
defer log.Debug("onHttpRequestBody end")
//拿到请求
// 拿到请求
var rawRequest Request
err := json.Unmarshal(body, &rawRequest)
if err != nil {
@@ -105,7 +109,7 @@ func onHttpRequestBody(ctx wrapper.HttpContext, config PluginConfig, body []byte
}
log.Debugf("onHttpRequestBody rawRequest: %v", rawRequest)
//获取用户query
// 获取用户query
var query string
var history string
messageLength := len(rawRequest.Messages)
@@ -129,7 +133,7 @@ func onHttpRequestBody(ctx wrapper.HttpContext, config PluginConfig, body []byte
return types.ActionContinue
}
//拼装agent prompt模板
// 拼装agent prompt模板
tool_desc := make([]string, 0)
tool_names := make([]string, 0)
for _, apisParam := range config.APIsParam {
@@ -164,13 +168,13 @@ func onHttpRequestBody(ctx wrapper.HttpContext, config PluginConfig, body []byte
ctx.SetContext(ToolCallsCount, 0)
//清理历史对话记录
// 清理历史对话记录
dashscope.MessageStore.Clear()
//将请求加入到历史对话存储器中
// 将请求加入到历史对话存储器中
dashscope.MessageStore.AddForUser(prompt)
//开始第一次请求
// 开始第一次请求
ret := firstReq(ctx, config, prompt, rawRequest, log)
return ret
@@ -221,7 +225,7 @@ func jsonFormat(llmClient wrapper.HttpClient, llmInfo LLMInfo, jsonSchema map[st
headers,
completionSerialized,
func(statusCode int, responseHeaders http.Header, responseBody []byte) {
//得到gpt的返回结果
// 得到gpt的返回结果
var responseCompletion dashscope.CompletionResponse
_ = json.Unmarshal(responseBody, &responseCompletion)
log.Infof("[jsonFormat] content: %s", responseCompletion.Choices[0].Message.Content)
@@ -299,7 +303,7 @@ func toolsCallResult(ctx wrapper.HttpContext, llmClient wrapper.HttpClient, llmI
headers,
completionSerialized,
func(statusCode int, responseHeaders http.Header, responseBody []byte) {
//得到gpt的返回结果
// 得到gpt的返回结果
var responseCompletion dashscope.CompletionResponse
_ = json.Unmarshal(responseBody, &responseCompletion)
log.Infof("[toolsCall] content: %s", responseCompletion.Choices[0].Message.Content)
@@ -307,7 +311,7 @@ func toolsCallResult(ctx wrapper.HttpContext, llmClient wrapper.HttpClient, llmI
if responseCompletion.Choices[0].Message.Content != "" {
retType, actionInput := toolsCall(ctx, llmClient, llmInfo, jsonResp, aPIsParam, aPIClient, responseCompletion.Choices[0].Message.Content, rawResponse, log)
if retType == types.ActionContinue {
//得到了Final Answer
// 得到了Final Answer
var assistantMessage Message
var streamMode bool
if ctx.GetContext(StreamContextKey) == nil {
@@ -388,14 +392,14 @@ func toolsCall(ctx wrapper.HttpContext, llmClient wrapper.HttpClient, llmInfo LL
action, actionInput := outputParser(content, log)
//得到最终答案
// 得到最终答案
if action == "Final Answer" {
return types.ActionContinue, actionInput
}
count := ctx.GetContext(ToolCallsCount).(int)
count++
log.Debugf("toolCallsCount:%d, config.LLMInfo.MaxIterations=%d", count, llmInfo.MaxIterations)
//函数递归调用次数,达到了预设的循环次数,强制结束
// 函数递归调用次数,达到了预设的循环次数,强制结束
if int64(count) > llmInfo.MaxIterations {
ctx.SetContext(ToolCallsCount, 0)
return types.ActionContinue, ""
@@ -403,7 +407,7 @@ func toolsCall(ctx wrapper.HttpContext, llmClient wrapper.HttpClient, llmInfo LL
ctx.SetContext(ToolCallsCount, count)
}
//没得到最终答案
// 没得到最终答案
var urlStr string
var headers [][2]string
@@ -419,7 +423,7 @@ func toolsCall(ctx wrapper.HttpContext, llmClient wrapper.HttpClient, llmInfo LL
log.Infof("calls %s", tools_param.ToolName)
log.Infof("actionInput: %s", actionInput)
//将大模型需要的参数反序列化
// 将大模型需要的参数反序列化
var data map[string]interface{}
if err := json.Unmarshal([]byte(actionInput), &data); err != nil {
log.Debugf("Error: %s", err.Error())
@@ -522,7 +526,7 @@ func onHttpResponseBody(ctx wrapper.HttpContext, config PluginConfig, body []byt
log.Debugf("onHttpResponseBody start")
defer log.Debugf("onHttpResponseBody end")
//初始化接收gpt返回内容的结构体
// 初始化接收gpt返回内容的结构体
var rawResponse Response
err := json.Unmarshal(body, &rawResponse)
if err != nil {
@@ -530,9 +534,9 @@ func onHttpResponseBody(ctx wrapper.HttpContext, config PluginConfig, body []byt
return types.ActionContinue
}
log.Infof("first content: %s", rawResponse.Choices[0].Message.Content)
//如果gpt返回的内容不是空的
// 如果gpt返回的内容不是空的
if rawResponse.Choices[0].Message.Content != "" {
//进入agent的循环思考工具调用的过程中
// 进入agent的循环思考工具调用的过程中
retType, _ := toolsCall(ctx, config.LLMClient, config.LLMInfo, config.JsonResp, config.APIsParam, config.APIClient, rawResponse.Choices[0].Message.Content, rawResponse, log)
return retType
} else {