| 开发者 | alessandrolioce |
|---|---|
| 更新时间 | 2026年10月11日 18:01 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPL-2.0+ |
| 版权网址: | 版权信息 |
text-embedding-3-small model (1536 dimensions) via the OpenAI Embeddings API for all vectorizers; the Summary vectorizer additionally calls the OpenAI Responses API (gpt-4.1-nano) to generate post summaries.post_chunk for chunk-level points and post_summary for post-level summary points.creator-assistant-hub folder to the /wp-content/plugins/ directory, or install the plugin directly from the WordPress plugin screen.Yes. The OpenAI API is a pay-as-you-go service: a valid payment method and prepaid credits are required. There is no free tier for API usage. The text-embedding-3-small model used by the Hub is very affordable: generating embeddings for a typical blog post costs a fraction of a cent. Check OpenAI pricing for details.
Yes. The free tier of Qdrant Cloud provides a single cluster that may be suspended after a period of inactivity. The built-in keep-alive feature sends a daily ping to prevent this.
By default, posts and pages are vectorized. Add-ons can register additional post types via the available hooks.
In two places:
Go to Tools → Site Health. A dedicated test named Creator Assistant Hub service reports whether the Terms of Service have been accepted and both OpenAI and Qdrant are connected and ready.
Also verify that WP-Cron is running correctly on your site. Vectorization is processed asynchronously via WP-Cron: if WP-Cron is disabled (e.g. DISABLE_WP_CRON is set to true in wp-config.php), posts will not be vectorized automatically. You can check this under Tools → Site Health → Info → WordPress constants. On some managed hosting plans, a real server-side cron job is used instead; make sure it is configured and firing regularly.
Yes. In the Cache tab of the Hub settings page, set the cache expiration to Disabled.
API keys are stored in the WordPress options table in the same way as other plugin settings. Make sure your WordPress database and hosting environment are secure. Keys are never exposed in the front end or in REST API responses accessible to non-administrators.
Yes. The Hub is a core infrastructure plugin: its vectorizers are disabled by default and must be activated by a compatible add-on (such as Creator Assistant Search). Without an active add-on, the plugin registers no vectorizers and no content is sent to OpenAI or Qdrant, even after you configure your API credentials.
No. The Hub only reads your content to generate vector embeddings. It never writes back to the post body, title, status, slug, or any other standard post field. Your content stays exactly as you wrote it. The only things the Hub writes to your WordPress database are:
_creator_assistant_hub_post_vectorizer_post_chunk and _creator_assistant_hub_post_vectorizer_post_summary). This metadata is invisible to visitors, does not appear in SEO tools, and has no effect on how WordPress renders the post.No. The hourly background cron reads post content to generate embeddings but never writes to the post itself. The only write operation it performs is updating the post meta timestamp once vectorization is complete.
Deactivating the plugin stops all vectorization and background processing; your post meta timestamps and settings are preserved so they are ready if you reactivate. Deleting the plugin removes all plugin-created data from your WordPress database (post meta entries and options). Your Qdrant collections are not deleted automatically. You can remove them manually from your Qdrant Cloud dashboard if you no longer need them. Your posts, pages, and all their original content are completely unaffected either way.
The Hub provides two vectorization strategies, each stored in a separate Qdrant collection:
post_chunk collection. This enables precise, paragraph-level retrieval.post_summary collection. This enables high-level, concept-based semantic search.creator_assistant_hub_post_vectorizer_post_chunk and creator_assistant_hub_post_vectorizer_post_summary filters.
Yes. When WPML is active, the plugin detects the language of each post and includes it in the Qdrant payload. Add-ons can then filter search results by language. Sites without WPML are fully supported and unaffected.
Yes. The Hub exposes WordPress actions and filters that add-ons can use to register additional settings sections, tabs, and custom behaviour. Developer documentation will be published on creator-assistant.it.
creator_assistant_hub_content_injectors).creator_assistant_hub_post_vectorized.Qdrant_Client::scroll_points() accepts a filter and can skip the vectors.OpenAi_Client::get_structured_response() accepts the model, reasoning effort and timeout (filter creator_assistant_hub_openai_structured_options).creator_assistant_hub_cluster_batch_received, fired once per POST .../clusters after the per-cluster creator_assistant_hub_clusters_received actions, with array( 'collection', 'source_service', 'clusters' ) (the raw top-level clusters, children and members included, so a listener can read a hierarchical tree).GET .../collections/{collection}/points accepts match[<field>]=v1,v2 query parameters to restrict the points to those whose payload field equals one of the values.Clients\Clustering_Client (trigger and task status of the clustering Lambda) and the CREATOR_ASSISTANT_HUB_CLUSTERING_LAMBDA_URL constant, shared by the add-ons that cluster a collection.clustering-job; the previous name planner-clustering-lambda is still accepted until the deployed image is rebuilt.creator_assistant_hub_menu_positions filter (menu slug => integer position, lower first) to order the entries of the Creator Assistant admin menu. Each add-on declares the position of its own entry and the Hub sorts the menu; the Hub page always stays first, so the top-level menu keeps opening it, and entries without a position go last, in the order they were added. Before, the order was the order of registration, and a post type added under the menu came even before the Hub page.creator_assistant_hub_post_vectorizer_text filter, is now lightweight Markdown: headings, paragraphs, lists, quotes, code blocks and tables keep their structure instead of being flattened into one line. Classic-editor content (no <p> tags) keeps its paragraphs too. Parts returned by that filter are joined as separate paragraphs, so Document::normalize_array() now returns separate paragraphs instead of one line. New helpers Document::html_to_markdown() and Document::normalize_markdown(); Document::html_to_text() is unchanged.OpenAi_Client::SUMMARIZE_INSTRUCTIONS, and the summary cache key includes them, so a prompt change never returns a stale summary. A truncated response (status incomplete) is still returned, but is not cached.<div> in a code block) is no longer left without chunks. The chunk that contains markup now has its tags stripped before it is indexed, instead of the whole post being discarded and retried by the cron on every run.creator_assistant_hub_*, creator-assistant-hub-*) instead of cah_*, ca-* or no prefix. Custom CSS targeting the old .ca-* classes needs the new names.creator_assistant_<id>_hub_post_chunk), created the first time it is needed and stored in an option, so it does not change when the domain does and two sites never write into the same collection. It can be overridden with the creator_assistant_hub_qdrant_namespace filter, and a new one can be generated from the Tools tab, which a copy of a site (staging) should do. The creator_assistant_hub_qdrant_namespace_changed action fires when it changes.post_chunk, post_summary) are deleted and every post is indexed again into the new ones by the hourly cron; the cost is one more round of OpenAI embeddings.GET /wp-json/creator-assistant-hub/v1/collections/{collection}/points and POST /wp-json/creator-assistant-hub/v1/clusters, both authenticated via an RS256 JWT bearer token. Intended for a future external clustering service; not yet part of the public plugin, as no service is authorized to call them until its key pair is generated and registered.creator_assistant_hub_authorized_cluster_services (service name => PEM public key) to add or remove the external services allowed to call those two endpoints. A service signs its JWT with its own private key, with its name as iss and creator-assistant-hub as aud.creator_assistant_hub_clusters_received, fired once per top-level cluster after POST .../clusters stores it, with payload array( 'id', 'collection', 'source_service', 'centroid_point_id', 'aggregate', 'core_points' ), forwarded as the clustering job sent it (Hub does no Qdrant reads here: resolving a label or the text of the core points is up to the listener).label in that payload is no longer an OpenAI-generated paraphrase of the whole cluster, and the hook no longer carries label or member_queries at all - saves one OpenAI call per cluster. OpenAi_Client::generate_label() has been removed as a result.creator_assistant_hub_google_connected_services (default: empty array) lets add-ons that use the Google connection list, in their own words, why the site owner should enable it; when the filter returns a non-empty array, an intro sentence and the list are shown above the connect/disconnect button.SCRIPT_DEBUG mode, the two Sass-authored stylesheets (ai-animated-border, settings-tabs) threw a fatal error instead of loading — their compiled dist file is the only browser-usable form, but the asset loader always looked for a same-named file in src first. It now falls back to dist for them.creator_assistant_hub_google_connected and creator_assistant_hub_google_disconnected, fired after a Google account is connected or disconnected, so add-ons that cache data read through the connection (property lists, account info, …) can drop that cache instead of serving it stale until its own TTL expires.creator_assistant_hub_post_chunk_required_payload_indexes or creator_assistant_hub_post_summary_required_payload_indexes (the lang index of creator-assistant-hub-pro, the product fields of creator-assistant-search-pro) was created only by the next post vectorization. Activating or updating the add-on on a site already indexed made every filtered search fail with "Index required but not found" until some post was saved. The indexes are now synced on the next admin page, cron run or WP-CLI command, with no Qdrant call while the declared indexes are unchanged. An index Qdrant rejects is no longer marked as created: the next vectorization tries again, and the sync after 15 minutes. New method Post_Vectorizer::sync_payload_indexes(); a strategy declares its indexes by overriding Post_Abstract::get_required_payload_indexes().Qdrant_Client::collection_exists() now returns null not only without credentials but also when the request fails (network error, non-2xx status, unreadable body), instead of false: false now always means Qdrant answered that the collection does not exist. Compare the result with true/false explicitly. New Qdrant_Client::is_configured() tells the two null cases apart. A failed check no longer makes the payload-index sync, the collection creation before a vectorization or the upgrade of the collection names treat an existing collection as missing.WP_DEBUG-gated log line. The "Google Connection" settings section now shows an error notice in that case.CreatorAssistantHub\Utils\Settings_Tabs, a shared renderer for the family's tabbed settings pages. It owns the tab markup, the CSS classes, the tab-switching script and the validation of add-on-supplied tab definitions, so every add-on with its own settings page gets the same behaviour without copying it. Enqueue Settings_Tabs::ASSET_HANDLE (or declare it as a dependency of your own handle) to pull in the stylesheet and script.hide_submit => true to hide the Save button while it is active. Replaces the previous hard-coded list of tab slugs in the script.Plugin::run_at_init(), a helper that defers a callback to the init hook (or runs it immediately if init has already fired). Creator Assistant Search 1.0.0 already calls this method for its theme-aware registration logic (depends on wp_is_block_theme()); without this update, sites running both plugins hit a fatal error.text-embedding-3-small.creator_assistant_hub_loaded, creator_assistant_hub_after_register_settings, creator_assistant_hub_settings_tabs, creator_assistant_hub_sanitize_settings; OpenAI models: creator_assistant_hub_openai_embedding_model, creator_assistant_hub_openai_chat_model, creator_assistant_hub_embedding_dimension; vectorizer control: creator_assistant_hub_post_vectorizer_post_chunk, creator_assistant_hub_post_vectorizer_post_summary, creator_assistant_hub_skip_vectorizer, creator_assistant_hub_post_vectorizer_text, creator_assistant_hub_post_vectorizer_chunks; post types: creator_assistant_hub_additional_post_types, creator_assistant_hub_excluded_post_types; Qdrant payloads: creator_assistant_hub_post_vectorizer_post_chunk_payload, creator_assistant_hub_post_vectorizer_post_summary_payload, creator_assistant_hub_post_vectorizer_post_chunk_search_filter; collection lifecycle: creator_assistant_hub_post_vectorizer_post_chunk_collection_created, creator_assistant_hub_post_vectorizer_post_summary_collection_created.