______ ___________________________________________________ / ____ / __ / ____ / __ ____ / | / _/ // __/ __ /// __/ _ / __ // | | / / / / / / _ / / / / _ / / / _ / / / / / / / / / / ___ | _ / / / 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的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 | 您的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可用