simplemind
Simplemind 是一款专为 Python 开发者设计的 AI 客户端库,旨在以更简洁、人性化的方式替代 LangChain 和 LangGraph,满足大多数常见的 AI 开发需求。它核心理念是“保持简单,以人为本”,通过高度抽象底层复杂的 API 调用细节,让开发者无需成为专家也能轻松上手。
过去,集成不同大模型往往需要处理繁琐的配置和差异巨大的接口代码。Simplemind 统一了包括 OpenAI、Anthropic Claude、Google Gemini、Deepseek、Groq、Ollama 等主流服务商的调用标准。无论切换哪种模型,开发者只需使用相同的 generate_text 等接口,并通过简单的参数指定提供商即可,极大降低了多模型适配的门槛。
该工具特别适合希望快速构建原型、进行实验或专注于业务逻辑而非底层配置的 Python 开发者及研究人员。其技术亮点在于极简的配置流程(支持环境变量管理密钥)和一致的跨平台 API 设计,让用户能像进行友好对话一样自然地调用强大的 AI 能力。安装后,仅需几行代码即可实现文本生成、结构化数据提取或多轮对话功能,真正让 AI 开发回归创造本身。
使用场景
某初创团队的后端工程师正在快速开发一个多模型对比功能,需要让用户在同一界面下切换不同大模型(如 GPT-4o、Claude 3.5、Grok)来生成营销文案。
没有 simplemind 时
- 代码耦合严重:每接入一个新模型(如从 OpenAI 切换到 Anthropic),都需要重写整套 API 调用逻辑和参数结构,导致代码库中充斥着大量重复的
if-else分支。 - 配置管理混乱:不同厂商的 SDK 要求各异的环境变量命名和初始化方式,开发者需花费大量时间查阅文档处理认证细节,容易因配置错误导致服务中断。
- 维护成本高昂:LangChain 等重型框架引入了复杂的依赖链和抽象层,调试困难,且为了简单的文本生成任务不得不学习陡峭的概念曲线。
- 切换模型繁琐:想要测试不同模型的效果,必须修改核心代码逻辑,无法在运行时动态指定提供商,严重拖慢实验迭代速度。
使用 simplemind 后
- 统一接口调用:无论底层是 Google Gemini 还是 xAI Grok,只需调用标准的
sm.generate_text函数,通过字符串参数即可无缝切换,彻底消除重复代码。 - 极简环境配置:遵循“以人为本”的设计,仅需在环境变量中设置对应的 API Key,simplemind 自动处理认证细节,让开发者专注业务逻辑而非配置琐事。
- 轻量无负担:摒弃了复杂的图编排和不必要的抽象层,代码清晰易读,新人上手即可参与开发,大幅降低了项目的认知负荷和维护难度。
- 动态模型实验:支持在函数调用时直接传入
llm_provider和llm_model参数,无需重启服务或修改代码即可实时对比各模型输出效果,极大提升研发效率。
simplemind 通过抹平不同 AI 厂商的接口差异,让开发者像进行日常对话一样轻松地构建和切换多模型应用。
运行环境要求
- 未说明
未说明
未说明

快速开始
Simplemind: 为人类而生的AI™
保持简单,回归人性。
Simplemind 是一款专为 Python 设计的 AI 库,旨在简化您与 AI API 的交互体验。秉承“为人类而生”的理念,它抽象掉了复杂的细节,为开发者提供了一种直观且人性化的接口来使用强大的 AI 功能。

核心特性
有了 Simplemind,接入 AI 就像进行一次友好的对话一样简单。
- 易用的 AI 工具:Simplemind 提供了对大多数主流 AI 服务的简洁接口。
- 以人为本的设计:该库优先考虑代码的可读性和易用性——无需成为专家即可开始尝试。
- 极简配置:快速上手,无需为繁琐的配置操心。
支持的 API
所有支持的提供商和模型所使用的 API 接口完全一致:
llm_provider |
默认 llm_model |
|
|---|---|---|
| Anthropic 的 Claude | "anthropic" |
"claude-3-5-sonnet-20241022" |
| 亚马逊 Bedrock | "amazon" |
"anthropic.claude-3-5-sonnet-20241022-v2:0" |
| Deepseek | "deepseek" |
"deepseek-chat" |
| 谷歌 Gemini | "gemini" |
"models/gemini-1.5-pro" |
| Groq 的 Groq | "groq" |
"llama3-8b-8192" |
| Ollama | "ollama" |
"llama3.2" |
| OpenAI 的 GPT | "openai" |
"gpt-4o-mini" |
| xAI 的 Grok | "xai" |
"grok-beta" |
要指定特定的提供商或模型,您可以在调用 generate_text、generate_data 或 create_conversation 时使用 llm_provider 和 llm_model 参数。
如果您希望 Simplemind 支持更多提供商或模型,请提交一个 Pull Request!
快速入门
Simplemind 会处理复杂的 API 调用细节,让您专注于真正重要的事情——构建、实验和创造。
$ pip install 'simplemind[full]'
首先,通过在环境变量中设置您的 API 密钥来进行身份验证:
$ export OPENAI_API_KEY="sk-..."
这种做法可以确保您的 API 密钥不会暴露在代码库中,从而保护您的隐私。其他支持的环境变量包括:ANTHROPIC_API_KEY、XAI_API_KEY、DEEPSEEK_API_KEY、GROQ_API_KEY 和 GEMINI_API_KEY。
接下来,导入 Simplemind 并开始使用:
import simplemind as sm
使用示例
以下是一些使用 Simplemind 的示例。
请注意:此处展示的大多数调用都可以选择性地接受 llm_provider 和 llm_model 参数,这两个参数应以字符串形式提供。
文本补全
根据给定的提示生成 AI 模型的响应:
>>> sm.generate_text(prompt="生命的意义是什么?")
"生命的意义是一个深刻的哲学问题,几个世纪以来一直被各种文化、宗教和哲学家探讨。不同的人和信仰体系对此有不同的解读:\n\n1. **宗教视角**:许多宗教认为,生命的意义在于实现神圣的目的、侍奉上帝或达到某种来世境界。例如,基督教通常强调爱、信仰以及侍奉上帝和他人是生命意义的核心。\n\n2. **哲学观点**:哲学家们给出了多种答案。存在主义者如让-保罗·萨特认为,生命本身并没有固有的意义,个人必须自己去创造生活的意义。而亚里士多德则认为,通过过一种有德行的生活来实现幸福(即‘圆满’),才是有意义的人生。\n\n3. **科学与世俗的观点**:有些人从理解自然世界、推动人类知识进步,或者通过个人成就和幸福找到生命的意义。他们可能认为生命的意义来源于人与人之间的连接、留下的遗产,或是对知识和创造力的追求。\n\n4. **个人视角**:对许多人来说,生命的意义是非常个人化的,它与他们的关系、热情和目标息息相关。这些人通过自己的经历、与他人的联系以及对他人和世界的影响力来定义生命的意义。\n\n总之,生命的意义是一个主观的问题,每个人都会根据自己的信仰、经历和思考得出不同的答案。"
流式文本生成
>>> for chunk in sm.generate_text("写一首关于月亮的诗", stream=True):
... print(chunk, end="", flush=True)
使用 Pydantic 构建结构化数据
如果大模型支持,你可以使用 Pydantic 模型来组织大模型的响应。
class Poem(BaseModel):
title: str
content: str
>>> sm.generate_data("写一首关于爱的诗", response_model=Poem)
title='永恒的拥抱' content='在寂静的夜晚,\n当繁星低语着明亮的秘密时,\n两颗心以温柔的韵律跳动,\n共舞于时光的沙漏之中。\n\n每一次凝视都点燃一簇火花,\n那火焰温暖了最寒冷的黑夜,\n在共享的欢笑与甜蜜的呢喃中,\n爱将世界绘成一幅杰作。\n\n无论风雨交加还是阳光明媚,\n它以千变万化的形式找到归宿,\n一个温柔的触碰,一声会心的叹息,\n在爱的怀抱里,我们学会飞翔。\n\n随着季节更迭,时光流转,\n在我们编织的梦想织锦中,\n爱的丝线永恒不朽,紧紧相连,\n那是两颗灵魂共鸣的永恒纽带。\n\n所以,让我们为这份光明而真挚的爱干杯,\n这是一份不断重申、不断更新的礼物,\n在每一次心跳、每一句祈祷中,\n都有一个故事悄然书写于空气中。'
更复杂的示例
class InstructionStep(BaseModel):
step_number: int
instruction: str
class RecipeIngredient(BaseModel):
name: str
quantity: float
unit: str
class Recipe(BaseModel):
name: str
ingredients: list[RecipeIngredient]
instructions: list[InstructionStep]
recipe = sm.generate_data(
"写一份巧克力曲奇饼干的食谱",
response_model=Recipe,
)
特别感谢 @jxnl 开发的 Instructor,正是它让这一切成为可能!
对话式 AI
SimpleMind 也支持轻松构建对话流程:
>>> conv = sm.create_conversation()
>>> # 向对话中添加一条消息
>>> conv.add_message("user", "你好呀,最近怎么样?")
>>> conv.send()
<Message role=assistant text="你好!我只是一个计算机程序,没有感情,不过我很乐意帮助你。今天有什么可以帮你的吗?">
要继续对话,只需再次调用 conv.send(),它会返回对话中的下一条消息:
>>> conv.add_message("user", "生命的意义是什么?")
>>> conv.send()
<Message role=assistant text="生命的意义是一个深刻的哲学问题,几个世纪以来一直被不同文化、宗教和哲学家所探讨。不同的人和信仰体系对此有不同的解读:\n\n1. **宗教视角:** 许多宗教认为,生命的意义在于实现神圣的使命、侍奉上帝或达到某种来世境界。例如,基督教常强调爱、信仰以及对上帝和他人的服务是生命意义的核心。\n\n2. **哲学观点:** 哲学家们给出了多种答案。存在主义者如让-保罗·萨特认为,生命本身并无固有意义,每个人必须自己创造人生的目的。而亚里士多德则认为,通过美德生活实现“幸福”才是有意义的人生。\n\n3. **科学与世俗观点:** 有些人从理解自然世界、推动人类知识进步或追求个人成就和幸福中找到生命的意义。他们可能把生命的意义看作是人与人之间的联结、留下的遗产,或是对知识和创造力的追求。\n\n4. **个人视角:** 对许多人来说,生命的意义是非常个人化的,与他们的关系、热情和目标密切相关。这些人通过自己的经历、与他人的联系以及对他人和世界的影响力来定义生命的意义。\n\n总之,生命的意义是一个主观的问题,每个人都会根据自己的信仰、经历和思考得出不同的答案。">
避免重复代码
你可以使用 Session 类为所有调用设置默认参数:
# 创建一个带有默认值的会话
gpt_4o_mini = sm.Session(llm_provider="openai", llm_model="gpt-4o-mini")
# 现在所有的调用都会使用这些默认值
response = gpt_4o_mini.generate_text("你好!")
conversation = gpt_4o_mini.create_conversation()
这样既保持了原始 API 的简洁性,又减少了重复代码。
会话对象还支持在每次调用时覆盖默认值:
response = gpt_4o_mini.generate_text("这里有一个复杂任务", llm_model="gpt-4")
基础记忆插件
借助 Python 的强大功能,你可以轻松创建自己的插件,为对话添加额外的功能:
class SimpleMemoryPlugin(sm.BasePlugin):
def __init__(self):
self.memories = [
"地球已经被虚构地毁灭了。",
"月亮是由奶酪做成的。",
]
def yield_memories(self):
return (m for m in self.memories)
def pre_send_hook(self, conversation: sm.Conversation):
for m in self.yield_memories():
conversation.add_message(role="system", text=m)
conversation = sm.create_conversation()
conversation.add_plugin(SimpleMemoryPlugin())
conversation.add_message(
role="user",
text="请写一首关于月亮的诗",
)
>>> conversation.send()
在浩瀚无垠的星空之下,
有一块奶酪圆盘遥遥相望。
它并非由岩石或银辉构成,
而是散发着切达奶酪的光芒。
在这寂静的宇宙中独自游荡,
远离故土,孤独而迷茫。
不再反射太阳的光辉,
如今却因它的趣味而闻名遐迩。
昔日曾是地球的伴侣,
如今却孤零零地漂泊在黑暗里。
月球表面不再是坑坑洼洼,
取而代之的是高达、瑞士和卡门贝尔奶酪的骄傲。
曾经的宇航员试图探索月球表面,
却发现那里并不是什么神秘之地,
而是一个充满奶酪乐趣的天堂,
在夜色中散发出柔和的光芒。
在这个奶酪主宰的世界里,
月亮带来了欢笑与奇妙的景象。
它不再只是沉默的天体,
而是欢乐与惊喜的象征,近在咫尺。
因此,让我们为这块披着奶酪外衣的月亮干杯,
它是宇宙乐章中一抹俏皮的音符。
提醒着我们,在童话与趣闻之间,
宇宙永远充满无限可能。
简单却有效。
工具(函数调用)
工具(也称为函数)允许你在 AI 对话中调用任何 Python 函数。以下是一个示例:
def get_weather(
location: Annotated[
str, Field(description="城市和州,例如旧金山,加州")
],
unit: Annotated[
Literal["摄氏度", "华氏度"],
Field(
description="温度单位,可选‘摄氏度’或‘华氏度’"
),
] = "摄氏度",
):
"""
获取指定地点的当前天气
"""
return f"42 {unit}"
# 将您的函数添加为工具
conversation = sm.create_conversation()
conversation.add_message("user", "旧金山的天气如何?")
response = conversation.send(tools=[get_weather])
请注意,我们使用了 Python 的 Annotated 特性结合 Field 来为函数参数提供额外的上下文信息。这有助于 AI 理解每个参数的意图和约束条件,从而使工具调用更加准确可靠。
您也可以省略 Annotated,只传递 Field 参数。
def get_weather(
location: str = Field(description="城市和州,例如旧金山,加州"),
unit:Literal["摄氏度", "华氏度"]= Field(
default="摄氏度",
description="温度单位,可以是'摄氏度'或'华氏度'"
),
):
"""
获取指定地点的当前天气
"""
return f"42 {unit}"
函数可以使用类型提示和 Pydantic 模型进行定义,以实现验证功能。LLM 会智能地选择何时调用这些函数,并将结果整合到其回复中。
🪄 使用 LLM 自动定义工具(实验性)
Simplemind 提供了一个装饰器,可以自动将 Python 函数转换为带有 AI 生成元数据的工具。只需使用 @simplemind.tool 装饰器,LLM 就会分析您的函数并生成适当的描述和模式:
@simplemind.tool(llm_provider="anthropic")
def haversine(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
r = 6371
phi1 = math.radians(lat1)
phi2 = math.radians(lat2)
delta_phi = math.radians(lat2 - lat1)
delta_lambda = math.radians(lon2 - lon1)
a = (
math.sin(delta_phi / 2) ** 2
+ math.cos(phi1) * math.cos(phi2) * math.sin(delta_lambda / 2) ** 2
)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
d = r * c
return d
请注意,我们并未为该函数添加任何文档字符串或 Field。装饰器会使用指定的 LLM 提供者来生成工具模式,包括描述和参数详情:
{
"name": "haversine",
"description": "根据两点的经纬度坐标,计算地球上两点之间的大圆距离",
"input_schema": {
"type": "object",
"properties": {
"lat1": {
"type": "number",
"description": "第一点的纬度,以十进制度数表示",
},
"lon1": {
"type": "number",
"description": "第一点的经度,以十进制度数表示",
},
"lat2": {
"type": "number",
"description": "第二点的纬度,以十进制度数表示",
},
"lon2": {
"type": "number",
"description": "第二点的经度,以十进制度数表示",
}
},
"required": ["lat1", "lon1", "lat2", "lon2"],
},
}
经过装饰后的函数就可以像其他工具一样,通过对话 API 使用。
conversation = sm.create_conversation()
conversation.add_message("user", "伦敦离我有多远")
response = conversation.send(tools=[get_location, get_coords, haversine]) # 可以传递多个工具
更多内容请参阅 examples/distance_calculator.py。
日志记录
Simplemind 使用 Logfire 进行日志记录。要启用日志记录,请调用 sm.enable_logfire()。
更多示例
请查看 examples 目录中的可执行示例。
贡献
我们欢迎各种形式的贡献。如果您发现任何 bug 或有新的功能需求,欢迎随时提交 issue;同时,我们也欢迎您通过提交 pull request 来帮助 SimpleMind 不断完善。
开始贡献的步骤如下:
- Fork 本仓库。
- 创建新分支。
- 进行修改。
- 提交 pull request。
许可证
Simplemind 采用 Apache 2.0 许可证。
致谢
Simplemind 的灵感来源于“为人类而编写的代码”这一理念,旨在让所有人都能轻松地使用 AI 模型。特别感谢开源社区的贡献与启发。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器