Loading...
Loading...
Behavior Guidelines for Information Visualization Presentation. Automatically activated when the model's response contains structured information such as comparisons, steps, configurations, architectures, etc., ensuring priority use of visual formats like tables, code blocks, lists, tree structures, instead of pure text accumulation. Trigger words: "Use a table", "Draw a diagram", "Make a list", "Structure it", "Don't just use text", "Visualize", "Compare". Even without trigger words, the rules of this Skill should take effect as long as the response contains structured information suitable for visualization. It also applies to scenarios such as "Too much text to read", "Can it be more intuitive?", "Organize into a table".
npx skill4agent add nangongwentian-fe/jay-skills show-dont-tell| Signal | Description | Recommended Format |
|---|---|---|
| Compare A and B | Pros and cons, differences between two or more options | Table, columns are options, rows are dimensions |
| Multiple attributes/fields | Parameter lists, API fields, configuration items, features | Table, one attribute per row |
| Sequential steps | Operation processes, troubleshooting ideas, installation steps | Numbered list, one step per line, key commands in code blocks |
| Hierarchy/classification | Directory structure, classification system | Tree structure or indented list |
| Process/architecture/relationship | System architecture, data flow, state machine, call chain, module relationship | Mermaid code block (flowchart / graph / sequence / classDiagram, etc.) |
| Code-related | Usage examples, configuration files, CLI commands, SQL | Code block, with language annotation |
| Pros and cons comparison | Good vs bad writing, recommended vs not recommended | ❌/✅ side-by-side comparison or two code blocks |
Redis supports multiple data structures including strings, lists, hashes, sets, and sorted sets, while Memcached only supports simple key-value pairs. Redis supports data persistence and can save data to disk, while Memcached does not support persistence and data is lost after restart. Redis uses a single-threaded model, while Memcached uses a multi-threaded model. Redis supports advanced features like publish-subscribe, Lua scripts, and transactions, while Memcached has relatively simple functions. In terms of memory management, Redis uses its own memory allocator, while Memcached uses slab allocation.
| Dimension | Redis | Memcached |
|---|---|---|
| Data Structures | string / list / hash / set / zset | Only key-value |
| Persistence | Supported (RDB / AOF) | Not supported |
| Thread Model | Single-threaded (IO multi-threaded since 6.0) | Multi-threaded |
| Advanced Features | pub/sub, Lua, transactions | None |
| Memory Management | Built-in allocator | Slab allocation |
First you need to update the system's package list using the apt update command. Then install Nginx with apt install nginx. After installation, start the Nginx service with systemctl start nginx. You can also set it to start on boot with systemctl enable nginx. Finally, verify success by accessing the server IP in a browser.
sudo apt updatesudo apt install nginxsudo systemctl start nginx
sudo systemctl enable nginxhttp://<Server IP>The src directory has four subdirectories: components, pages, utils, and styles. Components stores public components, pages stores page components, utils stores utility functions, and styles stores global styles. The project root directory also has a public directory for static resources, as well as configuration files.
project/
├── src/
│ ├── components/ # Public components
│ ├── pages/ # Page components
│ ├── utils/ # Utility functions
│ └── styles/ # Global styles
├── public/ # Static resources
├── package.json
└── tsconfig.jsonUser input
→ Entry Layer (CLI / Telegram / Slack)
→ AIAgent
→ Assemble prompt
→ Initiate model call
→ If tool call is returned
→ Execute tool
→ Continue next round
→ Generate final response
→ Write to database
→ Return to userflowchart TD
A[User Input] --> B[Entry Layer<br/>CLI / Telegram / Slack]
B --> C[AIAgent]
C --> D[Assemble Prompt]
D --> E[Initiate Model Call]
E --> F{Tool Call Returned?}
F -- Yes --> G[Execute Tool]
G --> E
F -- No --> H[Generate Final Response]
H --> I[Write to Database]
I --> J[Return to User]async/await looks more like synchronous code and is more readable. .then chains can easily become callback hell when nested multiple times. For error handling, async/await uses try/catch, while .then uses .catch.
// ❌ .then chain — deep nesting, hard to read
fetch('/api/user')
.then(res => res.json())
.then(user => fetch(`/api/posts/${user.id}`))
.then(res => res.json())
.then(posts => console.log(posts))
.catch(err => console.error(err));// ✅ async/await — flat structure, easy to read
try {
const res = await fetch('/api/user');
const user = await res.json();
const postsRes = await fetch(`/api/posts/${user.id}`);
const posts = await postsRes.json();
console.log(posts);
} catch (err) {
console.error(err);
}