• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 生成式人工智能/大語言模型

    聚焦:Qodo 借助 NVIDIA DGX 實現高效代碼搜索創新

    大語言模型 (LLMs) 使 AI 工具能夠幫助您更快地編寫更多代碼,但隨著我們要求這些工具承擔越來越復雜的任務,其局限性變得顯而易見。理解編程語言的細微差別、復雜的依賴項以及適應代碼庫特定上下文等挑戰可能會導致代碼質量低下,并導致后續瓶頸。

    Qodo NVIDIA Inception 計劃 的成員,是一個多智能體代碼完整性平臺,可通過 AI 驅動的智能體進行代碼編寫、測試和審查,從而增強和自動化軟件質量工作流。

    Qodo 愿景的一個核心原則是,相信只有在深度情境感知的情況下,AI 才能對軟件完整性進行有意義的改進。代碼并非孤立編寫,而是存在于復雜的架構、不斷演變的依賴項和特定的編碼標準中。為了讓 AI 有效地幫助開發者,它不僅必須理解語法,還必須理解代碼庫的意圖、模式和更廣泛的結構。

    Qodo 在先進的 檢索增強生成 (RAG) 、索引和分析的基礎上構建其 AI 智能體,并由先進的 (SOTA) 代碼嵌入模型提供支持,從而實現了這一目標。這個專門的代碼嵌入模型在 NVIDIA DGX 上進行訓練,使 AI 能夠更有效地理解和分析代碼,并檢索高度相關的上下文,確保 LLM 能夠生成準確的代碼建議、可靠的測試和富有洞察力的代碼審查。

    需要特定于代碼的 pipeline

    大型復雜代碼庫不斷變化,上下文索引是一個持續的過程。

    Qodo 構建了一個可靠的 pipeline,用于持續維護新的索引,以確保代碼和測試生成始終基于存儲庫的最新狀態。此 pipeline 包括從代碼庫檢索文件、將檢索到的文件分塊成段,以及向 embeddings 添加自然語言描述,以便 AI 更輕松地理解上下文。

    特定于代碼的 RAG 工作流面臨的一個挑戰是將大型代碼文件分塊為有意義的片段。對于自然語言文本,分塊相對簡單,段落和句子為創建有意義的語義片段提供了明顯的邊界點。

    然而,樸素的 chunking 方法很難準確描繪有意義的代碼片段,導致邊界定義和包含不相關或不完整信息方面的問題。向 LLM 提供無效或不完整的代碼段實際上會損害性能并增加 hallucinations,而不是起到幫助作用。

    Qodo 使用語言特定的靜態分析實現 chunking,以遞歸方式將節點劃分為較小的 chunks,并進行追溯處理,以重新添加已刪除的任何關鍵上下文。此方法支持創建尊重代碼結構的 chunks,并將相關元素保持在一起。

    另一個關鍵挑戰是嵌入。在許多現有的嵌入模型中,很難基于自然語言查詢準確檢索相關代碼示例。許多通用嵌入模型 (例如 E5 ) 專注于語言模式,而非語法、變量依賴項、控制流和 API 使用等代碼特定元素。這會導致搜索結果和代碼檢索不相關或不精確,但相關性和精度對于啟用 AI 編碼智能體至關重要。

    A flow diagram shows Qodo’s ingest pipeline starting with retrieving files from code base, filtering supported files, a code splitter, text splitter, and dedicated splitters, chunking, and ending with embedding to a database.
    圖 1。Qodo 的 code-specific ingest pipeline

    代碼嵌入模型

    檢索增強生成 (RAG) 系統中, 嵌入模型 通過將文本轉換為捕獲語義含義的高維向量,發揮著至關重要的作用。這些嵌入存儲在 向量數據庫 中,可實現高效的相似性搜索,使系統能夠在響應用戶查詢時從知識庫中檢索最相關的信息。

    The diagram shows embedding representation in a vector database, including a request in the embedding form, “Find the two most similar images, documents, or videos.”
    圖 2。用于相似性匹配的 Embedding 過程通用模型

    對于特定于代碼的任務,使用基于編程語言和軟件文檔訓練的嵌入模型具有特別的戰略性。這樣的模型可以更好地理解代碼語法、函數名稱和技術術語的細微差別,從而更準確地檢索相關代碼段或文檔。

    這種專門的嵌入模型可以顯著提高 RAG 系統在軟件開發環境中的性能,有助于改進代碼完成、bug 檢測和技術文檔生成。

    The workflow diagram shows that the Qodo pipeline automatically scrapes open-source code from GitHub, applies multiple filtering steps for quality, and then injects the data with synthetic function descriptions and docstrings.
    圖 3。從存儲庫到生成的數據集的 Qodo pipeline

    與 LLMs 相比,嵌入模型要小得多,因此可以更高效地分布在多個 GPU 上。這有助于更好地利用硬件資源,并可能縮短訓練時間。因此,它們更適合數據并行分布式訓練,即在每個 GPU 工作節點上復制整個模型,并在多個 GPU 之間分配批量數據。

    Qodo 使用 NVIDIA DGX 8x A100 80GB 節點訓練其嵌入模型。在 bfloat16 數字精度下進行訓練,使他們能夠使用 256 個大型微批量,從而加快收斂率和訓練時間。這對于使用對比損失的嵌入模型非常重要,尤其是在依賴批量內的負數時。

    更大的批量大小使模型能夠對更多樣化的負示例集進行采樣,這對于有效學習至關重要。這種多樣性有助于模型更好地區分相似和不同的實例,從而提高表示質量。

    Qodo 基于 Qwen 微調了兩個嵌入模型,即 Qodo-Embed-1-1.5B Qodo-Embed-1-7B ,Qwen 是阿里云開發的開源 LLM,旨在執行各種 AI 任務。它們達到了 SOTA 精度,在 Hugging Face MTEB::CoIR 排行榜上名列前茅,這兩種型號都有各自的尺寸類別 (圖 4) 。

    NDGC 是用于評估信息檢索質量的特定指標。

    A graph shows the Qodo embedding models compared to other code-specific embedding models as measured on the HuggingFace MTEB::CoIR leaderboard. The models are at the top with scores of 71.33 and 68.53 in mean NDCG.
    圖 4。Qodo 嵌入模型比較

    NVIDIA 和 Qodo 最近的一項合作通過一個真實用例展示了 Qodo 解決方案的價值。這項工作的重點是提高用于搜索專用代碼庫的 NVIDIA 內部 RAG 解決方案 (Genie) 之一的準確性。最終目標是在 NVIDIA 的內部代碼庫中執行基于 LLM 的查詢,以生成準確和精確的響應。

    為了實現這一目標,我們將 Genie 項目流程中現有的行業標準組件替換為 Qodo 的專業替代方案,提高了系統挖掘 NVIDIA 內部代碼庫的能力,并產生了出色的結果。

    以下 Qodo 組件已集成到管道中:

    如前所述,構建代碼特定的 RAG 解決方案面臨的挑戰之一是 chunking。大代碼文件應在自然停止點進行分割,以確保文本塊的大小適合處理和存儲。否則,當關鍵的相關代碼部分脫離上下文時,檢索過程將失敗。

    A diagram shows NVIDIA components for a retriever, internal embedding, internal web app, meeting transcripts, a Unity codebase, and Confluence. The Qodo components are a RAG retriever API, GitHub indexer, GitLab indexer, and embedding model. The off-the-shelf components are GitHub, GitLab, and a Milvus vector database.
    圖 5。用于案例研究的 Code-specific RAG pipeline

    最終流程已集成到 NVIDIA 的內部 Slack 系統中,使 C++ 專家開發者能夠根據感興趣的存儲庫提出詳細的技術問題,并獲得可靠的回復。

    圖 6 和圖 7 分別顯示了每個 pipeline 的示例輸出,原始 pipeline 和與 Qodo 協作構建的 pipeline,分別。圖 6 中突出顯示的矩形顯示原始 pipeline 無法響應特定數據點。

    Screenshots compare the output of the same question asked using NVIDIA Genie and Qodo, respectively. The question was, “What are the predefined colors in ImGui and their corresponding RGBA values? %rtxpt” The original pipeline couldn’t respond with the specific data points and suggested checking the ImGui documentation instead.
    圖 6。使用 Slack 的 NVIDIA Genie 代碼特定 RAG 系統輸出示例

    圖 7 顯示了更詳細的結果。

    Screenshots compare the output of the same question asked using NVIDIA Genie and Qodo, respectively. The question was, “What are the predefined colors in ImGui and their corresponding RGBA values? %rtxpt” The Qodo pipeline offered a short list of eight element groups with multiple color values for each, including text, background, border, frame, title, scrollbar, button, and header.
    圖 7。使用 Slack 的 Qodo 代碼專用 RAG 系統輸出示例

    為了進行測試,我們使用了以下常見的圖形公共 SDK:

    我們使用 Ragas 根據這些數據集生成合成問題,并比較了哪些回答更正確、更有技術細節。這三行對中的每一行都對應列表中的某個 SDK 存儲庫。每列代表問題的細分,其中每個單元格中的值包括基于忠誠度和答案相關性的正確答案數量。每行的最后一個單元格顯示正確響應的總數。

    Three tables show that the Qodo pipeline has higher scores for total correct responses than the NVIDIA Genie pipeline: for RTXPT, the scores were 74 to 55, for RTXGI, 76 to 61, and for RTXDI, 79 to 53.
    圖 7。內部 RAG (NVIDIA Genie) 與基于 Qodo 的 RAG 管道的比較

    總結 7

    您可以在 Hugging Face 上試驗 Qodo 的嵌入模型 Qodo-Embed-1-1.5B Qodo-Embed-1-7B

    希望加速工作的初創公司應探索通過 NVIDIA Inception 計劃提供的免費福利。

    有關更多信息,請參閱以下資源:

    ?

    0

    標簽

    人人超碰97caoporen国产