feat: Enhance Kol Generation Service with web search and knowledge group support

- Added `EnableWebSearch` and `KnowledgeGroupIDs` fields to `KolGenerationSubmitRequest`.
- Updated `Submit` method in `KolGenerationService` to handle new request fields.
- Integrated web search and knowledge group validation based on card configuration.
- Introduced caching mechanisms in `KolPackageService`, `KolPromptService`, and `KolSubscriptionAdminService` to improve performance.
- Implemented knowledge context resolution in `KolGenerationWorker` to enrich prompts with relevant knowledge snippets.
- Added utility functions for handling card configuration in both backend and frontend.
- Created tests for knowledge extraction and rendering to ensure accuracy and reliability.
This commit is contained in:
2026-04-18 13:47:32 +08:00
parent 3ef0807456
commit b2605abd6a
27 changed files with 2051 additions and 171 deletions
+38
View File
@@ -0,0 +1,38 @@
import type { KolCardConfig } from "@geo/shared-types";
const DEFAULT_ALLOW_WEB_SEARCH = false;
const DEFAULT_ALLOW_USER_KNOWLEDGE = true;
function asRecord(value: unknown): Record<string, unknown> {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return {};
}
return value as Record<string, unknown>;
}
function booleanFromUnknown(value: unknown): boolean | undefined {
return typeof value === "boolean" ? value : undefined;
}
export function parseKolCardConfig(value: unknown): Required<Pick<KolCardConfig, "allow_web_search" | "allow_user_knowledge">> {
const record = asRecord(value);
return {
allow_web_search: booleanFromUnknown(record.allow_web_search) ?? DEFAULT_ALLOW_WEB_SEARCH,
allow_user_knowledge:
booleanFromUnknown(record.allow_user_knowledge) ?? DEFAULT_ALLOW_USER_KNOWLEDGE,
};
}
export function mergeKolCardConfig(base: unknown, overrides: KolCardConfig): KolCardConfig {
const record = asRecord(base);
const parsed = parseKolCardConfig(record);
return {
...record,
...overrides,
allow_web_search:
booleanFromUnknown(overrides.allow_web_search) ?? parsed.allow_web_search,
allow_user_knowledge:
booleanFromUnknown(overrides.allow_user_knowledge) ?? parsed.allow_user_knowledge,
};
}