2025年人工智能项目开发分步指南
这里提供一份详细的路线图,指导您如何使用Next.js、NestJS、OpenAI 和 MongoDB 向量搜索构建生成式 AI 应用。本指南涵盖了从嵌入公司文档、存储向量、检索数据到使用提示工程实现智能 AI 响应等所有内容。
🚀人工智能项目路线图
构建可用于生产环境的生成式人工智能应用程序的结构化端到端指南。
📌第一阶段:定义问题和系统设计
🎯目标:
- 明确问题陈述(例如,人工智能驱动的文档搜索、聊天机器人、摘要)。
- 选择人工智能任务(例如,文本生成、问答、摘要)。
- 定义用户输入(例如,文本查询、文档上传)。
- 确定输出格式(例如,纯文本、结构化响应)。
- 确定检索方法(例如,MongoDB 向量搜索、RAG)。
🛠科技学习:
- AI基础知识:生成式AI、RAG(检索增强生成)。
- 向量搜索:MongoDB Atlas 向量搜索。
- Next.js 和 NestJS:全栈开发。
📌第二阶段:数据收集与存储
🎯目标:
- 收集公司文档(例如,PDF、Word、CSV、JSON)。
- 高效地在MongoDB中存储文档。
- 生成并存储向量嵌入。
🔥步骤:
-
设置 MongoDB Atlas:
- 创建用于存储文档和嵌入的数据库。
- 启用矢量搜索。
-
安装依赖项:
npm install openai mongoose @nestjs/mongoose
- 将文档存储在 MongoDB 中:
const documentSchema = new mongoose.Schema({
content: String,
embedding: { type: Array, default: [] },
});
- 将文档转换为嵌入:
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function generateEmbedding(text: string) {
const response = await openai.embeddings.create({
input: text,
model: 'text-embedding-ada-002',
});
return response.data[0].embedding;
}
- 将向量存储在 MongoDB 中:
async function storeDocument(content: string) {
const embedding = await generateEmbedding(content);
await DocumentModel.create({ content, embedding });
}
🛠科技学习:
- MongoDB Atlas 向量搜索。
- OpenAI Embeddings API。
- NestJS 与 MongoDB 结合使用。
📌第三阶段:数据预处理
🎯目标:
- 清理和处理非结构化数据。
- 实现文档分块以获得更好的嵌入效果。
- 存储结构化元数据以便检索。
🔥步骤:
- 删除不必要的部分:
function cleanText(text: string): string {
return text.replace(/(Disclaimer|Footer|Further Support).*/g, '');
}
- 分块处理大型文档:
function chunkText(text: string, chunkSize = 500) {
return text.match(new RegExp(`.{1,${chunkSize}}`, 'g'));
}
🛠科技学习:
- 文本预处理(正则表达式、分块、停用词去除)。
- LangChain 用于文本分割。
📌第四阶段:模型训练与微调(可选)
🎯目标:
- 如有需要,可训练自定义的 OpenAI 模型。
- 针对特定行业术语优化回复。
🔥步骤:
- 准备训练数据(JSONL 格式):
{"messages": [{"role": "system", "content": "You are a financial assistant."}, {"role": "user", "content": "What is an ETF?"}, {"role": "assistant", "content": "An ETF is an exchange-traded fund."}]}
- 上传到 OpenAI 并进行训练:
openai api fine_tunes.create -t dataset.jsonl -m gpt-4
🛠科技学习:
- 微调 OpenAI 模型。
- 及时的工程响应,以获得更好的结果。
📌第五阶段:检索系统实施
🎯目标:
- 实现向量搜索以快速找到相关数据。
- 使用MongoDB 向量搜索来检索最佳匹配文档。
🔥步骤:
- 执行向量搜索查询:
async function searchDocuments(query: string) {
const queryEmbedding = await generateEmbedding(query);
return await DocumentModel.find({
$vectorSearch: {
queryVector: queryEmbedding,
path: 'embedding',
numCandidates: 10,
limit: 5,
},
});
}
- 获取数据并发送给 OpenAI 获取响应:
async function generateAIResponse(query: string) {
const relevantDocs = await searchDocuments(query);
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'system', content: 'Use the following documents to answer the user query:' },
...relevantDocs.map(doc => ({ role: 'user', content: doc.content })),
{ role: 'user', content: query },
],
});
return response.choices[0].message.content;
}
🛠科技学习:
- MongoDB 向量搜索查询。
- 检索增强生成(RAG)。
📌第六阶段:API 开发(NestJS)
🎯目标:
- 构建用于处理人工智能查询的REST API 。
- 公开用于查询 AI 生成响应的端点。
🔥步骤:
- 创建人工智能服务:
@Injectable()
export class AIService {
async processQuery(query: string) {
return await generateAIResponse(query);
}
}
- 创建控制器:
@Controller('ai')
export class AIController {
constructor(private readonly aiService: AIService) {}
@Post('query')
async handleQuery(@Body() data: { query: string }) {
return this.aiService.processQuery(data.query);
}
}
🛠科技学习:
- NestJS 控制器和服务。
- API开发最佳实践。
📌第七阶段:前端集成(Next.js)
🎯目标:
- 创建一个基于 Next.js 的用户界面,用于与人工智能交互。
- 向后端发送查询并显示结果。
🔥步骤:
- 来自 Next.js 的 API 调用:
async function fetchAIResponse(query: string) {
const res = await fetch('/api/ai-query', {
method: 'POST',
body: JSON.stringify({ query }),
});
return res.json();
}
- 创建 UI 组件:
export default function AIChat() {
const [query, setQuery] = useState('');
const [response, setResponse] = useState('');
async function handleSubmit() {
const data = await fetchAIResponse(query);
setResponse(data);
}
return (
<div>
<input type="text" value={query} onChange={e => setQuery(e.target.value)} />
<button onClick={handleSubmit}>Ask AI</button>
<p>{response}</p>
</div>
);
}
🛠科技学习:
- Next.js API 路由。
- React Hooks 和状态管理。
📌第八阶段:部署
- 在Vercel上部署Next.js。
- 在 AWS/GCP 上部署NestJS 。
- 使用MongoDB Atlas进行存储。
📌用户反馈与迭代(最终阶段)
用户反馈与迭代阶段对于根据实际使用情况改进您的AI应用至关重要。它能确保您的系统长期保持准确性、用户友好性和高效性。
🎯目标:
- 收集用户对人工智能响应的反馈。
- 分析人工智能的错误答案并提高准确率。
- 优化查询处理、检索和模型响应。
- 利用反馈循环实现持续改进。
🔥提升人工智能系统的步骤
第一步:收集用户反馈
鼓励用户对人工智能的回复进行评分或报告不准确之处。
✅前端实现(Next.js UI)
- 在人工智能回复中添加反馈按钮。
- 收集用户评分(例如,👍/👎,1-5 星)。
📌 示例(Next.js 反馈 UI):
export default function AIResponse({ response }) {
const [feedback, setFeedback] = useState(null);
async function sendFeedback(value) {
await fetch('/api/feedback', {
method: 'POST',
body: JSON.stringify({ response, feedback: value }),
});
setFeedback(value);
}
return (
<div>
<p>{response}</p>
<button onClick={() => sendFeedback('👍')}>👍</button>
<button onClick={() => sendFeedback('👎')}>👎</button>
</div>
);
}
步骤 2:将反馈存储在 MongoDB 中
在MongoDB中创建反馈集合。
📌 NestJS API 用于存储反馈:
@Controller('feedback')
export class FeedbackController {
@Post()
async saveFeedback(@Body() data: { response: string; feedback: string }) {
await FeedbackModel.create(data);
}
}
步骤三:分析错误的AI响应
定期审查负面反馈并对错误进行分类:
✅错误类型:
- 错误信息→ 改进检索模型。
- 无关结果→ 增强向量嵌入。
- 答案不明确→ 优化提示工程。
📌在 MongoDB 中查询 AI 性能数据:
async function getNegativeFeedback() {
return await FeedbackModel.find({ feedback: '👎' }).limit(100);
}
第四步:微调系统
根据分析结果,采用以下方法改进系统:
- 更好的快速工程
- 例如:为人工智能提示添加上下文。
const prompt = `
You are an AI assistant for a legal firm.
Use the following company documents to answer accurately:
${retrievedDocuments}
`;
- 改进文档分块
- 如果检索不准确,请调整数据块大小。
function chunkText(text: string, chunkSize = 300) {
return text.match(new RegExp(`.{1,${chunkSize}}`, 'g'));
}
- 重新训练或微调模型
- 如果 OpenAI 的响应质量较低,则训练一个自定义的微调模型。
第五步:持续监控与自动化改进
- 通过日志记录跟踪 AI 性能(例如,记录错误答案)。
- 使用指标(例如,跟踪用户点赞👍与点踩👎的频率)。
- A/B 测试提示(例如,比较不同的 AI 提示格式)。
- 安排模型更新(例如,每月重新训练嵌入)。
📌在 NestJS 中记录 AI 性能:
async function logAIResponse(query: string, response: string) {
await PerformanceModel.create({ query, response, timestamp: new Date() });
}
文章来源:https://dev.to/tak089/ai-project-development-step-by-step-to-learn-in-2025-1m0d