refactor: update knowledge service and response structure (#8)

This commit is contained in:
Junhui Huang 2025-07-15 11:30:21 +08:00 committed by GitHub
parent e787beb02b
commit a4de5d46e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 50 additions and 46 deletions

View file

@ -1,7 +1,7 @@
package ai.z.openapi.api.knowledge;
import ai.z.openapi.service.knowledge.KnowledgeBaseParams;
import ai.z.openapi.service.knowledge.KnowledgeInfo;
import ai.z.openapi.service.knowledge.KnowledgeId;
import ai.z.openapi.service.knowledge.KnowledgePage;
import ai.z.openapi.service.knowledge.KnowledgeUsed;
import io.reactivex.Single;
@ -30,7 +30,7 @@ public interface KnowledgeApi {
* @return Knowledge base information with ID, status, and metadata
*/
@POST("knowledge")
Single<KnowledgeInfo> knowledgeCreate(@Body KnowledgeBaseParams knowledgeBaseParams);
Single<KnowledgeId> knowledgeCreate(@Body KnowledgeBaseParams knowledgeBaseParams);
/**
* Modify an existing knowledge base Updates knowledge base configuration and settings

View file

@ -5,7 +5,7 @@ import ai.z.openapi.service.model.ChatError;
import lombok.Data;
@Data
public class KnowledgeResponse implements ClientResponse<KnowledgeInfo> {
public class CreateKnowledgeResponse implements ClientResponse<KnowledgeId> {
private int code;
@ -13,7 +13,7 @@ public class KnowledgeResponse implements ClientResponse<KnowledgeInfo> {
private boolean success;
private KnowledgeInfo data;
private KnowledgeId data;
private ChatError error;

View file

@ -47,7 +47,4 @@ public class KnowledgeBaseParams implements ClientRequest<KnowledgeBaseParams> {
@JsonProperty("icon")
private String icon;
@JsonProperty("bucket_id")
private String bucketId;
}

View file

@ -0,0 +1,25 @@
package ai.z.openapi.service.knowledge;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* This class represents the usage information of the knowledge base.
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KnowledgeId {
/**
* Unique identifier for the knowledge base
*/
@JsonProperty("id")
private String id;
}

View file

@ -1,13 +1,5 @@
package ai.z.openapi.service.knowledge;
import ai.z.openapi.service.knowledge.KnowledgeBaseParams;
import ai.z.openapi.service.knowledge.KnowledgeEditResponse;
import ai.z.openapi.service.knowledge.QueryKnowledgeApiResponse;
import ai.z.openapi.service.knowledge.KnowledgeResponse;
import ai.z.openapi.service.knowledge.KnowledgeUsedResponse;
import ai.z.openapi.service.knowledge.QueryKnowledgeRequest;
import retrofit2.Response;
/**
* Knowledge service interface
*/
@ -16,9 +8,9 @@ public interface KnowledgeService {
/**
* Creates a new knowledge base.
* @param request the knowledge creation request
* @return KnowledgeResponse containing the creation result
* @return CreateKnowledgeResponse containing the creation result
*/
KnowledgeResponse createKnowledge(KnowledgeBaseParams request);
CreateKnowledgeResponse createKnowledge(KnowledgeBaseParams request);
/**
* Modifies an existing knowledge base.

View file

@ -22,10 +22,10 @@ public class KnowledgeServiceImpl implements KnowledgeService {
}
@Override
public KnowledgeResponse createKnowledge(KnowledgeBaseParams request) {
public CreateKnowledgeResponse createKnowledge(KnowledgeBaseParams request) {
validateCreateKnowledgeParams(request);
RequestSupplier<KnowledgeBaseParams, KnowledgeInfo> supplier = knowledgeApi::knowledgeCreate;
return this.zAiClient.executeRequest(request, supplier, KnowledgeResponse.class);
RequestSupplier<KnowledgeBaseParams, KnowledgeId> supplier = knowledgeApi::knowledgeCreate;
return this.zAiClient.executeRequest(request, supplier, CreateKnowledgeResponse.class);
}
@Override

View file

@ -1,12 +1,8 @@
package ai.z.openapi.service.assistant;
import ai.z.openapi.ZaiClient;
import ai.z.openapi.core.Constants;
import ai.z.openapi.core.config.ZaiConfig;
import ai.z.openapi.service.assistant.AssistantApiResponse;
import ai.z.openapi.service.assistant.AssistantCompletion;
import ai.z.openapi.service.assistant.AssistantParameters;
import ai.z.openapi.service.assistant.ConversationMessage;
import ai.z.openapi.service.assistant.MessageTextContent;
import ai.z.openapi.service.assistant.conversation.ConversationParameters;
import ai.z.openapi.service.assistant.conversation.ConversationUsageListResponse;
import ai.z.openapi.service.assistant.message.MessageContent;
@ -84,7 +80,7 @@ public class AssistantServiceTest {
String requestId = String.format(REQUEST_ID_TEMPLATE, System.currentTimeMillis());
AssistantParameters request = AssistantParameters.builder()
.model("GLM-4-Assistant")
.model(Constants.ModelChatGLM4Assistant)
.assistantId(TEST_ASSISTANT_ID)
.stream(false)
.messages(Collections.singletonList(message))

View file

@ -2,14 +2,6 @@ package ai.z.openapi.service.knowledge;
import ai.z.openapi.ZaiClient;
import ai.z.openapi.core.config.ZaiConfig;
import ai.z.openapi.service.knowledge.KnowledgeBaseParams;
import ai.z.openapi.service.knowledge.KnowledgeEditResponse;
import ai.z.openapi.service.knowledge.KnowledgeResponse;
import ai.z.openapi.service.knowledge.KnowledgeService;
import ai.z.openapi.service.knowledge.KnowledgeServiceImpl;
import ai.z.openapi.service.knowledge.KnowledgeUsedResponse;
import ai.z.openapi.service.knowledge.QueryKnowledgeApiResponse;
import ai.z.openapi.service.knowledge.QueryKnowledgeRequest;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
@ -70,16 +62,18 @@ public class KnowledgeServiceTest {
.icon("question")
.background("blue")
.customerIdentifier("test-customer")
.bucketId("test-bucket")
.knowledgeId(requestId)
.build();
// Execute test
KnowledgeResponse response = knowledgeService.createKnowledge(request);
CreateKnowledgeResponse response = knowledgeService.createKnowledge(request);
System.out.println(response.getError());
// Verify results
assertNotNull(response, "Response should not be null");
assertTrue(response.isSuccess(), "Response should be successful");
assertNotNull(response.getData(), "Response data should not be null");
assertNotNull(response.getData().getId(), "Knowledge ID should not be null");
assertNull(response.getError(), "Response error should be null");
logger.info("Create knowledge response: {}", mapper.writeValueAsString(response));
}
@ -99,7 +93,7 @@ public class KnowledgeServiceTest {
.icon("book")
.background("green")
.customerIdentifier("test-customer")
.bucketId("test-bucket")
.knowledgeId(requestId)
.build();
// Execute test
@ -207,7 +201,7 @@ public class KnowledgeServiceTest {
.name("") // Empty name
.build();
KnowledgeResponse response = knowledgeService.createKnowledge(request);
CreateKnowledgeResponse response = knowledgeService.createKnowledge(request);
// Should return error response
assertNotNull(response, "Response should not be null");
@ -278,7 +272,7 @@ public class KnowledgeServiceTest {
// This should be validated either by the service or the API
assertDoesNotThrow(() -> {
KnowledgeResponse response = knowledgeService.createKnowledge(request);
CreateKnowledgeResponse response = knowledgeService.createKnowledge(request);
// If validation is done server-side, we expect an error response
if (!response.isSuccess()) {
assertNotNull(response.getError(), "Should contain validation error");
@ -304,7 +298,7 @@ public class KnowledgeServiceTest {
// This should be validated either by the service or the API
assertDoesNotThrow(() -> {
KnowledgeResponse response = knowledgeService.createKnowledge(request);
CreateKnowledgeResponse response = knowledgeService.createKnowledge(request);
// If validation is done server-side, we expect an error response
if (!response.isSuccess()) {
assertNotNull(response.getError(), "Should contain validation error");
@ -331,7 +325,7 @@ public class KnowledgeServiceTest {
// This should be validated either by the service or the API
assertDoesNotThrow(() -> {
KnowledgeResponse response = knowledgeService.createKnowledge(request);
CreateKnowledgeResponse response = knowledgeService.createKnowledge(request);
// If validation is done server-side, we expect an error response
if (!response.isSuccess()) {
assertNotNull(response.getError(), "Should contain validation error");
@ -340,25 +334,25 @@ public class KnowledgeServiceTest {
}
@Test
@DisplayName("Test Bucket ID Length Validation")
@DisplayName("Test Knowledge ID Length Validation")
@EnabledIfEnvironmentVariable(named = "ZAI_API_KEY", matches = "^[^.]+\\.[^.]+$")
void testBucketIdLengthValidation() {
void testKnowledgeIdLengthValidation() {
// Test with bucket ID exceeding 32 characters
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 33; i++) {
sb.append("a");
}
String longBucketId = sb.toString();
String longKnowledgeId = sb.toString();
KnowledgeBaseParams request = KnowledgeBaseParams.builder()
.embeddingId(1)
.name("Test Knowledge Base")
.description("Test description")
.bucketId(longBucketId)
.knowledgeId(longKnowledgeId)
.build();
// This should be validated either by the service or the API
assertDoesNotThrow(() -> {
KnowledgeResponse response = knowledgeService.createKnowledge(request);
CreateKnowledgeResponse response = knowledgeService.createKnowledge(request);
// If validation is done server-side, we expect an error response
if (!response.isSuccess()) {
assertNotNull(response.getError(), "Should contain validation error");