Portal Community

When to Use

Save the knowledgeId: The operation returns a knowledgeId GUID that uniquely identifies this document in the vector store. Store this value in your source system (CMS, database, etc.) so you can reference it for future knowledge/update and knowledge/delete operations without scanning the collection.

Configuration

Connection

FieldRequiredDescription
providerNameRequiredVector store provider. One of: pinecone, weaviate, chroma, qdrant, pgvector.
collectionNameRequiredTarget collection or index name in the vector store. Must already exist unless the provider auto-creates collections.
credentialIdOptionalCredential ID for the vector store API key or connection string, stored in the BizFirst Credentials Manager.
embeddingProviderOptionalLLM provider for embedding generation, e.g. openai.
embeddingCredentialIdOptionalCredential ID for the embedding model API key.
embeddingModelOptionalEmbedding model, e.g. text-embedding-3-small. Must match the model used for all other items in this collection.

Operation

FieldRequiredDescription
contentRequiredThe text to embed and store. Supports {{ expressions }}. For best retrieval quality keep each insert focused on a single topic (200–500 tokens).
fileNameOptionalOriginal filename of the source document, e.g. hr-pto-policy-2025.pdf. Used for metadata and targeted operations later.
sourceOptionalURL or file path of the source document, e.g. https://intranet.acme.com/policies/pto. Stored as metadata — AI nodes can cite this in responses.

Sample Configuration JSON

{
  "nodeType": "flow-rag",
  "resource": "knowledge",
  "operation": "insert",
  "providerName": "qdrant",
  "collectionName": "hr-policies",
  "credentialId": "88",
  "embeddingProvider": "openai",
  "embeddingCredentialId": "12",
  "embeddingModel": "text-embedding-3-small",
  "content": "{{ $input.policyText }}",
  "fileName": "{{ $input.fileName }}",
  "source": "{{ $input.sourceUrl }}"
}

Validation Errors

ErrorCause
collectionName is requiredcollectionName is empty or missing.
providerName is requiredproviderName is empty or missing.
content is requiredcontent is empty after expression evaluation.

Output

Success Port

FieldTypeDescription
knowledgeIdstring (GUID)Unique identifier assigned to this document in the vector store. Persist this in your source system for future update and delete operations.
collectionstringThe collection name where the document was stored.
chunkCountnumberNumber of embedding chunks created from the content. Long content may be split into multiple chunks for better retrieval granularity.
statusstring"success"
errorMessagestringEmpty on success.

Error Port

Fires when the insert fails. Common causes: vector store unreachable, invalid credentials, embedding API error, or collection does not exist.

FieldTypeDescription
knowledgeIdstring (GUID)Empty GUID (00000000-0000-0000-0000-000000000000) when the insert failed.
collectionstringThe collection name that was targeted.
chunkCountnumber0 on error.
statusstring"error"
errorMessagestringHuman-readable error description from the vector store or embedding provider.

Sample Output JSON

Success

{
  "knowledgeId": "a3f2c1d4-8e5b-4a90-b231-7c6e9f12d847",
  "collection": "hr-policies",
  "chunkCount": 3,
  "status": "success",
  "errorMessage": ""
}

Error

{
  "knowledgeId": "00000000-0000-0000-0000-000000000000",
  "collection": "hr-policies",
  "chunkCount": 0,
  "status": "error",
  "errorMessage": "Collection 'hr-policies' not found in Qdrant. Create the collection before inserting documents."
}

Expression Reference

ExpressionReturns
{{ $output.insertNode.knowledgeId }}GUID of the newly inserted document.
{{ $output.insertNode.collection }}Collection name where the document was stored.
{{ $output.insertNode.chunkCount }}Number of embedding chunks created.
{{ $output.insertNode.status }}"success" or "error".
{{ $output.insertNode.errorMessage }}Error description on failure, empty on success.

Node Policies & GuardRails

PolicyDetail
Credential isolationVector store API keys and embedding model API keys are stored in the BizFirst Credentials Manager and resolved at runtime. Never embed raw keys in node configuration.
Embedding model consistencyAll documents in a collection must use the same embedding model. The node does not enforce this at insert time — mismatched models corrupt similarity scores silently. Establish and document a per-collection model standard.
Content size guidanceKeep each content payload to 200–500 tokens for optimal retrieval precision. Very large inserts produce coarse chunks that degrade semantic similarity matching.
Collection pre-existenceMost vector store providers require the collection or index to be created before inserting. If the collection does not exist, the operation fails to the error port with a descriptive message.
knowledgeId persistenceThe returned knowledgeId is the only handle for future update and delete. If it is not persisted, the document can only be removed by deleting the entire collection.
Audit trailEvery insert operation is logged to the BizFirst execution audit trail with timestamp, collection, and knowledgeId for compliance and debugging.

Examples

Example 1 — Insert a New HR Policy Section

A scheduled workflow fetches published policy sections from the company intranet and inserts each section as a separate knowledge item.

{
  "nodeType": "flow-rag",
  "resource": "knowledge",
  "operation": "insert",
  "providerName": "pgvector",
  "collectionName": "company-policies",
  "credentialId": "55",
  "embeddingProvider": "openai",
  "embeddingCredentialId": "12",
  "embeddingModel": "text-embedding-3-small",
  "content": "{{ $input.sectionText }}",
  "fileName": "{{ $input.policyDocumentName }}",
  "source": "https://intranet.acme.com/policies/{{ $input.policySlug }}"
}

The workflow saves the returned knowledgeId to a database record alongside the policy section ID for future reference.

Example 2 — Bulk Product Catalogue Ingestion via Loop

A one-time workflow seeds the product knowledge base from a JSON array of product records. A Loop node iterates over the array and calls FlowRag insert for each product.

{
  "nodeType": "flow-rag",
  "resource": "knowledge",
  "operation": "insert",
  "providerName": "qdrant",
  "collectionName": "product-catalogue",
  "credentialId": "88",
  "embeddingProvider": "openai",
  "embeddingCredentialId": "12",
  "embeddingModel": "text-embedding-3-small",
  "content": "Product: {{ $item.name }}. Category: {{ $item.category }}. Description: {{ $item.description }}. Features: {{ $item.features | join(', ') }}.",
  "fileName": "product-catalogue-seed.json",
  "source": "https://api.acme.com/products/{{ $item.id }}"
}

The content string combines multiple product fields into a single descriptive passage, improving semantic retrieval when customers describe their needs in natural language.

Example 3 — Event-Driven Support Article Insert

A WebhookTrigger fires when a new article is published in Zendesk. FlowRag inserts the article body into the support knowledge base.

{
  "nodeType": "flow-rag",
  "resource": "knowledge",
  "operation": "insert",
  "providerName": "pinecone",
  "collectionName": "support-articles",
  "credentialId": "101",
  "embeddingProvider": "openai",
  "embeddingCredentialId": "12",
  "embeddingModel": "text-embedding-3-small",
  "content": "{{ $trigger.article.title }}\n\n{{ $trigger.article.body }}",
  "fileName": "zendesk-article-{{ $trigger.article.id }}.txt",
  "source": "{{ $trigger.article.html_url }}"
}

A downstream DataMapping node saves the knowledgeId back to Zendesk as a custom field on the article so future update and delete operations can reference it directly.