Skip to main content
Glama

baidu-ai-search

Official
by baidubce
knowledge_base.go27.9 kB
// Copyright (c) 2024 Baidu, Inc. All Rights Reserved. // // 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 appbuilder import ( "bytes" "encoding/json" "errors" "fmt" "io" "mime/multipart" "net/http" "net/url" "os" "path/filepath" "strconv" "time" "github.com/google/uuid" ) func NewKnowledgeBase(config *SDKConfig) (*KnowledgeBase, error) { if config == nil { return nil, errors.New("invalid config") } client := config.HTTPClient if client == nil { client = &http.Client{Timeout: 60 * time.Second} } return &KnowledgeBase{sdkConfig: config, client: client}, nil } func NewKnowledgeBaseWithKnowledgeBaseID(knowledgeBaseID string, config *SDKConfig) (*KnowledgeBase, error) { if config == nil { return nil, errors.New("invalid config") } client := config.HTTPClient if client == nil { client = &http.Client{Timeout: 60 * time.Second} } return &KnowledgeBase{knowledgeBaseID: knowledgeBaseID, sdkConfig: config, client: client}, nil } type KnowledgeBase struct { knowledgeBaseID string sdkConfig *SDKConfig client HTTPClient } func (t *KnowledgeBase) CreateDocument(req CreateDocumentRequest) (CreateDocumentResponse, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledge_base/document?clientToken=" + req.ClientToken) if err != nil { return CreateDocumentResponse{}, err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return CreateDocumentResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return CreateDocumentResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return CreateDocumentResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := CreateDocumentResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return CreateDocumentResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } if rsp.Code != "" { return CreateDocumentResponse{}, fmt.Errorf("requestID=%s, code=%s, message=%s", requestID, rsp.Code, rsp.Message) } return rsp, nil } func (t *KnowledgeBase) DeleteDocument(req DeleteDocumentRequest) error { header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledge_base/document?clientToken=" + req.ClientToken) if err != nil { return err } reqMap := make(map[string]any) reqJson, _ := json.Marshal(req) json.Unmarshal(reqJson, &reqMap) params := url.Values{} for key, value := range reqMap { switch v := value.(type) { case float64: params.Add(key, strconv.Itoa(int(v))) case string: if v == "" { continue } params.Add(key, v) } } serviceURL.RawQuery = params.Encode() request := http.Request{} request.URL = serviceURL request.Method = "DELETE" header.Set("Content-Type", "application/json") request.Header = header t.sdkConfig.BuildCurlCommand(&request) resp, err := http.DefaultClient.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } // Deprecated: use DescribeDocuments instead func (t *KnowledgeBase) GetDocumentList(req GetDocumentListRequest) (*GetDocumentListResponse, error) { header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledge_base/documents") if err != nil { return nil, err } reqMap := make(map[string]any) reqJson, _ := json.Marshal(req) json.Unmarshal(reqJson, &reqMap) params := url.Values{} for key, value := range reqMap { switch v := value.(type) { case float64: params.Add(key, strconv.Itoa(int(v))) case string: if v == "" { continue } params.Add(key, v) } } serviceURL.RawQuery = params.Encode() request := http.Request{} request.URL = serviceURL request.Method = "GET" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return nil, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return nil, fmt.Errorf("requestID=%s, err=%v", requestID, err) } respData, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := GetDocumentListResponse{} if err := json.Unmarshal(respData, &rsp); err != nil { return nil, fmt.Errorf("requestID=%s, err=%v", requestID, err) } if rsp.Code != "" { return nil, fmt.Errorf("requestID=%s, content=%s", requestID, string(respData)) } return &rsp, nil } func (t *KnowledgeBase) DescribeDocuments(req DescribeDocumentsRequest) (DescribeDocumentsResponse, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DescribeDocuments") if err != nil { return DescribeDocumentsResponse{}, err } if req.KnowledgeBaseID == "" && t.knowledgeBaseID != "" { req.KnowledgeBaseID = t.knowledgeBaseID } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return DescribeDocumentsResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return DescribeDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return DescribeDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := DescribeDocumentsResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return DescribeDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } // Deprecated: 此功能即将废弃 func (t *KnowledgeBase) UploadFile(localFilePath string) (string, error) { var data bytes.Buffer w := multipart.NewWriter(&data) file, err := os.Open(localFilePath) if err != nil { return "", err } defer file.Close() filePart, _ := w.CreateFormFile("file", filepath.Base(file.Name())) if _, err := io.Copy(filePart, file); err != nil { return "", err } w.Close() request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/file") if err != nil { return "", err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", w.FormDataContentType()) request.Header = header request.Body = NopCloser(bytes.NewReader(data.Bytes())) resp, err := t.client.Do(&request) if err != nil { return "", err } requestID, err := checkHTTPResponse(resp) if err != nil { return "", fmt.Errorf("requestID=%s, err=%v", requestID, err) } respData, err := io.ReadAll(resp.Body) if err != nil { return "", fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := UploadFileResponse{} if err := json.Unmarshal(respData, &rsp); err != nil { return "", fmt.Errorf("requestID=%s, err=%v", requestID, err) } if rsp.Code != "" { return "", fmt.Errorf("requestID=%s, content=%s", requestID, string(respData)) } fileID := rsp.FileID return fileID, nil } func (t *KnowledgeBase) CreateKnowledgeBase(req KnowledgeBaseDetail) (KnowledgeBaseDetail, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=CreateKnowledgeBase&clientToken=" + req.ClientToken) if err != nil { return KnowledgeBaseDetail{}, err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return KnowledgeBaseDetail{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return KnowledgeBaseDetail{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return KnowledgeBaseDetail{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := KnowledgeBaseDetail{} if err := json.Unmarshal(data, &rsp); err != nil { return KnowledgeBaseDetail{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) GetKnowledgeBaseDetail(knowledgeBaseID string) (KnowledgeBaseDetail, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DescribeKnowledgeBase") if err != nil { return KnowledgeBaseDetail{}, err } req := KnowledgeBaseDetail{} req.ID = knowledgeBaseID request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return KnowledgeBaseDetail{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return KnowledgeBaseDetail{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return KnowledgeBaseDetail{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := KnowledgeBaseDetail{} if err := json.Unmarshal(data, &rsp); err != nil { return KnowledgeBaseDetail{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) GetKnowledgeBaseList(req GetKnowledgeBaseListRequest) (GetKnowledgeBaseListResponse, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DescribeKnowledgeBases") if err != nil { return GetKnowledgeBaseListResponse{}, err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return GetKnowledgeBaseListResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return GetKnowledgeBaseListResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return GetKnowledgeBaseListResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := GetKnowledgeBaseListResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return GetKnowledgeBaseListResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) ModifyKnowledgeBase(req ModifyKnowlegeBaseRequest) error { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=ModifyKnowledgeBase&clientToken=" + req.ClientToken) if err != nil { return err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } _, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } func (t *KnowledgeBase) DeleteKnowledgeBase(knowledgeBaseID string) error { return t.deleteKnowledgeBase(knowledgeBaseID, "") } func (t *KnowledgeBase) DeleteKnowledgeBaseWithReq(req DeleteKnowlegeBaseRequest) error { return t.deleteKnowledgeBase(req.ID, req.ClientToken) } func (t *KnowledgeBase) deleteKnowledgeBase(knowledgeBaseID string, clientToken string) error { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if clientToken == "" { clientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DeleteKnowledgeBase&clientToken=" + clientToken) if err != nil { return err } req := KnowledgeBaseDetail{} req.ID = knowledgeBaseID request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } _, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } // Deprecated: 此功能即将废弃 func (t *KnowledgeBase) CreateDocuments(req CreateDocumentsRequest) error { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=CreateDocuments&clientToken=" + req.ClientToken) if err != nil { return err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } _, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } func (t *KnowledgeBase) CreateDocumentsWithResp(req CreateDocumentsRequest) (CreateDocumentsResponse, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=CreateDocuments&clientToken=" + req.ClientToken) if err != nil { return CreateDocumentsResponse{}, err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return CreateDocumentsResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return CreateDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return CreateDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := CreateDocumentsResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return CreateDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) UploadDocuments(localFilePath string, req CreateDocumentsRequest) error { var data bytes.Buffer w := multipart.NewWriter(&data) file, err := os.Open(localFilePath) if err != nil { return err } defer file.Close() filePart, _ := w.CreateFormFile("file", filepath.Base(file.Name())) if _, err := io.Copy(filePart, file); err != nil { return err } jsonData, err := json.Marshal(req) if err != nil { return fmt.Errorf("failed to marshal request: %w", err) } jsonPart, err := w.CreateFormField("payload") if err != nil { return fmt.Errorf("failed to create form field: %w", err) } if _, err := jsonPart.Write(jsonData); err != nil { return fmt.Errorf("failed to write JSON data: %w", err) } w.Close() request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=UploadDocuments&clientToken=" + req.ClientToken) if err != nil { return err } request.URL = serviceURL request.Method = "POST" request.Header = header header.Set("Content-Type", w.FormDataContentType()) request.Body = NopCloser(bytes.NewReader(data.Bytes())) resp, err := t.client.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } _, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } func (t *KnowledgeBase) UploadDocumentsWithResp(localFilePath string, req CreateDocumentsRequest) (UploadDocumentsResponse, error) { var data bytes.Buffer w := multipart.NewWriter(&data) file, err := os.Open(localFilePath) if err != nil { return UploadDocumentsResponse{}, err } defer file.Close() filePart, _ := w.CreateFormFile("file", filepath.Base(file.Name())) if _, err := io.Copy(filePart, file); err != nil { return UploadDocumentsResponse{}, err } jsonData, err := json.Marshal(req) if err != nil { return UploadDocumentsResponse{}, fmt.Errorf("failed to marshal request: %w", err) } jsonPart, err := w.CreateFormField("payload") if err != nil { return UploadDocumentsResponse{}, fmt.Errorf("failed to create form field: %w", err) } if _, err := jsonPart.Write(jsonData); err != nil { return UploadDocumentsResponse{}, fmt.Errorf("failed to write JSON data: %w", err) } w.Close() request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=UploadDocuments&clientToken=" + req.ClientToken) if err != nil { return UploadDocumentsResponse{}, err } request.URL = serviceURL request.Method = "POST" request.Header = header header.Set("Content-Type", w.FormDataContentType()) request.Body = NopCloser(bytes.NewReader(data.Bytes())) resp, err := t.client.Do(&request) if err != nil { return UploadDocumentsResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return UploadDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } jsonData, err = io.ReadAll(resp.Body) if err != nil { return UploadDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := UploadDocumentsResponse{} if err := json.Unmarshal(jsonData, &rsp); err != nil { return UploadDocumentsResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) CreateChunk(req CreateChunkRequest) (string, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } if req.KnowledgeBaseID == "" && t.knowledgeBaseID != "" { req.KnowledgeBaseID = t.knowledgeBaseID } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=CreateChunk&clientToken=" + req.ClientToken) if err != nil { return "", err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return "", err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return "", fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return "", fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := CreateChunkResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return "", fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp.ID, nil } func (t *KnowledgeBase) ModifyChunk(req ModifyChunkRequest) error { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if req.ClientToken == "" { req.ClientToken = uuid.New().String() } if req.KnowledgeBaseID == "" && t.knowledgeBaseID != "" { req.KnowledgeBaseID = t.knowledgeBaseID } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=ModifyChunk&clientToken=" + req.ClientToken) if err != nil { return err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := CreateChunkResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } func (t *KnowledgeBase) DeleteChunk(chunkID string) error { return t.deleteChunk(chunkID, "") } func (t *KnowledgeBase) DeleteChunkWithReq(req DeleteChunkRequest) error { return t.deleteChunk(req.ChunkID, req.ClientToken) } func (t *KnowledgeBase) deleteChunk(chunkID string, clientToken string) error { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() if clientToken == "" { clientToken = uuid.New().String() } serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DeleteChunk&clientToken=" + clientToken) if err != nil { return err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header req := DeleteChunkRequest{ ChunkID: chunkID, } if t.knowledgeBaseID != "" { req.KnowledgeBaseID = t.knowledgeBaseID } data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := CreateChunkResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return fmt.Errorf("requestID=%s, err=%v", requestID, err) } return nil } func (t *KnowledgeBase) DescribeChunk(chunkID string) (DescribeChunkResponse, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DescribeChunk") if err != nil { return DescribeChunkResponse{}, err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header req := DescribeChunkRequest{ ChunkID: chunkID, } if t.knowledgeBaseID != "" { req.KnowledgeBaseID = t.knowledgeBaseID } data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return DescribeChunkResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return DescribeChunkResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return DescribeChunkResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := DescribeChunkResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return DescribeChunkResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) DescribeChunks(req DescribeChunksRequest) (DescribeChunksResponse, error) { request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgeBase?Action=DescribeChunks") if err != nil { return DescribeChunksResponse{}, err } if req.KnowledgeBaseID == "" && t.knowledgeBaseID != "" { req.KnowledgeBaseID = t.knowledgeBaseID } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return DescribeChunksResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return DescribeChunksResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return DescribeChunksResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := DescribeChunksResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return DescribeChunksResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil } func (t *KnowledgeBase) QueryKnowledgeBase(req QueryKnowledgeBaseRequest) (QueryKnowledgeBaseResponse, error) { // 检查 RankScoreThreshold 是否为 nil,如果是,则设置默认值 if req.RankScoreThreshold == nil { defaultThreshold := 0.4 req.RankScoreThreshold = &defaultThreshold } request := http.Request{} header := t.sdkConfig.AuthHeaderV2() serviceURL, err := t.sdkConfig.ServiceURLV2("/knowledgebases/query") if err != nil { return QueryKnowledgeBaseResponse{}, err } request.URL = serviceURL request.Method = "POST" header.Set("Content-Type", "application/json") request.Header = header data, _ := json.Marshal(req) request.Body = NopCloser(bytes.NewReader(data)) t.sdkConfig.BuildCurlCommand(&request) resp, err := t.client.Do(&request) if err != nil { return QueryKnowledgeBaseResponse{}, err } defer resp.Body.Close() requestID, err := checkHTTPResponse(resp) if err != nil { return QueryKnowledgeBaseResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } data, err = io.ReadAll(resp.Body) if err != nil { return QueryKnowledgeBaseResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } rsp := QueryKnowledgeBaseResponse{} if err := json.Unmarshal(data, &rsp); err != nil { return QueryKnowledgeBaseResponse{}, fmt.Errorf("requestID=%s, err=%v", requestID, err) } return rsp, nil }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/baidubce/app-builder'

If you have feedback or need assistance with the MCP directory API, please join our Discord server