寫代碼、搜問題,全部都在終端完成!如此編程神器,是時候入手了
無論你是編程小白還是老司機,coding過程中總會遇到不懂的問題。
最常見的方法是去論壇詢問、谷歌搜索,需要反復在網頁和編譯器頁面切換,即使有兩個很大的分屏,生產力也會受到影響。
但是現在這個問題有希望解決了,一個便捷編程Q&A工具codequestion可以幫到你。
直接在終端輸入「你要問的問題」,用普通的自然語言就行,和你去谷歌搜索沒什么兩樣。

然后馬上就能返回詳細操作教程,實現了直接在終端用對話形式來查詢操作手冊。
這么好用的工具安裝起來也不復雜。
安裝教程
安裝codequestion最簡單的方法是通過pip或PyPI:
- pip install codequestion
當然,你也可以克隆Github上的項目到本地:
- pip install git+https://github.com/neuml/codequestion
安裝codequestion需要Python 3.6版本以上。
對于Linux系統來說,可以直接運行項目,但是Windows和Mac需要安裝額外項。
Windows需要安裝C++ Build Tools,地址如下:
- https://visualstudio.microsoft.com/visual-cpp-build-tools/
PyTorch Windows的二進制文件不在PyPI上,安裝時必須添加以下url鏈接:
- pip install txtai -f https://download.pytorch.org/whl/torch_stable.html
對于Mac來說,安裝前需要運行這個命令:
- brew install libomp
安裝步驟已經完成了,接下來看看實例測試吧
AI驅動的問答機制
codequestion下載完成以后,還需要安裝一個模型。
- python -m codequestion.download
這個模型的核心就是作者David Mezzetti之前開發的AI算法txtai。
txtai支持構建文本索引,執行相似性搜索,并創建基于提取式問題回答的系統。

作者還提供了預訓練的模型:
- unzip cqmodel.zip ~/.codequestion
codequestion是可以定制的,可以針對自定義的問答庫運行。目前,只支持Stack Exchange庫中的問題幫助,未來會有更多的支持選項。
完成模型安裝后,可以通過以下命令運行測試:
- mkdir -p ~/.codequestion/test/stackexchangewget https://raw.githubusercontent.com/neuml/codequestion/master/test/stackexchange/query.txt -P ~/.codequestion/test/stackexchangewget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gztar -C ~/.codequestion/test -xvzf Stsbenchmark.tar.gzpython -m codequestion.evaluate -s test
代碼中包含將測試數據下載到〜/ .codequestion / test中。
下面的表格顯示了各種詞向量/評分組合的測試結果。

SE 300d單詞向量與BM25評分在這個數據集中表現最好。即使減少了詞匯量的Stack Exchange問題,SE 300d - BM25在STS基準測試中的表現也相當不錯。
之前,量子位也介紹過一個相似的Linux命令行查詢工具,也是直接在終端輸入問題,返回答案。
不同的是,當時的工具howdoi是在在線技術論壇上搜索已有答案,范圍比較有限。
那么這次介紹的codequestion的AI驅動機制,有什么先進之處呢?
基本原理
第一步:原始數據轉儲處理
來自Stack Exchange庫的原始7z XML轉儲通過一系列步驟進行處理。
只有高分的問題和答案才會被檢索到,并存儲在模型中。
問題和答案被整合到一個名為questions.db的單一SQLite文件中。questions.db 的模式如下:
- Id INTEGER PRIMARY KEYSource TEXTSourceId INTEGERDate DATETIMETags TEXTQuestionTEXTQuestionUser TEXTAnswer TEXTAnswerUser TEXTReference TEXT
第二步:檢索
codequestion工具為questions.db建立了一個句子嵌入索引。
questions.db模式中的每個問題都會被標記,并解析為單詞嵌入。
詞嵌入模型是建立在questions.db上的自定義fastText模型。一旦某個token被轉換為單詞嵌入,就會創建一個加權的句子嵌入。
詞嵌入使用BM25索引對資源庫中的所有token進行加權。但有一個重要的修改:標簽被用來提升標簽標記的權重。
一旦question.db被轉換為句子嵌入的集合,它們就會被歸一化并存儲在Faiss中,從而可以進行快速的相似性搜索。
第三步:查詢
codequestion使用與索引相同的方法對每個查詢進行標記。這些標記被用來建立一個句子嵌入。根據Faiss索引對該嵌入句進行查詢,以找到最相似的問題。
離線開發好幫手
可以看出,這個codequestion工具的優勢在于靈活的搜索匹配問題,并且能夠根據問題回答的質量優先推選好的回答。
這一點是類似工具使用關鍵詞匹配搜索答案無法比擬的。
目前codequestion的局限在于只支持Stack Exchange中的問題,但是,作者承諾后期會加入更多的庫。

不少網友都反應,這個工具十分實用,尤其是它支持本地庫中的問答機制,對于有離線開發需求的碼農來說,幫助頗巨。
怎么樣?如果這個工具對你有用,那就趕快上手操作吧~
參考鏈接&傳送門:
Github地址:
https://github.com/neuml/codequestion
C++ Build Tools安裝地址:
https://visualstudio.microsoft.com/visual-cpp-build-tools/
量子位之前介紹過的Linux命令行查詢工具:
https://mp.weixin.qq.com/s/5vfQRsAZ4zEKOJnUNT8Ebg
【編輯推薦】