symbolicai
SymbolicAI 是一个结合神经网络与符号逻辑的框架,让开发者能够更自然地在 Python 中使用大语言模型。它通过“符号”对象将传统编程与语言模型的能力融合,既保留了 Python 的简洁性,又增强了对语义和上下文的理解。SymbolicAI 解决了传统 LLM 使用中难以灵活控制、效率低以及语义理解不足的问题,适合希望深入定制 AI 交互流程的开发者和研究人员。其核心概念包括“语法符号”和“语义符号”,支持按需切换模式,实现高效且精准的语义处理。框架模块化设计使得扩展和集成其他工具(如搜索、图像生成)变得简单,是进行高级 AI 应用开发的理想选择。
使用场景
某数据科学家正在开发一个自动化报告生成系统,需要从非结构化文本中提取关键信息,并根据规则生成标准化的分析报告。他需要处理大量文档,包括新闻文章、市场调研和客户反馈。
没有 SymbolicAI 时
- 需要手动编写复杂的正则表达式来提取特定信息,维护成本高且容易出错
- 对于语义理解任务(如情感分析、实体识别)依赖外部API,调用成本高且响应慢
- 缺乏统一的接口来整合不同模型和逻辑,代码结构混乱
- 处理过程中难以实现动态逻辑调整,灵活性差
使用 SymbolicAI 后
- 可以通过
Symbol对象直接操作文本,结合语法和语义能力,简化信息提取流程 - 利用内置的神经符号引擎,无需频繁调用外部服务即可完成语义理解任务
- 通过模块化设计,轻松集成自定义逻辑与预训练模型,提升代码可维护性
- 支持灵活的语义操作,可根据需求动态调整处理逻辑,提高系统适应性
SymbolicAI 让数据科学家能够更高效地构建智能文本处理系统,兼顾性能与灵活性。
运行环境要求
- Linux
- macOS
- Windows
需要 NVIDIA GPU,显存 8GB+,CUDA 11.7+
16GB+

快速开始
SymbolicAI:大语言模型的神经符号视角
什么是 SymbolicAI?
SymbolicAI 是一个神经符号框架,它将经典的 Python 编程与大语言模型的可微、可编程特性相结合,以一种在 Python 中自然流畅的方式实现。该框架旨在不阻碍你的任何目标,凭借其模块化设计,可以轻松扩展和定制以满足你的需求。你可以很轻松地编写自己的引擎,本地部署你选择的引擎,或者与诸如网络搜索或图像生成之类的工具进行集成。为了使本 README 更加简洁,我们将介绍定义 SymbolicAI 的两个关键概念:原语和契约。
❗️注意❗️ 框架名称旨在致敬启发该项目的艾伦·纽厄尔和赫伯特·西蒙的基础性工作。
原语
SymbolicAI 的核心是 Symbol 对象——每个对象都带有一组小巧、可组合的操作,这些操作用起来就像原生的 Python 代码一样。
from symai import Symbol
Symbol 有两种形式:
- 句法型 – 行为类似于普通的 Python 值(字符串、列表、整数——无论你传入什么)。
- 语义型 – 连接到神经符号引擎,因此能够理解含义和上下文。
为什么默认是句法型呢?
因为 Python 的运算符(==、~、& 等)在 symai 中被重载了。如果我们对每一次位移或比较都立即触发引擎,代码就会变得很慢,并且可能产生意想不到的副作用。从句法型开始可以保证安全和高效;只有在需要时才选择语义型。
如何切换到语义视图
创建时
S = Symbol("Cats are adorable", semantic=True) # 已经是语义型 print("feline" in S) # => True按需使用
.sem投影 – 使用对应的.syn可以切换回句法型:S = Symbol("Cats are adorable") # 默认是句法型 print("feline" in S.sem) # => True print("feline" in S) # => False调用点语法操作——例如
.map()或其他语义函数——会自动将符号切换到语义模式:S = Symbol(['apple', 'banana', 'cherry', 'cat', 'dog']) print(S.map('convert all fruits to vegetables')) # => ['carrot', 'broccoli', 'spinach', 'cat', 'dog']
由于这些投影只是为同一个底层对象添加了不同的行为层,因此你可以在单个符号上编织复杂的句法和语义操作链。它们就像是你进行语义推理的构建块。目前我们支持广泛的原语;详细信息请参阅文档这里,以下是一些简要内容:
| 原语/运算符 | 类别 | 句法型 | 语义型 | 描述 |
|---|---|---|---|---|
== |
比较 | ✓ | ✓ | 测试相等性。句法型:字面匹配。语义型:模糊/概念等价(例如‘Hi’ == ‘Hello’)。 |
+ |
算术 | ✓ | ✓ | 句法型:数字/字符串/列表相加。语义型:有意义的组合、融合或概念合并。 |
& |
逻辑/位运算 | ✓ | ✓ | 句法型:位逻辑与。语义型:逻辑合取、推理,例如上下文合并。 |
symbol[index] = value |
迭代 | ✓ | ✓ | 设置元素或切片。 |
.startswith(prefix) |
字符串辅助 | ✓ | ✓ | 检查字符串是否以给定前缀开头(两种模式下均适用)。 |
.choice(cases, default) |
模式匹配 | ✓ | 从提供的选项中选择最佳匹配。 | |
.foreach(condition, apply) |
执行控制 | ✓ | 对每个元素应用操作。 | |
.cluster(**clustering_kwargs?) |
数据聚类 | ✓ | 在语义层面将数据聚类成组。(使用 sklearn 的 DBSCAN) | |
.similarity(other, metric?, normalize?) |
嵌入 | ✓ | 计算嵌入之间的相似度。 | |
| ... | ... | ... | ... | ... |
契约
人们常说大语言模型会“幻觉”,但你的代码可承受不起这样的风险。这就是为什么 SymbolicAI 将契约式设计原则引入大语言模型领域。与其仅仅依赖事后测试,契约可以直接将正确性融入你的设计中,所有内容都封装在一个装饰器里,该装饰器将作用于你定义的数据模型和验证约束:
from symai import Expression
from symai.strategy import contract
from symai.models import LLMDataModel # 兼容 Pydantic 的 BaseModel
from pydantic import Field, field_validator
# ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
# 数据模型 ▬
# – 清晰的结构 + 丰富的字段描述增强了 ▬
# 验证、自动提示模板化及补救措施 ▬
# ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
class DataModel(LLMDataModel):
some_field: some_type = Field(description="非常详细的字段", and_other_supported_options_here="...")
@field_validator('some_field')
def validate_some_field(cls, v):
# 除了预/后处理之外,还可以在此处添加自定义的基本验证逻辑
valid_opts = ['A', 'B', 'C']
if v not in valid_opts:
raise ValueError(f'必须是 {valid_opts} 中的一个,得到的是 "{v}"。')
return v
# ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
# 经过契约约束的表达式类 ▬
# ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
@contract(
# ── 补救措施 ─────────────────────────────────────────── #
pre_remedy=True, # 尝试自动修复不良输入
post_remedy=True, # 尝试自动修复LLM的不良输出
accumulate_errors=True, # 将错误历史传递给每次重试
verbose=True, # 在终端中清晰地显示进度
remedy_retry_params=dict(tries=3, delay=0.4, max_delay=4.0,
jitter=0.15, backoff=1.8, graceful=False),
)
class Agent(Expression):
#
# 高层次行为:
# *. `prompt` – LLM 必须执行的 *静态* 描述(必填)
# 1. `pre` – 对输入进行健全性检查(可选)
# 2. `act` – 改变状态(可选)
# 3. LLM – 生成预期答案(由 SymbolicAI 引擎处理)
# 4. `post` – 确保答案符合语义规则(可选)
# 5. `forward` (必填)
# • 如果合约成功 → 返回经过类型验证的 LLM 对象
# • 否则 → 温和的回退答案
# ...
由于我们不想让这个 README 文件因过长的 Python 代码片段而变得臃肿,关于合约的更多信息请参阅 这里 和 这里。
安装
核心功能
要开始使用 SymbolicAI,您可以使用 pip 进行安装:
pip install symbolicai
或者,克隆仓库并使用 uv(≥ 0.9.17)设置 Python 虚拟环境:
git clone git@github.com:ExtensityAI/symbolicai.git
cd symbolicai
uv sync --python x.xx
source ./.venv/bin/activate
现在运行 symconfig 将会使用这个 Python 环境。
可选功能
SymbolicAI 使用多个引擎来处理文本、语音和图像。我们还集成了搜索引擎访问功能,以便从网络上获取信息。要使用所有这些功能,您还需要安装以下依赖项,并将 API 密钥分配给相应的引擎。例如:
pip install "symbolicai[bitsandbytes]"
pip install "symbolicai[hf]"
pip install "symbolicai[lean]"
pip install "symbolicai[llama_cpp]"
pip install "symbolicai[ocr]"
pip install "symbolicai[qdrant]"
pip install "symbolicai[scrape]"
pip install "symbolicai[search]"
pip install "symbolicai[serpapi]"
pip install "symbolicai[services]"
pip install "symbolicai[solver]"
pip install "symbolicai[whisper]"
pip install "symbolicai[wolframalpha]"
或者,一次性安装所有可选依赖项:
pip install "symbolicai[all]"
要按照提供的锁定文件精确安装依赖项:
uv sync --frozen
通过 uv 安装可选扩展:
uv sync --extra all # 所有可选扩展
uv sync --extra scrape # 仅安装 scrape 相关依赖
❗️注意❗️请注意,其中一些可选依赖可能需要额外的安装步骤。此外,部分功能目前仅处于实验性支持阶段,可能无法按预期工作。如果您对某项功能极为重要,请考虑为项目贡献代码或与我们联系。
配置管理
SymbolicAI 现在配备了基于优先级加载的配置管理系统。该系统会按优先级顺序在三个不同位置查找配置:
调试模式(当前工作目录)
- 优先级最高
- 仅适用于
symai.config.json - 适用于开发和测试
环境特定配置(Python 环境)
- 优先级第二
- 位于
{python_env}/.symai/ - 适合项目特定的设置
全局配置(主目录)
- 优先级最低
- 位于
~/.symai/ - 所有设置的默认回退
配置文件
系统管理三个主要配置文件:
symai.config.json: 主 SymbolicAI 配置symsh.config.json: Shell 配置symserver.config.json: 服务器配置
查看您的配置
在使用 symai 之前,我们建议您使用以下命令检查当前的配置设置。该命令将启动初始包缓存,并初始化 symbolicai 的配置文件。
symconfig
# UserWarning: 未找到环境的配置文件。已在 <full-path>/.symai/symai.config.json 创建了一个新的配置文件。请配置您的环境。
随后您需要编辑 symai.config.json 文件。使用 symai 包时,必须配备神经符号引擎。有关如何使用神经符号引擎的更多信息,请参阅 这里。
此命令将显示:
- 所有配置位置
- 活动配置路径
- 当前设置(敏感数据已被截断)
配置优先级示例
my_project/ # 调试模式(最高优先级)
└── symai.config.json # 调试模式下仅检查此文件
{python_env}/.symai/ # 环境配置(第二优先级)
├── symai.config.json
├── symsh.config.json
└── symserver.config.json
~/.symai/ # 全局配置(最低优先级)
├── symai.config.json
├── symsh.config.json
└── symserver.config.json
如果某个配置文件存在于多个位置,系统将使用优先级最高的版本。如果环境特定配置缺失或无效,系统将自动回退到主目录中的全局配置。
最佳实践
- 使用全局配置 (
~/.symai/) 作为默认设置 - 使用环境特定配置来存储项目相关的设置
- 使用调试模式(当前目录)进行开发和测试
- 运行
symconfig来检查当前的配置设置
配置文件
您可以在项目路径中创建一个 symai.config.json 文件来指定引擎属性。这将覆盖环境变量。
所有引擎都启用的配置文件示例如下:
{
"NEUROSYMBOLIC_ENGINE_API_KEY": "<ANTHROPIC_API_KEY>",
"NEUROSYMBOLIC_ENGINE_MODEL": "claude-sonnet-4-6",
"SYMBOLIC_ENGINE_API_KEY": "<WOLFRAMALPHA_API_KEY>",
"SYMBOLIC_ENGINE": "wolframalpha",
"FORMAL_ENGINE_API_KEY": "<AXIOM_API_KEY>",
"FORMAL_ENGINE": "axiom",
"EMBEDDING_ENGINE_API_KEY": "<OPENAI_API_KEY>",
"EMBEDDING_ENGINE_MODEL": "text-embedding-3-small",
"SEARCH_ENGINE_API_KEY": "<PARALLEL_API_KEY>",
"SEARCH_ENGINE_MODEL": "parallel",
"TEXT_TO_SPEECH_ENGINE_API_KEY": "<OPENAI_API_KEY>",
"TEXT_TO_SPEECH_ENGINE_MODEL": "tts-1",
"INDEXING_ENGINE": "qdrant",
"INDEXING_ENGINE_API_KEY": "<QDRANT_API_KEY>",
"INDEXING_ENGINE_URL": "http://localhost:6333",
"DRAWING_ENGINE_API_KEY": "<BFL_API_KEY>",
"DRAWING_ENGINE_MODEL": "flux-pro-1.1",
"VISION_ENGINE_MODEL": "openai/clip-vit-base-patch32",
"OCR_ENGINE_API_KEY": "<OCR_API_KEY>",
"OCR_ENGINE_MODEL": "mistral-ocr-latest",
"SPEECH_TO_TEXT_ENGINE_MODEL": "turbo",
}
完成以上步骤后,您应该就可以在项目中开始使用 SymbolicAI 了。
❗️注意❗️ 默认情况下,用户警告是启用的。要禁用它们,请在您的环境变量中导出
SYMAI_WARNINGS=0。
运行测试
以下是一些在本地运行测试的示例:
# 运行所有测试
pytest tests
# 运行强制性测试
pytest -m mandatory
请确保在运行测试之前正确配置好相关设置。您还可以运行带有覆盖率的测试,以查看有多少代码被测试覆盖:
pytest --cov=symbolicai tests
🪜 下一步
现在有一些工具,比如 DeepWiki,提供了比我们所能编写的更好的文档,我们并不想与之竞争;只有在明显错误的地方,我们才会进行修正。请前往 SymbolicAI 的 DeepWiki 页面阅读相关内容。那里有很多有趣的信息。最后,别忘了查看我们的 论文,其中详细介绍了该框架。如果您喜欢观看视频,我们还有一系列教程,您可以在这里找到:SymbolicAI 教程视频。
📜 引用
@article{dinu2024symbolicai,
title={Symbolicai: A framework for logic-based approaches combining generative models and solvers},
author={Dinu, Marius-Constantin and Leoveanu-Condrei, Claudiu and Holzleitner, Markus and Zellinger, Werner and Hochreiter, Sepp},
journal={arXiv preprint arXiv:2402.00854},
year={2024}
}
📝 许可证
本项目采用 BSD-3-Clause 许可证。
喜欢这个项目吗?
如果您喜欢这个项目,请给它点个赞 ⭐️ 并分享给朋友和同事。为了进一步支持该项目的持续开发,您也可以考虑捐赠。感谢您的支持!
我们也在寻找贡献者或投资者来帮助发展和支持这个项目。如果您感兴趣,请随时与我们联系。
📫 联系方式
版本历史
1.13.02026/04/021.12.02026/03/271.11.02026/03/131.10.02026/03/091.9.02026/03/061.8.32026/02/171.8.22026/02/161.8.12026/02/141.8.02026/02/141.7.32026/02/061.7.12026/02/051.7.02026/02/051.6.02026/02/041.5.02026/01/171.4.02026/01/071.3.02026/01/051.2.12025/12/121.2.02025/12/051.1.12025/11/181.1.02025/11/18常见问题
相似工具推荐
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 真正成长为懂上
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
OpenHands
OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。