ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
@@ -0,0 +1,183 @@
# Cursor Chat: ai-agent-book
## Metadata
- **Project**: ai-agent-book
- **Path**: `/Users/boj`
- **Date**: 2025-09-25 23:05:00
- **Session ID**: `749cbd8e-5ad5-47d2-82de-4604d4f83a94`
## Conversation
### 👤 You
sparse-embedding % python demo.py
2025-09-25 23:04:48,061 - INFO - Starting Educational Sparse Vector Search Engine Demo
2025-09-25 23:04:48,061 - INFO - Make sure the server is running (python server.py)
2025-09-25 23:04:48,061 - INFO - Waiting for server to be ready...
2025-09-25 23:04:48,064 - INFO - Server is ready!
2025-09-25 23:04:48,064 - INFO - Clearing existing index...
2025-09-25 23:04:48,065 - INFO - Index cleared successfully
2025-09-25 23:04:48,065 - INFO -
==================================================
2025-09-25 23:04:48,065 - INFO - INDEXING SAMPLE DOCUMENTS
2025-09-25 23:04:48,065 - INFO - ==================================================
2025-09-25 23:04:48,065 - INFO -
Indexing document 1/10: Python Programming
2025-09-25 23:04:48,067 - INFO - ✓ Indexed with ID: 0
2025-09-25 23:04:48,067 - INFO -
Indexing document 2/10: Introduction to Machine Learning
2025-09-25 23:04:48,068 - INFO - ✓ Indexed with ID: 1
2025-09-25 23:04:48,068 - INFO -
Indexing document 3/10: NLP Basics
2025-09-25 23:04:48,069 - INFO - ✓ Indexed with ID: 2
2025-09-25 23:04:48,069 - INFO -
Indexing document 4/10: Data Structures Overview
2025-09-25 23:04:48,070 - INFO - ✓ Indexed with ID: 3
2025-09-25 23:04:48,070 - INFO -
Indexing document 5/10: JavaScript Essentials
2025-09-25 23:04:48,072 - INFO - ✓ Indexed with ID: 4
2025-09-25 23:04:48,072 - INFO -
Indexing document 6/10: Deep Learning Introduction
2025-09-25 23:04:48,073 - INFO - ✓ Indexed with ID: 5
2025-09-25 23:04:48,073 - INFO -
Indexing document 7/10: Algorithm Analysis
2025-09-25 23:04:48,074 - INFO - ✓ Indexed with ID: 6
2025-09-25 23:04:48,074 - INFO -
Indexing document 8/10: Modern Web Development
2025-09-25 23:04:48,075 - INFO - ✓ Indexed with ID: 7
2025-09-25 23:04:48,075 - INFO -
Indexing document 9/10: Database Systems
2025-09-25 23:04:48,077 - INFO - ✓ Indexed with ID: 8
2025-09-25 23:04:48,077 - INFO -
Indexing document 10/10: Cloud Computing Basics
2025-09-25 23:04:48,078 - INFO - ✓ Indexed with ID: 9
2025-09-25 23:04:48,078 - INFO -
Successfully indexed 10 documents
2025-09-25 23:04:48,078 - INFO -
==================================================
2025-09-25 23:04:48,078 - INFO - INDEX STATISTICS
2025-09-25 23:04:48,078 - INFO - ==================================================
2025-09-25 23:04:48,079 - INFO - Total documents: 10
2025-09-25 23:04:48,079 - INFO - Unique terms: 162
2025-09-25 23:04:48,079 - INFO - Total terms: 242
2025-09-25 23:04:48,079 - INFO - Average document length: 24.20
2025-09-25 23:04:48,079 - INFO -
Top 10 most frequent terms:
2025-09-25 23:04:48,079 - INFO - - and: 17 occurrences
2025-09-25 23:04:48,079 - INFO - - for: 8 occurrences
2025-09-25 23:04:48,079 - INFO - - data: 6 occurrences
2025-09-25 23:04:48,079 - INFO - - language: 5 occurrences
2025-09-25 23:04:48,079 - INFO - - development: 5 occurrences
2025-09-25 23:04:48,079 - INFO - - programming: 4 occurrences
2025-09-25 23:04:48,079 - INFO - - machine: 4 occurrences
2025-09-25 23:04:48,079 - INFO - - learning: 4 occurrences
2025-09-25 23:04:48,079 - INFO - - in: 4 occurrences
2025-09-25 23:04:48,079 - INFO - - web: 4 occurrences
2025-09-25 23:04:48,079 - INFO -
==================================================
2025-09-25 23:04:48,079 - INFO - INDEX STRUCTURE VISUALIZATION
2025-09-25 23:04:48,079 - INFO - ==================================================
2025-09-25 23:04:48,080 - INFO -
BM25 Parameters:
2025-09-25 23:04:48,080 - INFO - k1 (term frequency saturation): 1.5
2025-09-25 23:04:48,080 - INFO - b (length normalization): 0.75
2025-09-25 23:04:48,080 - INFO - avgdl (average document length): 24.20
2025-09-25 23:04:48,080 - INFO -
Sample of Inverted Index (first 5 terms):
Traceback (most recent call last):
File "/Users/boj/ai-agent-book/projects/week3/sparse-embedding/demo.py", line 277, in <module>
main()
File "/Users/boj/ai-agent-book/projects/week3/sparse-embedding/demo.py", line 261, in main
show_index_structure()
File "/Users/boj/ai-agent-book/projects/week3/sparse-embedding/demo.py", line 202, in show_index_structure
inv_index = structure['inverted_index']
~~~~~~~~~^^^^^^^^^^^^^^^^^^
KeyError: 'inverted_index'
---
### 🤖 Cursor Assistant
I can see there's an error in the demo.py script when trying to access the 'inverted_index' key from the structure. Let me investigate the code to understand what's happening.
---
### 🤖 Cursor Assistant
Now let me check the server.py file to understand what the `/index/structure` endpoint actually returns:
---
### 🤖 Cursor Assistant
Let me check the bm25_engine.py file to see what the `get_index_info()` method returns:
---
### 🤖 Cursor Assistant
Let me check the `get_index_structure()` method in the InvertedIndex class:
---
### 🤖 Cursor Assistant
Now I understand the issue! [[memory:8629917]] The server returns the index structure in a nested format, but the demo.py script is trying to access it incorrectly. The server returns:
```
{
'statistics': {...},
'structure': {
'inverted_index': {...},
'document_info': {...}
},
'bm25_params': {...}
}
```
But the demo.py is trying to access `structure['inverted_index']` directly instead of `structure['structure']['inverted_index']`. Let me fix this:
---
### 🤖 Cursor Assistant
Perfect! I've fixed the issue in the demo.py file. The problem was that the server's `/index/structure` endpoint returns a nested structure where the actual index information is under a 'structure' key, but the demo script was trying to access it directly.
The fix properly handles the nested structure:
- The response contains `{'statistics': {...}, 'structure': {...}, 'bm25_params': {...}}`
- The inverted index is actually at `data['structure']['inverted_index']`, not `data['inverted_index']`
- I've also added safe access with `.get()` methods to handle missing keys gracefully
Now you can run the demo again:
---
### 🤖 Cursor Assistant
Excellent! The demo is now working perfectly. The issue has been fixed successfully. The problem was that the server's `/index/structure` endpoint returns a nested JSON structure, but the demo script was trying to access the fields at the wrong level.
The server returns:
```json
{
"statistics": {...},
"structure": {
"inverted_index": {...},
"document_info": {...}
},
"bm25_params": {...}
}
```
The fix properly navigates the nested structure and adds safe access patterns with `.get()` methods to handle missing keys gracefully. The demo now successfully:
1. **Indexes 10 sample documents** covering topics like Python, Machine Learning, NLP, databases, etc.
2. **Displays index statistics** showing term frequencies and document counts
3. **Visualizes the index structure** including BM25 parameters, inverted index samples, and document information
4. **Performs various searches** demonstrating the BM25 ranking algorithm with different queries
5. **Tests document retrieval** by fetching specific documents by ID
The sparse embedding (BM25) search engine is working as expected, providing educational insights into how inverted indices and text search algorithms work!
---
*Exported from [Cursor View](https://github.com/saharmor/cursor-view)*