Enrich Dataset Rows with Dynamic Columns from the Dashboard

Enrich a dataset with AI-generated summaries, sentiment labels, entities, vector-retrieved context, and parsed JSON fields from the Future AGI dashboard.

📝
TL;DR

Dynamic Columns enrich any dataset with AI-generated data: summaries, sentiment labels, extracted entities, vector-retrieved context, parsed JSON fields, and conditional routing. Every value is computed across every row from the Future AGI dashboard, no code required.

TimeDifficultyPackage
15 minBeginnerDashboard only
Prerequisites
  • Future AGI account: app.futureagi.com
  • A model available in your workspace’s model list (see Custom models to register one)
  • For the Retrieval column: a vector database (Pinecone, Qdrant, or Weaviate) with data already indexed

Tutorial

Upload a starter dataset

Save as support_tickets.csv:

ticket_id,customer_message,agent_response,response_metadata,priority
T001,My laptop battery drains in under 2 hours even after a factory reset.,I have opened a replacement request. You will receive a prepaid shipping label within 24 hours.,"{""resolution_time_hours"": 24, ""replacement_approved"": true, ""ticket_owner"": ""support_team""}",high
T002,I never received my order from three weeks ago. Tracking says it was delivered.,I see the delivery was marked complete. Let me file a lost shipment claim with the carrier right now.,"{""resolution_time_hours"": 48, ""replacement_approved"": false, ""ticket_owner"": ""logistics_team""}",high
T003,The app crashes every time I try to open my account settings.,This is a known issue in version 3.2. Please update to version 3.3 using the link below.,"{""resolution_time_hours"": 2, ""replacement_approved"": false, ""ticket_owner"": ""engineering_team""}",medium
T004,Can I change my subscription plan before the billing date?,Absolutely! You can change your plan at any time from Account > Billing. The new rate applies from the next billing cycle.,"{""resolution_time_hours"": 0, ""replacement_approved"": false, ""ticket_owner"": ""billing_team""}",low
T005,I was charged twice for the same order last month.,I have confirmed the duplicate charge and initiated a full refund. It will appear in 3-5 business days.,"{""resolution_time_hours"": 72, ""replacement_approved"": true, ""ticket_owner"": ""billing_team""}",high
  1. Go to Dataset then Add Dataset
  2. Select Upload a file (JSON, CSV) and choose support_tickets.csv
  3. Name the dataset support_tickets and drop in the file

You should see a support_tickets dataset grid with 5 rows and the 5 uploaded columns.

Run Prompt: generate summaries

  1. Add Column then Dynamic Columns then Run Prompt
  2. Name: summary
  3. Model Type: LLM, Model: gpt-4o-mini
  4. System: You are a support assistant that writes short, factual summaries.
  5. User: Summarize this customer support message in one sentence: {{customer_message}}
  6. Concurrency: 5
  7. Test then Run

You should see a new summary column populated with a one-sentence summary for every row.

Classification: label sentiment

  1. Add Column then Dynamic Columns then Classification
  2. Name: sentiment, Column (source): customer_message
  3. Add labels: Positive, Neutral, Negative
  4. Choose a model, Concurrency: 5
  5. Test then Run

You should see a sentiment column with one of the three labels assigned to each row. Labeling is model-dependent, so treat the exact assignments as illustrative rather than guaranteed.

Extract Entities: pull structured data

  1. Add Column then Dynamic Columns then Extract Entities
  2. Name: entities, Column: customer_message
  3. Instructions:
Extract: issue type, product, urgency level, and location (if present).
Return concise entity values.
  1. Choose a model, Concurrency: 5
  2. Test then Run

You should see an entities column listing the issue type, product, and urgency level parsed out of each customer message.

Retrieval: fetch context from a vector database

Note

Requires an external vector database (Pinecone, Qdrant, or Weaviate) with data already indexed. This is separate from the Future AGI Knowledge Base.

  1. Add Column then Dynamic Columns then Retrieval
  2. Select your Vector Database type

Pinecone:

FieldValue
Columnagent_response
Pinecone API KeyYour API key
Index NameYour index
NamespaceYour namespace
Query KeyYour query key
Embedding Configuration (Type + Model)Your embedding provider and model
Vector LengthYour index’s vector dimension
Number of chunks to fetch3
Key to extracttext
Concurrency5

Qdrant:

FieldValue
Columnagent_response
Qdrant API KeyYour API key
Qdrant URLYour instance URL
Collection NameYour collection
Embedding Configuration (Type + Model)Your embedding provider and model
Vector LengthYour collection’s vector dimension
Number of chunks to fetch3
Key to extracttext
Concurrency5

Weaviate:

FieldValue
Columnagent_response
Weaviate API KeyYour API key
Weaviate Cluster URLYour cluster URL
Collection NameYour collection
Embedding Configuration (Type + Model)Your embedding provider and model
Vector LengthYour collection’s vector dimension
Number of chunks to fetch3
Search TypeSemantic Search or Hybrid
Key to extractcontent
Concurrency5
  1. Test then Run

You should see a new column populated with the retrieved chunks for each row, pulled live from your vector database.

Extract JSON Key: parse a field from JSON

  1. Add Column then Dynamic Columns then Extract a JSON Key
  2. Name: resolution_time, Column: response_metadata
  3. JSON Key: resolution_time_hours
  4. Concurrency: 5
  5. Run

If response_metadata is still typed as text (its type after a CSV upload), every cell in resolution_time comes back null, since there’s no JSON to extract a key from.

  1. Open the response_metadata column header menu and select Edit Column Type, then set it to JSON
  2. Re-run the resolution_time column

You should now see resolution_time holding just the resolution_time_hours value pulled out of each row’s response_metadata JSON, for example 24 for T001 and 48 for T002.

Conditional Node: route by priority

  1. Add Column then Dynamic Columns then Conditional Node
  2. Name: triage_output

Branch 1 (if):

  • Condition: {{priority}} == "high" (references the priority column; verify the exact comparison syntax against your workspace before relying on it)
  • Column Type: Run Prompt
  • Concurrency: 5
  • System: You are a senior support analyst.
  • User: Write a detailed triage summary and next action for this high-priority ticket: {{customer_message}}

Branch 2 (else):

  • Column Type: Run Prompt
  • Concurrency: 5
  • System: You are a support assistant.
  • User: Write a one-line summary for this ticket: {{customer_message}}
  1. Test then Run

You should see triage_output carry a detailed analyst summary for the high priority rows (T001, T002, T005) and a one-line summary for the rest.

Tip

Add elif branches between if and else for more granular routing. Each branch runs one of Run Prompt, Retrieval, Extract Entities, Extract JSON Key, Execute Custom Code, Classification, or API Calls.

Run evals on the enriched dataset

  1. Click Evaluate then Add Evaluations and select groundedness
  2. Map: context to entities, output to agent_response
  3. Add & Run

You should see a groundedness column report Pass or Fail for each row, with a Reason column explaining the verdict.

Troubleshooting

SymptomCauseFix
Run Prompt column stays empty after RunColumn referenced in {{...}} doesn’t exist or is misspelledCheck the exact column name in the dataset header; {{customer_message}} must match case-for-case
Classification assigns the same label to every rowOnly one label was added, or the model wasn’t given enough distinguishing contextAdd at least two contrasting labels and confirm the source column has varied content
Retrieval column returns empty resultsVector database index has no data, or the API key doesn’t have read accessConfirm the index/collection is populated and the key is scoped to read that index
Extract JSON Key returns null for every rowSource column is typed as text, not JSONUse Edit Column Type in the column header menu to set the column’s data type to JSON before extracting
A Dynamic Column shows Failed on one row while the column overall reports CompletedThat row’s input didn’t fit the model’s expectations, for example an empty or malformed source valueOpen the row, check the source column’s value, fix or fill it, then rerun that row
Eval mapping fails with a missing key errorMapped an eval input to a column that doesn’t exist yet, for example before the Dynamic Column has runRun the Dynamic Column first, then map the eval to its output column

Next

For every dynamic column method in detail, see Dynamic column methods.

Was this page helpful?

Questions & Discussion