Skip to content

RAG 符号感知功能实现总结

版本: v0.2.8 日期: 2026-01-11 功能: AI 代码理解能力提升


📋 功能概述

RAG (Retrieval-Augmented Generation) 符号感知功能让 AI 能够真正"理解"代码结构,而非简单的文本匹配。通过分析代码的语法结构和符号关系,AI 可以:

  • 识别 Trait/接口实现类 - 知道哪些类实现了特定的 Trait
  • 分析依赖关系 - 理解模块之间的依赖和影响范围
  • 区分真实代码和注释 - 不会把注释中的示例代码当作真实实现

🎯 核心价值

1. 质的飞跃

维度传统 AI 助手RAG 符号感知
代码理解文本匹配符号关系分析
准确性容易被注释误导区分真实实现
上下文单文件理解跨文件依赖分析
实用性通用建议精准代码修改建议

2. 应用场景

rust
// 用户提问:"这个 Trait 有哪些具体实现?"

// 传统 AI 回答:
"根据代码中的注释,可能有以下类似的实现:
- ErrorHandler(未实现 Handler)
- LoggingHandler(未实现 Handler)
..."

// RAG 符号感知 AI 回答:
"Repository trait 有以下实现类:
- /test_project/src/user_repository.rs: UserRepository
- /test_project/src/post_repository.rs: PostRepository
- /test_project/src/comment_repository.rs: CommentRepository"

🔧 技术实现

架构设计

┌─────────────────────────────────────────────────────────┐
│                     用户提问                              │
│           "修改 RagService 会影响哪些模块?"              │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│                  RAG 检索系统                             │
│  ┌──────────────────────────────────────────────────┐  │
│  │ 1. 代码符号索引 (AST分析)                         │  │
│  │    - Trait 定义                                    │  │
│  │    - 实现类 (impl Trait for Class)                │  │
│  │    - 依赖关系 (use/import statements)             │  │
│  └──────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────┐  │
│  │ 2. 语义搜索 (向量检索)                           │  │
│  │    - 查找相关代码片段                              │  │
│  │    - 提取函数/类定义                              │  │
│  └──────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│               AI 增强生成 (LLM)                          │
│  问题 + 检索到的代码上下文 → 精准回答                    │
└─────────────────────────────────────────────────────────┘

E2E 测试覆盖

typescript
// tests/e2e/rag-symbol-aware.spec.ts

test('RAG-003: AI 理解 Trait 实现关系', async () => {
  // 准备测试代码库
  mockFS.set('/test_project/src/repository.rs', 'pub trait Repository { ... }');
  mockFS.set('/test_project/src/user_repository.rs', 'impl Repository for UserRepository { ... }');
  // ...

  // 验证 AI 能识别所有实现类
  expect(aiResponse).toContain('user_repository.rs');
  expect(aiResponse).toContain('post_repository.rs');
});

test('RAG-004: AI 分析依赖关系', async () => {
  // 创建 RagService 及其依赖模块
  mockFS.set('/test_project/src/services/rag_service.rs', 'pub trait RagService { ... }');
  mockFS.set('/test_project/src/services/chat_service.rs', 'pub struct ChatService { rag: Arc<dyn RagService> }');
  // ...

  // 验证 AI 能分析依赖关系
  expect(aiResponse).toContain('ChatService');
  expect(aiResponse).toContain('QueryCommand');
});

test('RAG-003-Bonus: AI 区分真实实现和注释文本', async () => {
  // 包含误导性注释的文件
  mockFS.set('/test_project/src/handlers.rs', `
    // 注意:ErrorHandler 未实现 Handler
    // LoggingHandler 未实现 Handler
  `);

  // 验证 AI 不会被注释误导
  expect(aiResponse).not.toContain('ErrorHandler');
});

🚀 性能指标

E2E 测试结果

✓ RAG-003: AI 理解 Trait 实现关系 (18.2s)
✓ RAG-004: AI 分析依赖关系 (19.4s)
✓ RAG-003-Bonus: AI 区分真实实现和注释文本 (17.9s)

3 passed (22.3s)

关键改进

问题修复影响
eventId 参数不匹配args?.eventId || args?.event_id事件监听器正确接收
baseUrl 格式错误自动补全 /chat/completionsAPI 调用成功
payload 格式不匹配{ type: 'content', content }消息正确显示
invoke 异步处理返回 Promise 等待响应流式传输正常
消息获取方式错误从 chatStore 获取而非 DOM可靠获取响应

📊 技术栈

前端

  • Playwright: E2E 测试框架
  • Zustand: 状态管理 (chatStore, settingsStore)
  • React: UI 组件

Mock 系统

  • tauri-mocks: Tauri API mock 实现
  • 真实 AI 集成: 支持 Kimi (Moonshot AI) API

后端 (商业版 ifainew-core)

  • Rust: AST 分析和符号索引
  • 向量检索: 语义搜索
  • LLM 集成: AI 响应生成

🔜 未来规划

短期 (v0.2.9)

  • [ ] 支持更多编程语言 (Python, Java, Go)
  • [ ] 优化检索准确率
  • [ ] 添加代码变更影响分析

中期 (v0.3.0)

  • [ ] 实时代码索引更新
  • [ ] 跨仓库依赖分析
  • [ ] 代码重构建议

长期 (v0.4.0)

  • [ ] 自适应学习用户偏好
  • [ ] 多模态代码理解 (图表 + 代码)
  • [ ] 协作式代码审查

📝 相关文档

  • 测试文件: tests/e2e/rag-symbol-aware.spec.ts
  • Mock 配置: tests/e2e/setup-utils.ts
  • Tauri Mocks: src/tauri-mocks/api/core.ts

🎉 总结

RAG 符号感知功能的实现标志着 ifai 从"代码助手"向"代码理解专家"的转变。通过结合:

  1. 精准的符号分析 - 理解代码结构
  2. 语义检索能力 - 找到相关上下文
  3. AI 增强生成 - 提供专业建议

ifai 能够为开发者提供更准确、更有价值的代码分析和修改建议,真正成为开发者的智能伙伴。


本文档由 AI 自动生成,记录 RAG 符号感知功能的实现过程和技术细节。

基于 MIT 许可发布