使用 StarCoder 建立一個程式設計助手

2023-05-25 06:01:12

如果你是一個軟體開發者,你可能已經使用過 ChatGPT 或 GitHub 的 Copilot 去解決一些寫程式碼過程中遇到的問題,比如將程式碼從一種語言翻譯到另一種語言,或者通過自然語言,諸如「寫一個計算斐波那契數列第 N 個元素的 Python 程式」,來自動生成程式碼。儘管這些專有系統功能強大,但它們仍然有很多不足,比如對訓練所使用的公共資料透明度的缺失、沒有能力去讓它們適配自己的使用領域或程式碼庫。

幸運的是,現在我們有了很多高質量開源替代品!包括 SalesForce 為 Python 語言開發的 CodeGen Mono 16B,以及 Replit 開發的、在 20 種程式語言上訓練過的 一個 3B 引數量的模型

而最近新出現的一個選擇則是 BigCode 開發的 StarCoder,這是一個在一萬億的 token、80 多種程式語言上訓練過的 16B 引數量的模型。訓練資料多來自 GitHub 上的 issues、使用 Git 提交的程式碼、Jupyter Notebook 等等 (相關使用都已經過許可)。得益於對企業友好的許可證、長度為 8192 的 token、藉助 multi-query attention 的快速大批次推理,StarCoder 可以說是當前對程式碼相關的應用最合適的開源選擇。

本文將介紹如何對 StarCoder 進行微調,進而建立一個可以聊天的個人程式設計助手。這個程式設計助手我們將稱之為 StarChat。藉助 StarChat 的開發過程,我們將探索以下幾個使用大語言模型 (LLM) 建立程式設計助手時可能遇到的幾個技術細節:

  • 我們應該怎樣對大語言模型進行提詞,使得它成為一個對話代理
  • 我們也將介紹 OpenAI 的 Chat Markup Language (簡稱 ChatML),它為人類使用者和 AI 助手之間的對話資訊傳遞提供了一種結構化的格式
  • 怎樣在一個多樣性很強的語料庫上,使用