五、探索 Trae 技术 实现:codebase 与 build 模式深度融合

五、探索 Trae 技术 实现:codebase 与 build 模式深度融合

构建 build 模式专属的 prompt 模板

prompt 模板的设计原则

prompt 是构建 RAG 系统的关键,它直接影响着检索和生成的准确性。以下是一些设计原则:

  1. 精准定位与清晰指引:提供详尽上下文,涵盖问题域、代码库特征等要素,借助"@引用"精准指向特定文件或函数;将问题按逻辑拆解为明确步骤,引导LLM按序实现功能,确保与现有架构无缝衔接。
  2. 适配模型与具体参照:依任务选合适LLM,考量上下文窗口、领域知识等因素;参照现有模式时精准具体,明确方法论、设计模式及性能与可读性的侧重。
  3. 优化生成与多元评估:遇问题重生成而非修复,获新视角并规避错误逻辑传播;让LLM生成多策略并对比分析,权衡时间、空间等因素以优化方案。
  4. 审查机制与角色赋予:建立自我审查机制,让LLM检查代码的正确性、效率等方面;赋予LLM符合任务的技术角色,使其生成代码时聚焦关键因素。
  5. 明确约束与考量周全:清晰界定语言、框架、库的版本及依赖等约束,保障与目标环境兼容;全面考量边缘情况和约束条件,使生成代码具备完善的验证、处理和优化机制 。

prompt 模板的设计示例

以下是一个简单的 prompt 模板示例,用于代码查询:

markdown 复制代码
# 请为我生成一个后端项目 Codebase,具体要求如下:

- **技术栈**:Node.js(版本 ≥18)、Express 框架、Axios 库、dotenv 进行环境变量管理。
- **功能描述**:
- 搭建一个 Express 服务。
- 暴露一个 `POST /chat` API 接口,接收用户消息(`message`)和可选的 `sessionId`。
- 使用 Axios 调用一个 LLM 服务(如 OpenAI API),将用户输入转发到 LLM,并将 LLM 回复返回给客户端。
- 支持基础的上下文管理(可以基于 sessionId 简单缓存上下文,例如保留最近几条对话,内存存储即可,不用持久化)。
- **项目结构**:
- `src/routes/` --- 路由定义(如 chat.js)
- `src/services/` --- 与 LLM 通信的服务层(如 llmService.js)
- `src/middlewares/` --- 错误处理、中间件(如 errorHandler.js)
- `src/utils/` --- 辅助功能模块(如 sessionManager.js)
- `src/app.js` --- Express 应用初始化
- `src/server.js` --- 启动服务器
- `.env` 示例文件 --- 包含必要的环境变量(如 LLM_API_KEY)
- `README.md` --- 简单介绍如何运行项目
- **开发要求**:
- 使用 JavaScript(非 TypeScript)。
- 代码风格规范,适当添加注释。
- 必须包含统一的错误处理机制。
- 采用模块化编程,避免将所有逻辑堆叠在一个文件中。
- 代码应当开箱即用,包含必要的依赖(如 package.json 文件定义)。
- **加分项(可选,但鼓励实现)**:
- 支持流式响应(如 OpenAI `stream: true` 的返回)。
- 使用 CORS 中间件,允许跨域请求。
- 使用统一的日志系统(如 console 封装或 Winston 简易版)。
- 提供 Dockerfile 支持项目容器化。

## 重要规则:
    1、如果是执行命令,请使用 markdown 格式 输出,示例:
    ```shell
    具提执行的命令
    ```
    2、如果是修改文件,请使用 markdown 格式 输出,示例:
    ```editfile
    filename:具体的文件名称
    content:具体的文件内容
    ```

请根据以上要求生成完整项目文件结构和主要代码文件内容,确保项目可以直接 `npm install` 和 `npm start` 即可运行。

这个模板包含了用户的查询和代码库中的代码,模型可以根据这些信息生成相关的回答。

我们把上面的 prompt 模板复制到 trae 编辑器中,然后点击"生成"按钮,就可以生成一个后端项目 Codebase。

检索codebase

基于语义相似度的检索策略

  • 选择合适的向量数据库(如 LanceDB、Pinecone、Weaviate 等)
  • 对代码库进行分块,每个块作为一个向量存储
  • 使用向量数据库进行语义检索,找到与问题最相关的代码块
  • 返回检索结果,包含代码块的内容、文件名、行号等信息

基于语义相似度的检索策略的实现

javascript 复制代码
import * as lancedb from "@lancedb/lancedb";
import { cat } from "@xenova/transformers";
import * as arrow from "apache-arrow";
const databaseDir = "./lancedb"
// 连接数据库
const db = await lancedb.connect(databaseDir);
const tableName = "test";
// ========= 批量添加一批数据 =========//
const table = await db.openTable(tableName);
let data = [];
for (let idx = 0; idx < 255; idx++) {
    let item = {
      vector: [1.3 + idx, 1.4 + idx / 10],
      item: `fizz${idx}`,
      price: 100.0 + idx,
    };
    if (idx / 5 == 0) {
        item.item = `buzz${idx}`;
    }
  data = data.concat(item);
}
await table.add(data);

检索示例:

javascript 复制代码
let res = await table.search([100, 100]).limit(1).toArray();

相关文章

如果你喜欢Trae、LLM、RAG、代码库感兴趣请一键三连,谢谢。

相关推荐
袋鱼不重2 小时前
Cursor 最简易上手体验:谷歌浏览器插件开发3s搞定!
前端·后端·cursor
用户4099322502123 小时前
异步IO与Tortoise-ORM的数据库
后端·ai编程·trae
海拥3 小时前
《用Cursor和AI绘画24小时开发壁纸小程序》详细开发实录
微信小程序·cursor
沉默王贰5 小时前
使用Cursor 打造了一款记账APP
ai编程·cursor·trae
不客观说6 小时前
豆包MarsCode实现贪吃蛇
trae
编程指北6 小时前
字节 Trae 最新更新,支持 MCP 和智能体,最新一手实测!
前端·trae
优弧19 小时前
Trae 如何切换插件市场源
trae
创码小奇客20 小时前
MongoDB 事务:数据世界的守护者联盟全解析
spring boot·mongodb·trae
夕水21 小时前
这个提升效率宝藏级工具一定要收藏使用
前端·javascript·trae