______ ___________________________________________________ / ____ / __ / ____ / __ ____ / | / _/ // __/ __ /// __/ _ / __ // | | / / / / / / _ / / / / _ / / / _ / / / / / / / / / / ___ | _ / / / a富終端接口聊天 ____/ ____/ ____/ ___/_/_/_/_/_/_/| _/__/__//__/__/寫在GO中。使用GO構建簡單,安全,可擴展的系統。 版權(©️)2024 @H0llyw00Dzz保留所有權利。
注意:此存儲庫是一項正在進行的工作(WIP)。
估計到達時間(ETA):未知。該項目是在我的空閒時間內個人開發的,與任何公司或企業努力無關。
在巡迴演出語言中巡迴演出後,在終端中構建它,以及探索Google的AI功能(目前與Gemini進行了Beta)。
筆記
該存儲庫是專門設計的,以遵守慣用的GO原則。 ?
在GO中發展可促進可伸縮性。以性能為中心的設計支持並發處理和有效的資源管理,這是需要隨著需求不斷增長的無縫擴展的應用程序的絕佳選擇。
GO的內存管理和靜態鍵入大大減少了關鍵錯誤的發生,例如內存洩漏,這些錯誤在解釋的語言中很普遍。這種穩定性對於與AI服務相互作用的長期終端應用至關重要。
筆記
Memory leaks是一個關鍵問題,尤其是在AI開發中。 GO的內存管理方法將其與眾不同,因為它比其他一些語言更有效地減輕了此類問題。這與其他語言中的眾多存儲庫形成了鮮明的對比,在其他語言中,記憶洩漏是一個頻繁且經常令人困惑的問題(我不理解何時在github中看起來其他回購)。
GitHub中,我不理解。有趣的事實:你知道嗎?如果您的Go代碼類似於if語句的叢林(想想10個以上的嵌套層 - 一個很大的禁忌!),則越少Go多,而更多的Stop-and-ask-for-directions 。使這些條件弄平,並讓您的代碼像塗抹'n幻燈片上的gopher了油脂一樣平穩地運行! ?
筆記
與front-end languages或other languages相比,這種Realistic Typing Animation專業功能在資源消耗(例如, memory,cpu )方面是經濟的。
:quit命令允許用戶以有序的方式結束會話。執行此命令後,它會提示使用AI的合作關閉序列,該命令會生成適當的再見消息。這種周到的設計通過提供自然和禮貌的對話封閉來增強用戶體驗,從而確保會話終止與對話本身一樣引人入勝。DebugOrErrorLogger DebugOrErrorLogger軟件包提供了一個簡化且高效的記錄系統,專門為需要強大的錯誤和Debug Logging Logging功能而設計的GO應用程序,並具有最小的開銷。DebugOrErrorLogger鑰匙功能?有條件的調試記錄:記錄器允許根據DEBUG_MODE環境變量有條件地輸出調試消息。設置為true時,詳細的調試信息將被打印到os.Stderr ,以幫助開發和故障排除過程。
?顏色編碼的錯誤輸出:記錄時的錯誤在紅色中明顯著色,使其在終端中脫穎而出以立即引起注意。在其他日誌輸出中,這種著色有助於快速識別錯誤。
? ?恐慌恢復:提供恢復功能,以優雅地處理和記錄運行時可能發生的任何恐慌。此功能可確保清楚地記錄著恐慌消息,並以有色的輸出記錄,從而阻止了該應用程序出乎意料的崩潰並有助於快速診斷。
⚡簡單的API :軟件包公開了一個簡單而直觀的API,使用調試和錯誤記錄的方法接受格式字符串和variadic參數,類似於標準的Printf和Println函數。
?環境變量配置:可以輕鬆地通過環境變量打開或關閉調試模式,從而可以靈活配置,而無需重新編譯應用程序。
筆記
上面列出的Current Features可能已過時。有關最新功能更新,請here閱讀文檔。
筆記
術語Streamlined Codebase是指Go編程中的高級,常見模式。這種模式強調了一種干淨良好的結構,這有助於理解和維護代碼。它通常涉及分開關注點,模塊化組件以及以下慣用慣例,以創建一個既高效又易於使用的代碼庫。
筆記
此專用功能比代碼更好地類似於if if if if語句成功集成的叢林。
通過採用此可擴展的命令處理系統,聊天應用程序的位置很好,可以與AI和用戶期望的進步一起發展,從而確保穩健且適合未來的用戶體驗。
筆記
主題計劃不斷改進並添加功能,增強功能,而不會增加不必要的複雜性。請繼續關注更新!
Go的設計是直接有效的,避免了其他編程語言經常遇到的不必要的複雜性(他媽的複雜性,這是go複雜性)。
優化的資源利用率:Gogenai終端聊天旨在最大程度地提高性能,同時最大程度地減少資源使用情況。通過利用GO的有效彙編和執行模型,該應用程序確保了快速響應時間和較低的開銷,這對於資源保護至關重要的系統是理想的選擇。
有效的並發管理:多虧了Go的輕量級goroutines和有效的同步原始功能,GoGenai終端聊天便於輕鬆處理並發操作。該應用程序可以同時為多個用戶提供服務,而不會大幅增加延遲或內存使用情況,從而確保即使在負載下也保持一致的性能。
該存儲庫包含高質量的GO代碼,該代碼尤其著重於Retry Policy Logic , Chat System Logic Other 。每個功能都是為了simplicity設計的,故意避免了不必要的stupid complexity ,即使在可能超過10+ stupid complexity得分的情況下。
要使用GoGenai終端接口聊天,您需要在計算機上安裝Docker。如果您沒有安裝Docker,請遵循官方Docker安裝指南。
設置Docker後,您可以通過運行從GitHub軟件包中拉出圖像:
docker pull ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latest提示
對於Go Programming的Master或Advanced ,尤其是在cloud engineering中的編程,此GoGenAI Terminal Interface Chat可以在不使用Docker的情況下在Cloud Shell ( for example, Google Cloud Shell )中運行。
要與Gogenai開始聊天會話,請在終端中運行以下命令。確保用提供給您的實際API密鑰替換YOUR_API_KEY 。
警告
在此問題here開始與GoGenAI開始聊天會話,請使用可以在此存儲庫中處理constant更好terminal或使用更好的內核來構建可以處理此存儲庫中constant
docker run -it --rm --name mychatapp -e API_KEY=YOUR_API_KEY ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latest此命令將以交互式模式啟動GoGenai終端聊天應用程序。您將能夠鍵入消息並從AI接收響應。
環境變量是可能影響應用程序行為的鍵值對。以下是GoGenai-terminal-Chat應用中使用的環境變量表,以及它們的描述以及是否需要它們。
| 多變的 | 描述 | 必需的 |
|---|---|---|
API_KEY | 您的API密鑰用於訪問生成AI模型。在此處獲取免費的API鍵。 | 是的 |
DEBUG_MODE | 設置為true以啟用DEBUG_MODE或false將其禁用。 | 不 |
SHOW_PROMPT_FEEDBACK | 設置為true以在響應頁腳中顯示及時反饋,或者false將其隱藏。 | 不 |
SHOW_TOKEN_COUNT | 設置為true以顯示AI的響應和聊天歷史記錄中使用的令牌計數,或者false將其隱藏。 | 不 |
筆記
計算Average Consumption指標,不包括使用數據庫之類的存儲系統,並且基於以下假設:每個函數相對簡單,平均環境複雜性為5作為最大值。但是,消費可能會隨著更複雜的功能而增加(例如,不建議使用循環複雜性的10個或更複雜的功能)。
筆記
Average Maximum Consumption指標基於human打字行為的模擬。這涉及通過角色渲染聊天響應,以模仿human打字的節奏和節奏。
警告
由於版本更改,這些screenshots可能會過時。
筆記
這? Simple Debugging很簡單,與骯髒的複雜邏輯go codes不同,它增加了cyclomatic complexity
?你:你好嗎?
? AI ::我是一個大型語言模型,由Google培訓。
?您:我對K8s有疑問,如何在Kubernetes中啟用審計記錄,分析日誌時應該尋找什麼?
? AI:要在Kubernetes中啟用審核記錄,您可以使用以下步驟:
/etc/kubernetes/manifests/kube-apiserver.yaml 。audit-policy部分下添加以下配置: enabled: true
可選,您可以配置以下設置:
policyFile :包含審核策略規則的文件的路徑。logPath :將存儲審核日誌的文件的路徑。logFormat :審核日誌的格式。maxBatchSize :將包含在一批批次中的最大審核事件數量。maxBatchWait :在將其寫入磁盤之前等待填充一批審核事件的最大時間。保存並重新啟動Kubernetes API服務器。
啟用審核日誌記錄後,您可以分析日誌以了解Kubernetes群集的活動。您可能想尋找的某些內容包括:
通過分析審核日誌,您可以識別安全風險,解決問題,並更好地了解如何使用Kubernetes群集。
您可能會發現一些其他資源:
$ go run cmd/main.go? AI:你好!我今天如何為您提供幫助?
?您:我有疑問是正確的,“為每個功能努力努力(旨在在5以下的循環複雜性來證明專業知識);簡單是掌握編程的標誌。” ?
? AI:是的,“在每個功能中為簡單性爭取努力(目標5下的循環複雜性以證明專業知識);簡單是GO編程掌握的跡象,通常是正確的。
循環複雜性是函數複雜性的度量。它是通過計算通過函數的獨立路徑數量來計算的。高環境複雜性表明該功能難以理解和維護。
簡單是GO編程的關鍵原則。 GO代碼通常簡潔且易於閱讀。這使得更容易理解和維護。
瞄準5下的循環複雜性是確保您的功能簡單易懂的好方法。這將幫助您編寫更好的代碼並避免引入錯誤。
當然,有時需要編寫更複雜的功能。但是,您應該始終盡可能地為簡單起見。
以下是編寫簡單功能的一些技巧:
通過遵循這些提示,您可以編寫簡單,易於理解的功能,以使您的代碼更加可維護和無漏洞。
?您:好的,有關信息
? AI:不客氣!我很高興能得到幫助。如果您還有任何問題,請隨時提出。
?您::退出
? AI:今天很高興為您提供幫助。請記住,如果您還有其他問題,我總是在這裡。保重,度過美好的一天!
GoGenai終端聊天應用程序提供了一個命令行界面,供用戶與生成AI模型進行交互。該應用程序處理用戶輸入,處理命令,與AI通信並維護聊天歷史記錄。它旨在擴展和擴展,以適應未來的增長和其他功能。
簡單的體系結構是為直接用例而設計的,並提供了基於終端的聊天應用程序所需的基本功能。
流圖LR
開始([start]) - > |用戶運行應用程序| init [初始化會話]
init-> |設置信號處理| SignalHandler [處理OS信號]
init-> |加載API鍵| apikeyvalidation {api鍵驗證}
apikeyvalidation-> |有效| setupclient [設置AI客戶端]
apikeyvalidation-> |無效| end([end])
setupclient-> |客戶端就緒| Mainloop [輸入主循環]
mainloop-> userInput [/用戶輸入/]
UserInput-> |命令| CommandHandler [句柄命令]
UserInput - > |聊天消息| sendmessage [將消息發送到AI]
CommandHandler - > |退出|結尾
CommandHandler - > |其他命令| ProcessCommand [Process命令]
sendmessage-> |接收AI響應|更新史[更新聊天歷史]
Update History-> DisplayResponse [顯示AI響應]
ProcessCommand-> Mainloop
DisplayResponse-> Mainloop
SignalHandler - > | Sigint/Sigterm |清理[清理資源]
清理 - >結束
可擴展的體系結構旨在處理增長,允許添加新命令,改進的錯誤處理以及與外部API的更複雜的相互作用。
流圖LR
開始([start]) - > |用戶運行應用程序| init [初始化會話]
init-> |設置信號處理| SignalHandler [處理OS信號]
init-> |加載API鍵| apikeyvalidation {api鍵驗證}
apikeyvalidation-> |有效| setupclient [設置AI客戶端]
apikeyvalidation-> |無效| end([end])
setupclient-> |客戶端就緒| Mainloop [輸入主循環]
mainloop-> userInput [/用戶輸入/]
UserInput-> |命令|命令註冊[命令註冊表]
UserInput - > |聊天消息| sendmessage [將消息發送到AI]
命令記錄 - > |退出|結尾
命令式 - > |其他命令| ProcessCommand [Process命令]
命令式 - > |令牌計數| TokencountingProcess [令牌計數過程]
命令記錄 - > |檢查模型| CheckModelProcess [CheckModelProcess]
sendmessage-> |接收AI響應|更新史[更新聊天歷史]
TokencountingProcess-> |接收AI響應| DisplayResponse [顯示AI響應]
CheckModelProcess-> |接收AI響應| DisplayResponse [顯示AI響應]
Update History-> DisplayResponse [顯示AI響應]
ProcessCommand-> Mainloop
DisplayResponse-> Mainloop
SignalHandler - > | Sigint/Sigterm |清理[清理資源]
清理 - >結束
ProcessCommand-> | API交互| apiclient [API客戶端]
apiclient-> | API響應| ProcessCommand
apiclient-> | API錯誤| ErrorHandler [錯誤處理程序]
ErrorHandler-> |處理錯誤| ProcessCommand
errorhandler-> |致命錯誤|結尾
TokencountingProcess-> |並發處理| conturrentProcessor [並發處理器]
concurrentProcessor - > |匯總結果| TokencountingProcess
concurrentProcessor-> |錯誤| ErrorHandler [錯誤處理程序]
ClassDef可伸縮填充:#4C9F70,中風:#333,卒中寬度:2px;
類命令註冊,Apiclient,ConcurrentProcessor可伸縮;
筆記
在上圖中,具有green填充顏色( #4c9f70 )的組件設計為可擴展,表明它們可以有效地處理生長並增加負載。這些組件包括Command Registry , API Client和Concurrent Processor 。
筆記
Scalable System's Architecture通過簡單性展示了對複雜性的有效處理。在此GO應用程序中,每個功能旨在保持平均cyclomatic complexity of 5或less 。
有關如何為該項目貢獻的詳細信息,請參閱我們的Contribution Guidelines 。
筆記
這是改進,修復和增強該項目功能的任務列表。將任務添加到此readme.md文件中,以確保在開發過程中不會忘記它們。
筆記
Reporting System旨在捕獲和處理GO應用程序中的運行時恐慌事件,從而促進了流線型錯誤報告和分析。
筆記
Create a Convert Result Table feature設計旨在將AI的輸出重新格式化為表格結構。
筆記
Enable Additional Responses功能旨在允許AI的其他響應,例如及時反饋。要激活此功能,請使用Environment Variable Configuration 。
實施任何未完成的功能
產卵額外的goroutines
筆記
Processing Multiple Image & Text Datasets for Token Counting功能受到保護,以防止race conditions和deadlocks 。此外,他們可以efficiently處理multiple text data或multiple image data 。
筆記
Pin Each Message for a Simpler Context Prompt旨在固定從json/txt/md等文件加載的消息。此功能與自動或手動摘要非常好,而不是用interpreted language撰寫。
筆記
Implement Gemini-Pro Vision Capabilities功能功能在命令功能中策略性地集成在命令功能中,例如圖像比較,圖像分析等。
筆記
該系統以go編寫,以確保Scalability和Stability 。 ?
:help 筆記
Automate Summarizing Conversations功能旨在自動匯總與ChatGptNextWeb類似的對話。但是,它是在終端接口中構建的,使其比OpenAI更容易訪問和負擔得起。此外,由於該終端接口是用GO編寫的,因此可以創建簡單,安全和可擴展的系統。
eg, issues with executing a scalable command handler ) :aitranslate命令筆記
Improve :aitranslate commands旨在增強翻譯功能,包括從文件,降價,文檔,CSV等轉換。正如GO編寫的那樣,它具有功能強大的標準庫?,例如,您可以使用命令:aitranslate :file data.csv 。
:safety命令ChatHistory中來改善AIResponse 筆記
Improve AIResponse by Storing the Original AI Response in ChatHistory涉及將AI的原始響應保存為ChatHistory 。此外,此操作會自動觸發Colorize功能的改進。
gemini-pro-vision )來利用ChatHistory 筆記
Leverage ChatHistory by automatically syncing for multi-modal use (gemini-pro-vision) ,將ChatHistory用作一種高效的,內存的數據存儲解決方案,而與C或其他語言不同的語言或導致memory leaks的其他語言不同。這樣可以確保各種模式的無縫同步和最佳性能。
[明確] retry policy將動態應用於主goroutine,允許獨立的錯誤處理和重試嘗試。
[明確]改進Error消息處理以使其更加動態。
Count Tokens操作過程中動態處理Error消息,並通過通道進行通信。其工作原理的說明:
測序圖
參與者主要作為主要goroutine
參與者G1為Goroutine 1
參與者G2為Goroutine 2
參與者G3為Goroutine 3
參與者CH作為錯誤渠道
參與者收集器作為錯誤收集器(稱為重試政策)
主 - >> CH:創建能力的渠道
主 - >> G1:啟動Goroutine 1
主 - >> G2:啟動Goroutine 2
主 - >> G3:啟動Goroutine 3
G1- >> CH:發送錯誤(如果有)
G2- >> CH:發送錯誤(如果有)
G3- >> CH:發送錯誤(如果有)
主 - >>收集器:開始收集錯誤
循環收集錯誤
CH- >>收集器:向收集器發送錯誤
結尾
主 - >>主:所有Goroutines完成後關閉頻道完成
收集器 - >>主:返回第一個非nil錯誤
提高Colorize以增強可擴展性,並將其與標準庫的正則表達式集成,以提高性能。
使用命令切換模型
筆記
一旦達到版本v1.0.0(此存儲庫),旨在支持與頂點AI功能的雲兼容性Plan for Google Cloud Deployment ,並在此處考慮穩定。
為什麼?該項目是按照personal use Terms of Service和Privacy Policy規定開發的。重要的是要注意,該項目是在我的業餘時間在個人的基礎上開發的,並且與任何公司或企業努力無關。這與許多主要滿足企業需求的公司形成鮮明對比。例如,可以在個人的基礎上用於微調和使用您自己的數據,而無需與企業級別的要求相關聯,可以在個人的基礎上使用Vertex AI功能。
筆記
Web Interface Support功能旨在促進WebAssembly(WASM)的支持,利用其在GO中的開發。這使聊天和其他功能的管理在本地版本v1.0.0+(可能是V2)開始,一旦達到並認為穩定,就可以管理聊天和其他功能。有關最佳實踐,請在此處閱讀。
筆記
Calculate the Size of the Code Base Volume旨在評估代碼庫的大小。例如,它可以計算Google的開源項目或其他開源項目的數量,該項目包含Go中編寫的數十行代碼。
Go Code中的每個函數轉換為Mermaid Markdown 筆記
該功能( Convert Each Function in Go Code to Mermaid Markdown )旨在評估代碼庫。它的靈感來自GO Tool Dead Code 。例如,它將每個可觸發功能轉換為Mermaid Markdown格式。
here可用