【項目實訓】【項目博客#09】HarmonySmartCodingSystem系統后端智能API檢索與代碼助手實現(6.2-6.15)

【項目實訓】【項目博客#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 系統模塊組成

開發智能輔助系統由三個主要模塊組成:

  1. API文檔RAG檢索系統

    • 基于檢索增強生成的API文檔智能問答
    • BGE-M3文本向量化和相似度檢索
    • DeepSeek大模型問答生成
  2. 智能代碼文件助手

    • 基于AI的代碼修改建議生成
    • 自動代碼替換與文件管理
    • 交互式代碼編輯界面
  3. 微調大模型代碼生成

    • 基于LoRA技術的大模型微調
    • 本地代碼生成推理服務
    • 前端代碼生成與編輯界面

1.2 整體流程設計

系統的整體工作流程如下:

  1. 開發者需求輸入:開發者通過統一界面輸入API查詢、代碼修改需求或代碼生成需求
  2. 智能路由分發:系統根據請求類型分發到對應模塊
  3. 并行請求處理:各模塊獨立處理請求,返回結果
  4. 結果整合展示:統一界面整合展示不同模塊的結果,提供一體化體驗

二、API文檔RAG檢索系統實現

2.1 RAG技術原理與優化

RAG(檢索增強生成)系統通過檢索相關文檔內容作為上下文,增強大模型的回答能力。我們的系統實現了以下優化:

  1. 檢索質量優化:采用BGE-M3模型替代原有向量化模型,提高語義理解能力
  2. 上下文構建優化:改進文檔片段的選擇和組織方式
  3. 引用追蹤機制:新增文檔引用標記系統,使生成的回答可溯源到具體文檔

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組件實現

輸出面板組件是智能代碼文件助手的用戶界面,主要功能區域包括:

  1. 用戶輸入區:采用可擴展的文本輸入框,支持多行輸入
  2. 文件選擇區:直觀的文件選擇交互,支持添加和刪除文件
  3. 結果展示區:使用語法高亮顯示代碼修改建議
  4. 操作區:提供應用、忽略等操作按鈕

文件修改建議展示區實現:

<!-- 文件修改建議展示區(簡化版) -->
<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', '')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87634.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JVM】- 類加載與字節碼結構3

類加載階段 1. 加載 加載&#xff1a;將類的字節碼載入方法區中&#xff0c;內部采用C的instanceKlass描述java類。如果這個類的父類還沒加載&#xff0c;則先加載父類加載和鏈接可能是交替運行的 通過全限定名獲取字節碼 從文件系統&#xff08;.class 文件&#xff09;、JA…

Qt藍圖式技能編輯器狀態機模塊設計與實現

設計概述 這個模塊是一個基于Qt的藍圖式技能編輯器狀態機&#xff0c;主要用于游戲開發中的技能狀態管理。核心功能包括&#xff1a; 狀態節點&#xff08;開始、結束、普通狀態&#xff09;的可視化 狀態間連線的繪制與管理 狀態轉換邏輯的可視化編輯 動作選擇與配置 核…

Unity AR識別物體的內容語音讀取+使用說明功能

因之前一直在開發項目&#xff0c;斷斷續續寫了一點博客&#xff0c;最后統一寫了一下博客記錄學習內容。 可以看到我的工作一直在進行。 目錄 一、識別內容語音讀取 二、點擊齒輪按鈕彈出使用說明界面 開發步驟 1. 創建齒輪按鈕 UI 2. 創建使用說明面板 UI 3. 編寫控制…

Unable to start embedded Tomcat

通常是由于xml文件配置錯誤導致 1. mapper 指向錯誤 <resultMap id"Waybill" type"c.Waybill"> 2. 字段類型錯誤 <result column"wstatus" property"stus" javaType"TINYINT"/>TINYINT 是數據庫類型<resu…

Mac電腦 充電限制保護工具 AlDente Pro

AlDente Pro一款充電限制保護工具&#xff0c;是可以限制最大充電百分比來保護電池的工具。 鋰離子和聚合物電池&#xff08;如 MacBook 中的電池&#xff09;在40&#xff05; 至 80&#xff05; 之間運行時&#xff0c;使用壽命最長。 始終將電池電量保持在 100&#xff05…

KungfuBot——基于物理約束和自適應運動追蹤的人形全身控制PBHC,用于學習打拳或跳舞(即RL下的動作模仿和運控)

前言 昨天618&#xff0c;我司「七月在線」同事朝陽為主力&#xff0c;我打雜&#xff0c;折騰了整整一天&#xff0c;終于可以通過VR搖操宇樹G1了——當然&#xff0c;搖操是為了做訓練數據的采集&#xff0c;從而方便 下一步的模型(策略)訓練&#xff0c;最終實現機器人自主…

Kafka多副本機制

副本和副本因子 Kafka 會為每個 Partition 創建多個副本。這些副本分布在不同的 Broker 上。副本確保了數據的冗余存儲&#xff0c;即使某個 Broker 宕機或失效&#xff0c;其他副本可以繼續提供服務。 副本因子指的是每個 Partition 有多少個副本。副本因子的設置決定了一個…

Vue3類似百度風格搜索框組件

Vue3百度風格搜索框組件&#xff0c;使用vue3進行設計&#xff0c;亦有vue3TS的版本。 vue3組件如下&#xff1a; <template><!-- 搜索組件容器 --><div class"search-container"><!-- 百度Logo - 新樣式 --><div class"logo-conta…

智凈未來:華為智選IAM以科技巧思優化家庭健康飲水體驗

在中國家庭中&#xff0c;凈水器早已成為廚房標配&#xff0c;但傳統凈水設備的使用體驗卻遠未達到理想狀態。根據《2023年中國家庭凈水器使用調研報告》顯示&#xff0c;超過65%的用戶對傳統凈水器存在不滿&#xff0c;主要痛點集中在功能單一、操作復雜、維護麻煩、噪音大、廢…

細說STM32單片機SPI-Flash芯片的FatFS移植

目錄 一、SPI-Flash芯片硬件電路 二、CubeMX項目基礎設置 1、RCC、SYS、Code Generator、USART6、NVIC 2、RTC 3、SPI2 4、GPIO 5、FatFS模式 6、FatFS參數設置概述 &#xff08;1&#xff09;Version組 &#xff08;2&#xff09;Function Parameters組 1&#x…

ubuntu 22.04 安裝部署logstash 7.10.0詳細教程

安裝部署logstash 7.10.0詳細教程 一、下載并安裝二、新建配置文件三、賦權文件權限四、檢測文件grok語法是否異常五、啟動服務六、安裝啟動常見問題 【背景】 整個elk安裝是基于ubuntu 22.04和jdk 11環境。logstash采用 *.deb方式安裝&#xff0c;需要服務器能聯網。ubuntu 22…

JVM對象創建與內存分配機制深度剖析

對象創建的主要流程 類加載檢查 在創建對象之前&#xff0c;JVM 首先會檢查該類是否已經加載、解析并初始化&#xff1a; 如果沒有&#xff0c;則會通過類加載機制加載類元信息&#xff08;Class Metadata&#xff09;到方法區。 這個過程包括&#xff1a;加載&#xff08;load…

Navicat 技術指引 | TiDB 的 AI 查詢交互功能

目前&#xff0c;Navicat 兩款工具支持對 TiDB 數據庫的管理開發功能&#xff1a;一款是旗艦款 Navicat Premium&#xff0c;另一款是其輕量化功能的 Navicat Premium Lite&#xff08;官方輕量級免費版&#xff09;。Navicat 自版本 17.1 開始支持 TiDB 7。它支持的系統有 Win…

以list為輸入條件,查詢數據庫表,java中的mapper層和mybatis層應該怎么寫?

根據一個 List 中的兩個字段 rangeCode 和 unitcd&#xff0c;查詢數據庫表 model_engineering_spatial_unit。這個需求在 Java MyBatis 項目中非常常見&#xff0c;下面我將為你詳細寫出 Mapper 接口&#xff08;Java&#xff09; 和 MyBatis XML 映射文件 的寫法。 ? 前提…

pyspark 創建DataFrame

from pyspark.sql import SparkSession from pyspark.sql import StructType, StructField, IntegerType,StringType spark SparkSession.builder.appName(test).getOrCreate() 1、 從列表中創建DataFrame data [(1,"alice"),(2,Blob),(3,Charlie)] columns [&qu…

Vim:從入門到進階的高效文本編輯器之旅

目錄 一、Vim簡介 二、Vim的基礎操作 2.1 進入和退出Vim 2.2 Vim的三種模式 2.3 基礎移動 三、Vim的高效編輯技巧 3.1 文本編輯 3.2 文本刪除與修改 3.3 復制與粘貼 四、Vim的進階使用 4.1 搜索與替換 4.2 寄存器與宏 4.3 插件與配置 五、結語 在編程界&#xff0…

Docker基礎理論與阿里云Linux服務器安裝指南

文章目錄 一、Docker核心概念二、阿里云環境準備三、Docker安裝與配置四、核心容器部署示例五、開發環境容器化六、運維管理技巧七、安全加固措施 一、Docker核心概念 容器化本質&#xff1a; 輕量級虛擬化技術&#xff0c;共享主機內核進程級隔離&#xff08;cgroups/namespac…

c#使用筆記之try catch和throw

一、try catch 一種報錯的捕捉機制&#xff0c;try塊里運行的代碼出現錯誤的時候就會去執行catch塊所以一般catch塊里都是把錯誤打印出來或者保存到log日志里&#xff1b; 1.1、具體使用 catch可以用&#xff08;&#xff09;來選擇捕捉什么類型的錯誤&#xff0c;一般用Exc…

(新手友好)MySQL學習筆記(9):索引(常見索引類型,查找結構的發展(二分查找法,二叉搜索樹,平衡二叉樹,B樹,B+樹))

目錄 索引 常見索引類型 B樹 二分查找法 二叉搜索樹和平衡二叉樹 B樹和B樹 索引 index&#xff0c;是存儲引擎用于快速找到數據的一種數據結構。 MySQL默認使用InnoDB存儲引擎&#xff0c;該存儲引擎是最重要&#xff0c;使用最廣泛的&#xff0c;除非有非常特別的原因需要使用…

進程間通信1(匿名管道)Linux

1 進程間通信的必要性 首先要明確進程間是相互獨立的&#xff08;獨享一份虛擬地址空間&#xff0c;頁表&#xff0c;資源&#xff09;&#xff0c;那怎么樣才能使得兩個進程間實現資源的發送&#xff1f;所以&#xff0c;兩個進程一定需要看到同一份資源&#xff0c;并且?個…