【項目實訓】【項目博客#09】HarmonySmartCodingSystem系統后端智能API檢索與代碼助手實現(6.2-6.15)
文章目錄
- 【項目實訓】【項目博客#09】HarmonySmartCodingSystem系統后端智能API檢索與代碼助手實現(6.2-6.15)
- 項目博客概述
- 一、整體架構設計
- 1.1 系統模塊組成
- 1.2 整體流程設計
- 二、API文檔RAG檢索系統實現
- 2.1 RAG技術原理與優化
- 2.2 RAG引擎核心實現
- 2.3 回答生成與引用機制
- 2.4 API接口實現
- 三、智能代碼文件助手實現
- 3.1 代碼替換服務設計
- 3.2 代碼助手請求實現
- 3.3 提示詞設計與后端API實現
- 3.4 前端UI組件實現
- 四、基于微調大模型的代碼生成系統
- 4.1 后端技術選型與實現
項目博客概述
在HarmonySmartCoding項目中,為提升開發者的編碼效率和API學習體驗,我們設計實現了一套包含RAG檢索系統、智能代碼助手和代碼生成系統的開發輔助平臺。本文將重點介紹各個系統模塊的設計實現,包括API文檔RAG檢索后端、智能代碼文件助手以及基于微調大模型的代碼生成系統,展示如何通過AI技術提升HarmonyOS應用開發效率。
一、整體架構設計
1.1 系統模塊組成
開發智能輔助系統由三個主要模塊組成:
-
API文檔RAG檢索系統:
- 基于檢索增強生成的API文檔智能問答
- BGE-M3文本向量化和相似度檢索
- DeepSeek大模型問答生成
-
智能代碼文件助手:
- 基于AI的代碼修改建議生成
- 自動代碼替換與文件管理
- 交互式代碼編輯界面
-
微調大模型代碼生成:
- 基于LoRA技術的大模型微調
- 本地代碼生成推理服務
- 前端代碼生成與編輯界面
1.2 整體流程設計
系統的整體工作流程如下:
- 開發者需求輸入:開發者通過統一界面輸入API查詢、代碼修改需求或代碼生成需求
- 智能路由分發:系統根據請求類型分發到對應模塊
- 并行請求處理:各模塊獨立處理請求,返回結果
- 結果整合展示:統一界面整合展示不同模塊的結果,提供一體化體驗
二、API文檔RAG檢索系統實現
2.1 RAG技術原理與優化
RAG(檢索增強生成)系統通過檢索相關文檔內容作為上下文,增強大模型的回答能力。我們的系統實現了以下優化:
- 檢索質量優化:采用BGE-M3模型替代原有向量化模型,提高語義理解能力
- 上下文構建優化:改進文檔片段的選擇和組織方式
- 引用追蹤機制:新增文檔引用標記系統,使生成的回答可溯源到具體文檔
2.2 RAG引擎核心實現
以下是RAG引擎初始化的關鍵代碼:
def __init__(self, bge_model_path, docs_path, doc_ids_path, embeddings_path, doc_links_path=None, api_summaries_path=None):# 加載本地 BGE 模型self.model = SentenceTransformer(bge_model_path)# 初始化DeepSeek客戶端self.deepseek_client = DeepSeekOfficialClient()# 加載RAG數據庫with open(docs_path, 'r', encoding='utf-8') as f:self.docs = json.load(f)with open(doc_ids_path, 'r', encoding='utf-8') as f:self.doc_ids = json.load(f)with open(embeddings_path, 'rb') as f:self.embeddings = pickle.load(f)# 加載文檔鏈接和API摘要# ... 省略部分代碼 ...
查詢向量化實現:
def get_query_embedding(self, query):"""使用本地 BGE 模型獲取查詢的向量表示"""embedding = self.model.encode([query], normalize_embeddings=True)emb = embedding[0] # 取第一個結果return emb
文檔檢索實現:
def search(self, query, top_k=3):"""根據查詢檢索相關文檔"""query_emb = self.get_query_embedding(query)# 計算余弦相似度sims = np.dot(self.embeddings, query_emb) / (np.linalg.norm(self.embeddings, axis=1) * np.linalg.norm(query_emb) + 1e-8)top_indices = sims.argsort()[-top_k:][::-1]# 構建結果列表results = []for idx in top_indices:# ... 處理文檔內容和鏈接 ...
2.3 回答生成與引用機制
回答生成模塊使用DeepSeek大模型,結合檢索結果生成最終回答:
def generate_answer_from_docs(self, query, docs):"""基于檢索到的文檔使用DeepSeek生成智能回答"""if self.deepseek_client:# 構建上下文context = ""for i, doc in enumerate(docs):doc_content = self.extract_doc_content(doc)context += f"文檔{i+1} (【DOC{i+1}】):\n{doc_content}\n\n"# 構建提示詞prompt = f"""請基于以下HarmonyOS API文檔內容回答用戶的問題。引用格式要求:1. 引用文檔內容時,必須使用特殊標記【DOC1】、【DOC2】等...用戶問題: {query}文檔內容:{context}"""# 調用模型生成回答# ... 省略部分代碼 ...
2.4 API接口實現
@app.route('/api/rag_query', methods=['POST'])
def rag_query():data = request.get_json()query = data.get('query', '')top_k = data.get('top_k', 3)if not query:return jsonify({'error': 'No query provided'}), 400try:# 執行RAG搜索results = rag_engine.search(query, top_k=top_k)# 格式化響應resp = rag_engine.format_api_response(query, results)return jsonify(resp)except Exception as e:return jsonify({'error': f'RAG 查詢失敗: {str(e)}'}), 500
三、智能代碼文件助手實現
3.1 代碼替換服務設計
代碼替換服務是智能代碼文件助手的核心組件,負責解析AI生成的代碼修改建議,并應用到實際文件中:
// 處理生成的代碼 - 移除注釋標記
export const processGeneratedCode = (code: string): string => {// 移除"// ... existing code ..."注釋行return code.split('\n').filter(line => !line.trim().startsWith('// ... existing code ...')).join('\n');
};
3.2 代碼助手請求實現
代碼助手請求的核心是將用戶需求和上下文文件發送給后端API,并處理返回的響應:
// 代碼助手請求實現(簡化版)
static async generateCodeAssistant(request: CodeAssistantRequest): Promise<CodeGenerationResponse> {try {// 發送請求到后端APIconst response = await axios.post(`${this.apiUrl}/code_assistant`, request);return {code: response.data.result || '',suggestions: response.data.suggestions};} catch (error) {// 處理請求失敗的情況,返回友好的錯誤消息// ...}
}
3.3 提示詞設計與后端API實現
提示詞設計是智能代碼文件助手的關鍵部分,它直接影響了AI生成代碼的質量和格式:
# 提示詞構建函數(簡化版)
def get_code_assistant_prompt(user_input, language='', api_version='', selected_files=None):# 讀取提示詞模板prompt_template = read_prompt_template()# 添加選中的文件內容selected_files_str = format_selected_files(selected_files)# 組合最終提示詞final_prompt = f"{prompt_template}\n\n用戶需求: {user_input} {selected_files_str}"return final_prompt
代碼助手API的實現是后端服務的核心:
@app.route('/api/code_assistant', methods=['POST'])
def code_assistant():# 獲取請求數據data = request.get_json()prompt = data.get('prompt', '')# ...try:# 構建提示詞assistant_prompt = get_code_assistant_prompt(prompt, language, api_version, selected_files)# 調用DeepSeek客戶端messages = [{"role": "user", "content": assistant_prompt}]result = ds_client.chat_completion(messages, temperature=0.7)# 移除思考標簽result = remove_think_tags(result)# 保存請求歷史db = get_db()db.save_snippet(f"智能助手: {prompt[:30]}", result, "assistant")return jsonify({'result': result})except Exception as e:# 處理異常情況# ...
3.4 前端UI組件實現
輸出面板組件是智能代碼文件助手的用戶界面,主要功能區域包括:
- 用戶輸入區:采用可擴展的文本輸入框,支持多行輸入
- 文件選擇區:直觀的文件選擇交互,支持添加和刪除文件
- 結果展示區:使用語法高亮顯示代碼修改建議
- 操作區:提供應用、忽略等操作按鈕
文件修改建議展示區實現:
<!-- 文件修改建議展示區(簡化版) -->
<div class="file-changes-container"><div class="file-changes-list"><!-- 遍歷所有文件修改建議 --><div v-for="change in parsedFileChanges" class="file-change-item"><!-- 文件路徑和操作按鈕 --><!-- 代碼預覽(使用語法高亮) --></div></div>
</div>
四、基于微調大模型的代碼生成系統
4.1 后端技術選型與實現
代碼生成系統后端基于Flask搭建,集成LoRA微調的大語言模型:
@app.route('/api/generate', methods=['POST'])
def generate_code():print("[DEBUG] 收到/generate_code請求")data = request.get_json()print(f"[DEBUG] 請求內容: {data}")prompt = data.get('prompt', '')