Files
agent/.agent/NO_API_HALLUCINATION_UPDATE.md

405 lines
9.1 KiB
Markdown
Raw Normal View History

2026-02-16 12:46:37 +08:00
# 禁止 API 幻觉规则更新总结
## 📋 更新概览
为所有开发类 Agent 添加了**禁止 API 幻觉、强制使用 Context7 查询文档**的关键规则,防止使用过时或不存在的 API。
**更新时间**: 2026-02-14
**规则级别**: ⚠️ **CRITICAL关键**
**影响 Agent**: Frontend Expert, Umi Pro
---
## ✅ 已更新的配置文件
### OpenCode Agent 配置
| 文件 | 状态 | 更新内容 |
| --- | --- | --- |
| `.opencode/agents/frontend.md` | ✅ 已更新 | 添加"禁止 API 幻觉"强制规则 |
| `.opencode/agents/umi-pro.md` | ✅ 已更新 | 扩展 Context7 部分为强制查询规则 |
### Antigravity Agent 配置(建议同步)
| 文件 | 状态 | 建议操作 |
| ---------------------------------------- | ----------- | ------------------ |
| `.agent/frontend_expert_agent_prompt.md` | 🔄 建议更新 | 添加相同规则 |
| `.agent/umi_pro_agent_prompt.md` | 🔄 建议更新 | 扩展 Context7 规则 |
---
## 🎯 核心规则内容
### 禁止行为 ❌
**绝对禁止**凭记忆或猜测组件框架的 API/Props 定义
- ❌ 凭记忆假设某个 prop 存在
- ❌ 使用未经验证的 API
- ❌ 基于"我记得好像有这个 API"的实现
### 强制要求 ✅
-**必须使用 Context7** 查询官方文档
- ✅ 实现前先调用 `mcp_context7_query-docs`
- ✅ 根据查询结果使用**确切的** props 和方法
- ✅ 验证 API 的存在性和正确用法
---
## 📊 适用范围
### 组件库
- **ProComponents**: `ProTable`, `ProForm`, `QueryFilter`, `ModalForm`
- **Ant Design**: 所有 antd 组件
- **Custom Components**: 任何项目特定组件
### Framework API
- **UmiJS**: `useRequest`, `useModel`, `access`, `useIntl`
- **React**: Hooks, Context 等
- **第三方库**: 任何外部依赖
---
## 🔍 错误模式示例
### 示例 1: ProTable API 幻觉
```tsx
// ❌ 错误:凭记忆猜测 API
<ProTable
onLoad={() => {}} // 实际不存在,应该是 request
data={data} // 实际不存在,数据通过 request 获取
loading={loading} // request 自动处理 loading
/>
```
### 示例 2: QueryFilter Props 幻觉
```tsx
// ❌ 错误:猜测 props
<QueryFilter
onSearch={handleSearch} // 实际应该是 onFinish
fields={searchFields} // 不是通过 props 传递
resetable={true} // 拼写错误,应该是 resetButtonProps
/>
```
### 示例 3: useRequest Options 幻觉
```tsx
// ❌ 错误:猜测 options
const { data } = useRequest(fetchData, {
auto: true, // 实际应该是 ready
cache: true, // 不是这个 prop
onError: () => {}, // 正确
});
```
---
## ✅ 正确模式示例
### 示例 1: ProTable 正确用法
```tsx
// ✅ 正确:查询 Context7 后使用
// Query: "ProTable API props request columns"
// Result: 使用 request propcolumns 定义列
<ProTable
columns={columns}
request={async (params) => {
const data = await fetchList(params);
return {
data: data.list,
success: true,
total: data.total,
};
}}
/>
```
### 示例 2: QueryFilter 正确用法
```tsx
// ✅ 正确:查询文档确认 API
// Query: "QueryFilter props onFinish layout"
// Result: 使用 onFinish 和 layout props
<QueryFilter
layout="vertical"
onFinish={(values) => {
console.log('Search values:', values);
}}
onReset={() => {
console.log('Reset');
}}
>
<ProFormText name="name" label="名称" />
<ProFormSelect name="status" label="状态" />
</QueryFilter>
```
### 示例 3: useRequest 正确用法
```tsx
// ✅ 正确:查询确认 options
// Query: "useRequest options manual ready onSuccess"
// Result: 确认可用的 options
const { data, loading, run } = useRequest(fetchData, {
manual: true, // 确认存在
ready: !!userId, // 确认存在 (不是 auto)
onSuccess: (data) => {
message.success('Success');
},
});
```
---
## 🔄 正确工作流程
### 步骤 1: 确定组件/API
```
需求:实现一个带搜索的商品列表页
组件ProTable + QueryFilter
```
### 步骤 2: 查询 Context7
```typescript
// 查询 ProTable API
(await mcp_context7_query) -
docs({
libraryId: '/ant-design/pro-components',
query: 'ProTable props request columns pagination',
});
// 查询 QueryFilter API
(await mcp_context7_query) -
docs({
libraryId: '/ant-design/pro-components',
query: 'QueryFilter onFinish layout props',
});
```
### 步骤 3: 阅读查询结果
```
ProTable 文档结果:
- request: (params) => Promise<{data, success, total}>
- columns: ColumnsType[]
- pagination: 分页配置
QueryFilter 文档结果:
- onFinish: (values) => void
- layout: 'horizontal' | 'vertical' | 'inline'
- onReset: () => void
```
### 步骤 4: 使用确切 API 实现
```tsx
<QueryFilter
layout="vertical"
onFinish={(values) => setSearchParams(values)}
>
{/* 搜索字段 */}
</QueryFilter>
<ProTable
columns={columns}
request={async (params) => {
const res = await fetchProducts({...params, ...searchParams});
return {
data: res.list,
success: true,
total: res.total,
};
}}
/>
```
---
## 📝 Context7 查询技巧
### 查询模式
```typescript
// 模式 1: 查询特定组件 API
mcp_context7_query -
docs({
libraryId: '/ant-design/pro-components',
query: '[组件名] API props [关注的 prop]',
});
// 模式 2: 查询使用示例
mcp_context7_query -
docs({
libraryId: '/ant-design/pro-components',
query: '[组件名] example usage [场景]',
});
// 模式 3: 查询特定功能
mcp_context7_query -
docs({
libraryId: '/umijs/umi',
query: '[Hook/API 名] options configuration',
});
```
### 常用 Library ID
| 框架/库 | Library ID |
| ------------- | ---------------------------- |
| ProComponents | `/ant-design/pro-components` |
| Ant Design | `/ant-design/ant-design` |
| UmiJS | `/umijs/umi` |
| React | `/facebook/react` |
| Axios | `/axios/axios` |
---
## ⚠️ 常见陷阱
### 陷阱 1: 混淆相似 API
```tsx
// ❌ 容易混淆
<ProTable onLoad={...} /> // 不存在
<ProTable request={...} /> // ✅ 正确
<QueryFilter onSearch={...} /> // 不存在
<QueryFilter onFinish={...} /> // ✅ 正确
```
### 陷阱 2: TypeScript 类型推断错误
```tsx
// ❌ 假设类型
const { data } = useRequest<ProductList>(fetch); // 假设返回类型
// ✅ 查询文档确认
// 文档useRequest 返回 {data, loading, error, run, ...}
const { data, loading, error } = useRequest(fetch);
```
### 陷阱 3: 版本差异
```tsx
// ❌ 使用旧版本 API可能已废弃
<Modal visible={show} /> // Ant Design 4
<Modal open={show} /> // ✅ Ant Design 5
// 必须通过 Context7 查询当前版本的 API
```
---
## 🎓 执行建议
### 对开发 Agent
1. **实施前必查**:任何组件使用前都查询文档
2. **不确定即查询**:即使"记得"API也要验证
3. **记录查询结果**:在代码注释中说明 API 来源
### 对 Code Reviewer
1. **检查查询记录**:验证是否查询过文档
2. **验证 API 正确性**:对照文档检查 props
3. **标记可疑用法**:发现未经验证的 API 使用
### 对 QA Tester
1. **关注运行时错误**props 不匹配会导致警告
2. **检查 Console**:查看 React/Ant Design 警告
3. **报告 API 问题**:发现后反馈给开发 Agent
---
## 📚 配置文件具体变更
### Frontend Expert (`frontend.md`)
**位置**: 核心指令 - 第 3 条
**添加内容**:
```markdown
### 3. ⚠️ 禁止 API 幻觉(强制规则)
**CRITICAL**: 使用组件框架时,**绝对禁止**凭记忆或猜测 API/Props 定义
#### 强制要求
-**必须使用 Context7** 查询官方文档
- ✅ 实现前先调用 `mcp_context7_query-docs` 查询组件 API
- ✅ 根据查询结果使用**确切的** props 和方法
- ❌ **绝对禁止**凭记忆假设某个 prop 存在
- ❌ **绝对禁止**使用未经验证的 API
```
### Umi Pro (`umi-pro.md`)
**位置**: 核心理念 - 第 7 条
**更新内容**:
```markdown
### 7. ⚠️ 禁止 API 幻觉 - Context7 强制查询(关键规则)
**CRITICAL**: 使用组件框架时,**绝对禁止**凭记忆或猜测 API/Props 定义
[包含完整的强制要求、适用范围、查询示例等]
```
---
## ✅ 预期效果
### 减少的问题
1. ❌ Props 不匹配导致的 React 警告
2. ❌ 使用不存在的 API 导致的运行时错误
3. ❌ 因版本差异导致的功能失效
4. ❌ TypeScript 类型错误
### 提升的质量
1. ✅ 代码更符合官方最佳实践
2. ✅ API 使用正确且最新
3. ✅ 减少调试时间
4. ✅ 提高代码可维护性
---
## 📊 影响统计
### 适用场景覆盖率
- **ProComponents 使用**: 100%
- **Ant Design 组件**: 100%
- **UmiJS API**: 100%
- **React Hooks**: 100%
- **第三方库**: 100%
### 强制执行级别
- **Frontend Expert**: CRITICAL
- **Umi Pro**: CRITICAL
- **Planning**: 建议(规划阶段提醒)
- **Code Spec**: 必须检查(审查时验证)
---
**更新完成时间**: 2026-02-14
**规则重要性**: ⚠️ CRITICAL
**强制执行**: 是