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
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:
@@ -0,0 +1,196 @@
|
||||
# Cursor Chat: ai-agent-book
|
||||
|
||||
## Metadata
|
||||
- **Project**: ai-agent-book
|
||||
- **Path**: `/Users/boj`
|
||||
- **Date**: 2025-09-14 18:21:37
|
||||
- **Session ID**: `416cf8a5-e1f0-4c0c-b740-94784b5fce15`
|
||||
|
||||
## Conversation
|
||||
|
||||
### 👤 You
|
||||
|
||||
"tokens": [
|
||||
" the",
|
||||
" web",
|
||||
"\",",
|
||||
" \"",
|
||||
"parameters",
|
||||
"\":",
|
||||
" {\"",
|
||||
"type",
|
||||
"\":",
|
||||
" \"",
|
||||
"object",
|
||||
"\",",
|
||||
" \"",
|
||||
"properties",
|
||||
"\":",
|
||||
" {\"",
|
||||
"query",
|
||||
"\":",
|
||||
" {\"",
|
||||
"type",
|
||||
"\":",
|
||||
|
||||
|
||||
The tokens do not correspond to the actual response.
|
||||
|
||||
The output tokens start from:
|
||||
"<|im_start|>",
|
||||
"assistant",
|
||||
|
||||
Check how output tokens are recorded in the python main.py code
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
I'll help you check how output tokens are recorded in the attention visualization code. Let me examine the main.py file to understand the token recording mechanism.
|
||||
|
||||
---
|
||||
|
||||
### 👤 You
|
||||
|
||||
"tokens": [
|
||||
" the",
|
||||
" web",
|
||||
"\",",
|
||||
" \"",
|
||||
"parameters",
|
||||
"\":",
|
||||
" {\"",
|
||||
"type",
|
||||
"\":",
|
||||
" \"",
|
||||
"object",
|
||||
"\",",
|
||||
" \"",
|
||||
"properties",
|
||||
"\":",
|
||||
" {\"",
|
||||
"query",
|
||||
"\":",
|
||||
" {\"",
|
||||
"type",
|
||||
"\":",
|
||||
|
||||
|
||||
The tokens do not correspond to the actual response.
|
||||
|
||||
The output tokens start from:
|
||||
"<|im_start|>",
|
||||
"assistant",
|
||||
|
||||
Similarly, the prompt is missing the beginning:
|
||||
```
|
||||
for information on the web", "parameters": {"type": "object", "properties": {"query": {"type": "string", "description": "Search query"}}, "required": ["query"]}}}
|
||||
</tools>
|
||||
|
||||
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
|
||||
<tool_call>
|
||||
{"name": <function-name>, "arguments": <args-json-object>}
|
||||
</tool_call><|im_end|>
|
||||
<|im_start|>user
|
||||
What's the current time and weather like in Vancouver right now?<|im_end|>
|
||||
<|im_start|>assistant
|
||||
```
|
||||
|
||||
Check how the input and output tokens are recorded in the python main.py code
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
I'll examine how the input and output tokens are being recorded in your attention visualization code.
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Now let me check the agent.py file to understand how the tokens are being extracted and recorded in the `generate_with_attention` method:
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
I can see the issue with how tokens are being recorded. The problem occurs because of how the chat template formatting and token extraction interact. Let me examine the specific issue:
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
I've identified the issue with token recording in your attention visualization code. The problem stems from how the chat template formatting interacts with token extraction. Here are the key issues:
|
||||
|
||||
## Problems Identified:
|
||||
|
||||
1. **Input Token Truncation**: In `main.py` line 421, the input tokens are truncated to the last 100 tokens:
|
||||
```python
|
||||
all_tokens = traj_data.get('input_tokens', [])[-100:] + traj_data.get('output_tokens', [])
|
||||
```
|
||||
This causes the beginning of the prompt to be missing.
|
||||
|
||||
2. **Chat Template Overhead**: When using `apply_chat_template` with tools, it adds:
|
||||
- System prompts
|
||||
- Tool definitions (which can be very long)
|
||||
- Special tokens (`<|im_start|>`, `<|im_end|>`)
|
||||
- Formatting for the conversation structure
|
||||
|
||||
3. **Token Mismatch**: The actual content tokens don't align with what's displayed because the tokenizer includes all the formatting tokens.
|
||||
|
||||
## Solution:
|
||||
|
||||
Let me fix these issues by modifying how tokens are captured and stored:
|
||||
|
||||
---
|
||||
|
||||
### 👤 You
|
||||
|
||||
Only show the output tokens attention with input+previous output tokens. Do not show attention between input/input tokens
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
I'll modify the attention tracking to only capture attention from output tokens to all previous tokens (input + previously generated outputs), excluding attention between input tokens.
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Let me check how attention weights are currently captured and modify the code to only track attention from output tokens:
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Now I'll modify the attention tracking to only capture attention from output tokens (not input-to-input attention):
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Now let's update the trajectory saving logic to handle the output-only attention format properly:
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Now let's update the main.py file to handle output-only attention properly:
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Let me create a test script to verify the output-only attention tracking:
|
||||
|
||||
---
|
||||
|
||||
### 🤖 Cursor Assistant
|
||||
|
||||
Let's now run a quick test with the ReAct agent to confirm the output-only attention works correctly with tool-calling:
|
||||
|
||||
---
|
||||
|
||||
|
||||
*Exported from [Cursor View](https://github.com/saharmor/cursor-view)*
|
||||
Reference in New Issue
Block a user