《60天AI学习计划启动 | Day 18: 实际应用场景 - AI 应用实战》
Day 18: 实际应用场景 - AI 应用实战
学习目标
核心学习内容
1. 典型应用场景
常见场景:
- 智能客服:自动回答用户问题
- 代码助手:代码生成、审查、优化
- 文档助手:文档生成、问答、总结
- 数据分析:数据查询、分析、可视化
- 内容生成:文章、文案、创意内容
2. 场景实现要点
关键要素:
- 领域知识注入
- 上下文管理
- 错误处理
- 用户体验优化
实践作业
作业1:实现智能客服系统
src/applications/customer-service.js:
import { ChatOpenAI } from '@langchain/openai';
import { ConversationSummaryMemory } from 'langchain/memory';
import { LLMChain } from 'langchain/chains';
import { PromptTemplate } from '@langchain/core/prompts';
import { logger } from '../utils/logger.js';
/**
* 智能客服系统
*/
export class CustomerService {
constructor() {
this.llm = new ChatOpenAI({
temperature: 0.7,
openAIApiKey: process.env.OPENAI_API_KEY
});
this.knowledgeBase = new Map();
this.initializeKnowledgeBase();
}
/**
* 初始化知识库
*/
initializeKnowledgeBase() {
// 常见问题库
this.knowledgeBase.set('退货', {
question: '如何退货?',
answer: '您可以在订单页面申请退货,我们会在24小时内处理。',
category: '订单'
});
this.knowledgeBase.set('退款', {
question: '退款多久到账?',
answer: '退款通常在3-5个工作日内到账。',
category: '订单'
});
this.knowledgeBase.set('物流', {
question: '如何查询物流?',
answer: '您可以在订单详情页查看物流信息。',
category: '物流'
});
}
/**
* 创建客服 Chain
*/
createServiceChain(sessionId) {
const memory = new ConversationSummaryMemory({
llm: this.llm,
returnMessages: true,
memoryKey: 'history'
});
const prompt = PromptTemplate.fromTemplate(
`你是一个专业的客服助手,友好、耐心、专业。
服务原则:
1. 礼貌用语,使用"您"
2. 准确回答,不确定时说明
3. 提供解决方案,不只是解释
4. 必要时转人工客服
知识库:
{knowledgeBase}
对话历史:
{history}
用户问题:{question}
请提供专业、友好的回答:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt,
memory: memory
});
return chain;
}
/**
* 处理客户问题
*/
async handleQuestion(sessionId, question) {
try {
// 1. 检索知识库
const knowledge = this.searchKnowledgeBase(question);
// 2. 创建 Chain
const chain = this.createServiceChain(sessionId);
// 3. 生成回答
const result = await chain.call({
question: question,
knowledgeBase: this.formatKnowledgeBase(knowledge)
});
// 4. 评估是否需要转人工
const needHuman = await this.evaluateNeedHuman(question, result.text);
return {
answer: result.text,
needHuman: needHuman,
knowledge: knowledge
};
} catch (error) {
logger.error('客服处理错误:', error);
return {
answer: '抱歉,我暂时无法回答,请稍后重试或联系人工客服。',
needHuman: true
};
}
}
/**
* 搜索知识库
*/
searchKnowledgeBase(question) {
const questionLower = question.toLowerCase();
const matched = [];
this.knowledgeBase.forEach((item, key) => {
if (questionLower.includes(key.toLowerCase()) ||
questionLower.includes(item.category.toLowerCase())) {
matched.push(item);
}
});
return matched;
}
/**
* 格式化知识库
*/
formatKnowledgeBase(knowledge) {
if (knowledge.length === 0) {
return '暂无相关知识';
}
return knowledge.map((item, index) =>
`${index + 1}. Q: ${item.question}\n A: ${item.answer}`
).join('\n\n');
}
/**
* 评估是否需要转人工
*/
async evaluateNeedHuman(question, answer) {
const prompt = `评估以下客服对话是否需要转人工:
问题:${question}
回答:${answer}
如果问题复杂、涉及敏感信息、或无法解决,需要转人工。
返回 JSON:{"needHuman": true/false, "reason": "原因"}
评估:`;
const response = await this.llm.invoke(prompt);
try {
const jsonMatch = response.content.match(/\{[\s\S]*\}/);
if (jsonMatch) {
const eval = JSON.parse(jsonMatch[0]);
return eval.needHuman || false;
}
} catch (e) {
// 默认不转人工
}
return false;
}
}
作业2:实现代码助手
src/applications/code-assistant.js:
import { ChatOpenAI } from '@langchain/openai';
import { LLMChain } from 'langchain/chains';
import { PromptTemplate } from '@langchain/core/prompts';
import { logger } from '../utils/logger.js';
/**
* 代码助手
*/
export class CodeAssistant {
constructor() {
this.llm = new ChatOpenAI({
temperature: 0.3, // 代码生成需要较低温度
openAIApiKey: process.env.OPENAI_API_KEY
});
}
/**
* 生成代码
*/
async generateCode(requirement, language = 'javascript') {
const prompt = PromptTemplate.fromTemplate(
`你是一个专业的{language}开发专家。
需求:{requirement}
请生成:
1. 完整的代码实现
2. 详细注释
3. 使用说明
4. 注意事项
代码:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
requirement: requirement,
language: language
});
return {
code: this.extractCode(result.text),
explanation: result.text
};
}
/**
* 审查代码
*/
async reviewCode(code, language = 'javascript') {
const prompt = PromptTemplate.fromTemplate(
`审查以下{language}代码:
\`\`\`{language}
{code}
\`\`\`
请提供:
1. 代码质量问题
2. 性能优化建议
3. 安全性问题
4. 最佳实践建议
审查结果:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
code: code,
language: language
});
return {
review: result.text,
issues: this.extractIssues(result.text)
};
}
/**
* 优化代码
*/
async optimizeCode(code, language = 'javascript', goal = '性能') {
const prompt = PromptTemplate.fromTemplate(
`优化以下{language}代码,目标:{goal}
原始代码:
\`\`\`{language}
{code}
\`\`\`
请提供:
1. 优化后的代码
2. 优化说明
3. 性能对比
优化结果:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
code: code,
language: language,
goal: goal
});
return {
optimizedCode: this.extractCode(result.text),
explanation: result.text
};
}
/**
* 解释代码
*/
async explainCode(code, language = 'javascript') {
const prompt = PromptTemplate.fromTemplate(
`详细解释以下{language}代码的功能和原理:
\`\`\`{language}
{code}
\`\`\`
请说明:
1. 代码功能
2. 关键逻辑
3. 技术要点
4. 应用场景
解释:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
code: code,
language: language
});
return result.text;
}
/**
* 生成测试用例
*/
async generateTests(code, language = 'javascript', framework = 'jest') {
const prompt = PromptTemplate.fromTemplate(
`为以下{language}代码生成{framework}测试用例:
\`\`\`{language}
{code}
\`\`\`
请生成:
1. 单元测试
2. 边界测试
3. 异常测试
测试代码:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
code: code,
language: language,
framework: framework
});
return {
tests: this.extractCode(result.text),
explanation: result.text
};
}
/**
* 提取代码
*/
extractCode(text) {
const codeMatch = text.match(/```[\w]*\n([\s\S]*?)```/);
if (codeMatch) {
return codeMatch[1].trim();
}
return text;
}
/**
* 提取问题
*/
extractIssues(text) {
const issues = [];
const lines = text.split('\n');
lines.forEach(line => {
if (line.match(/问题|Issue|Bug|错误/i)) {
issues.push(line.trim());
}
});
return issues;
}
}
作业3:实现文档助手
src/applications/document-assistant.js:
import { ChatOpenAI } from '@langchain/openai';
import { LLMChain } from 'langchain/chains';
import { PromptTemplate } from '@langchain/core/prompts';
import { ragService } from '../services/rag.js';
import { logger } from '../utils/logger.js';
/**
* 文档助手
*/
export class DocumentAssistant {
constructor() {
this.llm = new ChatOpenAI({
temperature: 0.7,
openAIApiKey: process.env.OPENAI_API_KEY
});
}
/**
* 生成文档
*/
async generateDocument(code, docType = 'api') {
const templates = {
api: `为以下代码生成 API 文档:
代码:
{code}
文档要求:
1. API 概述
2. 参数说明
3. 返回值说明
4. 使用示例
5. 错误处理
文档:`,
readme: `为以下项目生成 README:
代码:
{code}
README 要求:
1. 项目介绍
2. 功能特性
3. 安装使用
4. API 文档
5. 贡献指南
README:`,
comment: `为以下代码生成详细注释:
代码:
{code}
注释要求:
1. 函数说明
2. 参数说明
3. 返回值说明
4. 使用示例
注释:`
};
const template = templates[docType] || templates.api;
const prompt = PromptTemplate.fromTemplate(template);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({ code });
return result.text;
}
/**
* 文档问答(基于 RAG)
*/
async answerQuestion(question) {
return await ragService.answerQuestion(question);
}
/**
* 文档总结
*/
async summarizeDocument(content, maxLength = 500) {
const prompt = PromptTemplate.fromTemplate(
`总结以下文档内容,控制在{maxLength}字以内:
文档:
{content}
总结要求:
1. 核心要点
2. 关键信息
3. 重要结论
总结:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
content: content,
maxLength: maxLength
});
return result.text;
}
/**
* 文档翻译
*/
async translateDocument(content, targetLang = 'en') {
const prompt = PromptTemplate.fromTemplate(
`将以下内容翻译为{targetLang}:
内容:
{content}
翻译要求:
1. 准确翻译
2. 保持格式
3. 专业术语准确
翻译:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
content: content,
targetLang: targetLang
});
return result.text;
}
}
作业4:实现数据分析助手
src/applications/data-analyst.js:
import { ChatOpenAI } from '@langchain/openai';
import { LLMChain } from 'langchain/chains';
import { PromptTemplate } from '@langchain/core/prompts';
import { logger } from '../utils/logger.js';
/**
* 数据分析助手
*/
export class DataAnalyst {
constructor() {
this.llm = new ChatOpenAI({
temperature: 0.3, // 数据分析需要准确性
openAIApiKey: process.env.OPENAI_API_KEY
});
}
/**
* 分析数据
*/
async analyzeData(data, question) {
const prompt = PromptTemplate.fromTemplate(
`分析以下数据,回答:{question}
数据:
{data}
请提供:
1. 数据概览(总数、平均值等)
2. 趋势分析
3. 异常检测
4. 结论和建议
分析结果:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
data: this.formatData(data),
question: question
});
return {
analysis: result.text,
insights: this.extractInsights(result.text)
};
}
/**
* 生成 SQL 查询
*/
async generateSQL(requirement, schema) {
const prompt = PromptTemplate.fromTemplate(
`根据以下需求生成 SQL 查询:
需求:{requirement}
数据库结构:
{schema}
请生成:
1. SQL 查询语句
2. 查询说明
3. 预期结果
SQL:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
requirement: requirement,
schema: schema
});
return {
sql: this.extractSQL(result.text),
explanation: result.text
};
}
/**
* 数据可视化建议
*/
async suggestVisualization(data, question) {
const prompt = PromptTemplate.fromTemplate(
`为以下数据分析建议合适的可视化方案:
数据:
{data}
分析问题:{question}
请建议:
1. 图表类型(柱状图、折线图等)
2. 数据维度
3. 可视化要点
建议:`
);
const chain = new LLMChain({
llm: this.llm,
prompt: prompt
});
const result = await chain.call({
data: this.formatData(data),
question: question
});
return result.text;
}
/**
* 格式化数据
*/
formatData(data) {
if (Array.isArray(data)) {
if (data.length > 10) {
return JSON.stringify(data.slice(0, 10), null, 2) +
`\n... (共 ${data.length} 条记录)`;
}
return JSON.stringify(data, null, 2);
}
return JSON.stringify(data, null, 2);
}
/**
* 提取洞察
*/
extractInsights(text) {
const insights = [];
const lines = text.split('\n');
lines.forEach(line => {
if (line.match(/结论|建议|洞察|发现/i)) {
insights.push(line.trim());
}
});
return insights;
}
/**
* 提取 SQL
*/
extractSQL(text) {
const sqlMatch = text.match(/```sql\n([\s\S]*?)```/i) ||
text.match(/SELECT[\s\S]*?;/i);
if (sqlMatch) {
return sqlMatch[1] || sqlMatch[0];
}
return text;
}
}
作业5:创建应用 API
src/routes/applications.js:
import express from 'express';
import { CustomerService } from '../applications/customer-service.js';
import { CodeAssistant } from '../applications/code-assistant.js';
import { DocumentAssistant } from '../applications/document-assistant.js';
import { DataAnalyst } from '../applications/data-analyst.js';
import { logger } from '../utils/logger.js';
export const applicationsRouter = express.Router();
// 初始化应用
const customerService = new CustomerService();
const codeAssistant = new CodeAssistant();
const documentAssistant = new DocumentAssistant();
const dataAnalyst = new DataAnalyst();
// 智能客服
applicationsRouter.post('/customer-service/ask', async (req, res) => {
try {
const { question, sessionId } = req.body;
if (!question || !sessionId) {
return res.status(400).json({
success: false,
error: '问题和会话ID不能为空'
});
}
const result = await customerService.handleQuestion(sessionId, question);
res.json({
success: true,
data: result
});
} catch (error) {
logger.error('客服错误:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
// 代码生成
applicationsRouter.post('/code/generate', async (req, res) => {
try {
const { requirement, language } = req.body;
if (!requirement) {
return res.status(400).json({
success: false,
error: '需求不能为空'
});
}
const result = await codeAssistant.generateCode(
requirement,
language || 'javascript'
);
res.json({
success: true,
data: result
});
} catch (error) {
logger.error('代码生成错误:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
// 代码审查
applicationsRouter.post('/code/review', async (req, res) => {
try {
const { code, language } = req.body;
if (!code) {
return res.status(400).json({
success: false,
error: '代码不能为空'
});
}
const result = await codeAssistant.reviewCode(
code,
language || 'javascript'
);
res.json({
success: true,
data: result
});
} catch (error) {
logger.error('代码审查错误:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
// 文档生成
applicationsRouter.post('/document/generate', async (req, res) => {
try {
const { code, docType } = req.body;
if (!code) {
return res.status(400).json({
success: false,
error: '代码不能为空'
});
}
const result = await documentAssistant.generateDocument(
code,
docType || 'api'
);
res.json({
success: true,
data: { document: result }
});
} catch (error) {
logger.error('文档生成错误:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
// 数据分析
applicationsRouter.post('/data/analyze', async (req, res) => {
try {
const { data, question } = req.body;
if (!data || !question) {
return res.status(400).json({
success: false,
error: '数据和问题不能为空'
});
}
const result = await dataAnalyst.analyzeData(data, question);
res.json({
success: true,
data: result
});
} catch (error) {
logger.error('数据分析错误:', error);
res.status(500).json({
success: false,
error: error.message
});
}
});
遇到的问题
问题1:领域知识不足
解决方案:
// 构建领域知识库
const knowledgeBase = {
'前端开发': ['Vue', 'React', 'JavaScript'],
'后端开发': ['Node.js', 'Python', 'Java']
};
// 在 Prompt 中注入知识
const prompt = `你是${domain}专家,知识库:${knowledgeBase[domain]}`;
问题2:上下文过长
解决方案:
// 使用摘要记忆
const memory = new ConversationSummaryMemory({
llm: llm,
maxTokenLimit: 2000
});
学习总结
今日收获
- ✅ 理解 AI 应用实际场景
- ✅ 实现典型应用案例
- ✅ 掌握场景实现要点
- ✅ 性能优化实践
- ✅ 最佳实践总结
关键知识点
- 场景化应用,针对具体需求
- 领域知识,提升准确性
- 用户体验,优化交互
- 错误处理,增强稳定性
应用场景对比
智能客服:需要知识库、转人工机制
代码助手:需要代码理解、准确性
文档助手:需要格式处理、RAG
数据分析:需要数据理解、SQL生成
明日计划
明天将学习:
期待明天的学习! 🚀
参考资源
代码仓库
项目已更新:
- ✅ 智能客服系统
- ✅ 代码助手
- ✅ 文档助手
- ✅ 数据分析助手
- ✅ 应用 API
GitHub 提交: Day 18 - 实际应用场景
标签: #AI学习 #实际应用 #智能客服 #代码助手 #学习笔记
写在最后
今天学习了 AI 应用的实际场景,通过具体案例加深理解。
这些应用场景都是实际工作中常见的需求。明天将继续学习性能优化和最佳实践!
继续加油! 💪
快速检查清单
完成这些,第十八天就达标了! ✅

浙公网安备 33010602011771号