Files
agent/.agent/NO_API_HALLUCINATION_UPDATE.md
2026-02-16 12:46:37 +08:00

405 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 禁止 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
**强制执行**: 是