qwen_agent/skills/autoload/support/rag-retrieve/README.md
2026-04-18 23:36:32 +08:00

100 lines
2.9 KiB
Markdown

# RAG Retrieve
An example autoload skill that demonstrates how to integrate `rag-retrieve` and `table-rag-retrieve` through Claude Plugins hooks and an MCP server.
## Overview
This skill uses a `PrePrompt` hook to inject retrieval guidance into the prompt, and starts an MCP server that exposes retrieval capabilities for the current bot.
### PrePrompt Hook
Runs when the system prompt is loaded and injects retrieval policy content.
- File: `hooks/pre_prompt.py`
- Purpose: load retrieval instructions and add them to the prompt context
### MCP Server
Provides retrieval tools over stdio for the current `bot_id`.
- File: `rag_retrieve_server.py`
- Purpose: expose `rag-retrieve` and related retrieval tools to the agent
## Directory Structure
```text
rag-retrieve/
├── README.md # Skill documentation
├── .claude-plugin/
│ └── plugin.json # Hook and MCP server configuration
├── hooks/
│ ├── pre_prompt.py # PrePrompt hook script
│ └── retrieval-policy.md # Retrieval policy injected into the prompt
├── mcp_common.py # Shared MCP utilities
├── rag_retrieve_server.py # MCP server entrypoint
└── rag_retrieve_tools.json # Tool definitions
```
## `plugin.json` Format
```json
{
"name": "rag-retrieve",
"description": "rag-retrieve and table-rag-retrieve",
"hooks": {
"PrePrompt": [
{
"type": "command",
"command": "python hooks/pre_prompt.py"
}
]
},
"mcpServers": {
"rag_retrieve": {
"transport": "stdio",
"command": "python",
"args": [
"./skills_autoload/rag-retrieve/rag_retrieve_server.py",
"{bot_id}"
]
}
}
}
```
## Hook Script Behavior
The hook script runs as a subprocess, receives input through environment variables, and writes the injected content to stdout.
### Available Environment Variables
| Environment Variable | Description | Applies To |
|----------------------|-------------|------------|
| `ASSISTANT_ID` | Bot ID | All hooks |
| `USER_IDENTIFIER` | User identifier | All hooks |
| `SESSION_ID` | Session ID | All hooks |
| `LANGUAGE` | Language code | All hooks |
| `HOOK_TYPE` | Hook type | All hooks |
### PrePrompt Example
```python
#!/usr/bin/env python3
import os
import sys
def main():
user_identifier = os.environ.get('USER_IDENTIFIER', '')
bot_id = os.environ.get('ASSISTANT_ID', '')
print(f"## Retrieval Context\n\nUser: {user_identifier}\nBot: {bot_id}")
return 0
if __name__ == '__main__':
sys.exit(main())
```
## Example Use Cases
1. **Prompt-time retrieval guidance**: inject retrieval rules before the model starts reasoning
2. **Bot-specific retrieval setup**: start the MCP server with the current `bot_id`
3. **Unified retrieval access**: expose RAG and table RAG tools through a single skill