______ ______ ___ ____ / ____ / ___ / ____ / __ ____ / | / _/ // __/ __ /// __/ _ / __ // | | / / / / _ / / / / / / / _ / / __ / / / / / ___ | _ / / /リッチターミナルインターフェイスチャット ____/ ____/ ____/ ___/_///_/_/| _/___/goで書かれています。 GOでシンプルで安全なスケーラブルなシステムを構築します。 著作権(©€)2024 @h0llyw00dzz All rights reserved。
注:このリポジトリは、進行中の作業(WIP)です。
推定到着時間(ETA):不明。このプロジェクトは、私の自由な時期に個人的に開発されており、企業や企業の努力には関係ありません。
GOプログラミング言語の旅をツアーした後、ターミナルでそれを構築することに興味深いのは、GoogleのAI機能(現在はGeminiとのベータ版)を探索します。
注記
このリポジトリは、慣用的なGOの原則に準拠するように特別に設計されています。 ?
GOで開発すると、スケーラビリティが促進されます。パフォーマンス中心の設計は、同時処理と効率的なリソース管理をサポートしているため、需要の増加に伴いシームレスにスケーリングする必要があるアプリケーションに最適です。
GOのメモリ管理と静的タイピングは、解釈された言語で一般的なメモリリークなどの重要なバグの発生を大幅に減らします。この安定性は、AIサービスと相互作用する長期にわたるターミナルアプリケーションにとって重要です。
注記
Memory leaks 、特にAI開発において重大な懸念事項です。 Goのメモリ管理へのアプローチは、他の言語よりもそのような問題をより効果的に軽減するため、それを際立たせます。これは、メモリの漏れが頻繁でしばしば混乱する問題である他の言語の多数のリポジトリとはまったく対照的です( githubで他のリポジトリのように見えるとき、私は理解していません)。
GitHubなど、動的にタイプされた言語でしばしば遭遇する重要なセキュリティ問題を効果的に最小限に抑えます。楽しい事実:知っていましたか? Goコードがifステートメントのジャングルに似ている場合(10以上のネストされたレイヤーを考えてください - 大きなノーです!)、それは少なくGo 、より多くのStop-and-ask-for-directions 。これらの条件を平らにし、スリップ 'nスライドでグリースを塗ったgopherと同じくらいスムーズにコードを実行します! ?
注記
このRealistic Typing Animation専用の機能は、リソース集約型のfront-end languagesやother languagesとは対照的に、リソース消費( memory,cpu )の点で経済的です。
:quitコマンドを使用すると、ユーザーは整然とした方法でセッションを終了できます。このコマンドが実行されると、AIとの共同シャットダウンシーケンスが促され、適切なさよならメッセージが生成されます。この思慮深いデザインは、自然で丁寧な会話閉鎖を提供することにより、ユーザーエクスペリエンスを向上させ、セッション終了が会話そのものと同じくらい魅力的であることを保証します。DebugOrErrorLogger DebugOrErrorLoggerパッケージは、最小限のオーバーヘッドで堅牢なエラーとデバッグロギング機能を必要とするGOアプリケーション向けに特別に設計された合理化された効率的なロギングシステムを提供します。DebugOrErrorLoggerキー機能?条件付きデバッグロギング:ロガーでは、 DEBUG_MODE環境変数に基づいてデバッグメッセージを条件付き出力にすることができます。 trueに設定すると、詳細なデバッグ情報がos.Stderrに印刷され、開発とトラブルシューティングプロセスを支援します。
?色分けされたエラー出力:ログを記録すると、エラーが赤で明確に色付けされ、すぐに注意を払うために端末で目立たせます。この色付けは、他のログ出力の中でエラーを迅速に識別するのに役立ちます。
? ?パニック回復:回復機能が提供され、実行時に発生する可能性のあるパニックを優雅に処理して記録します。この関数により、パニックメッセージが明確に色付けされた出力でログに記録され、アプリケーションが予期せずにクラッシュするのを防ぎ、迅速な診断を支援することが保証されます。
simple Simple API :パッケージは、標準のPrintfおよびPrintln関数と同様に、形式の文字列とvariadic引数を受け入れるデバッグおよびエラーロギングの方法を使用して、シンプルで直感的なAPIを公開します。
?環境変数構成:デバッグモードは、環境変数を介してオンまたはオフに簡単に切り替えることができ、アプリケーションを再コンパイルする必要なく柔軟な構成を可能にします。
注記
上記のCurrent Features時代遅れかもしれません。最新の機能の更新については、 hereドキュメントをお読みください。
注記
Streamlined Codebaseという用語は、 Goプログラミングの高レベルで共通のパターンを指します。このパターンは、清潔でよく組織化された構造を強調し、コードの理解と維持を促進します。通常、懸念の分離、コンポーネントのモジュール化、および慣用慣行に従って、効率的で作業しやすいコードベースを作成することが含まれます。
注記
この専門的な機能は、コードよりも優れている場合は、IFステートメントが正常に統合されたif if if ifのジャングルに似ています。
このスケーラブルなコマンド処理システムを採用することにより、チャットアプリケーションは、AIとユーザーの期待の進歩とともに進化するように適切に配置されており、堅牢で将来のユーザーエクスペリエンスを確保します。
注記
科目は、機能を継続的に改善および追加することを計画し、不必要な複雑さを追加することなく機能を強化します。更新をお楽しみに!
Go 、他のプログラミング言語でしばしば遭遇する不必要な複雑さ(これはFUCKの複雑さ、これはgo反複雑さ)を避けるため、簡単で効率的であるように設計されています。
最適化されたリソース利用:Gogenaiターミナルチャットは、リソースの使用を最小限に抑えながらパフォーマンスを最大化するように設計されています。 GOの効率的なコンピレーションと実行モデルを活用することにより、アプリケーションは迅速な応答時間と低オーバーヘッドを保証し、リソースの保存が最重要であるシステムに最適です。
効率的な並行性管理:Goの軽量ゴルチンと効果的な同期プリミティブのおかげで、Gogenaiターミナルチャットは同時操作を簡単に処理します。アプリケーションは、レイテンシやメモリの使用量を大幅に増加させることなく、複数のユーザーに同時にサービスを提供でき、負荷がかかっても一貫したパフォーマンスを確保できます。
このリポジトリにはRetry Policy Logic 、 Chat System Logic Otherに特に焦点を当てた高品質のGOコードが含まれています。各関数は、 stupid complexityを10+を超える可能性があるシナリオであっても、不必要なstupid complexity意図的に回避するために、 simplicityために設計されています。
Gogenaiターミナルインターフェイスチャットを使用するには、マシンにDockerをインストールする必要があります。 Dockerがインストールされていない場合は、公式のDockerインストールガイドに従ってください。
Dockerがセットアップされたら、実行してGitHubパッケージから画像を引き出すことができます。
docker pull ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestヒント
MasterまたはAdvanced of Go Programming 、特にcloud engineeringの場合、このGoGenAI Terminal Interface Chat Dockerを使用せずにCloud Shell ( for example, Google Cloud Shell )で実行できます。
Gogenaiとのチャットセッションを開始するには、ターミナルで次のコマンドを実行します。 YOUR_API_KEY必ず提供した実際のAPIキーに置き換えてください。
警告
GoGenAIとのチャットセッションを開始するためにこの問題が原因here 、このリポジトリでconstant処理できるより良いterminalを使用するか、このリポジトリでconstant処理できるより良いカーネルで独自のOSを構築する
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 | 生成AIモデルにアクセスするためのAPIキー。ここで無料のAPIキーを取得します。 | はい |
DEBUG_MODE | DEBUG_MODEを有効にするためにtrueに設定するか、 falseを無効にします。 | いいえ |
SHOW_PROMPT_FEEDBACK | 応答フッターに迅速なフィードバックを表示するためにtrueに設定するか、それを非表示にするためのfalse 。 | いいえ |
SHOW_TOKEN_COUNT | AIの応答とチャット履歴で使用されているトークンカウントを表示するためにtrueに設定するか、それを隠すためにfalse 。 | いいえ |
注記
Average Consumptionメトリックは、データベースのようなストレージシステムを使用することなく計算され、各関数は比較的単純であり、平均サイクロマティックな複雑さが最大値として5つあるという仮定に基づいています。ただし、消費はより複雑な機能(たとえば、10以上の環状複雑さを持つ関数)とともに増加する可能性がありますが、これは推奨されません)。
注記
Average Maximum Consumptionメトリックは、 humanタイピング行動のシミュレーションに基づいています。これには、 humanタイピングのリズムとペースを模倣するために、キャラクターによってチャット応答のキャラクターをレンダリングすることが含まれます。
警告
これらのscreenshots 、バージョンの変更により時代遅れになる場合があります。
注記
これ? Simple Debugging 、 cyclomatic complexityの増加を示す、恥ずかしがり屋の複雑なロジックgo codesは異なり単純です
?あなた:こんにちは?
? AI ::私はGoogleによって訓練された大規模な言語モデルです。
?あなた:K8について質問があります。Kubernetesで監査ログを有効にするにはどうすればよいですか?ログを分析する際に何を探すべきですか?
? AI:Kubernetesで監査ログを有効にするには、次の手順を使用できます。
/etc/kubernetes/manifests/kube-apiserver.yaml kubernetes/manifests/kube-apiserver.yamlにあるKubernetes APIサーバー構成ファイルを編集します。audit-policyセクションの下に追加します。 enabled: true
オプションで、次の設定を構成できます。
policyFile :監査ポリシールールを含むファイルへのパス。logPath :監査ログが保存されるファイルへのパス。logFormat :監査ログの形式。maxBatchSize :単一のバッチに含める監査イベントの最大数。maxBatchWait :ディスクに書き込む前に、監査イベントのバッチが記入されるのを待つ時間の最大時間。Kubernetes APIサーバーを保存して再起動します。
監査ロギングが有効になったら、ログを分析して、Kubernetesクラスターのアクティビティに関する洞察を得ることができます。あなたが探したいかもしれないいくつかのものは次のとおりです:
監査ログを分析することにより、セキュリティリスクを特定し、問題のトラブルシューティングを行い、Kubernetesクラスターの使用方法をよりよく理解することができます。
ここにあなたが役立つと思うかもしれないいくつかの追加のリソースがあります:
$ go run cmd/main.go? AI:こんにちは!今日はどうすればお手伝いできますか?
?あなた:「各機能の単純さを目指して努力している(専門知識を示すために5未満の5歳未満の環状複雑さを目指している)については、これが正しいことをしています。 ?
? AI:はい、「各関数の単純さを目指して努力します(専門知識を示すために5未満の5歳未満の環状複雑さを目指します)。シンプルさはGOプログラミングの習熟の兆候です」は一般的に正しいです。
環状複雑さは、関数の複雑さの尺度です。関数を通じて独立したパスの数をカウントすることによって計算されます。高い環状複雑さは、機能を理解して維持することが困難であることを示しています。
シンプルさは、GOプログラミングの重要な原則です。 GOコードは通常、簡潔で読みやすいです。これにより、理解して維持しやすくなります。
5未満の環状複雑さを目指すことは、機能がシンプルで理解しやすいことを保証する良い方法です。これにより、より良いコードを作成し、バグの導入を避けるのに役立ちます。
もちろん、より複雑な関数を記述する必要がある場合があります。ただし、可能な限り簡単にするために常に努力する必要があります。
簡単な機能を書くためのヒントを次に示します。
これらのヒントに従うことで、コードをより保守しやすく、バグフリーにするシンプルで理解しやすい関数を書くことができます。
? YOU:詳細についてはわかりました
? AI:どういたしまして!助けてくれてうれしいです。これ以上質問がある場合は、お気軽にお問い合わせください。
?あなた::終了
? AI:今日はあなたを助ける喜びでした。覚えておいてください、あなたがこれ以上質問があるならば、私はいつもここにいます。気をつけて素晴らしい一日を!
Gogenaiターミナルチャットアプリケーションは、ユーザーが生成AIモデルと対話するためのコマンドラインインターフェイスを提供します。アプリケーションは、ユーザーの入力を処理し、コマンドをプロセスし、AIと通信し、チャット履歴を維持します。将来の成長と追加機能に対応するために、拡張可能でスケーラブルであるように設計されています。
シンプルなアーキテクチャは、簡単なユースケース向けに設計されており、ターミナルベースのチャットアプリケーションに必要な基本的な機能を提供します。
フローチャートLR
start([start]) - > |ユーザーがアプリケーションを実行します| init [初期化セッション]
init-> |信号処理|を設定しますSignalHandler [OS信号を処理]
init-> | APIキーをロード| apikeyvalidation {APIキー検証}
ApikeyValidation-> | valid | setupClient [AIクライアントのセットアップ]
ApikeyValidation-> |無効|終了([終了])
setupClient - > |クライアントREADY | Mainloop [メインループを入力]
mainloop-> userInput [/user input/]
userininput-> | command | CommandHandler [ハンドルコマンド]
userininput-> |チャットメッセージ| sendmessage [AIにメッセージを送信]
コマンドハンドラー - > | quit |終わり
CommandHandler-> |その他のコマンド| ProcessCommand [プロセスコマンド]
sendMessage-> | AI応答を受信| updatehistory [チャット履歴を更新]
updatehistory-> displayResponse [AI応答を表示]
ProcessCommand-> Mainloop
displayResponse-> mainloop
SignalHandler-> | sigint/sigterm |クリーンアップ[クリーンアップリソース]
クリーンアップ - >終了
スケーラブルなアーキテクチャは、成長を処理するように設計されており、新しいコマンドの追加、エラー処理の改善、および外部APIとのより複雑な相互作用を可能にします。
フローチャートLR
start([start]) - > |ユーザーがアプリケーションを実行します| init [初期化セッション]
init-> |信号処理|を設定しますSignalHandler [OS信号を処理]
init-> | APIキーをロード| apikeyvalidation {APIキー検証}
ApikeyValidation-> | valid | setupClient [AIクライアントのセットアップ]
ApikeyValidation-> |無効|終了([終了])
setupClient - > |クライアントREADY | Mainloop [メインループを入力]
mainloop-> userInput [/user input/]
userininput-> | command |コマンドレジストリ[コマンドレジストリ]
userininput-> |チャットメッセージ| sendmessage [AIにメッセージを送信]
コマンドレジストリー - > | quit |終わり
コマンドレジストリ - > |その他のコマンド| ProcessCommand [プロセスコマンド]
コマンドレジストリ - > |トークンカウント| tokencountingProcess [トークンカウントプロセス]
CommandRegistry-> |モデルを確認| CheckModelProcess [CheckModelProcess]
sendMessage-> | AI応答を受信| updatehistory [チャット履歴を更新]
tokencountingProcess-> | AI応答を受信| displayResponse [AI応答を表示]
CheckModelProcess-> | AI応答を受信| displayResponse [AI応答を表示]
updatehistory-> displayResponse [AI応答を表示]
ProcessCommand-> Mainloop
displayResponse-> mainloop
SignalHandler-> | sigint/sigterm |クリーンアップ[クリーンアップリソース]
クリーンアップ - >終了
ProcessCommand - > | APIインタラクション| Apiclient [APIクライアント]
Apiclient-> | API応答| ProcessCommand
Apiclient - > | APIエラー|エラーハンドラー[エラーハンドラー]
エラーハンドラー - > |エラーを処理| ProcessCommand
ErrorHandler-> |致命的なエラー|終わり
tokencountingProcess-> |同時処理| concurrentprocessor [concurrentプロセッサ]
concurrentProcessor-> |集計結果| tokencountingProcess
concurrentProcessor-> |エラー|エラーハンドラー[エラーハンドラー]
ClassDefスケーラブルフィル:#4C9F70、ストローク:#333、ストロークウィッド:2px;
クラスコマンドレジストリ、アピカリエント、scurrentprocessorスケーラブル。
注記
上の図では、 greenの塗りつぶし( #4c9f70 )のコンポーネントがスケーラブルになるように設計されており、成長と荷重の増加を効果的に処理できることを示しています。これらのコンポーネントには、 Command Registry 、 API Client 、およびConcurrent Processorが含まれます。
注記
Scalable System's Architectureシンプルさを通じて複雑さの効率的な取り扱いを示しています。このGOアプリケーションでは、各関数は、5 less cyclomatic complexity of 5を維持するように設計されています。
このプロジェクトにどのように貢献できるかについての詳細については、 Contribution Guidelinesを参照してください。
注記
これは、このプロジェクトの機能を改善、修正、強化するためのタスクのリストです。タスクは、このreadme.mdファイルに追加され、開発プロセス中に忘れられないようにします。
注記
Reporting System 、GOアプリケーションでランタイムパニックイベントをキャプチャおよび処理するように設計されており、合理化されたエラーの報告と分析を促進します。
注記
Create a Convert Result Table feature機能は、AIから表形式構造に出力を再フォーマットするように設計されています。
注記
Enable Additional Responses機能は、迅速なフィードバックなど、AIからの追加の応答を許可するように設計されています。この機能を有効にするには、 Environment Variable Configurationを使用します。
実装されていない機能を実装します
追加のゴルチンを産みます
注記
Processing Multiple Image & Text Datasets for Token Counting機能は、 race conditionsやdeadlocksから保護されています。さらに、 multiple text dataまたはmultiple image data efficiently処理できます。
注記
Pin Each Message for a Simpler Context Prompt json/txt/mdなどのファイルからロードされたメッセージをPINするように設計されています。この機能は、 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に元のAI応答を保存することにより、 AIResponse改善します注記
強化は、 Improve AIResponse by Storing the Original AI Response in ChatHistory 、AIから元の応答をChatHistoryに保存することが含まれます。さらに、このアクションは、 Colorize機能の改善を自動的にトリガーします。
ChatHistoryを活用します( gemini-pro-vision ) 注記
Leverage ChatHistory by automatically syncing for multi-modal use (gemini-pro-vision)活用する強化は、 Cやmemory leaks引き起こす他の言語とは異なり、非常に効率的なメモリ内データストレージソリューションとしてChatHistoryを利用します。これにより、さまざまなモードでシームレスな同期と最適なパフォーマンスが保証されます。
[明示] retry policyはメインゴルチンに動的に適用され、独立したエラー処理と再試行が可能になります。
[明示] Errorメッセージの処理を改善して、より動的にします。
Count Tokens操作中にErrorメッセージを動的に処理し、チャネルを通信します。それがどのように機能するかのイラスト:
Sequendediagram
メインゴルウチンとしての参加者Main
ゴルチン1としての参加者G1
Goroutine 2としての参加者G2
ゴルチン3としての参加者G3
エラーチャネルとしての参加者CH
エラーコレクターとしての参加者コレクター(再試行ポリシーと呼ばれる)
メイン - >> CH:容量を備えたチャネルを作成します
メイン - >> G1:ゴルチン1を開始します
メイン - >> G2:Goroutine 2を開始します
メイン - >> G3:ゴロウチン3を開始します
g1- >> ch:エラーを送信します(ある場合)
g2- >> ch:エラーを送信します(ある場合)
g3- >> ch:エラーを送信します(ある場合)
メイン - >>コレクター:エラーの収集を開始します
ループはエラーを収集します
ch- >>コレクター:コレクターにエラーを送信します
終わり
メイン - >>メイン:すべてのゴロウチンが完了した後、チャンネルを閉じます
コレクター - >>メイン:最初の非nilエラーを返します
スケーラビリティを向上させるためにColorize改善し、パフォーマンスを向上させるために標準のライブラリの再認識と統合します。
コマンドを使用してモデルを切り替えます
注記
Plan for Google Cloud Deploymentバージョンv1.0.0(このリポジトリ)に到達し、ここで安定した読み物と見なされると、頂点AI機能とのクラウド互換性をサポートすることを目的としています。
なぜ?このプロジェクトは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入手できます