AI编程智能体全栈实战:从LangChain到商业级Agent构建

发布时间:2026/7/13 5:33:40
AI编程智能体全栈实战:从LangChain到商业级Agent构建 在AI编程浪潮席卷而来的当下很多开发者都面临着同样的困境网上教程碎片化严重学完LangChain不知道MCP是什么会用Cursor却不懂如何构建商业级Agent。本文将通过一套完整的全栈实战方案带你系统掌握AI编程智能体的核心技术栈从基础概念到企业级落地彻底告别碎片化学习。无论你是刚接触AI编程的初学者还是希望提升工程化能力的资深开发者都能从本文获得实用价值。我们将覆盖LangChain框架原理、MCP协议实战、Cursor深度使用以及商业级编程Agent构建每个环节都配有可运行的代码示例和真实项目场景。1. AI编程智能体技术栈全景解析1.1 为什么需要全栈学习路径传统的AI编程学习往往存在几个痛点知识点分散、缺乏实战场景、工具链不完整。很多开发者学了LangChain却不知道如何与现有开发工具集成或者会用Cursor但无法构建复杂的多Agent系统。AI编程智能体的完整技术栈应该包含四个核心层次框架层LangChain/LangGraph提供Agent基础架构协议层MCP实现工具标准化接入工具层Cursor作为AI编程助手提升开发效率应用层商业级编程Agent解决实际问题1.2 核心组件技术定位LangChainAI应用开发框架提供链式调用、记忆管理、工具集成等核心能力。它相当于智能体的大脑负责决策和流程控制。MCPModel Context Protocol工具接入协议标准化AI与外部工具的交互方式。可以理解为智能体的手和脚让AI能够操作各种开发工具。CursorAI原生代码编辑器内置强大的代码生成和重构能力。它是开发者的协作者大幅提升编码效率。编程Agent基于上述技术构建的自动化编程智能体能够理解需求并生成高质量代码。2. 环境准备与工具配置2.1 基础开发环境搭建在开始实战前需要确保你的开发环境准备就绪# 检查Python版本推荐3.9 python --version # 检查Node.js版本推荐18 node --version # 检查Git版本 git --version2.2 Cursor安装与深度配置Cursor的安装过程很简单但正确的配置决定了使用效果下载安装访问官网 https://cursor.sh 下载对应系统版本支持Windows、macOS、Linux三大平台安装过程与VS Code类似熟悉IDE的开发者可以快速上手关键配置步骤打开设置Ctrl , 或 Cmd ,搜索Cursor: Model Settings配置API密钥DeepSeek、Claude、GPT等// settings.json 关键配置 { cursor.cpp.model: deepseek-r1, cursor.cpp.temperature: 0.7, cursor.cpp.maxTokens: 4000, cursor.telemetry.enabled: false }项目规则配置 在项目根目录创建.cursor/rules文件定义编码规范# 项目开发规范 - 使用TypeScript严格模式 - 所有函数必须有JSDoc注释 - 错误处理必须使用try-catch - 优先使用async/await而非回调 - 代码文件必须包含单元测试2.3 LangChain环境配置创建独立的Python虚拟环境避免依赖冲突# 创建虚拟环境 python -m venv ai-agent-env # 激活环境Windows ai-agent-env\Scripts\activate # 激活环境macOS/Linux source ai-agent-env/bin/activate # 安装核心依赖 pip install langchain langchain-community langchain-core pip install langgraph langchain-openai pip install python-dotenv # 环境变量管理创建环境配置文件.envDEEPSEEK_API_KEYyour_deepseek_key_here OPENAI_API_KEYyour_openai_key_here ANTHROPIC_API_KEYyour_claude_key_here3. LangChain核心概念与实战应用3.1 LangChain架构深度解析LangChain的核心价值在于提供了一套完整的AI应用开发范式。其架构主要包含以下几个关键组件Models各种LLM模型的统一接口Prompts提示词模板和管理Chains任务执行流程编排Agents智能决策和工具使用Memory对话状态记忆管理Indexes文档检索和向量化3.2 第一个LangChain应用实战让我们从一个简单的文档问答应用开始理解LangChain的基本工作流程# document_qa.py import os from dotenv import load_dotenv from langchain_community.llms import DeepSeek from langchain.chains import RetrievalQA from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain_community.vectorstores import FAISS from langchain_huggingface import HuggingFaceEmbeddings # 加载环境变量 load_dotenv() class DocumentQASystem: def __init__(self, model_namedeepseek-chat): self.llm DeepSeek( modelmodel_name, temperature0.1, max_tokens2000 ) self.embeddings HuggingFaceEmbeddings( model_namesentence-transformers/all-MiniLM-L6-v2 ) def load_documents(self, file_path): 加载并处理文档 loader TextLoader(file_path) documents loader.load() # 文本分割 text_splitter CharacterTextSplitter( chunk_size1000, chunk_overlap200 ) texts text_splitter.split_documents(documents) # 创建向量数据库 self.vectorstore FAISS.from_documents(texts, self.embeddings) def create_qa_chain(self): 创建问答链 self.qa_chain RetrievalQA.from_chain_type( llmself.llm, chain_typestuff, retrieverself.vectorstore.as_retriever(), return_source_documentsTrue ) def ask_question(self, question): 提问并获取答案 if not hasattr(self, qa_chain): raise ValueError(请先加载文档并创建QA链) result self.qa_chain.invoke({query: question}) return { answer: result[result], sources: result[source_documents] } # 使用示例 if __name__ __main__: qa_system DocumentQASystem() qa_system.load_documents(project_requirements.txt) qa_system.create_qa_chain() question 这个项目的主要技术栈是什么 answer qa_system.ask_question(question) print(f问题: {question}) print(f答案: {answer[answer]})3.3 LangChain Agent高级应用Agent是LangChain最强大的功能之一它能够让LLM自主决定使用哪些工具来解决问题# coding_agent.py from langchain.agents import AgentType, initialize_agent, Tool from langchain_community.utilities import PythonREPL from langchain.memory import ConversationBufferMemory class CodingAssistant: def __init__(self): self.llm DeepSeek(temperature0.3) self.python_repl PythonREPL() self.memory ConversationBufferMemory(memory_keychat_history) # 定义工具集 self.tools [ Tool( namePythonREPL, funcself.python_repl.run, description执行Python代码并返回结果 ), Tool( nameCodeAnalyzer, funcself.analyze_code, description分析代码质量和提出改进建议 ) ] # 初始化Agent self.agent initialize_agent( toolsself.tools, llmself.llm, agentAgentType.CONVERSATIONAL_REACT_DESCRIPTION, memoryself.memory, verboseTrue ) def analyze_code(self, code_snippet): 代码分析工具 analysis_prompt f 请分析以下代码的质量并提出改进建议 python {code_snippet} 请从以下维度分析 1. 代码可读性 2. 性能优化空间 3. 错误处理完整性 4. 符合Python最佳实践的程度 return self.llm.invoke(analysis_prompt) def generate_code(self, requirement): 根据需求生成代码 response self.agent.run( f请帮我生成满足以下需求的Python代码{requirement} ) return response # 使用示例 assistant CodingAssistant() code assistant.generate_code(一个能够计算斐波那契数列的函数) print(生成的代码, code)4. MCP协议原理与实战集成4.1 MCP协议架构深度解析MCPModel Context Protocol是标准化AI模型与外部工具交互的协议它的核心价值在于标准化接口统一工具接入规范安全隔离工具运行在独立环境类型安全强类型定义避免运行时错误可扩展性轻松添加新工具支持4.2 MCP服务器开发实战下面我们开发一个简单的文件操作MCP服务器// file-server.ts import { Server } from modelcontextprotocol/sdk/server/index.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; import { CallToolRequest, CallToolRequestSchema, ListToolsRequestSchema, ToolSchema, } from modelcontextprotocol/sdk/types.js; class FileOperationsServer { private server: Server; private tools: ToolSchema[]; constructor() { this.server new Server( { name: file-operations-server, version: 1.0.0, }, { capabilities: { tools: {}, }, } ); this.tools [ { name: read_file, description: 读取文件内容, inputSchema: { type: object, properties: { path: { type: string, description: 文件路径, }, }, required: [path], }, }, { name: write_file, description: 写入文件内容, inputSchema: { type: object, properties: { path: { type: string, description: 文件路径, }, content: { type: string, description: 文件内容, }, }, required: [path, content], }, }, ]; this.setupHandlers(); } private setupHandlers() { // 处理工具列表请求 this.server.setRequestHandler(ListToolsRequestSchema, async () ({ tools: this.tools, })); // 处理工具调用请求 this.server.setRequestHandler(CallToolRequestSchema, async (request) { const { name, arguments: args } request.params; try { switch (name) { case read_file: return await this.handleReadFile(args as { path: string }); case write_file: return await this.handleWriteFile(args as { path: string; content: string }); default: throw new Error(未知工具: ${name}); } } catch (error) { return { content: [ { type: text, text: 错误: ${error instanceof Error ? error.message : 未知错误}, }, ], }; } }); } private async handleReadFile(args: { path: string }) { const fs await import(fs/promises); const content await fs.readFile(args.path, utf-8); return { content: [ { type: text, text: content, }, ], }; } private async handleWriteFile(args: { path: string; content: string }) { const fs await import(fs/promises); await fs.writeFile(args.path, args.content); return { content: [ { type: text, text: 文件已成功写入: ${args.path}, }, ], }; } async run() { const transport new StdioServerTransport(); await this.server.connect(transport); console.error(File Operations MCP服务器已启动); } } // 启动服务器 const server new FileOperationsServer(); server.run().catch(console.error);4.3 MCP客户端集成示例在LangChain中集成MCP客户端# mcp_client.py import asyncio from langchain.agents import Tool from mcp import ClientSession, StdioServerParameters from mcp.client import create_memory_client class MCPIntegration: def __init__(self, server_path: str): self.server_path server_path self.tools [] async def initialize(self): 初始化MCP客户端连接 server_params StdioServerParameters( commandnode, args[self.server_path] ) async with create_memory_client(server_params) as (client, memory): self.client client await self.load_tools() async def load_tools(self): 加载MCP工具 # 获取可用工具列表 tool_list await self.client.list_tools() for tool_info in tool_list.tools: tool Tool( nametool_info.name, funcself.create_tool_handler(tool_info.name), descriptiontool_info.description ) self.tools.append(tool) def create_tool_handler(self, tool_name: str): 创建工具处理函数 async def tool_handler(**kwargs): result await self.client.call_tool(tool_name, kwargs) return result.content[0].text if result.content else return tool_handler def get_tools(self): 获取工具列表 return self.tools # 使用示例 async def main(): mcp MCPIntegration(./file-server.ts) await mcp.initialize() tools mcp.get_tools() print(可用的MCP工具, [tool.name for tool in tools]) # 运行示例 if __name__ __main__: asyncio.run(main())5. Cursor高级功能与工程化实践5.1 Cursor Composer模式深度应用Composer模式是Cursor最强大的功能之一它允许你通过自然语言指令操作整个项目基础使用模式打开ComposerCtrl I 或 Cmd I输入自然语言指令预览生成的变更确认应用修改实战示例项目重构指令请将当前项目中的JavaScript文件全部转换为TypeScript 1. 添加TypeScript配置tsconfig.json 2. 将.js文件重命名为.ts 3. 添加类型注解 4. 配置构建脚本 5. 添加类型检查到CI流程5.2 Cursor Rules工程化配置大型项目中Rules配置至关重要。以下是企业级项目的Rules示例# .cursor/rules/project-guidelines.yaml version: 1.0 rules: - name: code-style pattern: *.{js,ts,py,java} constraints: - 使用一致的命名规范camelCase变量PascalCase类 - 函数长度不超过50行 - 必须包含JSDoc/Python Docstring - 错误处理必须使用try-catch或Result模式 - name: security pattern: *.{js,ts,py} constraints: - 禁止硬编码敏感信息 - SQL查询必须使用参数化 - API端点必须包含身份验证 - name: performance pattern: *.{js,ts,py} constraints: - 避免N1查询问题 - 使用异步操作处理IO - 大数据集使用分页 - name: testing pattern: *.{js,ts,py} constraints: - 核心业务逻辑必须包含单元测试 - 测试覆盖率不低于80% - 使用描述性的测试用例名称5.3 Cursor与LangChain集成实战将Cursor的代码生成能力与LangChain的流程控制结合# cursor_langchain_integration.py import subprocess import json from pathlib import Path class CursorLangChainBridge: def __init__(self, project_path: str): self.project_path Path(project_path) self.cursor_config self.project_path / .cursor / rules def generate_with_cursor(self, prompt: str, context_files: list None): 使用Cursor生成代码 context if context_files: for file in context_files: file_path self.project_path / file if file_path.exists(): context f\n# 文件 {file} 的当前内容\n{file_path.read_text()} full_prompt f{context}\n\n# 任务要求\n{prompt} # 模拟Cursor的代码生成实际使用中通过Cursor API调用 # 这里简化实现实际项目需要集成Cursor的官方API return self.simulate_cursor_generation(full_prompt) def simulate_cursor_generation(self, prompt: str): 模拟Cursor代码生成简化版 # 在实际项目中这里应该调用Cursor的API # 以下为模拟实现 if React组件 in prompt: return import React from react; import ./Component.css; interface ComponentProps { title: string; onClick: () void; } export const Component: React.FCComponentProps ({ title, onClick }) { return ( div classNamecomponent h2{title}/h2 button onClick{onClick}点击我/button /div ); }; elif API路由 in prompt: return from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import Optional router APIRouter() class Item(BaseModel): name: str description: Optional[str] None price: float router.post(/items/) async def create_item(item: Item): return {message: Item created, item: item} router.get(/items/{item_id}) async def read_item(item_id: int): return {item_id: item_id, name: 示例商品} else: return # 生成的代码将在这里显示\n# 请提供更具体的需求描述 def integrate_with_langchain(self): 创建与LangChain集成的工具 from langchain.tools import Tool return Tool( namecursor_code_generator, funcself.generate_with_cursor, description使用Cursor AI生成代码需要提供详细的需求描述和上下文文件 ) # 使用示例 bridge CursorLangChainBridge(./my-project) tool bridge.integrate_with_langchain() # 在LangChain Agent中使用 result tool.run({ prompt: 创建一个React用户登录组件包含邮箱和密码输入框, context_files: [src/components/UserProfile.tsx] }) print(生成的代码, result)6. 商业级编程Agent构建实战6.1 多智能体系统架构设计商业级编程Agent需要采用多智能体协作架构# multi_agent_system.py from typing import List, Dict, Any from langgraph.graph import Graph, START, END from langchain.schema import BaseMessage, HumanMessage from langchain_core.messages import SystemMessage class CommercialCodingAgent: def __init__(self): self.llm DeepSeek(temperature0.3) self.workflow self.create_workflow() def create_workflow(self) - Graph: 创建多智能体工作流 workflow Graph() # 定义节点 workflow.add_node(planner, self.planner_agent) workflow.add_node(architect, self.architect_agent) workflow.add_node(coder, self.coder_agent) workflow.add_node(reviewer, self.reviewer_agent) workflow.add_node(tester, self.tester_agent) # 定义边 workflow.add_edge(START, planner) workflow.add_edge(planner, architect) workflow.add_edge(architect, coder) workflow.add_edge(coder, reviewer) workflow.add_conditional_edges( reviewer, self.review_decision, {rewrite: coder, test: tester} ) workflow.add_edge(tester, END) return workflow.compile() def planner_agent(self, state: Dict[str, Any]) - Dict[str, Any]: 规划智能体分解需求 prompt f 请将以下开发需求分解为具体的开发任务 需求{state[requirement]} 请按以下格式输出 1. 架构设计任务 2. 核心功能实现任务 3. 测试任务 4. 部署任务 response self.llm.invoke(prompt) state[plan] response return state def architect_agent(self, state: Dict[str, Any]) - Dict[str, Any]: 架构智能体设计技术方案 prompt f 基于以下需求规划设计具体的技术架构 需求{state[requirement]} 规划{state[plan]} 请输出 - 技术栈选择 - 数据库设计 - API设计 - 文件结构 response self.llm.invoke(prompt) state[architecture] response return state def coder_agent(self, state: Dict[str, Any]) - Dict[str, Any]: 编码智能体生成代码 prompt f 根据以下架构设计生成具体代码 需求{state[requirement]} 架构{state[architecture]} 请生成完整的、可运行的代码文件。 response self.llm.invoke(prompt) state[code] response return state def reviewer_agent(self, state: Dict[str, Any]) - Dict[str, Any]: 审查智能体代码质量检查 prompt f 审查以下代码质量 需求{state[requirement]} 代码{state[code]} 请检查 1. 代码是否符合需求 2. 是否有安全漏洞 3. 性能是否可接受 4. 是否符合编码规范 response self.llm.invoke(prompt) state[review] response # 简单判断是否需要重写 if 重大问题 in response or 重写 in response: state[needs_rewrite] True else: state[needs_rewrite] False return state def tester_agent(self, state: Dict[str, Any]) - Dict[str, Any]: 测试智能体生成测试用例 prompt f 为以下代码生成测试用例 需求{state[requirement]} 代码{state[code]} 请生成完整的单元测试和集成测试。 response self.llm.invoke(prompt) state[tests] response state[status] completed return state def review_decision(self, state: Dict[str, Any]) - str: 审查决策 return rewrite if state.get(needs_rewrite, False) else test def process_requirement(self, requirement: str) - Dict[str, Any]: 处理开发需求 initial_state { requirement: requirement, status: started } result self.workflow.invoke(initial_state) return result # 使用示例 agent CommercialCodingAgent() requirement 创建一个用户管理系统支持注册、登录、权限管理 result agent.process_requirement(requirement) print(处理结果, result[status]) print(生成的代码, result.get(code, ))6.2 RAG增强的编程Agent集成检索增强生成RAG能力让Agent能够参考最佳实践# rag_enhanced_agent.py import hashlib from langchain_community.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings class RAGEnhancedCodingAgent: def __init__(self, knowledge_base_path: str): self.llm DeepSeek(temperature0.2) self.embeddings HuggingFaceEmbeddings() self.vectorstore self.load_knowledge_base(knowledge_base_path) def load_knowledge_base(self, path: str): 加载知识库 # 这里可以加载公司代码规范、最佳实践文档等 # 简化实现实际项目中需要构建完整的知识库 return Chroma(persist_directorypath, embedding_functionself.embeddings) def retrieve_best_practices(self, query: str, k: int 3): 检索相关最佳实践 docs self.vectorstore.similarity_search(query, kk) return \n\n.join([doc.page_content for doc in docs]) def generate_code_with_context(self, requirement: str, context: str ): 基于上下文的代码生成 if context: best_practices self.retrieve_best_practices(requirement) context f相关最佳实践\n{best_practices}\n\n{context} prompt f {context} 请根据以下需求生成高质量的代码 需求{requirement} 要求 1. 遵循检索到的最佳实践 2. 包含完整的错误处理 3. 有清晰的注释 4. 考虑性能和安全 return self.llm.invoke(prompt) def create_development_plan(self, project_requirements: str): 创建开发计划 best_practices self.retrieve_best_practices(项目规划 架构设计) prompt f 基于以下最佳实践 {best_practices} 为以下项目需求制定开发计划 {project_requirements} 请输出 1. 技术选型建议 2. 开发阶段划分 3. 风险评估 4. 时间估算 return self.llm.invoke(prompt) # 使用示例 rag_agent RAGEnhancedCodingAgent(./knowledge_base) plan rag_agent.create_development_plan(电商平台用户系统) code rag_agent.generate_code_with_context(用户注册功能, 使用JWT认证)7. 企业级部署与运维实践7.1 容器化部署方案使用Docker实现标准化部署# Dockerfile FROM python:3.11-slim WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ git \ curl \ rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 创建非root用户 RUN useradd -m -u 1000 agentuser USER agentuser # 健康检查 HEALTHCHECK --interval30s --timeout30s --start-period5s --retries3 \ CMD curl -f http://localhost:8000/health || exit 1 EXPOSE 8000 CMD [python, app/main.py]对应的Docker Compose配置# docker-compose.yml version: 3.8 services: ai-agent: build: . ports: - 8000:8000 environment: - DEEPSEEK_API_KEY${DEEPSEEK_API_KEY} - OPENAI_API_KEY${OPENAI_API_KEY} volumes: - ./logs:/app/logs - ./knowledge_base:/app/knowledge_base healthcheck: test: [CMD, curl, -f, http://localhost:8000/health] interval: 30s timeout: 10s retries: 3 redis: image: redis:7-alpine ports: - 6379:6379 volumes: - redis_data:/data volumes: redis_data:7.2 监控与日志管理实现完整的可观测性方案# monitoring.py import logging import time from prometheus_client import Counter, Histogram, generate_latest from datetime import datetime class AgentMonitor: def __init__(self): # 指标定义 self.requests_total Counter(agent_requests_total, 总请求数, [agent_type, status]) self.request_duration Histogram(agent_request_duration_seconds, 请求耗时) self.errors_total Counter(agent_errors_total, 错误数, [error_type]) # 日志配置 self.setup_logging() def setup_logging(self): 配置结构化日志 logging.basicConfig( levellogging.INFO, format{timestamp: %(asctime)s, level: %(levelname)s, message: %(message)s, agent: %(name)s}, datefmt%Y-%m-%d %H:%M:%S ) self.logger logging.getLogger(ai-agent) def track_request(self, agent_type: str): 跟踪请求 start_time time.time() def record_request(status: str success): duration time.time() - start_time self.requests_total.labels(agent_typeagent_type, statusstatus).inc() self.request_duration.observe(duration) self.logger.info( fAgent请求完成, extra{ agent_type: agent_type, duration: duration, status: status } ) return record_request def record_error(self, error_type: str, error_message: str): 记录错误 self.errors_total.labels(error_typeerror_type).inc() self.logger.error( fAgent错误: {error_message}, extra{error_type: error_type} ) # 使用示例 monitor AgentMonitor() def agent_wrapper(agent_func): Agent函数包装器 def wrapper(*args, **kwargs): record monitor.track_request(agent_func.__name__) try: result agent_func(*args, **kwargs) record(success) return result except Exception as e: monitor.record_error(type(e).__name__, str(e)) record(error) raise return wrapper8. 常见问题与解决方案8.1 性能优化问题问题1Token消耗过高原因长上下文、复杂任务导致Token使用量激增解决方案使用上下文窗口较小的模型处理简单任务实现对话摘要和记忆压缩设置Token使用上限# token_optimizer.py class TokenOptimizer: def __init__(self, max_tokens: int 4000): self.max_tokens max_tokens def compress_conversation(self, messages: list) - list: 压缩对话历史 if len(str(messages)) self.max_tokens: return messages # 保留最近的消息和重要的系统消息 important_messages [msg for msg in messages if msg.get(role) system] recent_messages messages[-10:] # 保留最近10条 return important_messages recent_messages def summarize_long_text(self, text: str) - str: 总结长文本 if len(text) 1000: return text summary_prompt f请用200字以内总结以下内容\n{text} # 调用LLM生成总结 return text[:500] ...[已截断]8.2 模型幻觉问题问题2AI生成不存在的API或代码原因训练数据过时或模型创造性过强解决方案加强规则约束和代码验证实现自动化的语法检查建立可信知识库参考# hallucination_detector.py import ast import subprocess class HallucinationDetector: def __init__(self): self.known_apis self.load_known_apis() def load_known_apis(self) - set: 加载已知的API列表 # 从文档、代码库等来源构建可信API列表 return { langchain.llms, langchain.chains, langchain.agents, fastapi.APIRouter, pydantic.BaseModel } def validate_python_code(self, code: str) - dict: 验证Python代码 result { syntax_valid: False, unknown_imports: [], runtime_errors: [] } # 语法检查 try: ast.parse(code) result[syntax_valid] True except SyntaxError as e: result[runtime_errors].append(f语法错误: {e}) return result # 导入检查 try: tree ast.parse(code) imports self.extract_imports(tree) result[unknown_imports] self.check_unknown_imports(imports) except Exception as e: result[runtime_errors].append(f导入分析错误: {e}) return result def extract_imports(self, tree: ast.AST) - list: 提取导入语句 imports [] for node in ast.walk(tree): if isinstance(node, ast.Import): for alias in node.names: imports.append(alias.name) elif isinstance(node, ast.ImportFrom): if node.module: imports.append(node.module) return imports8.3 安全合规问题问题3代码生成可能包含安全漏洞解决方案集成安全扫描工具实现代码审查流程建立安全编码规范# security_scanner.py import tempfile import os class SecurityScanner: def __init__(self): self.security_rules self.load