359 lines
11 KiB
Go
359 lines
11 KiB
Go
/*
|
|
* Copyright 2025 coze-dev Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cloudwego/eino/schema"
|
|
|
|
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/knowledge"
|
|
"github.com/coze-dev/coze-studio/backend/domain/knowledge/entity"
|
|
"github.com/coze-dev/coze-studio/backend/domain/knowledge/internal/dal/model"
|
|
"github.com/coze-dev/coze-studio/backend/infra/contract/chatmodel"
|
|
"github.com/coze-dev/coze-studio/backend/infra/contract/document"
|
|
"github.com/coze-dev/coze-studio/backend/pkg/lang/sets"
|
|
)
|
|
|
|
type Knowledge interface {
|
|
CreateKnowledge(ctx context.Context, request *CreateKnowledgeRequest) (response *CreateKnowledgeResponse, err error)
|
|
UpdateKnowledge(ctx context.Context, request *UpdateKnowledgeRequest) error
|
|
DeleteKnowledge(ctx context.Context, request *DeleteKnowledgeRequest) error
|
|
CopyKnowledge(ctx context.Context, request *CopyKnowledgeRequest) (*CopyKnowledgeResponse, error)
|
|
MoveKnowledgeToLibrary(ctx context.Context, request *MoveKnowledgeToLibraryRequest) error
|
|
ListKnowledge(ctx context.Context, request *ListKnowledgeRequest) (response *ListKnowledgeResponse, err error)
|
|
GetKnowledgeByID(ctx context.Context, request *GetKnowledgeByIDRequest) (response *GetKnowledgeByIDResponse, err error)
|
|
MGetKnowledgeByID(ctx context.Context, request *MGetKnowledgeByIDRequest) (response *MGetKnowledgeByIDResponse, err error)
|
|
|
|
CreateDocument(ctx context.Context, request *CreateDocumentRequest) (response *CreateDocumentResponse, err error)
|
|
UpdateDocument(ctx context.Context, request *UpdateDocumentRequest) error
|
|
DeleteDocument(ctx context.Context, request *DeleteDocumentRequest) error
|
|
ExtractPhotoCaption(ctx context.Context, request *ExtractPhotoCaptionRequest) (response *ExtractPhotoCaptionResponse, err error)
|
|
ListDocument(ctx context.Context, request *ListDocumentRequest) (response *ListDocumentResponse, err error)
|
|
MGetDocumentProgress(ctx context.Context, request *MGetDocumentProgressRequest) (response *MGetDocumentProgressResponse, err error)
|
|
ResegmentDocument(ctx context.Context, request *ResegmentDocumentRequest) (response *ResegmentDocumentResponse, err error)
|
|
GetAlterTableSchema(ctx context.Context, request *AlterTableSchemaRequest) (response *TableSchemaResponse, err error)
|
|
ValidateTableSchema(ctx context.Context, request *ValidateTableSchemaRequest) (response *ValidateTableSchemaResponse, err error)
|
|
GetDocumentTableInfo(ctx context.Context, request *GetDocumentTableInfoRequest) (response *GetDocumentTableInfoResponse, err error)
|
|
GetImportDataTableSchema(ctx context.Context, request *ImportDataTableSchemaRequest) (response *TableSchemaResponse, err error)
|
|
|
|
CreateSlice(ctx context.Context, request *CreateSliceRequest) (response *CreateSliceResponse, err error)
|
|
UpdateSlice(ctx context.Context, request *UpdateSliceRequest) error
|
|
DeleteSlice(ctx context.Context, request *DeleteSliceRequest) error
|
|
ListSlice(ctx context.Context, request *ListSliceRequest) (response *ListSliceResponse, err error)
|
|
ListPhotoSlice(ctx context.Context, request *ListPhotoSliceRequest) (response *ListPhotoSliceResponse, err error)
|
|
GetSlice(ctx context.Context, request *GetSliceRequest) (response *GetSliceResponse, err error)
|
|
Retrieve(ctx context.Context, request *RetrieveRequest) (response *RetrieveResponse, err error)
|
|
CreateDocumentReview(ctx context.Context, request *CreateDocumentReviewRequest) (response *CreateDocumentReviewResponse, err error)
|
|
MGetDocumentReview(ctx context.Context, request *MGetDocumentReviewRequest) (response *MGetDocumentReviewResponse, err error)
|
|
SaveDocumentReview(ctx context.Context, request *SaveDocumentReviewRequest) error
|
|
}
|
|
|
|
type CreateKnowledgeRequest struct {
|
|
Name string
|
|
Description string
|
|
CreatorID int64
|
|
SpaceID int64
|
|
IconUri string
|
|
FormatType knowledge.DocumentType
|
|
AppID int64
|
|
}
|
|
|
|
type CreateKnowledgeResponse struct {
|
|
KnowledgeID int64
|
|
CreatedAtMs int64
|
|
}
|
|
|
|
type UpdateKnowledgeRequest struct {
|
|
KnowledgeID int64
|
|
Name *string
|
|
IconUri *string
|
|
Description *string
|
|
Status *knowledge.KnowledgeStatus
|
|
}
|
|
|
|
type CreateDocumentRequest struct {
|
|
Documents []*entity.Document
|
|
}
|
|
|
|
type UpdateDocumentRequest struct {
|
|
DocumentID int64
|
|
DocumentName *string
|
|
TableInfo *entity.TableInfo
|
|
}
|
|
|
|
type DeleteDocumentRequest struct {
|
|
DocumentID int64
|
|
}
|
|
|
|
type MGetDocumentProgressRequest struct {
|
|
DocumentIDs []int64
|
|
}
|
|
|
|
type MGetDocumentProgressResponse struct {
|
|
ProgressList []*DocumentProgress
|
|
}
|
|
|
|
type CreateSliceRequest struct {
|
|
DocumentID int64
|
|
CreatorID int64
|
|
Position int64
|
|
RawContent []*knowledge.SliceContent
|
|
}
|
|
type CreateSliceResponse struct {
|
|
SliceID int64
|
|
}
|
|
|
|
type UpdateSliceRequest struct {
|
|
SliceID int64
|
|
DocumentID int64
|
|
CreatorID int64
|
|
RawContent []*knowledge.SliceContent
|
|
}
|
|
|
|
type GetSliceRequest struct {
|
|
SliceID int64
|
|
}
|
|
type GetSliceResponse struct {
|
|
Slice *entity.Slice
|
|
}
|
|
type DeleteSliceRequest struct {
|
|
SliceID int64
|
|
}
|
|
|
|
type ListKnowledgeRequest = knowledge.ListKnowledgeRequest
|
|
|
|
type RetrieveResponse = knowledge.RetrieveResponse
|
|
|
|
type ListKnowledgeResponse = knowledge.ListKnowledgeResponse
|
|
|
|
type DeleteKnowledgeRequest = knowledge.DeleteKnowledgeRequest
|
|
|
|
type CreateDocumentResponse struct {
|
|
Documents []*entity.Document
|
|
}
|
|
|
|
type ListDocumentRequest struct {
|
|
KnowledgeID int64
|
|
DocumentIDs []int64
|
|
Limit *int
|
|
Offset *int
|
|
Cursor *string
|
|
SelectAll bool
|
|
}
|
|
|
|
type ListDocumentResponse struct {
|
|
Documents []*entity.Document
|
|
Total int64
|
|
HasMore bool
|
|
NextCursor *string
|
|
}
|
|
|
|
type DocumentProgress struct {
|
|
ID int64
|
|
Name string
|
|
Size int64
|
|
FileExtension string
|
|
Progress int
|
|
Status entity.DocumentStatus
|
|
StatusMsg string
|
|
RemainingSec int64
|
|
URL string
|
|
}
|
|
|
|
type ResegmentDocumentRequest struct {
|
|
DocumentID int64
|
|
ParsingStrategy *entity.ParsingStrategy
|
|
ChunkingStrategy *entity.ChunkingStrategy
|
|
}
|
|
type ResegmentDocumentResponse struct {
|
|
Document *entity.Document
|
|
}
|
|
type ListSliceRequest struct {
|
|
KnowledgeID *int64
|
|
DocumentID *int64
|
|
Keyword *string
|
|
Sequence int64
|
|
Offset int64
|
|
Limit int64
|
|
}
|
|
|
|
type ListSliceResponse struct {
|
|
Slices []*entity.Slice
|
|
Total int
|
|
HasMore bool
|
|
NextCursor *string
|
|
}
|
|
|
|
type RetrieveRequest = knowledge.RetrieveRequest
|
|
|
|
type RetrieveContext struct {
|
|
Ctx context.Context
|
|
OriginQuery string // Original query
|
|
RewrittenQuery *string // The rewritten query, if not rewritten, is nil, which will be added during execution
|
|
ChatHistory []*schema.Message // Nil if there is no dialogue history or no history is required
|
|
KnowledgeIDs sets.Set[int64] // The knowledge base ID involved in this search
|
|
KnowledgeInfoMap map[int64]*KnowledgeInfo // Mapping of Knowledge Base IDs to Document IDs
|
|
// recall strategy
|
|
Strategy *entity.RetrievalStrategy
|
|
// Retrieve the document information involved
|
|
Documents []*model.KnowledgeDocument
|
|
// A chat model for nl2sql and message to query
|
|
ChatModel chatmodel.BaseChatModel
|
|
}
|
|
|
|
type KnowledgeInfo struct {
|
|
KnowledgeName string
|
|
DocumentIDs []int64
|
|
DocumentType knowledge.DocumentType
|
|
TableColumns []*entity.TableColumn
|
|
}
|
|
type AlterTableSchemaRequest struct {
|
|
DocumentID int64
|
|
TableDataType TableDataType
|
|
OriginTableMeta []*entity.TableColumn
|
|
PreviewTableMeta []*entity.TableColumn
|
|
}
|
|
|
|
type ImportDataTableSchemaRequest struct {
|
|
// parse source data
|
|
SourceInfo TableSourceInfo
|
|
TableSheet *entity.TableSheet
|
|
TableDataType TableDataType
|
|
|
|
// DocumentID would be nil if is first time import
|
|
DocumentID *int64
|
|
|
|
// OriginTableMeta and PreviewTableMeta is not nil only in first time import
|
|
OriginTableMeta []*entity.TableColumn
|
|
PreviewTableMeta []*entity.TableColumn
|
|
}
|
|
|
|
type TableSchemaResponse struct {
|
|
Code int32
|
|
Msg string
|
|
TableSheet *entity.TableSheet // sheet detail
|
|
AllTableSheets []*entity.TableSheet // all sheets, len >= 1 when file type is xlsx
|
|
TableMeta []*entity.TableColumn // columns
|
|
PreviewData [][]*document.ColumnData // rows: index -> value
|
|
}
|
|
|
|
type TableDataType int32
|
|
|
|
const (
|
|
AllData TableDataType = 0 // Schema sheets and preview data
|
|
OnlySchema TableDataType = 1 // Only need schema structure & Sheets
|
|
OnlyPreview TableDataType = 2 // Just preview the data
|
|
)
|
|
|
|
type GetDocumentTableInfoRequest struct {
|
|
DocumentID *int64
|
|
SourceInfo *TableSourceInfo
|
|
}
|
|
|
|
type GetDocumentTableInfoResponse struct {
|
|
Code int32
|
|
Msg string
|
|
TableSheet []*entity.TableSheet
|
|
TableMeta map[string][]*entity.TableColumn // table sheet index -> columns
|
|
PreviewData map[string][]map[string]string // table sheet index -> rows : sequence -> value
|
|
}
|
|
|
|
type TableSourceInfo struct {
|
|
// FileType table file type, required when using Uri or FileBase64
|
|
FileType *string
|
|
// Uri table from uri
|
|
Uri *string
|
|
// FileBase64 table from base64
|
|
FileBase64 *string
|
|
// CustomContent table from raw content
|
|
// rows: column name -> value
|
|
CustomContent []map[string]string
|
|
}
|
|
|
|
type ValidateTableSchemaRequest struct {
|
|
DocumentID int64
|
|
SourceInfo TableSourceInfo
|
|
TableSheet *entity.TableSheet
|
|
}
|
|
|
|
type ValidateTableSchemaResponse struct {
|
|
ColumnValidResult map[string]string // column name -> validate result
|
|
}
|
|
type CreateDocumentReviewRequest struct {
|
|
KnowledgeID int64
|
|
Reviews []*ReviewInput
|
|
ChunkStrategy *entity.ChunkingStrategy
|
|
ParsingStrategy *entity.ParsingStrategy
|
|
}
|
|
|
|
type ReviewInput struct {
|
|
DocumentName string `thrift:"document_name,1" frugal:"1,default,string" json:"document_name"`
|
|
DocumentType string `thrift:"document_type,2" frugal:"2,default,string" json:"document_type"`
|
|
TosUri string `thrift:"tos_uri,3" frugal:"3,default,string" json:"tos_uri"`
|
|
DocumentID *int64 `thrift:"document_id,4,optional" frugal:"4,optional,i64" json:"document_id,omitempty"`
|
|
}
|
|
|
|
type SaveDocumentReviewRequest struct {
|
|
KnowledgeID int64
|
|
ReviewID int64
|
|
DocTreeJson string
|
|
}
|
|
|
|
type CreateDocumentReviewResponse struct {
|
|
Reviews []*entity.Review
|
|
}
|
|
|
|
type MGetDocumentReviewRequest struct {
|
|
KnowledgeID int64
|
|
ReviewIDs []int64
|
|
}
|
|
|
|
type MGetDocumentReviewResponse struct {
|
|
Reviews []*entity.Review
|
|
}
|
|
|
|
type CopyKnowledgeRequest = knowledge.CopyKnowledgeRequest
|
|
type CopyKnowledgeResponse = knowledge.CopyKnowledgeResponse
|
|
|
|
type MoveKnowledgeToLibraryRequest = knowledge.MoveKnowledgeToLibraryRequest
|
|
|
|
type GetKnowledgeByIDRequest = knowledge.GetKnowledgeByIDRequest
|
|
type GetKnowledgeByIDResponse = knowledge.GetKnowledgeByIDResponse
|
|
|
|
type ListPhotoSliceRequest struct {
|
|
KnowledgeID int64
|
|
DocumentIDs []int64
|
|
Limit *int
|
|
Offset *int
|
|
HasCaption *bool
|
|
}
|
|
type ListPhotoSliceResponse struct {
|
|
Slices []*entity.Slice
|
|
Total int
|
|
}
|
|
|
|
type ExtractPhotoCaptionRequest struct {
|
|
DocumentID int64
|
|
}
|
|
|
|
type ExtractPhotoCaptionResponse struct {
|
|
Caption string
|
|
}
|
|
type MGetKnowledgeByIDRequest = knowledge.MGetKnowledgeByIDRequest
|
|
type MGetKnowledgeByIDResponse = knowledge.MGetKnowledgeByIDResponse
|