From 71a51181800fe1e4d5d5dd8508c05d9eadcb152e Mon Sep 17 00:00:00 2001 From: fuzhongyun <15339891972@163.com> Date: Wed, 28 Jan 2026 17:14:23 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E7=9F=A5=E8=AF=86=E5=BA=93?= =?UTF-8?q?=E5=88=87=E6=8D=A2=20WeKnora=20->=20lightRAG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config_env.yaml | 2 +- internal/biz/do/handle.go | 97 ++++++++++++++++++++++++++++++++++++ internal/biz/group_config.go | 1 + 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/config/config_env.yaml b/config/config_env.yaml index a1b552d..1216a6b 100644 --- a/config/config_env.yaml +++ b/config/config_env.yaml @@ -196,7 +196,7 @@ permissionConfig: # 知识库配置 knowledge_config: - base_url: "http://127.0.0.1:9600" + base_url: "http://192.168.6.115:9600" tenant_id: "default" mode: "naive" stream: true diff --git a/internal/biz/do/handle.go b/internal/biz/do/handle.go index 3dbdb29..a3d6a3b 100644 --- a/internal/biz/do/handle.go +++ b/internal/biz/do/handle.go @@ -8,6 +8,7 @@ import ( errors "ai_scheduler/internal/data/error" "ai_scheduler/internal/data/impl" "ai_scheduler/internal/data/model" + "ai_scheduler/internal/domain/tools/common/knowledge_base" "ai_scheduler/internal/domain/workflow/runtime" "ai_scheduler/internal/entitys" "ai_scheduler/internal/gateway" @@ -19,6 +20,7 @@ import ( "ai_scheduler/internal/pkg/util" "ai_scheduler/internal/tools" "ai_scheduler/internal/tools/public" + "bufio" errorsSpecial "errors" "io" "net/http" @@ -246,6 +248,101 @@ func (r *Handle) handleKnowle(ctx context.Context, rec *entitys.Recognize, task return } +// 知识库V2 - lightRAG自建 +func (r *Handle) handleKnowleV2(ctx context.Context, rec *entitys.Recognize, task *model.AiTask) (err error) { + // 获取用户session信息 + + ext, err := rec_extra.GetTaskRecExt(rec) + if err != nil { + return + } + // 获取租户ID 形式为 {biz-user} 比如 "zltx-platform" + tenantID := ext.Sys.KnowlegeTenantKey + + // 请求知识库工具 + knowledgeBase := knowledge_base.New(r.conf.KnowledgeConfig) + knowledgeResp, err := knowledgeBase.Query(&knowledge_base.QueryRequest{ + TenantID: tenantID, // 后续动态接参 + Query: rec.UserContent.Text, + Mode: constants.KnowledgeModeMix, + Stream: true, + Think: false, + OnlyRAG: true, + }) + if err != nil { + return fmt.Errorf("请求知识库工具失败,err: %v", err) + } + + // 读取知识库SSE数据 + err = r.readKnowledgeSSE(knowledgeResp, rec.Ch, false) + if err != nil { + return + } + + return +} + +// 读取知识库 SSE 数据 +func (r *Handle) readKnowledgeSSE(resp io.ReadCloser, channel chan entitys.Response, useParagraphMode bool) (err error) { + scanner := bufio.NewScanner(resp) + var buffer strings.Builder + + var taskIndex string = "knowledgeBase" + + for scanner.Scan() { + line := scanner.Text() + + delta, done, err := knowledge_base.ParseOpenAIStreamData(line) + if err != nil { + return fmt.Errorf("解析SSE数据失败: %w", err) + } + if done { + break + } + if delta == nil { + continue + } + + // 推理内容 + if delta.ReasoningContent != "" { + entitys.ResStream(channel, taskIndex, delta.ReasoningContent) + continue + } + // 输出内容 - 段落 + if delta.Content != "" && useParagraphMode { + // 存入缓冲区 + buffer.WriteString(delta.Content) + content := buffer.String() + + // 检查是否有换行符,按段落输出 + if idx := strings.LastIndex(content, "\n"); idx != -1 { + // 发送直到最后一个换行符的内容 + toSend := content[:idx+1] + entitys.ResStream(channel, taskIndex, toSend) + + // 重置缓冲区,保留剩余部分 + remaining := content[idx+1:] + buffer.Reset() + buffer.WriteString(remaining) + } + } + // 输出内容 - 逐字 + if delta.Content != "" && !useParagraphMode { + entitys.ResStream(channel, taskIndex, delta.Content) + } + } + if err := scanner.Err(); err != nil { + return fmt.Errorf("读取SSE流中断: %w", err) + } + + // 发送缓冲区剩余内容(仅在段落模式下需要) + if useParagraphMode && buffer.Len() > 0 { + entitys.ResStream(channel, taskIndex, buffer.String()) + } + + return nil +} + // bot 临时实现,后续转到 eino 工作流 func (r *Handle) handleBot(ctx context.Context, rec *entitys.Recognize, task *model.AiTask) (err error) { if task.Index == "bug_optimization_submit" { diff --git a/internal/biz/group_config.go b/internal/biz/group_config.go index 9b7cf0b..5c2146b 100644 --- a/internal/biz/group_config.go +++ b/internal/biz/group_config.go @@ -486,6 +486,7 @@ func (g *GroupConfigBiz) handleKnowledge(ctx context.Context, rec *entitys.Recog Mode: constants.KnowledgeModeMix, Stream: true, Think: false, + OnlyRAG: true, }) if err != nil { return fmt.Errorf("请求知识库工具失败,err: %v", err)