LLM代码生成:AI辅助编程
--- title: "LLM代码生成:AI辅助编程" description: "使用LLM进行代码生成、补全和转换" tags: ["代码生成", "AI编程", "代码补全", "LLM", "编程辅助"] category: "llm" icon: "💻"
LLM代码生成:AI辅助编程
代码生成概述
LLM代码生成是利用大语言模型辅助编程的技术,包括代码生成、补全、转换和解释。
核心功能
1. 代码生成器
from openai import OpenAI
from typing import List, Dict, Optional
from dataclasses import dataclass
@dataclass
class CodeGenerationRequest:
"""代码生成请求"""
description: str
language: str
context: Optional[str] = None
requirements: Optional[List[str]] = None
@dataclass
class CodeGenerationResult:
"""代码生成结果"""
code: str
explanation: str
language: str
dependencies: List[str]
class CodeGenerator:
"""代码生成器"""
def __init__(self, model: str = "gpt-4"):
self.client = OpenAI()
self.model = model
def generate_code(self, request: CodeGenerationRequest) -> CodeGenerationResult:
"""生成代码"""
prompt = self._build_prompt(request)
response = self.client.chat.completions.create(
model=self.model,
messages=[
{"role": "system", "content": "你是一个专业的程序员,擅长生成高质量的代码。"},
{"role": "user", "content": prompt}
],
temperature=0.3
)
result = response.choices[0].message.content
code, explanation = self._parse_response(result)
return CodeGenerationResult(
code=code,
explanation=explanation,
language=request.language,
dependencies=self._extract_dependencies(code, request.language)
)
def _build_prompt(self, request: CodeGenerationRequest) -> str:
"""构建提示"""
prompt = f"请用{request.language}编写以下功能的代码:\n\n"
prompt += f"描述:{request.description}\n"
if request.context:
prompt += f"\n上下文:\n{request.context}\n"
if request.requirements:
prompt += "\n要求:\n"
for req in request.requirements:
prompt += f"- {req}\n"
prompt += "\n请提供:\n1. 完整的代码\n2. 代码说明\n"
return prompt
def _parse_response(self, response: str) -> tuple:
"""解析响应"""
# 简化解析:寻找代码块
import re
code_blocks = re.findall(r'```(?:\w+)?\n(.*?)```', response, re.DOTALL)
if code_blocks:
code = code_blocks[0].strip()
explanation = response.replace(code_blocks[0], "").strip()
else:
code = response
explanation = ""
return code, explanation
def _extract_dependencies(self, code: str, language: str) -> List[str]:
"""提取依赖"""
import re
dependencies = []
if language == "python":
imports = re.findall(r'^(?:from|import)\s+(\w+)', code, re.MULTILINE)
dependencies = list(set(imports))
elif language in ["javascript", "typescript"]:
imports = re.findall(r'import\s+.*?from\s+[\'"](.+?)[\'"]', code)
dependencies = list(set(imports))
return dependencies
2. 代码补全器
class CodeCompleter:
"""代码补全器"""
def __init__(self, model: str = "gpt-4"):
self.client = OpenAI()
self.model = model
def complete_code(self, code: str, language: str, cursor_position: int = None) -> List[str]:
"""补全代码"""
prompt = f"""请为以下{language}代码提供补全建议:
代码:
```{language}
{code}
请提供3个不同的补全建议,每个建议一行。"""
response = self.client.chat.completions.create(
model=self.model,
messages=[
{"role": "system", "content": "你是一个代码补全助手。"},
{"role": "user", "content": prompt}
],
temperature=0.5
)
result = response.choices[0].message.content
return self._parse_completions(result)
def _parse_completions(self, result: str) -> List[str]:
"""解析补全建议"""
lines = result.strip().split("\n")
completions = []
for line in lines:
line = line.strip()
if line and not line.startswith("#") and not line.startswith("//"):
# 移除编号
import re
cleaned = re.sub(r'^\d+[\.\)]\s*', '', line)
if cleaned:
completions.append(cleaned)
return completions[:3] # 返回前3个建议
### 3. 代码转换器
```python
class CodeConverter:
"""代码转换器"""
def __init__(self, model: str = "gpt-4"):
self.client = OpenAI()
self.model = model
def convert_code(self, source_code: str, source_lang: str, target_lang: str) -> Dict:
"""转换代码"""
prompt = f"""请将以下{source_lang}代码转换为{target_lang}:
源代码({source_lang}):
```{source_lang}
{source_code}
请提供:
转换后的代码({target_lang})
转换说明
注意事项"""
response = self.client.chat.completions.create( model=self.model, messages=[ {"role": "system", "content": f"你是{target_lang}编程专家。"}, {"role": "user", "content": prompt} ], temperature=0.3 ) result = response.choices[0].message.content return self._parse_conversion(result, target_lang)def _parse_conversion(self, result: str, target_lang: str) -> Dict: """解析转换结果""" import re code_match = re.search(rf'
(?:{target_lang})?\n(.*?)', result, re.DOTALL) if code_match: code = code_match.group(1).strip() explanation = result.replace(code_match.group(0), "").strip() else: code = result explanation = "" return { "converted_code": code, "explanation": explanation, "target_language": target_lang }
## 代码分析
### 1. 代码解释器
```python
class CodeExplainer:
"""代码解释器"""
def __init__(self, model: str = "gpt-4"):
self.client = OpenAI()
self.model = model
def explain_code(self, code: str, language: str, detail_level: str = "medium") -> str:
"""解释代码"""
prompt = f"""请{detail_level}程度地解释以下{language}代码:
```{language}
{code}
请提供:
代码功能概述
关键部分解释
执行流程
潜在问题或改进建议"""
response = self.client.chat.completions.create( model=self.model, messages=[ {"role": "system", "content": "你是一个代码解释专家。"}, {"role": "user", "content": prompt} ], temperature=0.5 ) return response.choices[0].message.content
### 2. 代码审查器
```python
class CodeReviewer:
"""代码审查器"""
def __init__(self, model: str = "gpt-4"):
self.client = OpenAI()
self.model = model
def review_code(self, code: str, language: str) -> Dict:
"""审查代码"""
prompt = f"""请审查以下{language}代码:
```{language}
{code}
请从以下方面进行评估:
- 代码质量
- 性能
- 安全性
- 可维护性
- 最佳实践
请提供评分(1-10)和详细建议。"""
response = self.client.chat.completions.create(
model=self.model,
messages=[
{"role": "system", "content": "你是一个代码审查专家。"},
{"role": "user", "content": prompt}
],
temperature=0.3
)
result = response.choices[0].message.content
return self._parse_review(result)
def _parse_review(self, result: str) -> Dict:
"""解析审查结果"""
import re
# 提取分数
score_match = re.search(r'(\d+(?:\.\d+)?)\s*[//]\s*10', result)
score = float(score_match.group(1)) if score_match else 7.0
return {
"score": score,
"review": result,
"passed": score >= 7.0
}
## 完整工作流
```python
class CodeDevelopmentWorkflow:
"""代码开发工作流"""
def __init__(self):
self.generator = CodeGenerator()
self.completer = CodeCompleter()
self.explainer = CodeExplainer()
self.reviewer = CodeReviewer()
def develop_feature(self, description: str, language: str) -> Dict:
"""开发功能"""
# 1. 生成代码
request = CodeGenerationRequest(
description=description,
language=language,
requirements=["代码简洁", "有注释", "处理异常"]
)
gen_result = self.generator.generate_code(request)
# 2. 解释代码
explanation = self.explainer.explain_code(gen_result.code, language)
# 3. 审查代码
review = self.reviewer.review_code(gen_result.code, language)
# 4. 如果审查不通过,改进代码
if not review["passed"]:
improved_code = self._improve_code(gen_result.code, language, review["review"])
else:
improved_code = gen_result.code
return {
"code": improved_code,
"explanation": explanation,
"review": review,
"dependencies": gen_result.dependencies
}
def _improve_code(self, code: str, language: str, review_feedback: str) -> str:
"""改进代码"""
prompt = f"""请根据以下反馈改进代码:
原始代码:
```{language}
{code}
审查反馈: {review_feedback}
请提供改进后的完整代码。"""
response = self.client.chat.completions.create(
model=self.model,
messages=[
{"role": "system", "content": "你是一个代码优化专家。"},
{"role": "user", "content": prompt}
],
temperature=0.3
)
result = response.choices[0].message.content
import re
code_match = re.search(rf'```(?:{language})?\n(.*?)```', result, re.DOTALL)
return code_match.group(1).strip() if code_match else result
使用示例
workflow = CodeDevelopmentWorkflow() result = workflow.develop_feature("创建一个计算斐波那契数列的函数", "python")
print("生成的代码:") print(result["code"]) print("\n代码审查:") print(f"分数: {result['review']['score']}/10")
## 最佳实践
1. **明确需求**:提供清晰的功能描述
2. **迭代改进**:根据审查结果迭代改进代码
3. **测试验证**:生成的代码需要测试验证
4. **安全审查**:确保代码安全性
## 总结
LLM代码生成是提高开发效率的强大工具。通过代码生成、补全、转换和分析,可以显著加速软件开发过程。