simpleaichat

GitHub
3.5k 223 简单 1 次阅读 今天MIT开发框架图像语言模型Agent
AI 解读 由 AI 自动生成,仅供参考

simpleaichat 是一个专为 Python 开发者设计的轻量级库,旨在以极简的代码轻松对接 ChatGPT、GPT-4 等主流聊天模型。它主要解决了传统 AI 集成方案代码繁琐、Token 消耗高导致成本与延迟增加的问题,让开发者无需深入底层细节即可快速构建应用。

无论是希望快速原型验证的工程师,还是需要高效处理多任务的研究人员,simpleaichat 都能提供极大便利。其核心亮点在于极致的优化工作流:仅需几行代码即可创建并运行对话,支持异步处理和流式响应,能显著减少 Token 用量从而降低费用并提升速度。此外,它还具备同时运行多个独立会话的能力,并允许通过结构化数据模型构建复杂的智能体(Agent)工作流。

除了作为开发库,simpleaichat 还贴心地提供了命令行交互模式,用户可直接在终端启动自定义角色的对话,甚至模拟特定风格(如用表情符号说话或模仿影视角色),为测试和娱乐增添了趣味。如果你追求在保持代码简洁的同时,充分挖掘现代大模型的潜力,simpleaichat 是一个值得尝试的高效工具。

使用场景

某初创团队的技术负责人需要快速构建一个能同时为多位开发者提供定制化代码建议的异步助手集群,以加速内部工具的原型开发。

没有 simpleaichat 时

  • 代码冗余严重:原生调用需编写大量样板代码来处理会话状态、历史消息管理及 API 鉴权,导致核心逻辑被淹没。
  • 并发实现困难:若要同时服务多个开发者或运行多个独立对话线程,手动管理异步任务和上下文切换极易出错且耗时。
  • 成本与延迟失控:缺乏内置的 Token 优化机制,每次交互都携带冗余信息,导致 API 调用成本高昂且响应速度慢。
  • 调试门槛高:底层封装复杂,出现异常时难以快速定位是网络问题、参数错误还是逻辑漏洞,排查效率低下。

使用 simpleaichat 后

  • 极简代码集成:仅需几行代码即可初始化具备完整会话记忆的 AI 聊天实例,让开发者专注于业务逻辑而非底层对接。
  • 原生异步支持:内置强大的 Async 功能,可轻松在同一时间内并行运行多个独立对话,完美适配多用户或批量处理场景。
  • 智能成本优化:自动采用优化的工作流最小化 Token 消耗,在保持高质量输出的同时,显著降低费用并提升响应速度。
  • 透明易维护:精简的代码库结构让内部机制一目了然,无需深入“黑盒”即可轻松调试和扩展功能。

simpleaichat 通过极致的简化与性能优化,让开发者能以最低的成本和代码量,快速构建出高效、可扩展的 AI 聊天应用。

运行环境要求

操作系统
  • 未说明 (适用于所有支持 Python 和 pip 的操作系统)
GPU

不需要 (该工具为 OpenAI API 的客户端封装,计算在云端进行)

内存

未说明

依赖
notes该工具本身不运行本地大模型,因此无需 GPU 或大量内存。主要依赖是有效的 OpenAI API Key。支持异步操作、流式输出、工具调用(Function Calling)以及基于 Pydantic 的结构化数据输入输出。可通过命令行直接启动交互式聊天。
python3.8+
pydantic
python-dotenv
simpleaichat hero image

快速开始

simpleaichat

from simpleaichat import AIChat

ai = AIChat(system="根据用户提供的项目名称,撰写一份精美的 GitHub README。")
ai("simpleaichat")

simpleaichat 是一个 Python 包,旨在以最少的代码复杂度和强大的功能,轻松地与 ChatGPT、GPT-4 等聊天应用进行交互。该工具专为高效、低成本地使用 ChatGPT 而设计,同时在现代 AI 技巧方面远超大多数实现方式:

  • 仅需几行代码即可创建并运行对话!
  • 优化的工作流程可最大限度减少使用的 token 数量,从而降低费用并缩短响应时间。
  • 可同时运行多个独立的对话。
  • 代码库极简:无需深入理解底层细节!
  • 支持流式回复以及工具调用。
  • 提供异步支持,包括流式传输和工具调用。
  • 如有需要,还可构建更复杂但清晰的工作流,例如智能体。(演示即将推出!)
  • 即将支持更多聊天模型(如 PaLM、Claude)!

以下是几个有趣且可玩的示例,展示 simpleaichat 的强大功能:

  • 创建一个 Python 编程助手,完全避免不必要的输出,使生成速度提升 5 倍,成本仅为原来的三分之一。(Colab
  • 让 simpleaichat 按照 ChatGPT 使用指南,提供 内联提示。(Colab
  • 使用异步接口,在接收一条 AI 消息的时间内,同时进行 多轮对话。(Colab
  • 利用 高级结构化数据模型,创建属于你自己的桌面角色扮演游戏(TTRPG)设定与战役。(Colab

安装

您可以通过 PyPI 安装 simpleaichat:

pip3 install simpleaichat

快速趣味演示

使用 simpleaichat,您可以非常迅速地体验聊天应用!首先,您需要获取 OpenAI API 密钥,然后只需一行代码:

from simpleaichat import AIChat

AIChat(api_key="sk-...")

如此一来,您便可以直接进入一个交互式聊天界面!

这个 AI 聊天模拟了 OpenAI 官网应用的行为,只不过是在您的本地计算机上运行!

您也可以通过在工作目录下创建一个包含 OPENAI_API_KEY 字段的 .env 文件来存储 API 密钥(推荐),或者直接将环境变量 OPENAI_API_KEY 设置为您的 API 密钥。

那么,如何创建自定义对话呢?这就更有趣了!只需输入您想与之交谈的任何人物、地点或事物——无论是虚构的还是真实的——即可!

AIChat("GLaDOS")  # 假设已通过上述方法加载 API 密钥

但这还不是全部!您还可以通过额外的指令精确控制他们的行为!

AIChat("GLaDOS", "以《宋飞正传》独白的风格说话")

AIChat("麦当劳叔叔", "只用表情符号交流")

想要立即来一场社交互动吗?安装 simpleaichat 后,您甚至可以直接从命令行启动这些对话!

simpleaichat
simpleaichat "GlaDOS"
simpleaichat "GLaDOS" "以《宋飞正传》独白的风格说话"

构建基于 AI 的应用

与早期 GPT-3 不同的是,新一代聊天型应用引入了系统提示这一新特性:这是一种能够引导整个对话中 AI 行为的特殊类型提示。事实上,上面的聊天演示实际上都暗含了 系统提示技巧!OpenAI 还发布了官方指南 系统提示最佳实践,帮助开发者构建 AI 应用。

对于开发者而言,您可以通过显式指定系统提示,或关闭控制台模式,来实例化 AIChat 类的程序化对象。

ai = AIChat(system="您是一位乐于助人的助手。")
ai = AIChat(console=False)  # 与上相同

您还可以传递 model 参数,例如如果您有权访问 GPT-4,则可以设置为 model="gpt-4";如果使用具有更大上下文窗口的 ChatGPT,则可以设置为 model="gpt-3.5-turbo-16k"

随后,您可以向新的 ai 对象输入用户问题,它会返回并保存来自 ChatGPT 的回复:

response = ai("加州的首都是哪里?")
print(response)
加州的首都是萨克拉门托。

此外,如果文本生成速度较慢,您还可以通过生成器按 token 流式获取回复:

for chunk in ai.stream("加州的首都是哪里?", params={"max_tokens": 5}):
    response_td = chunk["response"]  # 字典包含新增 token 的“delta”及完整回复
    print(response_td)
加
加利
加利福
加利福尼亚
加利福尼亚州
加利福尼亚州是

再次调用 ai 对象将继续对话,并自动整合之前的对话内容。

response = ai("它是什么时候建立的?")
print(response)
萨克拉门托成立于 1850 年 2 月 27 日。

您还可以将聊天会话保存为 CSV 或 JSON 格式,并在以后加载。不过,API 密钥不会被保存,因此在加载时仍需提供。

ai.save_session()  # 保存为 CSV,仅保存消息
ai.save_session(format="json", minify=True)  # 保存为 JSON

ai.load_session("my.csv")
ai.load_session("my.json")

函数

许多由风投支持的热门 ChatGPT 应用其实并未真正利用模型的“聊天”功能。相反,它们只是将系统提示或首次用户提示当作一种自然语言编程的方式。您可以通过在生成文本时传递新的系统提示,并不保存生成的消息,来模仿这种行为。

AIChat 类管理的是聊天 会话,这意味着您可以同时进行多个独立的对话或函数调用!上述示例使用的是默认会话,但您可以通过在调用 ai 时指定 id 来创建新的会话。

json = '{"title": "一个整数数组", "array": [-1, 0, 1]}'
functions = [
             "将用户提供的 JSON 格式化为 YAML。",
             "根据用户提供的 JSON 写一首打油诗。",
             "将用户提供的 JSON 从英语翻译成法语。"
            ]
params = {"temperature": 0.0, "max_tokens": 100}  # 温度为 0.0 时,结果是确定性的

# 我们通过 `id` 对函数进行命名空间划分,这样就不会影响其他对话。
# 在会话创建时设置的参数将应用于该会话中的所有生成内容,
# 但你也可以为每次生成单独更改这些参数,就像这里的 `system` 提示一样。
ai = AIChat(id="function", params=params, save_messages=False)
for function in functions:
    output = ai(json, id="function", system=function)
    print(output)
标题: "一个整数数组。"
数组:
  - -1
  - 0
  - 1
一个整数数组多么整齐,
数值之妙无人能及,
从负一到正一,
范围真是有趣极,
这份 JSON 真是美妙无比!
{"titre": "Un tableau d'entiers.", "tableau": [-1, 0, 1]}

ChatGPT 的新版本还支持“函数调用”,但该功能真正的优势在于它能够支持结构化输入和/或输出,这为各种应用场景打开了大门!simpleaichat 简化了工作流程,让你只需传递 input_schema 和/或 output_schema 即可。

你可以使用 pydantic 的 BaseModel 来构建模式。

from pydantic import BaseModel, Field

ai = AIChat(
    console=False,
    save_messages=False,  # 使用模式 I/O 时,消息永远不会被保存
    model="gpt-3.5-turbo-0613",
    params={"temperature": 0.0},
)

class get_event_metadata(BaseModel):
    """活动信息"""

    description: str = Field(description="活动描述")
    city: str = Field(description="活动举办城市")
    year: int = Field(description="活动举办年份")
    month: str = Field(description="活动举办月份")

# 返回一个字典,键的顺序与模式中定义的一致
ai("首款 iPhone 发布会", output_schema=get_event_metadata)
{'description': '首款 iPhone 是由苹果公司发布的。',
 'city': '旧金山',
 'year': 2007,
 'month': '一月'}

更多关于模式功能的详细演示,请参阅 TTRPG 生成器笔记本

工具

与 ChatGPT 交互的最新方式之一是让模型使用“工具”。正如 LangChain 所推广的那样,工具使模型能够决定何时调用自定义函数,这些函数不仅可以扩展聊天 AI 本身的功能,还可以用于从互联网上检索聊天 AI 训练数据中未包含的最新信息。这种工作流程类似于 ChatGPT 插件。

解析模型输出以调用工具通常需要一些复杂的操作,但 simpleaichat 使用了一个巧妙的技巧 (a neat trick),使其快速且可靠!此外,指定的工具会返回一个 context,供 ChatGPT 在最终响应中参考;你指定的工具还可以返回一个字典,其中可以填充任意元数据,用于调试和后处理。每次生成都会返回一个包含 response 和所用 tool 函数的字典,这可用于构建类似 LangChain 风格代理的工作流,例如递归地向模型提供输入,直到模型判断不再需要使用任何工具为止。

你需要指定带有文档字符串的函数,以便为 AI 提供选择工具的提示:

from simpleaichat.utils import wikipedia_search, wikipedia_search_lookup

# 这里使用维基百科搜索 API。
# 搜索结果具有不确定性,效果可能因人而异。
def search(query):
    """搜索互联网。"""
    wiki_matches = wikipedia_search(query, n=3)
    return {"context": ", ".join(wiki_matches), "titles": wiki_matches}

def lookup(query):
    """查找有关某个主题的更多信息。"""
    page = wikipedia_search_lookup(query, sentences=3)
    return page

params = {"temperature": 0.0, "max_tokens": 100}
ai = AIChat(params=params, console=False)

ai("旧金山旅游景点", tools=[search, lookup])
{'context': "渔人码头、旧金山、美国的旅游景点、伦巴底街(旧金山)",
 'titles': ["渔人码头、旧金山",
  '美国的旅游景点',
  '伦巴底街(旧金山)'],
 'tool': 'search',
 'response': '旧金山有许多热门的旅游景点,包括渔人码头和伦巴底街。渔人码头是一个热闹的海滨地区,以其海鲜餐厅、纪念品商店和海狮观赏而闻名。另一方面,伦巴底街是一条著名的蜿蜒街道,拥有八个急转弯,吸引了来自世界各地的游客。对于任何访问旧金山的人来说,这两个景点都是必去之地。'}
ai("伦巴底街?", tools=[search, lookup])
{'context': '伦巴底街是加利福尼亚州旧金山的一条东西向街道,因其一段陡峭的单行路段上有八个急转弯而闻名。这条街道从要塞区向东延伸至滨水区(在电报山处有一段中断),其西部大部分路段是一条重要的交通干道,被指定为美国101号公路的一部分。而那条著名的单行路段,号称“世界上最曲折的街道”,位于俄罗斯山社区的东部路段。',
 'tool': 'lookup',
 'response': '伦巴底街是加利福尼亚州旧金山一条著名的街道,以其陡峭的单行路段上的八个急转弯而闻名。它从要塞区一直延伸到滨水区,在电报山处有一段中断。该街道的西部路段是一条重要的交通干道,被指定为美国101号公路的一部分;而那条著名的单行路段,号称“世界上最曲折的街道”,则位于俄罗斯山社区的东部路段。'}
ai("谢谢你的帮助!", tools=[search, lookup])
{'response': '不客气!如果您还有任何问题或需要进一步的帮助,请随时提问。',
 'tool': None}

其他说明

  • 与之前的 gpt-2-simple 一样,发布 simpleaichat 的主要动机在于进一步 democratize ChatGPT 的访问权限,并为非技术人员提供更多透明度,了解基于聊天 AI 的应用在底层是如何工作的,尤其是在关于其能力的媒体 misinformation 极其普遍的情况下。这一想法源于我在 BuzzFeed 工作时的实际经验:在长期使用流行的 LangChain 后,我发现一个更简单的实现不仅更容易维护,而且生成效果也更好。在阅读了一个充满类似抱怨的 Hacker News 帖子 后,我开始将开发重点转向 simpleaichat,这表明对于现代 AI 技巧来说,一个更易用的界面确实具有价值。
    • simpleaichat 在可能的情况下非常有意识地避免将功能与常见用例(例如 Tools)耦合在一起,以防止因难以实现项目文档中未明确提及的功能而导致的软件 lock-in。simpleaichat 的理念是提供良好的演示示例,然后让用户的创造力和业务需求占据主导地位,而不是像 LangChain 那样被迫将圆柱塞进方孔。
    • simpleaichat 确实简化了与聊天 AI 的交互,但它并未试图解决大型语言模型在互联网上训练所固有的常见技术和伦理问题,包括 prompt injection 和无意的 plagiarism。用户在使用 simpleaichat 时应保持良好的判断力。任何违反 OpenAI 使用政策 的 simpleaichat 使用场景(包括 jailbreaking)均不被支持。
    • simpleaichat 故意没有采用“Agent”这一用于工具工作流的逻辑隐喻,因为它已经成为一个与本源严重脱节的 AI 虚热词汇。如果需要,你可以通过一个 while 循环来模拟 Agent 工作流,而无需太多额外代码,同时还具备更高的灵活性,比如调试能力。
  • 会话管理器实现了一些合理的安全默认设置,例如默认使用 UUID 作为会话 ID、以尽量减少意外泄露的方式存储认证信息,以及通过 Pydantic 进行类型强制。不过,您的最终用户应用程序仍需注意潜在的安全问题。
  • 尽管 OpenAI 的文档指出,系统提示的效果不如以类似方式构建的用户提示,但根据我的经验,它在维持规则或 persona 方面仍然表现得更好。
  • 许多流行的提示示例都采用了更具对话性的风格,而这里的示例提示则更加简洁和命令式。提示工程的这一方面仍在不断发展,但根据我的经验,命令形式的提示在 ChatGPT 上表现更好,且 token 效率更高。这也是 simpleaichat 允许用户指定系统提示(并明确指出默认用法)而非依赖于历史最佳实践的原因。
  • 异步操作的 token 计数目前不受支持,因为 OpenAI 在流式响应时不会返回 token 计数。总体而言,不同用例下的 token 计数和实际用量之间可能存在一些不同步;我正在努力对这些情况进行分类。
  • 除明确标注的示例外,本 README 中没有任何内容是由 AI 生成的。开头的代码示例只是一个玩笑,但它确实是一个太好的真实应用场景!

路线图

  • 支持 PaLM Chat(Bard)和 Anthropic Claude
  • 基于 Textual 构建一个更具趣味性和功能性的 CLI 聊天应用
  • 提供一个在 Web 应用中使用 simpleaichat 的简单示例
  • 提供一个以无状态方式使用 simpleaichat 的简单示例(例如 AWS Lambda 函数)

维护者/创建者

Max Woolf (@minimaxir)

Max 的开源项目由他的 PatreonGitHub Sponsors 支持。如果您觉得这个项目有所帮助,欢迎向 Patreon 捐款,您的每一份支持都将得到妥善利用。

许可证

MIT

版本历史

v0.2.22023/07/24
v0.2.12023/07/03
v0.2.02023/06/19
v0.1.12023/06/09
v0.1.02023/06/08
v0.0.12023/06/07

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|2周前
Agent开发框架图像

n8n

n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。

184.7k|★★☆☆☆|今天
数据工具开发框架Agent

AutoGPT

AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台,核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点,让用户只需设定目标,AI 即可自主规划步骤、调用工具并持续运行直至完成任务。 无论是开发者、研究人员,还是希望提升工作效率的普通用户,都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体;研究人员能基于开源架构探索多智能体协作机制;而非技术背景用户也可直接选用预置的智能体模板,立即投入实际工作场景。 AutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑,每个块负责单一动作,灵活且易于调试。同时,平台支持本地自托管与云端部署两种模式,兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本,即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛,让人人都能成为 AI 的创造者与受益者。

183.6k|★★★☆☆|今天
Agent语言模型插件

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

161.1k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|4天前
Agent插件