fix:知识库切换 WeKnora -> lightRAG

This commit is contained in:
fuzhongyun 2026-01-28 17:14:23 +08:00
parent 5b11cb728f
commit 71a5118180
3 changed files with 99 additions and 1 deletions

View File

@ -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

View File

@ -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" {

View File

@ -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)