Feature: Vector Search - Embedding Generation and Semantic Search
As a user
I want to use vector database to perform semantic search in my wiki
So that I can find relevant content based on meaning rather than exact keywords
Background:
Given I add test ai settings
Then I launch the TidGi application
And I wait for the page to load completely
And I should see a "page body" element with selector "body"
# Ensure we are in the agent workspace (not wiki workspace) for agent interaction
When I click on an "agent workspace button" element with selector "[data-testid='workspace-agent']"
And I should see a "new tab button" element with selector "[data-tab-id='new-tab-button']"
@vectorSearch @mockOpenAI
Scenario: Agent workflow - Create notes, update embeddings, then search
Given I have started the mock OpenAI server
| response | stream | embedding |
| {"workspaceName":"wiki","operation":"wiki-add-tiddler","title":"AI Agent Guide","text":"智能体是一种可以执行任务的AI系统,它可以使用工具、搜索信息并与用户交互。"} | false | |
| 已成功在工作区 wiki 中创建条目 "AI Agent Guide"。 | false | |
| {"workspaceName":"wiki","operation":"wiki-add-tiddler","title":"Vector Database Tutorial","text":"向量数据库用于存储和检索高维向量数据,支持语义搜索和相似度匹配。"} | false | |
| 已成功在工作区 wiki 中创建条目 "Vector Database Tutorial"。 | false | |
| {"workspaceName":"wiki","forceUpdate":false} | false | |
| | false | note1 |
| | false | note2 |
| 已成功为工作区 wiki 生成向量嵌入索引。总计2个笔记,2个嵌入向量。 | false | |
| {"workspaceName":"wiki","searchType":"vector","query":"如何使用AI智能体","limit":5,"threshold":0.7} | false | |
| | false | query-note1 |
| 根据向量搜索结果,在工作区 wiki 中找到以下相关内容:\n\n**Tiddler: AI Agent Guide** (Similarity: 95.0%)\n这篇笔记介绍了AI智能体的基本概念和使用方法。 | false | |
# Step 1: Open agent chat interface
When I click on a "new tab button" element with selector "[data-tab-id='new-tab-button']"
And I should see a "search interface" element with selector ".aa-Autocomplete"
When I click on a "search input box" element with selector ".aa-Input"
And I should see an "autocomplete panel" element with selector ".aa-Panel"
When I click on an "agent suggestion" element with selector '[data-autocomplete-source-id="agentsSource"] .aa-ItemWrapper'
# Step 2: Create first note
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "在 wiki 工作区创建一个名为 AI Agent Guide 的笔记,内容是:智能体是一种可以执行任务的AI系统,它可以使用工具、搜索信息并与用户交互。" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 4 messages in chat history
# Step 3: Create second note
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "再创建一个名为 Vector Database Tutorial 的笔记,内容是:向量数据库用于存储和检索高维向量数据,支持语义搜索和相似度匹配。" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 8 messages in chat history
# Step 4: Update vector embeddings using agent tool
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "为 wiki 工作区更新向量索引" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 12 messages in chat history
# Step 5: Perform vector search
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "使用向量搜索在 wiki 中查找关于如何使用AI智能体的内容" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 16 messages in chat history
# Verify the last message contains vector search results
And I should see "search result in last message" elements with selectors:
| [data-testid='message-bubble']:last-child:has-text('Tiddler: AI Agent Guide') |
@vectorSearch @mockOpenAI
Scenario: UI workflow - Generate embeddings via preferences, then search
Given I have started the mock OpenAI server
| response | stream | embedding |
| {"workspaceName":"wiki","operation":"wiki-add-tiddler","title":"Machine Learning Basics","text":"机器学习是人工智能的一个分支,通过算法让计算机从数据中学习规律。"} | false | |
| 已成功在工作区 wiki 中创建条目 "Machine Learning Basics"。 | false | |
| | false | note3 |
| {"workspaceName":"wiki","searchType":"vector","query":"机器学习","limit":5,"threshold":0.7} | false | |
| | false | query-note3 |
| 根据向量搜索结果,在工作区 wiki 中找到以下相关内容:\n\n**Tiddler: Machine Learning Basics** (Similarity: 98.0%)\n这篇笔记介绍了机器学习的基本概念。 | false | |
# Step 1: Create a test note via agent
When I click on "new tab button and create default agent button" elements with selectors:
| [data-tab-id='new-tab-button'] |
| [data-testid='create-default-agent-button'] |
And I should see a "message input box" element with selector "[data-testid='agent-message-input']"
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "在 wiki 工作区创建一个名为 Machine Learning Basics 的笔记,内容是:机器学习是人工智能的一个分支,通过算法让计算机从数据中学习规律。" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 4 messages in chat history
# Step 2: Open preferences and manually generate embeddings via UI
When I click on a "settings button" element with selector "#open-preferences-button"
When I switch to "preferences" window
# Navigate to Search section (which contains vector database settings)
When I click on a "search section" element with selector "[data-testid='preference-section-search']"
# Wait for workspace list to load
# The Search.tsx renders workspace cards with name, status, and buttons
And I should see a "wiki workspace card" element with selector "*:has-text('wiki')"
# Click the generate button - use button text "生成" instead of data-testid
# The button shows "生成" for initial generation, "更新嵌入" after generation
When I click on a "generate button with text" element with selector "button:has-text('生成')"
# Verify generation completed with detailed status information
# Should show: workspace name, embedding count, note count, last updated time and action buttons
Then I should see "workspace name in status and embedding count status and embedding word and last updated label and update button after generation and delete button after generation" elements with selectors:
| *:has-text('wiki') |
| *:has-text('个笔记') |
| *:has-text('嵌入') |
| *:has-text('最后更新') |
| button:has-text('更新嵌入') |
| button:has-text('删除') |
# Close preferences
When I close "preferences" window
And I switch to "main" window
# Step 3: Perform vector search and verify results match agent workflow
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "使用向量搜索在 wiki 中查找关于机器学习的内容" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 8 messages in chat history
# Verify the last message contains vector search results
And I should see a "ML search result in last message" element with selector "[data-testid='message-bubble']:last-child:has-text('Tiddler: Machine Learning Basics')"
@vectorSearch @mockOpenAI
Scenario: Vector search with low similarity - No results below threshold, then lower threshold
Given I have started the mock OpenAI server
| response | stream | embedding |
| {"workspaceName":"wiki","operation":"wiki-add-tiddler","title":"AI Technology","text":"人工智能技术正在改变世界。"} | false | |
| 已成功在工作区 wiki 中创建条目 "AI Technology"。 | false | |
| {"workspaceName":"wiki","operation":"wiki-add-tiddler","title":"Machine Learning","text":"机器学习算法和应用。"} | false | |
| 已成功在工作区 wiki 中创建条目 "Machine Learning"。 | false | |
| {"workspaceName":"wiki","forceUpdate":false} | false | |
| | false | note4 |
| | false | note5 |
| 已成功为工作区 wiki 生成向量嵌入索引。总计2个笔记,2个嵌入向量。 | false | |
| {"workspaceName":"wiki","searchType":"vector","query":"天气预报","limit":5,"threshold":0.7} | false | |
| | false | unrelated |
| 在Wiki工作空间"wiki"中未找到符合条件的向量搜索结果(相似度阈值:0.7)。 | false | |
| {"workspaceName":"wiki","searchType":"vector","query":"天气预报","limit":5,"threshold":0.1} | false | |
| | false | unrelated |
| 根据向量搜索结果,在工作区 wiki 中找到以下相关内容:\n\n**Tiddler: AI Technology** (Similarity: 15.0%)\n低相似度结果。 | false | |
# Step 1: Open agent chat interface
When I click on "new tab button and create default agent button" elements with selectors:
| [data-tab-id='new-tab-button'] |
| [data-testid='create-default-agent-button'] |
And I should see a "message input box" element with selector "[data-testid='agent-message-input']"
# Step 2: Create first note about AI
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "在 wiki 工作区创建一个名为 AI Technology 的笔记,内容是:人工智能技术正在改变世界。" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 4 messages in chat history
# Step 3: Create second note about ML
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "再创建一个名为 Machine Learning 的笔记,内容是:机器学习算法和应用。" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 8 messages in chat history
# Step 4: Update vector embeddings
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "为 wiki 工作区更新向量索引" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 12 messages in chat history
# Step 5: Search for unrelated content with high threshold (should find nothing)
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "使用向量搜索在 wiki 中查找关于天气预报的内容,阈值设为0.7" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 16 messages in chat history
# Verify the 16th message contains "no results found" with threshold info
Then I should see "no results in 16th message and threshold 0.7 in 16th message" elements with selectors:
| [data-testid='message-bubble']:nth-child(16):has-text('未找到符合条件') |
| [data-testid='message-bubble']:nth-child(16):has-text('0.7') |
# Step 6: Lower threshold and search again (should find low-similarity results)
When I click on a "message input textarea" element with selector "[data-testid='agent-message-input']"
When I type "再次搜索天气预报,但这次把阈值降低到0.1" in "chat input" element with selector "[data-testid='agent-message-input']"
And I press "Enter" key
Then I should see 20 messages in chat history
# Verify the 20th message contains low-similarity result
Then I should see "AI Technology and low similarity in 20th message" elements with selectors:
| [data-testid='message-bubble']:nth-child(20):has-text('Tiddler: AI Technology') |
| [data-testid='message-bubble']:nth-child(20):has-text('15') |