Update from Sync Service
This commit is contained in:
@@ -1,7 +1,65 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: 智能体软件工程(Agentic SE)
|
||||
tags:
|
||||
- AI-Agent
|
||||
- 软件工程
|
||||
- 方法论
|
||||
- 学术
|
||||
created: 2026-04-21
|
||||
source: 艾哈迈德·E·哈桑(Ahmed E. Hassan),2026年
|
||||
translator: 李豪
|
||||
---
|
||||
|
||||
# 智能体软件工程
|
||||
|
||||
> 与随机性队友一起以前所未有的规模构建可信赖的软件
|
||||
|
||||
## 关于作者
|
||||
|
||||
**艾哈迈德·E·哈桑(Ahmed E. Hassan)教授**
|
||||
- 穆斯塔法奖得主(常比作诺贝尔级别荣誉)
|
||||
- ACM Fellow、IEEE Fellow、AAIA Fellow
|
||||
- 加拿大研究主席(Canada Research Chair)
|
||||
- 加拿大女王大学 NSERC/BlackBerry 软件工程工业研究主席
|
||||
- 全球引用次数最多的软件工程研究人员之一
|
||||
- 唯一同时获得 ACM SIGSOFT 有影响力教育家奖(2019)和 IEEE TCSE 杰出教育家奖(2020)的学者
|
||||
- 已培养出 35 位高校教授
|
||||
|
||||
## 核心论点
|
||||
|
||||
> **AI 不是工具,而是队友**——一个能力强大但会犯错的队友。因此,可靠性不能依赖于 AI 本身的完美,而必须通过工程系统来保障。
|
||||
|
||||
当 AI 能以前所未有的速度生成代码时,软件工程该怎么做?
|
||||
|
||||
## 四大部分结构
|
||||
|
||||
| 部分 | 内容 |
|
||||
|------|------|
|
||||
| **第一部分** | 建立概念基础 |
|
||||
| **第二部分** | 解决 AI 队友的可靠性问题 |
|
||||
| **第三部分** | 将协作扩展到团队规模 |
|
||||
| **第四部分** | 为不同角色提供行动指南 |
|
||||
|
||||
## 读书建议
|
||||
|
||||
| 角色 | 建议 |
|
||||
|------|------|
|
||||
| 技术负责人/工程管理者 | 第一部分顺序读起,重点看第三、四部分 |
|
||||
| 一线开发者 | 第一、二部分是核心章节 |
|
||||
| 时间有限者 | 直接读第四部分(全书浓缩与行动路线图) |
|
||||
|
||||
## 与其他框架的关系
|
||||
|
||||
| 框架 | 关系 |
|
||||
|------|------|
|
||||
| **Harness Engineering** | Agentic SE 的第二部分对应可靠性保障 |
|
||||
| **Superpowers** | Agentic SE 的第三部分对应团队协作扩展 |
|
||||
| **Agent = Model + Harness** | 两本书共享同一核心公式 |
|
||||
|
||||
## 译者序摘要
|
||||
|
||||
译者李豪:
|
||||
- 这是一部从软件工程学科本身出发,严肃思考人与 AI 如何协作构建可信赖软件的著作
|
||||
- 本书提出了**智能体软件工程**这一框架
|
||||
- 核心论点:可靠性不能依赖于 AI 本身的完美,而必须通过工程系统来保障
|
||||
|
||||
|
||||
@@ -1,7 +1,129 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: Harness Engineering 知识体系
|
||||
tags:
|
||||
- AI-Agent
|
||||
- Engineering
|
||||
- Prompt-Engineering
|
||||
- Context-Engineering
|
||||
created: 2026-04-21
|
||||
source: 基于11篇原始资料整理(OpenAI/Anthropic/Thoughtworks/LangChain/HumanLayer/Inngest/学术界)
|
||||
---
|
||||
|
||||
# Harness Engineering
|
||||
|
||||
> AI Agent = Model + Harness
|
||||
>
|
||||
> *"The model contains the intelligence and the harness is the system that makes that intelligence useful."* — LangChain
|
||||
|
||||
## 核心定义
|
||||
|
||||
**Harness** = 除模型以外的一切——工具、指令、状态管理、验证机制、运行时基础设施
|
||||
|
||||
让模型输出从"不可靠"变成"可信赖"的工程体系。
|
||||
|
||||
---
|
||||
|
||||
## 各机构视角
|
||||
|
||||
| 机构 | 侧重点 |
|
||||
|------|--------|
|
||||
| **LangChain** | 最宽泛:Harness = 一切非模型的技术层 |
|
||||
| **Anthropic** | 环境脚手架 + 长任务连续性 + clean state 理念 |
|
||||
| **OpenAI** | 代码仓库即知识系统,强调"零人工代码"自动化 |
|
||||
| **Thoughtworks** | 赛博内廷(cybernetic governor),区分"构建者挽具"vs"用户挽具" |
|
||||
| **HumanLayer** | Harness = Context Engineering 的子集,专注上下文窗口管理 |
|
||||
| **Inngest** | 持久化事件驱动基础设施 |
|
||||
| **学术界(CAR框架)** | Control + Agency + Runtime 三元框架 |
|
||||
|
||||
---
|
||||
|
||||
## 五大大子系统(walkinglabs 综合框架)
|
||||
|
||||
### 1. Instructions(指令)
|
||||
告诉 Agent 做什么、按什么顺序、读什么文件。采用**渐进式披露**(Progressive Disclosure),而非巨型文件。
|
||||
|
||||
### 2. State(状态)
|
||||
追踪已完成什么、正在做什么、接下来是什么。**持久化到磁盘**,确保会话间连续性。
|
||||
|
||||
### 3. Verification(验证)
|
||||
只有通过测试才算完成。Agent 不能在无可运行证据的情况下宣告任务完成。
|
||||
|
||||
### 4. Scope(范围)
|
||||
将 Agent 约束到**每次一个功能**,防止过度扩展和半途而废。
|
||||
|
||||
### 5. Session Lifecycle(会话生命周期)
|
||||
- 开始时初始化
|
||||
- 结束时清理
|
||||
- 为下一次会话留下清晰的重启路径
|
||||
|
||||
---
|
||||
|
||||
## 两类控制(Thoughtworks)
|
||||
|
||||
| 类型 | 计算型 | 推理型 |
|
||||
|------|--------|--------|
|
||||
| 执行 | CPU确定性快速 | GPU/NPU语义分析 |
|
||||
| 例子 | 测试/linter/类型检查 | LLM as Judge/AI代码审查 |
|
||||
| 特点 | 结果可靠 | 成本高但能处理语义判断 |
|
||||
|
||||
### 前馈导引 + 反馈传感
|
||||
- **前馈导引**(Feedforward Guides):在工作前注入上下文(AGENTS.md、技能文件、引导脚本)
|
||||
- **反馈传感**(Feedback Sensors):工作后检测问题(静态分析、日志、测试)
|
||||
|
||||
---
|
||||
|
||||
## 三类调控维度(Thoughtworks)
|
||||
|
||||
| 维度 | 调控内容 | 例子 |
|
||||
|------|----------|------|
|
||||
| **可维护性挽具** | 代码内部质量 | 重复代码、圈复杂度、测试覆盖率 |
|
||||
| **架构适应性挽具** | 架构特征 | 性能要求、可观测性标准、依赖方向规则 |
|
||||
| **行为挽具** | 功能正确性 | 规格说明、测试套件、端到端验证 |
|
||||
|
||||
---
|
||||
|
||||
## CAR 框架(学术界)
|
||||
|
||||
三个维度:
|
||||
- **Control(控制)** — 哪些指令保持权威
|
||||
- **Agency(智能体能力)** — 哪些行动可用
|
||||
- **Runtime(运行时)** — 状态如何延续、故障如何处理
|
||||
|
||||
提出 **Harness-sensitive** 概念:部分 Agent 性能提升可能来自 Harness 改进,而非模型本身。
|
||||
|
||||
---
|
||||
|
||||
## 实测效果(Anthropic)
|
||||
|
||||
同一模型 + 同一提示词(构建2D复古游戏编辑器):
|
||||
|
||||
| | 有Harness | 无Harness |
|
||||
|--|-----------|-----------|
|
||||
| 成本 | $9 | 更高 |
|
||||
| 时间 | 20分钟 | 更长 |
|
||||
| 结果 | 可运行 | 无法运行 |
|
||||
|
||||
**结论**:Harness 改进可能比模型本身带来的性能提升更显著。
|
||||
|
||||
---
|
||||
|
||||
## 核心启示
|
||||
|
||||
1. **Harness 是杠杆** — 同一模型,有无 Harness 结果差异巨大
|
||||
2. **验证即完成** — Agent 不能在无可运行证据的情况下宣告完成
|
||||
3. **状态持久化** — 会话间的连续性是长任务的关键
|
||||
4. **Scope 约束** — 防止 Agent 过度扩展和半途而废
|
||||
5. **渐进式披露** — 指令文件不要堆成巨型文件
|
||||
|
||||
---
|
||||
|
||||
## 与 OpenClaw 的关系
|
||||
|
||||
OpenClaw 本身就是一种 **Harness** 的实现:
|
||||
- `AGENTS.md` / `SOUL.md` / `USER.md` = Instructions 子系统
|
||||
- `MEMORY.md` / `memory/` = State 子系统
|
||||
- `HEARTBEAT.md` = Verification + Session Lifecycle
|
||||
- Skills 系统 = 工具扩展(Tool Harness)
|
||||
|
||||
Harness Engineering 理论可以指导 OpenClaw 的优化方向。
|
||||
|
||||
|
||||
@@ -1,7 +1,200 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: Superpowers 技能框架
|
||||
tags:
|
||||
- AI-Agent
|
||||
- TDD
|
||||
- Coding-Agent
|
||||
- Software-Development
|
||||
- 开源
|
||||
created: 2026-04-21
|
||||
source: https://github.com/obra/superpowers
|
||||
stars: 161680
|
||||
forks: 14117
|
||||
language: Shell
|
||||
author: Jesse Vincent (obra)
|
||||
---
|
||||
|
||||
# Superpowers 技能框架
|
||||
|
||||
> 一个面向 AI 编码智能体的完整软件开发方法论
|
||||
>
|
||||
> GitHub: 161.7k ⭐ | MIT 许可证
|
||||
|
||||
## 核心定义
|
||||
|
||||
Superpowers 是由 **Jesse Vincent**(obra)开发的一套面向 AI 编码智能体的**技能框架与软件开发方法论**。
|
||||
|
||||
核心理念:**不试图让 AI"理解"最佳实践,而是构建一个"不遵守规范就无法推进"的系统**。
|
||||
|
||||
---
|
||||
|
||||
## 核心理念
|
||||
|
||||
### 与 Harness Engineering 的关系
|
||||
|
||||
Superpowers 是 Harness Engineering 的**具体实现**之一,专注于编码智能体场景。
|
||||
|
||||
| 维度 | Superpowers | Harness Engineering |
|
||||
|------|-------------|---------------------|
|
||||
| 核心等式 | 技能驱动工作流 | Agent = Model + Harness |
|
||||
| 触发机制 | 技能在任意响应前自动检查 | 五大子系统 |
|
||||
| 验证方式 | RED-GREEN-REFACTOR | verification-before-completion |
|
||||
| 状态管理 | brainstorming文档 + plan文件 | State子系统 |
|
||||
|
||||
---
|
||||
|
||||
## 核心特点
|
||||
|
||||
### 1. 技能驱动的全流程工作流
|
||||
|
||||
| 阶段 | 技能 | 说明 |
|
||||
|------|------|------|
|
||||
| 需求探索 | brainstorming | 苏格拉底式提问,输出设计文档 |
|
||||
| 工作区隔离 | using-git-worktrees | 独立Git worktree上开始工作 |
|
||||
| 任务拆解 | writing-plans | 2-5分钟细粒度任务,带文件路径和验证步骤 |
|
||||
| 执行 | subagent-driven-development / executing-plans | 子智能体并发执行,两阶段审查 |
|
||||
| 测试 | test-driven-development | 严格RED-GREEN-REFACTOR循环 |
|
||||
| 审查 | requesting-code-review | 按严重程度上报问题 |
|
||||
| 收尾 | finishing-a-development-branch | 验证测试,决策合并/PR/丢弃 |
|
||||
|
||||
### 2. 强制合规,而非依赖理解
|
||||
|
||||
技能检查置于**"任何响应或动作之前"**,从结构上杜绝跳过。
|
||||
|
||||
### 3. 心理说服原则的应用
|
||||
|
||||
基于沃顿商学院与恰尔蒂尼团队合作的论文《Call Me a Jerk: Persuading AI》:
|
||||
|
||||
- **权威(Authority)** — 技能定义为强制工作流而非建议
|
||||
- **承诺(Commitment)** — 使用技能前要求智能体公开声明
|
||||
- **社会认同(Social Proof)** — 营造"不怕调用错技能"的文化
|
||||
|
||||
### 4. 技能的TDD开发
|
||||
|
||||
技能本身也通过TDD方式创建:
|
||||
- **RED** — 设计压测场景,让子智能体执行 → 暴露技能失效
|
||||
- **GREEN** — 强化技能指令,重测通过
|
||||
- **REFACTOR** — 优化技能表达
|
||||
|
||||
### 5. 多平台支持
|
||||
|
||||
- Claude Code(官方市场)
|
||||
- OpenAI Codex CLI/App
|
||||
- GitHub Copilot CLI
|
||||
- Cursor
|
||||
- Gemini CLI
|
||||
- OpenCode
|
||||
|
||||
---
|
||||
|
||||
## 内置技能库
|
||||
|
||||
### Testing
|
||||
- **test-driven-development** — RED-GREEN-REFACTOR循环
|
||||
|
||||
### Debugging
|
||||
- **systematic-debugging** — 4阶段根因分析
|
||||
- **verification-before-completion** — 确保真正修复
|
||||
|
||||
### Collaboration
|
||||
- **brainstorming** — 苏格拉底式设计优化
|
||||
- **writing-plans** — 详细实现计划
|
||||
- **executing-plans** — 带检查点的批量执行
|
||||
- **dispatching-parallel-agents** — 并发子智能体工作流
|
||||
- **requesting-code-review** — 审查前检查清单
|
||||
- **receiving-code-review** — 响应反馈
|
||||
- **using-git-worktrees** — 并行开发分支
|
||||
- **finishing-a-development-branch** — 合并/PR决策工作流
|
||||
- **subagent-driven-development** — 两阶段审查快速迭代
|
||||
|
||||
### Meta
|
||||
- **writing-skills** — 创建新技能的最佳实践
|
||||
- **using-superpowers** — 技能系统介绍
|
||||
|
||||
---
|
||||
|
||||
## 安装方式
|
||||
|
||||
```bash
|
||||
# Claude Code 官方市场
|
||||
/plugin install superpowers@claude-plugins-official
|
||||
|
||||
# Claude Code Superpowers市场
|
||||
/plugin marketplace add obra/superpowers-marketplace
|
||||
/plugin install superpowers@superpowers-marketplace
|
||||
|
||||
# Cursor
|
||||
/add-plugin superpowers
|
||||
|
||||
# OpenAI Codex CLI
|
||||
/plugins → 搜索superpowers → 安装
|
||||
|
||||
# GitHub Copilot CLI
|
||||
copilot plugin marketplace add obra/superpowers-marketplace
|
||||
copilot plugin install superpowers@superpowers-marketplace
|
||||
|
||||
# Gemini CLI
|
||||
gemini extensions install https://github.com/obra/superpowers
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 优势
|
||||
|
||||
| 优势 | 说明 |
|
||||
|------|------|
|
||||
| 自动化最佳实践 | 开发者无需反复提醒,框架自动触发TDD、代码审查等规范 |
|
||||
| 长时间自主运行 | 子智能体驱动开发使智能体能在数小时不偏离计划自主工作 |
|
||||
| 并行开发能力 | Git worktree + 并发子智能体可同时推进多个独立任务 |
|
||||
| 有据可查的质量保障 | verification-before-completion要求以证据代替断言 |
|
||||
| 可扩展的技能生态 | 技能以Markdown文件(SKILL.md)形式存在 |
|
||||
| 学术背书的心理机制 | 说服原则对LLM的有效性已有统计显著性的学术验证 |
|
||||
| 开源免费 | MIT许可证 |
|
||||
|
||||
---
|
||||
|
||||
## 劣势
|
||||
|
||||
| 劣势 | 说明 |
|
||||
|------|------|
|
||||
| 学习曲线 | 需要理解完整工作流,初学者上手成本较高 |
|
||||
| 流程开销 | brainstorming和planning对小型改动可能过重 |
|
||||
| 依赖智能体平台 | 技能效果高度依赖底层编码智能体 |
|
||||
| 提示词复杂度高 | 内嵌心理说服机制的提示词难以手动维护 |
|
||||
| 子智能体成本 | Subagent-Driven Development会频繁启动新实例,API成本较高 |
|
||||
| 贡献限制 | 不接受新技能的社区贡献,修改必须兼容全部支持的平台 |
|
||||
|
||||
---
|
||||
|
||||
## 适用场景
|
||||
|
||||
| 场景 | 说明 |
|
||||
|------|------|
|
||||
| 中大型功能开发 | 需求不完全清晰、任务较多时,brainstorming + writing-plans能有效防止方向跑偏 |
|
||||
| 追求工程纪律的团队 | 强制执行TDD、代码审查等规范 |
|
||||
| 长时间自主编程任务 | 需要智能体在无监督下稳定工作数小时 |
|
||||
| 多任务并行开发 | 多个独立子任务可并行推进 |
|
||||
| AI开发方法论研究 | 对"如何让AI遵守软件工程规范"感兴趣的研究者 |
|
||||
| 自定义技能开发 | 团队已有内部规范,可通过writing-skills创建专属技能 |
|
||||
|
||||
**不适合场景**:快速原型验证、一次性脚本或极简改动、对API token成本极度敏感的项目
|
||||
|
||||
---
|
||||
|
||||
## 核心启示
|
||||
|
||||
1. **强制合规 > 依赖理解** — 不让AI"理解"TDD,而是构建无法跳过的系统
|
||||
2. **技能触发在工作流之前** — 任何响应前检查技能,从结构上杜绝跳过
|
||||
3. **验证即完成** — 以证据(测试通过)代替断言("我认为完成了")
|
||||
4. **TDD for Skills** — 技能本身也需要通过压测场景来验证有效性
|
||||
5. **子智能体 + 两阶段审查** — 实现长时间自主工作的关键
|
||||
|
||||
---
|
||||
|
||||
## 参考资源
|
||||
|
||||
- **GitHub**: https://github.com/obra/superpowers
|
||||
- **官方博客**: https://blog.fsck.com/2025/10/09/superpowers/
|
||||
- **Discord社区**: https://discord.gg/35wsABTejz
|
||||
- **Claude插件市场**: https://claude.com/plugins/superpowers
|
||||
|
||||
|
||||
@@ -1,7 +1,181 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: 智能体软件工程知识图谱
|
||||
tags:
|
||||
- AI-Agent
|
||||
- Agentic-SE
|
||||
- Harness-Engineering
|
||||
- Superpowers
|
||||
- 软件工程
|
||||
- 知识图谱
|
||||
created: 2026-04-21
|
||||
sources:
|
||||
- AgenticSE_Book_CN(艾哈迈德·E·哈桑,2026)
|
||||
- Harness-Engineering知识体系(11篇原始资料整理,2026-04-20)
|
||||
- Superpowers技能框架(obra,161.7k stars,2026-04-21)
|
||||
---
|
||||
|
||||
# 智能体软件工程知识图谱
|
||||
|
||||
> 串联三大框架:**Agentic SE** + **Harness Engineering** + **Superpowers**
|
||||
>
|
||||
> 核心公式:**AI Agent = Model + Harness**
|
||||
|
||||
---
|
||||
|
||||
## 一、核心共识
|
||||
|
||||
三大框架都认同:
|
||||
|
||||
1. **AI Agent = Model + Harness** — 模型提供智能,Harness 让智能可用
|
||||
2. **AI 是队友,不是工具** — 能力强大但会犯错,可靠性必须靠工程系统保障
|
||||
3. **强制合规 > 依赖理解** — 不指望 AI 自发遵守规范,要构建无法跳过的系统
|
||||
4. **验证即完成** — 以可运行的证据(测试通过)代替主观断言
|
||||
|
||||
---
|
||||
|
||||
## 二、框架定位对照
|
||||
|
||||
| 维度 | Agentic SE | Harness Engineering | Superpowers |
|
||||
|------|------------|-------------------|-------------|
|
||||
| **定位** | 学科级方法论 | 概念框架 | 具体技能实现 |
|
||||
| **层级** | 理论与哲学 | 设计原则 | 工程实践 |
|
||||
| **关注点** | 人+AI团队协作 | 除模型以外的一切 | 编码智能体工作流 |
|
||||
| **起源** | 学术(哈桑教授) | 多机构综合(LangChain/Anthropic/Thoughtworks等) | 工程实践(Jesse Vincent) |
|
||||
|
||||
---
|
||||
|
||||
## 三、核心概念映射
|
||||
|
||||
### 1. Agent = Model + Harness
|
||||
|
||||
| 组件 | Agentic SE 说法 | Harness Engineering 说法 | Superpowers 说法 |
|
||||
|------|----------------|------------------------|-----------------|
|
||||
| **Model** | AI队友 | 模型( intelligence) | 底层编码智能体 |
|
||||
| **Harness** | 工程系统保障可靠性 | 工具/指令/状态管理/验证/运行时基础设施 | 技能系统(Skills) |
|
||||
|
||||
### 2. 五大子系统(对应关系)
|
||||
|
||||
| # | Harness Engineering | Superpowers | Agentic SE |
|
||||
|---|---------------------|--------------|------------|
|
||||
| 1 | Instructions | brainstorming / writing-plans | 需求规范 + 设计文档 |
|
||||
| 2 | State | 设计文档 + plan文件 + git log | 持久化状态管理 |
|
||||
| 3 | Verification | test-driven-development / verification-before-completion | 验证与测试 |
|
||||
| 4 | Scope | one feature at a time | 任务边界控制 |
|
||||
| 5 | Session Lifecycle | init.sh / finishing-a-development-branch | 会话交接与收尾 |
|
||||
|
||||
### 3. 控制类型对照
|
||||
|
||||
| 类型 | Harness Engineering | Superpowers |
|
||||
|------|---------------------|--------------|
|
||||
| **计算型控制** | 测试/linter/类型检查 | test-driven-development |
|
||||
| **推理型控制** | LLM as Judge / AI代码审查 | requesting-code-review |
|
||||
| **前馈导引** | AGENTS.md / 技能文件 / 引导脚本 | brainstorming(苏格拉底式提问) |
|
||||
| **反馈传感** | 静态分析 / 日志 / 测试 | 两阶段审查(规格合规 + 代码质量) |
|
||||
|
||||
### 4. 质量保障维度
|
||||
|
||||
| 维度 | Harness Engineering | Superpowers |
|
||||
|------|---------------------|--------------|
|
||||
| **可维护性** | 重复代码/圈复杂度/测试覆盖率 | test-driven-development |
|
||||
| **架构适应性** | 性能/可观测性/依赖规则 | writing-plans(详细任务拆解) |
|
||||
| **行为正确性** | 规格说明/测试套件/e2e验证 | RED-GREEN-REFACTOR + verification-before-completion |
|
||||
|
||||
---
|
||||
|
||||
## 四、CAR 框架(Control-Agency-Runtime)
|
||||
|
||||
来自学术界(Harness Engineering 引用),与各框架的对应:
|
||||
|
||||
| 维度 | 定义 | 在Superpowers中的体现 |
|
||||
|------|------|---------------------|
|
||||
| **Control** | 哪些指令保持权威 | 技能触发在工作前,任何响应前检查 |
|
||||
| **Agency** | 哪些行动可用 | subagent-driven-development(子智能体执行) |
|
||||
| **Runtime** | 状态如何延续、故障如何处理 | Session Lifecycle / finishing-a-development-branch |
|
||||
|
||||
---
|
||||
|
||||
## 五、心理说服原则
|
||||
|
||||
Superpowers 独家引入(基于沃顿商学院论文《Call Me a Jerk》),可补充到 Harness Engineering:
|
||||
|
||||
| 原则 | 在Superpowers中的应用 |
|
||||
|------|----------------------|
|
||||
| **权威(Authority)** | 技能定义为强制工作流,而非建议 |
|
||||
| **承诺(Commitment)** | 使用技能前要求智能体公开声明 |
|
||||
| **社会认同(Social Proof)** | 营造"不怕调用错技能"的文化 |
|
||||
|
||||
---
|
||||
|
||||
## 六、实测效果
|
||||
|
||||
Anthropic 对比实验(同一模型 + 同一提示词):
|
||||
|
||||
| | 有Harness | 无Harness |
|
||||
|--|-----------|-----------|
|
||||
| 成本 | $9 | 更高 |
|
||||
| 时间 | 20分钟 | 更长 |
|
||||
| 结果 | 可运行 | 无法运行 |
|
||||
|
||||
**结论**:Harness 改进带来的性能提升,可能比模型本身更显著。
|
||||
|
||||
---
|
||||
|
||||
## 七、知识体系演进路径
|
||||
|
||||
```
|
||||
学术界(CAR框架)
|
||||
↓
|
||||
Harness Engineering(概念框架,11家机构综合)
|
||||
↓
|
||||
┌─────────────────┴─────────────────┐
|
||||
↓ ↓
|
||||
Agentic SE(理论专著) Superpowers(工程实践)
|
||||
(哈桑教授,2026) (Jesse Vincent,161.7k stars)
|
||||
关注:人+AI协作 关注:编码智能体工作流
|
||||
└─────────────────┬─────────────────┘
|
||||
↓
|
||||
OpenClaw/Harness实践
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、对OpenClaw的指导意义
|
||||
|
||||
OpenClaw 本身就是一个 Harness 实现:
|
||||
|
||||
| OpenClaw组件 | 对应Harness子系统 |
|
||||
|-------------|-----------------|
|
||||
| AGENTS.md / SOUL.md / USER.md | Instructions |
|
||||
| MEMORY.md / memory/ | State |
|
||||
| HEARTBEAT.md | Verification + Session Lifecycle |
|
||||
| Skills系统 | 工具扩展(Tool Harness) |
|
||||
|
||||
**优化方向**:
|
||||
1. 引入 Superpowers 的"技能触发在工作前"机制
|
||||
2. 强化 verification-before-completion(当前HEARTBEAT偏简单检查)
|
||||
3. 补充前馈导引:每次会话开始时主动说明上下文
|
||||
4. 引入 TDD 思维:先定义验证方式,再执行任务
|
||||
|
||||
---
|
||||
|
||||
## 九、推荐阅读路径
|
||||
|
||||
```
|
||||
入门 → 《Agentic SE》第四部分(行动指南)
|
||||
↓
|
||||
进阶 → Harness-Engineering知识体系
|
||||
↓
|
||||
实践 → Superpowers技能框架
|
||||
↓
|
||||
落地 → OpenClaw优化方向
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关联文档
|
||||
|
||||
- [[Harness-Engineering知识体系]]
|
||||
- [[Superpowers技能框架]]
|
||||
- [[code-reviewer技能]]
|
||||
- [[fireworks-tech-graph技术图生成工具]]
|
||||
|
||||
|
||||
@@ -1,7 +1,60 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
## bin core home lib64 mnt root snap tmp vmlinuz
|
||||
## boot dev initrd.img lost+found opt run srv usr
|
||||
## cdrom etc lib media proc sbin sys var
|
||||
|
||||
## 下面, 我们逐个分析这些文件夹的用处
|
||||
## bin
|
||||
## 系统 shell (终端) 命令存放于此
|
||||
## core
|
||||
## home
|
||||
## 除了root用户以外的用户默认主目录, 每个子目录都是一个用户名
|
||||
## lib64
|
||||
## mnt
|
||||
## root
|
||||
## root用户的主目录
|
||||
## snap
|
||||
## tmp
|
||||
## boot
|
||||
## dev
|
||||
## lost+found
|
||||
## opt
|
||||
## 供本系统所有用户使用软件一般安装在此
|
||||
**有人也喜欢把软件安装在** **/usr/local/**
|
||||
## run
|
||||
## srv
|
||||
## usr
|
||||
**/usr/** **目录包含所有的命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变的。这个目录也包含你的Linux发行版本自带的主要的应用程序。**
|
||||
**/usr/local/** **目录一般安装第三方的软件**
|
||||
**/usr/local/bin** **放置用户自己安装的小的shell命令,和一些在/usr/local目录下大应用程序的符号连接。****/usr/local/bin/** **目录下的命令可以直接在shell里使用**
|
||||
**/usr/share/fonts****是字体文件夹,可以在这里新建文件夹** **winFonts/****,把ttf格式的字体放进去**
|
||||
## 然后将字体文件拷贝到此文件夹下:
|
||||
sudo cp ~/Desktop/font/*.ttf /usr/share/fonts/winFonts/
|
||||
|
||||
- **1**
|
||||
- **2**
|
||||
|
||||
## 然后,改变权限:
|
||||
sudo chmod 644 /usr/share/fonts/winFonts/*.ttf
|
||||
|
||||
- **1**
|
||||
- **2**
|
||||
|
||||
## cdrom
|
||||
## etc
|
||||
## 系统全局配置文件一般在此
|
||||
## /etc/apt/
|
||||
## Ubuntu 软件源列表, 也就是 apt-get 命令执行时从哪些地方下载包的依据
|
||||
## lib
|
||||
## media
|
||||
## proc
|
||||
## sbin
|
||||
## sys
|
||||
## var
|
||||
> 来自 <[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)>
|
||||
|
||||
**开始安装**
|
||||
## cd /usr/share/fonts/winFonts/
|
||||
## sudo mkfontscale (创建雅黑字体的fonts.scale文件,它用来控制字体旋转缩放)
|
||||
## sudo mkfontdir (创建雅黑字体的fonts.dir文件,它用来控制字体粗斜体产生)
|
||||
## sudo fc-cache -fv (建立字体缓存信息,也就是让系统认识雅黑)
|
||||
> 来自 <[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)>
|
||||
@@ -1,15 +0,0 @@
|
||||
```sql
|
||||
SELECT TOP 10
|
||||
```
|
||||
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
|
||||
execution_count,
|
||||
(SELECT SUBSTRING(text, statement_start_offset/2 + 1,
|
||||
(CASE WHEN statement_end_offset = -1
|
||||
THEN LEN(CONVERT(nvarchar(max), text)) * 2
|
||||
ELSE statement_end_offset
|
||||
```sql
|
||||
END - statement_start_offset)/2)
|
||||
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
|
||||
FROM sys.dm_exec_query_stats
|
||||
```
|
||||
ORDER BY [avg_cpu_cost] DESC
|
||||
@@ -1,132 +0,0 @@
|
||||
DeviceInfo 表需要新增 [HeightDeviation]列
|
||||
|
||||
执行脚本,以及修改对应的ProjectID
|
||||
其他的
|
||||
|
||||
```sql
|
||||
USE [HiMonitorDB]
|
||||
GO
|
||||
```
|
||||
/****** Object: Table [dbo].[DynamicCalculationConfig] Script Date: 2018/7/5 15:04:35 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
```sql
|
||||
CREATE TABLE [dbo].[DynamicCalculationConfig](
|
||||
```
|
||||
[ID] [int] IDENTITY(1,1) NOT NULL,
|
||||
[IsUse] [int] NULL,
|
||||
[SolveMode] [int] NULL,
|
||||
[RobustMode] [int] NULL,
|
||||
[RatioThrdDYN] [float] NULL,
|
||||
[SolvingStrategy] [int] NULL,
|
||||
[RelatedProject] [int] NULL,
|
||||
[FilterWindowSize] [float] NULL,
|
||||
[SolveStoreInterval] [float] NULL,
|
||||
CONSTRAINT [PK_DynamicCalculationConfig] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
GO
|
||||
/****** Object: Table [dbo].[RoutineConfig] Script Date: 2018/7/5 15:04:35 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
SET ANSI_PADDING ON
|
||||
GO
|
||||
```sql
|
||||
CREATE TABLE [dbo].[RoutineConfig](
|
||||
```
|
||||
[ID] [int] IDENTITY(1,1) NOT NULL,
|
||||
[RelatedProject] [int] NULL,
|
||||
[ObsType] [int] NULL,
|
||||
[ObsFreq] [int] NULL,
|
||||
[Intervals] [float] NULL,
|
||||
[EleCutOff] [float] NULL,
|
||||
[ExcludeSats] [varchar](300) NULL,
|
||||
[UsedSys] [varchar](300) NULL,
|
||||
[IsSaveRawData] [int] NULL,
|
||||
[SaveRawDataType] [int] NULL,
|
||||
[SaveDataInterval] [int] NULL,
|
||||
CONSTRAINT [PK_RoutineConfig] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
GO
|
||||
SET ANSI_PADDING OFF
|
||||
GO
|
||||
/****** Object: Table [dbo].[RTKCalculationConfig] Script Date: 2018/7/5 15:04:35 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
```sql
|
||||
CREATE TABLE [dbo].[RTKCalculationConfig](
|
||||
```
|
||||
[ID] [int] IDENTITY(1,1) NOT NULL,
|
||||
[IsUse] [int] NULL,
|
||||
[MaxHorRTK] [float] NULL,
|
||||
[MaxVerRTK] [float] NULL,
|
||||
[RatioThrdRTK] [float] NULL,
|
||||
[DeforMode] [int] NULL,
|
||||
[SolvingStrategy] [int] NULL,
|
||||
[RelatedProject] [int] NULL,
|
||||
[FilterWindowSize] [float] NULL,
|
||||
[SolveStoreInterval] [float] NULL,
|
||||
CONSTRAINT [PK_RTKCalculationConfig] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
GO
|
||||
/****** Object: Table [dbo].[StaticeCalculationConfig] Script Date: 2018/7/5 15:04:35 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
```sql
|
||||
CREATE TABLE [dbo].[StaticeCalculationConfig](
|
||||
```
|
||||
[ID] [int] IDENTITY(1,1) NOT NULL,
|
||||
[IsUse] [int] NULL,
|
||||
[MaxHorSTC] [float] NULL,
|
||||
[MaxVerSTC] [float] NULL,
|
||||
[RatioThrdSTC] [float] NULL,
|
||||
[SolvingStrategy] [int] NULL,
|
||||
[SessLengthSTC] [int] NULL,
|
||||
[CalcFreqSTC] [int] NULL,
|
||||
[RelatedProject] [int] NULL,
|
||||
CONSTRAINT [PK_StaticeMonitorConfig] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[ID] ASC
|
||||
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||
) ON [PRIMARY]
|
||||
|
||||
GO
|
||||
SET IDENTITY_INSERT [dbo].[DynamicCalculationConfig] ON
|
||||
|
||||
```sql
|
||||
INSERT [dbo].[DynamicCalculationConfig] ([ID], [IsUse], [SolveMode], [RobustMode], [RatioThrdDYN], [SolvingStrategy], [RelatedProject], [FilterWindowSize], [SolveStoreInterval]) VALUES (1, 0, 0, 0, 3, NULL, 2, 10, 30)
|
||||
```
|
||||
SET IDENTITY_INSERT [dbo].[DynamicCalculationConfig] OFF
|
||||
SET IDENTITY_INSERT [dbo].[RoutineConfig] ON
|
||||
|
||||
```sql
|
||||
INSERT [dbo].[RoutineConfig] ([ID], [RelatedProject], [ObsType], [ObsFreq], [Intervals], [EleCutOff], [ExcludeSats], [UsedSys], [IsSaveRawData], [SaveRawDataType], [SaveDataInterval]) VALUES (1, 2, 0, 0, 15, 12, NULL, N'0&1&2', 0, 0, 24)
|
||||
```
|
||||
SET IDENTITY_INSERT [dbo].[RoutineConfig] OFF
|
||||
SET IDENTITY_INSERT [dbo].[RTKCalculationConfig] ON
|
||||
|
||||
```sql
|
||||
INSERT [dbo].[RTKCalculationConfig] ([ID], [IsUse], [MaxHorRTK], [MaxVerRTK], [RatioThrdRTK], [DeforMode], [SolvingStrategy], [RelatedProject], [FilterWindowSize], [SolveStoreInterval]) VALUES (1, 1, 0.02, 0.04, 2.5, 0, 0, 2, 120, 30)
|
||||
```
|
||||
SET IDENTITY_INSERT [dbo].[RTKCalculationConfig] OFF
|
||||
SET IDENTITY_INSERT [dbo].[StaticeCalculationConfig] ON INSERT [dbo].[StaticeCalculationConfig] ([ID], [IsUse], [MaxHorSTC], [MaxVerSTC], [RatioThrdSTC], [SolvingStrategy], [SessLengthSTC], [CalcFreqSTC], [RelatedProject]) VALUES (5, 0, 0.02, 0.02, 2.5, NULL, 5, 5, 12)
|
||||
SET IDENTITY_INSERT [dbo].[StaticeCalculationConfig] OFF
|
||||
@@ -1,54 +0,0 @@
|
||||
---
|
||||
title: 数据库 索引
|
||||
tags:
|
||||
- 索引
|
||||
created: 2026-04-21
|
||||
---
|
||||
|
||||
# 数据库
|
||||
|
||||
> 自动生成的索引文件
|
||||
|
||||
## 文件列表
|
||||
|
||||
| 文件名 | 大小 | 说明 |
|
||||
|--------|------|------|
|
||||
| [[CAP定理(CAP theorem)]] | 1KB | |
|
||||
| [[Cpu 占用过高]] | 420B | |
|
||||
| [[HiMonitor1.0 升级到1.3脚本注意事项]] | 4KB | |
|
||||
| [[MariaDB_Centos7安装mariadb,支持远程访问]] | 1KB | |
|
||||
| [[PostgreSQL_Pg12 安装过程]] | 1KB | |
|
||||
| [[PostgreSQL_Postgresql 帐号密码修改方法]] | 267B | |
|
||||
| [[PostgreSQL_pg_hba.conf]] | 1KB | |
|
||||
| [[PostgreSQL_postgresql删除还有活动连接的数据库]] | 246B | |
|
||||
| [[PostgreSQL_systemctl start postgresql-12.service -- 启动服务]] | 223B | |
|
||||
| [[SQL SERVER 游标使用]] | 2KB | |
|
||||
| [[SQLSERVER 数据库恢复挂起的解决办法]] | 362B | |
|
||||
| [[SQLSERVER存储过程基本语法]] | 6KB | |
|
||||
| [[三峡数据变形值直接导出]] | 552B | |
|
||||
| [[关系型数据库遵循ACID规则]] | 1KB | |
|
||||
| [[内蒙古数据FTP推送脚本快速获取]] | 440B | |
|
||||
| [[单个HiMonitor 站点数据]] | 873B | |
|
||||
| [[去重]] | 229B | |
|
||||
| [[合肥董铺水库中间数据]] | 2KB | |
|
||||
| [[回补中间一段时间的GNSS数据]] | 1KB | |
|
||||
| [[循环批量删除数据库表]] | 814B | |
|
||||
| [[循环造固定数据值脚本]] | 744B | |
|
||||
| [[循环遍历插数据]] | 591B | |
|
||||
| [[批量创建app 表索引]] | 820B | |
|
||||
| [[批量删除表]] | 458B | |
|
||||
| [[批量删除超前数据脚本]] | 903B | |
|
||||
| [[批量删除超前数据脚本(监测云)]] | 1KB | |
|
||||
| [[批量增加非聚集索引]] | 1KB | |
|
||||
| [[按日分组求均值]] | 221B | |
|
||||
| [[新增站点基准信息增加]] | 547B | |
|
||||
| [[无日志文件附加数据库失败解决]] | 1KB | |
|
||||
| [[松滋 2号店循环造rtk]] | 1KB | |
|
||||
| [[模拟一段数据]] | 1KB | |
|
||||
| [[解除数据库占用连接]] | 491B | |
|
||||
| [[运行中数据库收缩脚本]] | 743B | |
|
||||
| [[链接服务器远程查询]] | 1B | |
|
||||
| [[附加数据库]] | 105B | |
|
||||
|
||||
---
|
||||
*共 36 个文件*
|
||||
@@ -1,25 +0,0 @@
|
||||
1、安装MariaDB:yum -y install mariadb mariadb-server
|
||||
2、设置开机启动:systemctl enable mariadb
|
||||
3、启动MariaDB:systemctl start mariadb
|
||||
4、初始化配置:mysql_secure_installation
|
||||
4.1、设置密码,会提示先输入密码
|
||||
Enter current password for root (enter for none):<–初次运行直接回车
|
||||
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
|
||||
New password: <– 设置root用户的密码
|
||||
Re-enter new password: <– 再输入一次你设置的密码
|
||||
4.2、其他配置
|
||||
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
|
||||
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
|
||||
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
|
||||
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
|
||||
初始化MariaDB完成,接下来测试登录
|
||||
mysql -uroot -p你的密码
|
||||
完成。
|
||||
==5、设置远程登录:==
|
||||
==使用mysql -uroot -p密码登录后,执行命令:==
|
||||
==GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码的明文' WITH GRANT OPTION;==
|
||||
==FLUSH PRIVILEGES;==
|
||||
==6、如果远程访问,并且数据量很大,则需要进行如下配置,否则会出现==**MySQL server has gone away** ==的==
|
||||
==错误 :==
|
||||
==set global max_allowed_packet=1024*1024*16;==
|
||||
> 来自 <[https://blog.csdn.net/lianshaohua/article/details/88380898](https://blog.csdn.net/lianshaohua/article/details/88380898)>
|
||||
@@ -1,18 +0,0 @@
|
||||
1. ==Install the repository RPM:========yum install== ==https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm==
|
||||
2. ==Install the client packages:========yum install postgresql12==
|
||||
3. ==Optionally install the server packages:========yum install postgresql12-server==
|
||||
4. ==Optionally initialize the database and enable automatic start:========/usr/pgsql-12/bin/postgresql-12-setup initdb========systemctl enable postgresql-12========systemctl start postgresql-12== > 来自 <[https://www.postgresql.org/download/linux/redhat/](https://www.postgresql.org/download/linux/redhat/)>
|
||||
[Service]
|
||||
Type=notify
|
||||
|
||||
User=postgres
|
||||
Group=postgres
|
||||
|
||||
# Note: avoid inserting whitespace in these Environment= lines, or you may
|
||||
# break postgresql-setup.
|
||||
|
||||
# Location of database directory
|
||||
Environment=PGDATA=/var/lib/pgsql/12/data/
|
||||
|
||||
初始化之后,数据文件会存在 /var/lib/pgsql/12/data
|
||||
> 来自 <[https://www.postgresql.org/download/linux/redhat/](https://www.postgresql.org/download/linux/redhat/)>
|
||||
@@ -1,4 +0,0 @@
|
||||
==#su postgres== ======-bash-3.2$psql - postgres== ======postgres=#alter user postgres with password 'new password';== ==////====一定要加分号执行========postgres=#\q==
|
||||
|
||||
su - postgres
|
||||
psql -U postgresalter user postgres with encrypted password '1';
|
||||
@@ -1,11 +0,0 @@
|
||||
METHOD指定如何处理客户端的认证。常用的有ident,md5,password,trust,reject
|
||||
ident是Linux下PostgreSQL默认的local认证方式,凡是能正确登录服务器的操作系统用户(注:不是数据库用户)就能使用本用户映射的数据库用户不需密码登录数据库。用户映射文件为pg_ident.conf,这个文件记录着与操作系统用户匹配的数据库用户,如果某操作系统用户在本文件中没有映射用户,则默认的映射数据库用户与操作系统用户同名。比如,服务器上有名为user1的操作系统用户,同时数据库上也有同名的数据库用户,user1登录操作系统后可以直接输入psql,以user1数据库用户身份登录数据库且不需密码。很多初学者都会遇到psql -U username登录数据库却出现“username ident 认证失败”的错误,明明数据库用户已经createuser。原因就在于此,使用了ident认证方式,却没有同名的操作系统用户或没有相应的映射用户。解决方案:1、在pg_ident.conf中添加映射用户;2、改变认证方式。
|
||||
md5是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。
|
||||
password是以明文密码传送给数据库,建议不要在生产环境中使用。
|
||||
trust是只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。
|
||||
reject是拒绝认证。
|
||||
在文件查找 listen_addresses,他的值说明
|
||||
如果希望只能从本地计算机访问PostgreSQL数据库,就将该项设置为'localhost';
|
||||
如果希望从局域网访问PostgreSQL数据库,就将该项设置为PostgreSQL数据库的局域网IP地址;
|
||||
如果希望从互联网访问PostgreSQL数据库,就将该项设置为PostgreSQL数据库的互联网IP地址;
|
||||
如果希望从任何地方都可以访问PostgreSQL数据库,就将该配置项设置为“*”;
|
||||
@@ -1,7 +0,0 @@
|
||||
```sql
|
||||
select `pg_terminate_backend(pid)` from `pg_stat_activity` where `datname`='testdb' and `pid`<>`pg_backend_pid();`
|
||||
```
|
||||
==上面sql表示的是关闭数据库testdb的活动连接,接下来就可以用==
|
||||
```sql
|
||||
drop database `testdb;`
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
systemctl start postgresql-12.service // 启动服务systemctl stop postgresql-12.service // 关闭服务systemctl restart postgresql-12.service // 重启服务systemctl status postgresql-12.service // 查看状态
|
||||
@@ -1,17 +0,0 @@
|
||||
如果你的数据库还处于挂起状态,请把我下面代码的test改为你的库名,然后执行完,刷新就正常了:
|
||||
USE master
|
||||
GO
|
||||
```sql
|
||||
ALTER DATABASE test SET SINGLE_USER
|
||||
GO
|
||||
ALTER DATABASE test SET EMERGENCY
|
||||
GO
|
||||
```
|
||||
DBCC CHECKDB(test,REPAIR_ALLOW_DATA_LOSS)
|
||||
go
|
||||
```sql
|
||||
ALTER DATABASE test SET ONLINE
|
||||
GO
|
||||
ALTER DATABASE test SET MULTI_USER
|
||||
GO
|
||||
```
|
||||
@@ -1,311 +0,0 @@
|
||||
一、定义变量
|
||||
--简单赋值
|
||||
```sql
|
||||
declare @a int
|
||||
set @a=5
|
||||
print @a --使用select语句赋值
|
||||
declare @user1 nvarchar(50)
|
||||
select @user1='张三'
|
||||
print @user1
|
||||
declare @user2 nvarchar(50)
|
||||
select @user2 = Name from ST_User where ID=1
|
||||
print @user2 --使用update语句赋值
|
||||
declare @user3 nvarchar(50)
|
||||
update ST_User set @user3 = Name where ID=1
|
||||
print @user3
|
||||
|
||||
```
|
||||
二、表、临时表、表变量
|
||||
|
||||
--创建临时表1
|
||||
```sql
|
||||
create table #DU_User1
|
||||
```
|
||||
(
|
||||
[ID] [int] NOT NULL,
|
||||
[Oid] [int] NOT NULL,
|
||||
[Login] [nvarchar](50) NOT NULL,
|
||||
[Rtx] [nvarchar](4) NOT NULL,
|
||||
[Name] [nvarchar](5) NOT NULL,
|
||||
[Password] [nvarchar](max) NULL,
|
||||
[State] [nvarchar](8) NOT NULL
|
||||
);
|
||||
--向临时表1插入一条记录
|
||||
```sql
|
||||
insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (100,2,'LS','0000','临时','321','特殊'); --从ST_User查询数据,填充至新生成的临时表
|
||||
select * into #DU_User2 from ST_User where ID<8 --查询并联合两临时表
|
||||
select * from #DU_User2 where ID<3 union select * from #DU_User1 --删除两临时表
|
||||
drop table #DU_User1
|
||||
drop table #DU_User2 --创建临时表
|
||||
CREATE TABLE #t
|
||||
```
|
||||
(
|
||||
[ID] [int] NOT NULL,
|
||||
[Oid] [int] NOT NULL,
|
||||
[Login] [nvarchar](50) NOT NULL,
|
||||
[Rtx] [nvarchar](4) NOT NULL,
|
||||
[Name] [nvarchar](5) NOT NULL,
|
||||
[Password] [nvarchar](max) NULL,
|
||||
[State] [nvarchar](8) NOT NULL,
|
||||
) --将查询结果集(多条数据)插入临时表
|
||||
```sql
|
||||
insert into #t select * from ST_User
|
||||
```
|
||||
--不能这样插入
|
||||
--select * into #t from dbo.ST_User --添加一列,为int型自增长子段
|
||||
```sql
|
||||
alter table #t add [myid] int NOT NULL IDENTITY(1,1)
|
||||
```
|
||||
--添加一列,默认填充全球唯一标识
|
||||
```sql
|
||||
alter table #t add [myid1] uniqueidentifier NOT NULL default(newid()) select * from #t
|
||||
drop table #t
|
||||
```
|
||||
--给查询结果集增加自增长列 --无主键时:
|
||||
```sql
|
||||
select IDENTITY(int,1,1)as ID, Name,[Login],[Password] into #t from ST_User
|
||||
select * from #t --有主键时:
|
||||
select (select SUM(1) from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID
|
||||
```
|
||||
--定义表变量
|
||||
```sql
|
||||
declare @t table
|
||||
```
|
||||
(
|
||||
id int not null,
|
||||
msg nvarchar(50) null
|
||||
)
|
||||
```sql
|
||||
insert into @t values(1,'1')
|
||||
insert into @t values(2,'2')
|
||||
select * from @t
|
||||
```
|
||||
三、循环
|
||||
|
||||
--while循环计算1到100的和
|
||||
```sql
|
||||
declare @a int
|
||||
declare @sum int
|
||||
set @a=1
|
||||
set @sum=0
|
||||
while @a<=100
|
||||
```
|
||||
begin
|
||||
```sql
|
||||
set @sum+=@a
|
||||
set @a+=1
|
||||
```
|
||||
end
|
||||
print @sum
|
||||
四、条件语句
|
||||
|
||||
--if,else条件分支
|
||||
if(1+1=2)
|
||||
begin
|
||||
print '对'
|
||||
end
|
||||
else
|
||||
begin
|
||||
print '错'
|
||||
```sql
|
||||
end --when then条件分支
|
||||
declare @today int
|
||||
declare @week nvarchar(3)
|
||||
set @today=3
|
||||
set @week=case
|
||||
```
|
||||
when @today=1 then '星期一'
|
||||
when @today=2 then '星期二'
|
||||
when @today=3 then '星期三'
|
||||
when @today=4 then '星期四'
|
||||
when @today=5 then '星期五'
|
||||
when @today=6 then '星期六'
|
||||
when @today=7 then '星期日'
|
||||
else '值错误'
|
||||
end
|
||||
```sql
|
||||
print @week
|
||||
|
||||
```
|
||||
五、游标
|
||||
|
||||
```sql
|
||||
declare @ID int
|
||||
declare @Oid int
|
||||
declare @Login varchar(50) --定义一个游标
|
||||
declare user_cur cursor for select ID,Oid,[Login] from ST_User
|
||||
```
|
||||
--打开游标
|
||||
```sql
|
||||
open user_cur
|
||||
while @@fetch_status=0
|
||||
```
|
||||
begin
|
||||
--读取游标
|
||||
```sql
|
||||
fetch next from user_cur into @ID,@Oid,@Login
|
||||
print @ID
|
||||
```
|
||||
--print @Login
|
||||
end
|
||||
close user_cur
|
||||
--摧毁游标
|
||||
deallocate user_cur
|
||||
六、触发器
|
||||
|
||||
触发器中的临时表:
|
||||
|
||||
Inserted
|
||||
存放进行insert和update 操作后的数据
|
||||
Deleted
|
||||
存放进行delete 和update操作前的数据
|
||||
|
||||
--创建触发器
|
||||
```sql
|
||||
Create trigger User_OnUpdate
|
||||
```
|
||||
On ST_User
|
||||
for Update
|
||||
As
|
||||
```sql
|
||||
declare @msg nvarchar(50)
|
||||
```
|
||||
--@msg记录修改情况
|
||||
```sql
|
||||
select @msg = N'姓名从“' + Deleted.Name + N'”修改为“' + Inserted.Name + '”' from Inserted,Deleted
|
||||
```
|
||||
--插入日志表
|
||||
```sql
|
||||
insert into [LOG](MSG)values(@msg) --删除触发器
|
||||
drop trigger User_OnUpdate
|
||||
```
|
||||
七、存储过程
|
||||
|
||||
--创建带output参数的存储过程
|
||||
```sql
|
||||
CREATE PROCEDURE PR_Sum
|
||||
```
|
||||
@a int,
|
||||
@b int,
|
||||
@sum int output
|
||||
AS
|
||||
BEGIN
|
||||
```sql
|
||||
set @sum=@a+@b
|
||||
END --创建Return返回值存储过程
|
||||
CREATE PROCEDURE PR_Sum2
|
||||
```
|
||||
@a int,
|
||||
@b int
|
||||
AS
|
||||
BEGIN
|
||||
Return @a+@b
|
||||
```sql
|
||||
END --执行存储过程获取output型返回值
|
||||
declare @mysum int
|
||||
execute PR_Sum 1,2,@mysum output
|
||||
print @mysum --执行存储过程获取Return型返回值
|
||||
declare @mysum2 int
|
||||
execute @mysum2= PR_Sum2 1,2
|
||||
print @mysum2
|
||||
```
|
||||
八、自定义函数
|
||||
|
||||
函数的分类:
|
||||
|
||||
1)标量值函数
|
||||
|
||||
2)表值函数
|
||||
|
||||
a:内联表值函数
|
||||
|
||||
b:多语句表值函数
|
||||
|
||||
3)系统函数
|
||||
|
||||
--新建标量值函数
|
||||
```sql
|
||||
create function FUNC_Sum1
|
||||
```
|
||||
(
|
||||
@a int,
|
||||
@b int
|
||||
)
|
||||
returns int
|
||||
as
|
||||
begin
|
||||
return @a+@b
|
||||
```sql
|
||||
end --新建内联表值函数
|
||||
create function FUNC_UserTab_1
|
||||
```
|
||||
(
|
||||
@myId int
|
||||
)
|
||||
returns table
|
||||
as
|
||||
return (select * from ST_User where ID<@myId) --新建多语句表值函数
|
||||
```sql
|
||||
create function FUNC_UserTab_2
|
||||
```
|
||||
(
|
||||
@myId int
|
||||
)
|
||||
returns @t table
|
||||
(
|
||||
[ID] [int] NOT NULL,
|
||||
[Oid] [int] NOT NULL,
|
||||
[Login] [nvarchar](50) NOT NULL,
|
||||
[Rtx] [nvarchar](4) NOT NULL,
|
||||
[Name] [nvarchar](5) NOT NULL,
|
||||
[Password] [nvarchar](max) NULL,
|
||||
[State] [nvarchar](8) NOT NULL
|
||||
)
|
||||
as
|
||||
begin
|
||||
```sql
|
||||
insert into @t select * from ST_User where ID<@myId
|
||||
```
|
||||
return
|
||||
```sql
|
||||
end --调用表值函数
|
||||
select * from dbo.FUNC_UserTab_1(15)
|
||||
```
|
||||
--调用标量值函数
|
||||
```sql
|
||||
declare @s int
|
||||
set @s=dbo.FUNC_Sum1(100,50)
|
||||
print @s --删除标量值函数
|
||||
drop function FUNC_Sum1
|
||||
```
|
||||
谈谈自定义函数与存储过程的区别:
|
||||
|
||||
一、自定义函数:
|
||||
|
||||
1. 可以返回表变量
|
||||
|
||||
2. 限制颇多,包括
|
||||
|
||||
不能使用output参数;
|
||||
|
||||
不能用临时表;
|
||||
|
||||
函数内部的操作不能影响到外部环境;
|
||||
|
||||
不能通过select返回结果集;
|
||||
|
||||
不能update,delete,数据库表;
|
||||
|
||||
3. 必须return 一个标量值或表变量
|
||||
|
||||
自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
|
||||
|
||||
二、存储过程
|
||||
|
||||
1. 不能返回表变量
|
||||
|
||||
2. 限制少,可以执行对数据库表的操作,可以返回数据集
|
||||
|
||||
3. 可以return一个标量值,也可以省略return
|
||||
|
||||
存储过程一般用在实现复杂的功能,数据操纵方面。
|
||||
@@ -1,72 +0,0 @@
|
||||
我们在处理数据的时候,经常会出现需要循环处理数据的需求,如果我们能用CTE或者其他语句处理的话,没有问题,但有时候往往处理起来比较困难,这时候我们可以选择使用游标处理,选择使用哪种形式,要考虑效率问题,一般游标效率不高,但也有适合使用的场景。
|
||||
|
||||
游标分为静态游标和动态游标,静态游标的数据是固定的,不会因为数据表的改变而改变;动态游标的数据是随着数据表变化而变化的,游标默认是动态游标,通过关键字STATIC设置,OK,上测试数据:
|
||||
|
||||
--测试数据
|
||||
```sql
|
||||
if not object_id(N'Tempdb..#T') is null
|
||||
drop table #T
|
||||
Go
|
||||
Create table #T([id] int,[name] nvarchar(22))
|
||||
Insert #T
|
||||
select 1,N'张三' union all
|
||||
select 2,N'李四' union all
|
||||
select 3,N'王五' union all
|
||||
select 4,N'赵六'
|
||||
Go
|
||||
```
|
||||
--测试数据结束
|
||||
我们先看静态游标的使用方法:
|
||||
|
||||
```sql
|
||||
DECLARE @id INT , @name NVARCHAR(50) --声明变量,需要读取的数据
|
||||
DECLARE cur CURSOR STATIC --声明静态游标
|
||||
```
|
||||
FOR
|
||||
```sql
|
||||
SELECT * FROM #T
|
||||
OPEN cur --打开游标
|
||||
FETCH NEXT FROM cur INTO @id, @name --取数据
|
||||
WHILE ( @@fetch_status = 0 ) --判断是否还有数据
|
||||
```
|
||||
BEGIN
|
||||
```sql
|
||||
SELECT '数据: ' + RTRIM(@id) + @name
|
||||
UPDATE #T SET name='测试' WHERE id=4 --测试静态动态用
|
||||
FETCH NEXT FROM cur INTO @id, @name --这里一定要写取下一条数据
|
||||
```
|
||||
END
|
||||
CLOSE cur --关闭游标
|
||||
DEALLOCATE cur
|
||||
结果如下,我们可以看到ID是4的数据没有改变,依然是赵六,而不是UPDATE之后的测试:
|
||||
|
||||
我们再来看一下,动态游标,去掉STATIC关键字即可:
|
||||
|
||||
```sql
|
||||
DECLARE @id INT , @name NVARCHAR(50) --声明变量,需要读取的数据
|
||||
DECLARE cur CURSOR --去掉STATIC关键字即可
|
||||
```
|
||||
FOR
|
||||
```sql
|
||||
SELECT * FROM #T
|
||||
OPEN cur --打开游标
|
||||
FETCH NEXT FROM cur INTO @id, @name --取数据
|
||||
WHILE ( @@fetch_status = 0 ) --判断是否还有数据
|
||||
```
|
||||
BEGIN
|
||||
```sql
|
||||
SELECT '数据: ' + RTRIM(@id) + @name
|
||||
UPDATE #T SET name='测试' WHERE id=4 --测试静态动态用
|
||||
FETCH NEXT FROM cur INTO @id, @name --这里一定要写取下一条数据
|
||||
```
|
||||
END
|
||||
CLOSE cur --关闭游标
|
||||
DEALLOCATE cur
|
||||
我们看结果,可以看到ID为4的数据已经更改为测试:
|
||||
|
||||
以上是游标的用法,以及动态、静态游标的介绍使用。
|
||||
---------------------
|
||||
作者:二月十六
|
||||
来源:CSDN
|
||||
原文:https://blog.csdn.net/sinat_28984567/article/details/79811887
|
||||
版权声明:本文为博主原创文章,转载请附上博文链接!
|
||||
@@ -1,7 +1,160 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: Docker一键部署Clash Meta (mihomo) + metacubexd面板教程
|
||||
date: 2026-01-13
|
||||
tags:
|
||||
- Linux系统Docker
|
||||
- Docker
|
||||
- Clash
|
||||
- mihomo
|
||||
- metacubexd
|
||||
- 代理
|
||||
- 网络
|
||||
source: https://www.cloud-guest.top/archives/gS23mQ65
|
||||
---
|
||||
|
||||
# Docker 一键部署 Clash Meta (mihomo) + metacubexd 面板教程(2026 年最新版)
|
||||
|
||||
**目标:** 使用最新 MetaCubeX/mihomo 内核 + 官方 metacubexd Web 面板,实现稳定、高性能的代理服务
|
||||
|
||||
**适用环境:** Linux 服务器 / NAS(推荐 Ubuntu/Debian),已安装 Docker + Docker Compose
|
||||
|
||||
**核心特点:**
|
||||
- 使用 `network_mode: host`(TUN/透明代理最稳)
|
||||
- 容器别名统一为 `clash`(核心)+ `dashboard`(面板),操作更友好
|
||||
- 提前处理 Country.mmdb 避免经典报错
|
||||
|
||||
## 1. 准备工作
|
||||
|
||||
安装 Docker & Docker Compose(如果未安装,一键执行):
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian 推荐方式(2026 年最新)
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
sudo usermod -aG docker $USER
|
||||
```
|
||||
|
||||
创建项目目录:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/mihomo && cd ~/mihomo
|
||||
```
|
||||
|
||||
## 2. 提前下载 GeoIP 数据库(必须!避免 not a directory 错误)
|
||||
|
||||
mihomo 需要 Country.mmdb(文件,不是文件夹)
|
||||
|
||||
```bash
|
||||
mkdir -p config
|
||||
cd config
|
||||
|
||||
# 轻量版 country-lite.mmdb(体积小 ≈1-2MB)
|
||||
curl -L https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/country-lite.mmdb \
|
||||
-o Country.mmdb
|
||||
```
|
||||
|
||||
**关键:** 启动前这个路径必须存在文件,否则 Docker 会自动创建成目录导致启动失败。
|
||||
|
||||
## 3. docker-compose.yml(完整配置)
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
clash:
|
||||
container_name: clash
|
||||
image: metacubex/mihomo:Alpha
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
pid: host
|
||||
ipc: host
|
||||
cap_add:
|
||||
- ALL
|
||||
volumes:
|
||||
- ./config:/root/.config/mihomo
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
|
||||
dashboard:
|
||||
container_name: dashboard
|
||||
image: ghcr.io/metacubex/metacubexd:latest
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
```
|
||||
|
||||
## 4. 准备 mihomo 主配置文件 config.yaml
|
||||
|
||||
```yaml
|
||||
# 基本端口与访问
|
||||
mixed-port: 7890
|
||||
allow-lan: true
|
||||
external-controller: 0.0.0.0:9090
|
||||
secret: ""
|
||||
|
||||
mode: rule
|
||||
log-level: info
|
||||
geodata-mode: false
|
||||
geo-auto-update: true
|
||||
geo-update-interval: 24
|
||||
|
||||
proxy-providers:
|
||||
my-sub:
|
||||
type: http
|
||||
url: "https://你的机场订阅链接"
|
||||
path: ./subscriptions/my-sub.yaml
|
||||
interval: 86400
|
||||
health-check:
|
||||
enable: true
|
||||
url: "https://www.gstatic.com/generate_204"
|
||||
interval: 300
|
||||
|
||||
proxy-groups:
|
||||
- name: "自动选择"
|
||||
type: url-test
|
||||
include-all: true
|
||||
url: "http://www.gstatic.com/generate_204"
|
||||
interval: 300
|
||||
|
||||
rules:
|
||||
- MATCH,自动选择
|
||||
```
|
||||
|
||||
## 5. 启动与常用命令
|
||||
|
||||
```bash
|
||||
# 首次启动
|
||||
docker compose up -d
|
||||
|
||||
# 查看核心日志
|
||||
docker compose logs -f clash
|
||||
|
||||
# 重启核心
|
||||
docker compose restart clash
|
||||
|
||||
# 更新镜像并重启
|
||||
docker compose pull && docker compose up -d
|
||||
|
||||
# 停止+删除容器
|
||||
docker compose down
|
||||
```
|
||||
|
||||
## 6. 访问方式
|
||||
|
||||
- **Web 面板:** http://你的服务器IP(host模式默认80端口)
|
||||
- **连接后端:** http://127.0.0.1:9090
|
||||
- **代理端口:** HTTP/SOCKS5混合端口 7890
|
||||
|
||||
## 7. 常见问题
|
||||
|
||||
| 问题 | 解决方案 |
|
||||
|------|---------|
|
||||
| not a directory | Country.mmdb必须是文件,步骤2已解决 |
|
||||
| 面板连不上 | 确认external-controller是0.0.0.0:9090 |
|
||||
| TUN不工作 | 必须host模式 + /dev/net/tun挂载 |
|
||||
|
||||
## 8. 推荐资源
|
||||
|
||||
- mihomo仓库:https://github.com/MetaCubeX/mihomo
|
||||
- metacubexd面板:https://github.com/MetaCubeX/metacubexd
|
||||
- 官方文档:https://wiki.metacubex.one/
|
||||
|
||||
@@ -1,7 +1,86 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: MeNav 个人导航站生成器
|
||||
tags:
|
||||
- 开源
|
||||
- 导航站
|
||||
- 静态网站
|
||||
- GitHubPages
|
||||
- 书签管理
|
||||
created: 2026-04-21
|
||||
source: https://github.com/rbetree/menav
|
||||
stars: 256
|
||||
forks: 167
|
||||
language: JavaScript
|
||||
---
|
||||
|
||||
# MeNav
|
||||
|
||||
> 一键部署的个人导航站生成器,支持书签导入与自动构建
|
||||
|
||||
## 概述
|
||||
|
||||
轻量级、高度可定制的个人导航网站生成器,完全静态部署,无需数据库和后端服务。
|
||||
|
||||
### 核心功能
|
||||
|
||||
- 🔖 浏览器书签一键导入(HTML → YAML)
|
||||
- 🚀 GitHub Pages 一键部署(Fork + Actions)
|
||||
- 🔄 MarksVault 扩展集成,自动同步书签
|
||||
- 🎨 明亮 / 黑暗双主题,响应式布局
|
||||
- 🐳 Docker 部署支持
|
||||
- 📁 2-4 层多层级嵌套分类结构
|
||||
|
||||
**预览**: https://rbetree.github.io/menav/
|
||||
|
||||
## 技术栈
|
||||
|
||||
- HTML5 + CSS3 + JavaScript(原生)
|
||||
- Handlebars 模板引擎
|
||||
- Google Favicon API + Font Awesome 图标
|
||||
|
||||
## 安装使用
|
||||
|
||||
```bash
|
||||
git clone https://github.com/rbetree/menav.git
|
||||
cd menav
|
||||
npm install
|
||||
npm run dev # 本地预览
|
||||
npm run build # 构建静态文件
|
||||
```
|
||||
|
||||
## 书签导入
|
||||
|
||||
```bash
|
||||
npm run import-bookmarks
|
||||
# 放入 HTML 格式书签 → 自动转换为 config/user/pages/bookmarks.yml
|
||||
```
|
||||
|
||||
## 部署方式
|
||||
|
||||
| 方式 | 说明 |
|
||||
|------|------|
|
||||
| **GitHub Pages(推荐)** | Fork → 启用 Actions → 提交配置 → 自动部署 |
|
||||
| **Vercel / Netlify / Cloudflare Pages** | Build: `npm run build` / Output: `dist/` |
|
||||
| **Docker** | `docker compose up -d` |
|
||||
| **自建服务器** | `npm run build` → 复制 `dist/` → nginx/Apache |
|
||||
|
||||
## 定时更新
|
||||
|
||||
- RSS 文章聚合自动刷新
|
||||
- GitHub Actions 默认每天 UTC 02:00 触发
|
||||
|
||||
## 评分
|
||||
|
||||
⭐⭐⭐⭐(4/5)
|
||||
|
||||
**优点**:
|
||||
- 零成本部署(GitHub Pages)
|
||||
- 书签导入 + 自动同步,工作流完整
|
||||
- 主题美观,响应式设计
|
||||
- 模块化配置,易于定制
|
||||
|
||||
**局限**:
|
||||
- 需要 GitHub 生态(书签同步依赖 Actions)
|
||||
- 书签导入格式有要求
|
||||
|
||||
**适合场景**:个人主页、浏览器起始页、书签整理
|
||||
|
||||
@@ -1,7 +1,242 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: Code Reviewer 代码审查专家技能
|
||||
tags:
|
||||
- AI-Skill
|
||||
- Code-Review
|
||||
- TDD
|
||||
- Java
|
||||
- Security
|
||||
created: 2026-04-12
|
||||
source: 用户分享的SKILL文件
|
||||
---
|
||||
|
||||
# Code Reviewer 代码审查专家
|
||||
|
||||
> 经验丰富的代码审查者,遵循业界最佳实践,提供专业的代码评估和改进建议。
|
||||
|
||||
## 审查重点
|
||||
|
||||
| 维度 | 内容 |
|
||||
| -------- | ---------------------- |
|
||||
| **代码质量** | 命名规范、代码复杂度、重复代码 |
|
||||
| **安全性** | SQL 注入风险、XSS 漏洞、认证授权问题 |
|
||||
| **性能** | 算法效率、资源使用、缓存策略 |
|
||||
| **可维护性** | 代码注释、模块化设计、测试覆盖 |
|
||||
|
||||
## 审查流程
|
||||
|
||||
1. 理解代码变更的目的
|
||||
2. 检查代码风格和规范
|
||||
3. 分析潜在的 Bug 和性能问题
|
||||
4. 验证安全性
|
||||
5. 提供建设性的改进建议
|
||||
|
||||
---
|
||||
|
||||
## 问题报告规范
|
||||
|
||||
每个问题必须包含以下**精确位置信息**:
|
||||
|
||||
| 字段 | 说明 | 示例 |
|
||||
|------|------|------|
|
||||
| 文件路径 | 相对于项目根目录的完整路径 | `com/example/UserServiceImpl.java` |
|
||||
| 行号范围 | 问题代码的起止行号 | `L45-L52` 或 `L45` |
|
||||
| 类名 | 问题所在的类名 | `UserServiceImpl` |
|
||||
| 方法名 | 问题所在的方法签名 | `getUserById(Long userId)` |
|
||||
| 代码片段 | 有问题的具体代码(前后各 2-3 行上下文) | 见示例 |
|
||||
|
||||
### 问题输出格式
|
||||
|
||||
```
|
||||
🔴 [严重] SQL注入风险
|
||||
📁 文件: com/example/UserServiceImpl.java
|
||||
📍 位置: L45-L48 | 类: UserServiceImpl | 方法: findByUsername(String)
|
||||
|
||||
🔗 代码上下文:
|
||||
44 | public User findByUsername(String username) {
|
||||
45 | String sql = "SELECT * FROM user WHERE username = '" + username + "'";
|
||||
46 | return jdbcTemplate.queryForObject(sql, userMapper);
|
||||
47 | }
|
||||
|
||||
💡 问题说明: 直接拼接用户输入到SQL语句中,存在SQL注入风险
|
||||
|
||||
✅ 修复建议:
|
||||
String sql = "SELECT * FROM user WHERE username = ?";
|
||||
return jdbcTemplate.queryForObject(sql, userMapper, username);
|
||||
```
|
||||
|
||||
### 严重程度分级
|
||||
|
||||
| 级别 | 含义 |
|
||||
|------|------|
|
||||
| 🔴 严重 | 需要立即修复的问题 |
|
||||
| 🟡 中等 | 建议修复的问题 |
|
||||
| 🟢 轻微 | 可选的改进建议 |
|
||||
|
||||
---
|
||||
|
||||
## 输出格式
|
||||
|
||||
### 文本报告
|
||||
|
||||
```
|
||||
✅ 优点:列出做得好的地方
|
||||
|
||||
⚠️ 问题:
|
||||
[级别] 问题标题
|
||||
📁 文件: 完整文件路径
|
||||
📍 位置: L行号 | 类: 类名 | 方法: 方法签名
|
||||
🔗 代码上下文: (带行号的代码片段)
|
||||
💡 问题说明: 详细描述
|
||||
✅ 修复建议: 具体的修复方案或示例代码
|
||||
|
||||
📊 总体评分:1-10 分
|
||||
```
|
||||
|
||||
### HTML 报告(自动生成)
|
||||
|
||||
当用户要求审查代码时,**自动生成 HTML 报告**:
|
||||
|
||||
- 文件名格式:`code-review-report-{timestamp}.html`
|
||||
- 保存到工作区根目录
|
||||
- 包含评分圆环、四维评分卡片、问题详情卡片
|
||||
- 代码上下文:IDE 风格行号 + 问题行高亮
|
||||
|
||||
---
|
||||
|
||||
## 典型问题示例
|
||||
|
||||
### 1. SQL 注入(🔴 严重)
|
||||
|
||||
```
|
||||
📁 文件: UserServiceImpl.java
|
||||
📍 位置: L45-L48 | 类: UserServiceImpl | 方法: findByUsername(String)
|
||||
|
||||
🔗 代码上下文:
|
||||
→ 45 | String sql = "SELECT * FROM sys_user WHERE user_name = '" + username + "'";
|
||||
→ 46 | return jdbcTemplate.queryForObject(sql, userMapper);
|
||||
|
||||
✅ 修复建议: 使用参数化查询
|
||||
String sql = "SELECT * FROM sys_user WHERE user_name = ?";
|
||||
return jdbcTemplate.queryForObject(sql, userMapper, username);
|
||||
```
|
||||
|
||||
### 2. 循环内重复查询(🟡 中等)
|
||||
|
||||
```
|
||||
📍 位置: L112-L118 | 类: TaskServiceImpl | 方法: batchProcess(List<Task>)
|
||||
|
||||
🔗 代码上下文:
|
||||
110 | public void batchProcess(List<Task> tasks) {
|
||||
111 | for (Task task : tasks) {
|
||||
→ 112 | Device device = deviceMapper.selectById(task.getDeviceId());
|
||||
→ 113 | task.setDeviceName(device.getName());
|
||||
114 | taskMapper.updateById(task);
|
||||
115 | }
|
||||
116 | }
|
||||
|
||||
✅ 修复建议: 批量查询 + Map 缓存
|
||||
Set<Long> deviceIds = tasks.stream().map(Task::getDeviceId).collect(toSet());
|
||||
Map<Long, Device> deviceMap = deviceMapper.selectBatchIds(deviceIds)
|
||||
.stream().collect(toMap(Device::getId, d -> d));
|
||||
tasks.forEach(task -> task.setDeviceName(deviceMap.get(task.getDeviceId()).getName()));
|
||||
```
|
||||
|
||||
### 3. 资源泄漏(🔴 严重)
|
||||
|
||||
```
|
||||
📍 位置: L56-L62 | 类: DataHandler | 方法: processData(Connection)
|
||||
|
||||
🔗 代码上下文:
|
||||
→ 56 | Statement stmt = conn.createStatement();
|
||||
→ 57 | ResultSet rs = stmt.executeQuery("SELECT * FROM data");
|
||||
58 | // 处理数据...
|
||||
59 | } catch (SQLException e) {
|
||||
60 | log.error("处理失败", e);
|
||||
61 | }
|
||||
|
||||
✅ 修复建议: 使用 try-with-resources
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT * FROM data")) {
|
||||
// 处理数据...
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 空指针风险(🟡 中等)
|
||||
|
||||
```
|
||||
📍 位置: L89-L92 | 类: DeviceServiceImpl | 方法: getDeviceStatus(Long)
|
||||
|
||||
🔗 代码上下文:
|
||||
→ 89 | return device.getStatus().getName();
|
||||
|
||||
✅ 修复建议:
|
||||
Device device = deviceMapper.selectById(deviceId);
|
||||
if (device == null) throw new ServiceException("设备不存在: " + deviceId);
|
||||
return Optional.ofNullable(device.getStatus()).map(Status::getName).orElse("未知状态");
|
||||
```
|
||||
|
||||
### 5. 命名不规范(🟢 轻微)
|
||||
|
||||
```
|
||||
📍 位置: L79 | 类: UserServiceImpl | 方法: f(UserQuery)
|
||||
|
||||
🔗 代码上下文:
|
||||
→ 79 | public List<User> f(UserQuery query) {
|
||||
|
||||
✅ 修复建议: 重命名为 selectUserList 或 queryUserList
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 评分标准
|
||||
|
||||
### 总体评分(1-10 分)
|
||||
|
||||
| 分数 | 评价 |
|
||||
|------|------|
|
||||
| 9-10 | 优秀,代码质量高,几乎没有问题 |
|
||||
| 7-8 | 良好,有少量改进空间 |
|
||||
| 5-6 | 中等,存在一些需要修复的问题 |
|
||||
| 3-4 | 较差,有较多问题需要解决 |
|
||||
| 1-2 | 很差,存在严重问题 |
|
||||
|
||||
---
|
||||
|
||||
## 使用方法
|
||||
|
||||
当用户说"审查代码"或"review 这个文件"时:
|
||||
|
||||
1. 仔细分析代码,记录每个问题的精确位置
|
||||
2. 使用 Read/Grep 工具确认代码位置和上下文
|
||||
3. 识别问题和优点,为每个问题收集:文件路径、行号范围、类名、方法签名、代码片段
|
||||
4. 生成详细的 HTML 报告
|
||||
5. 告知用户报告已生成并可以查看
|
||||
|
||||
---
|
||||
|
||||
## 代码位置识别指南
|
||||
|
||||
### 行号标注规范
|
||||
|
||||
| 类型 | 格式 | 示例 |
|
||||
|------|------|------|
|
||||
| 单行问题 | `L45` | `L45` |
|
||||
| 连续多行 | `L45-L52` | `L45-L52` |
|
||||
| 不连续多行 | `L45, L48, L52` | `L45, L48, L52` |
|
||||
|
||||
### 代码上下文格式
|
||||
|
||||
```
|
||||
行号 | 代码内容
|
||||
-----|----------------------------------------
|
||||
43 | @Override
|
||||
44 | public User getUserById(Long userId) {
|
||||
→ 45 | String sql = "SELECT * FROM user WHERE id = " + userId;
|
||||
46 | return jdbcTemplate.queryForObject(sql, userMapper);
|
||||
47 | }
|
||||
```
|
||||
|
||||
- 使用 `→` 标记问题行
|
||||
- 保留前后 2-3 行上下文
|
||||
- 行号右对齐,保持整齐
|
||||
|
||||
@@ -1,7 +1,114 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL was not found on this server.</p>
|
||||
</body></html>
|
||||
---
|
||||
title: fireworks-tech-graph 技术图生成工具
|
||||
tags:
|
||||
- AI工具
|
||||
- 技术图
|
||||
- SVG
|
||||
- ClaudeCode-Skill
|
||||
- 开源
|
||||
created: 2026-04-21
|
||||
source: https://github.com/yizhiyanhua-ai/fireworks-tech-graph
|
||||
stars: 3862
|
||||
forks: 338
|
||||
language: Python
|
||||
---
|
||||
|
||||
# fireworks-tech-graph
|
||||
|
||||
> 不用手画图了。用中文描述你的系统,几秒钟得到可直接发布的 **SVG + PNG** 技术图。
|
||||
|
||||
## 概述
|
||||
|
||||
将自然语言描述转化为精美的 SVG 技术图,并通过 `rsvg-convert` 导出高分辨率 PNG。内置 **7 种视觉风格**,深度覆盖 AI/Agent 领域常见图类型,并完整支持全部 14 种 UML 图类型。
|
||||
|
||||
## 7 种视觉风格
|
||||
|
||||
| # | 名称 | 背景色 | 字体 | 适用场景 |
|
||||
|---|------|--------|------|----------|
|
||||
| 1 | 扁平图标风(默认) | `#ffffff` | Helvetica | 博客、幻灯片、技术文档 |
|
||||
| 2 | 暗黑极客风 | `#0f0f1a` | SF Mono / Fira Code | GitHub README、开发者文章 |
|
||||
| 3 | 工程蓝图风 | `#0a1628` | Courier New | 架构设计文档、工程规范 |
|
||||
| 4 | Notion 极简风 | `#ffffff` | system-ui | Notion、Confluence、内部 Wiki |
|
||||
| 5 | 玻璃态卡片风 | `#0d1117` 渐变 | Inter | 产品官网、演讲 Keynote |
|
||||
| 6 | Claude 官方风格 | `#f8f6f3` | system-ui | Anthropic 风格图表 |
|
||||
| 7 | OpenAI 官方风格 | `#ffffff` | system-ui | OpenAI 风格图表 |
|
||||
|
||||
## 支持的图类型
|
||||
|
||||
### AI/Agent 领域(内置 Pattern)
|
||||
|
||||
| 类型 | 流程 |
|
||||
|------|------|
|
||||
| RAG Pipeline | Query → Embed → VectorSearch → Retrieve → LLM → Response |
|
||||
| Agentic RAG | RAG + Agent 循环 + 工具调用 |
|
||||
| Agentic Search | Query → Planner → [Search/Calc/Code] → Synthesizer |
|
||||
| Mem0 记忆层 | Input → Memory Manager → [VectorDB + GraphDB] → Context |
|
||||
| Multi-Agent | Orchestrator → [SubAgent×N] → Aggregator → Output |
|
||||
| Tool Call 流程 | LLM → Tool Selector → Execution → Parser → LLM(循环) |
|
||||
|
||||
### UML 支持(14 种)
|
||||
|
||||
类图、组件图、部署图、包图、复合结构图、对象图、用例图、活动图、状态机图、序列图、通信图、时序图、交互概览图、ER 图
|
||||
|
||||
## 形状词汇表
|
||||
|
||||
| 概念 | 形状 |
|
||||
|------|------|
|
||||
| 用户 / 人类 | 圆形 + 身体路径 |
|
||||
| LLM / 模型 | 圆角矩形,双边框,⚡ |
|
||||
| Agent / 编排器 | 六边形 |
|
||||
| 短期记忆 | 虚线边框圆角矩形 |
|
||||
| 长期记忆 | 实线圆柱体 |
|
||||
| Vector Store | 带内环圆柱 |
|
||||
| Graph DB | 三圆簇 |
|
||||
| 工具 / 函数 | 带 ⚙ 的矩形 |
|
||||
| API / 网关 | 六边形(单边框) |
|
||||
| 消息队列 / 流 | 横向管道 |
|
||||
| 决策节点 | 菱形 |
|
||||
|
||||
## 箭头语义
|
||||
|
||||
| 流类型 | 样式 | 含义 |
|
||||
|--------|------|------|
|
||||
| 主数据流 | 2px 实线 | 主要请求/响应路径 |
|
||||
| 控制 / 触发 | 1.5px 实线 | 系统 A 触发 B |
|
||||
| 记忆读取 | 1.5px 实线 | 从存储检索 |
|
||||
| 记忆写入 | 1.5px 虚线 `5,3` | 写入/存储操作 |
|
||||
| 异步 / 事件 | 1.5px 虚线 `4,2` | 非阻塞 |
|
||||
| 反馈 / 循环 | 1.5px 曲线 | 迭代推理 |
|
||||
|
||||
## 安装
|
||||
|
||||
```bash
|
||||
npx skills add yizhiyanhua-ai/fireworks-tech-graph
|
||||
|
||||
# 依赖
|
||||
brew install librsvg # macOS
|
||||
sudo apt install librsvg2-bin # Ubuntu/Debian
|
||||
```
|
||||
|
||||
## 使用方式
|
||||
|
||||
触发词:`画图 / 帮我画 / 生成图 / 做个图 / 架构图 / 流程图`
|
||||
|
||||
```text
|
||||
画一张 RAG 流程图
|
||||
生成一张 Agentic Search 架构图
|
||||
画一张微服务架构图,风格2(暗黑极客风)
|
||||
```
|
||||
|
||||
## 评分
|
||||
|
||||
⭐⭐⭐⭐⭐(5/5)
|
||||
|
||||
**优点**:
|
||||
- 7 种风格覆盖所有场景
|
||||
- 内置 AI/Agent 领域知识,开箱即用
|
||||
- 语义形状 + 箭头系统,图示专业
|
||||
- 中文支持友好
|
||||
|
||||
**局限**:
|
||||
- 需要 Claude Code 或兼容 Skill 运行时
|
||||
- 依赖 rsvg-convert 工具
|
||||
|
||||
**适合场景**:技术博客配图、架构文档、PPT 素材、GitHub README
|
||||
|
||||
Reference in New Issue
Block a user