symbolicai

GitHub
1.7k 84 中等 2 次阅读 2天前BSD-3-Clause语言模型
AI 解读 由 AI 自动生成,仅供参考

SymbolicAI 是一个结合神经网络与符号逻辑的框架,让开发者能够更自然地在 Python 中使用大语言模型。它通过“符号”对象将传统编程与语言模型的能力融合,既保留了 Python 的简洁性,又增强了对语义和上下文的理解。SymbolicAI 解决了传统 LLM 使用中难以灵活控制、效率低以及语义理解不足的问题,适合希望深入定制 AI 交互流程的开发者和研究人员。其核心概念包括“语法符号”和“语义符号”,支持按需切换模式,实现高效且精准的语义处理。框架模块化设计使得扩展和集成其他工具(如搜索、图像生成)变得简单,是进行高级 AI 应用开发的理想选择。

使用场景

某数据科学家正在开发一个自动化报告生成系统,需要从非结构化文本中提取关键信息,并根据规则生成标准化的分析报告。他需要处理大量文档,包括新闻文章、市场调研和客户反馈。

没有 SymbolicAI 时

  • 需要手动编写复杂的正则表达式来提取特定信息,维护成本高且容易出错
  • 对于语义理解任务(如情感分析、实体识别)依赖外部API,调用成本高且响应慢
  • 缺乏统一的接口来整合不同模型和逻辑,代码结构混乱
  • 处理过程中难以实现动态逻辑调整,灵活性差

使用 SymbolicAI 后

  • 可以通过 Symbol 对象直接操作文本,结合语法和语义能力,简化信息提取流程
  • 利用内置的神经符号引擎,无需频繁调用外部服务即可完成语义理解任务
  • 通过模块化设计,轻松集成自定义逻辑与预训练模型,提升代码可维护性
  • 支持灵活的语义操作,可根据需求动态调整处理逻辑,提高系统适应性

SymbolicAI 让数据科学家能够更高效地构建智能文本处理系统,兼顾性能与灵活性。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

需要 NVIDIA GPU,显存 8GB+,CUDA 11.7+

内存

16GB+

依赖
notes建议使用 conda 管理环境,首次运行需下载约 5GB 模型文件。部分可选功能需要额外安装依赖和 API 密钥。
python3.8+
torch>=2.0
transformers>=4.30
accelerate
pydantic
numpy
scikit-learn
requests
httpx
tqdm
pandas
symbolicai hero image

快速开始

SymbolicAI:大语言模型的神经符号视角

文档 Arxiv DeepWiki

Twitter Twitter Twitter


什么是 SymbolicAI?

SymbolicAI 是一个神经符号框架,它将经典的 Python 编程与大语言模型的可微、可编程特性相结合,以一种在 Python 中自然流畅的方式实现。该框架旨在不阻碍你的任何目标,凭借其模块化设计,可以轻松扩展和定制以满足你的需求。你可以很轻松地编写自己的引擎本地部署你选择的引擎,或者与诸如网络搜索图像生成之类的工具进行集成。为了使本 README 更加简洁,我们将介绍定义 SymbolicAI 的两个关键概念:原语契约

❗️注意❗️ 框架名称旨在致敬启发该项目的艾伦·纽厄尔和赫伯特·西蒙的基础性工作。

原语

SymbolicAI 的核心是 Symbol 对象——每个对象都带有一组小巧、可组合的操作,这些操作用起来就像原生的 Python 代码一样。

from symai import Symbol

Symbol 有两种形式:

  1. 句法型 – 行为类似于普通的 Python 值(字符串、列表、整数——无论你传入什么)。
  2. 语义型 – 连接到神经符号引擎,因此能够理解含义和上下文。

为什么默认是句法型呢? 因为 Python 的运算符(==~& 等)在 symai 中被重载了。如果我们对每一次位移或比较都立即触发引擎,代码就会变得很慢,并且可能产生意想不到的副作用。从句法型开始可以保证安全和高效;只有在需要时才选择语义型。

如何切换到语义视图

  1. 创建时

    S = Symbol("Cats are adorable", semantic=True) # 已经是语义型
    print("feline" in S) # => True
    
  2. 按需使用 .sem 投影 – 使用对应的 .syn 可以切换回句法型:

    S = Symbol("Cats are adorable") # 默认是句法型
    print("feline" in S.sem) # => True
    print("feline" in S)     # => False
    
  3. 调用点语法操作——例如 .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 现在配备了基于优先级加载的配置管理系统。该系统会按优先级顺序在三个不同位置查找配置:

  1. 调试模式(当前工作目录)

    • 优先级最高
    • 仅适用于 symai.config.json
    • 适用于开发和测试
  2. 环境特定配置(Python 环境)

    • 优先级第二
    • 位于 {python_env}/.symai/
    • 适合项目特定的设置
  3. 全局配置(主目录)

    • 优先级最低
    • 位于 ~/.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 许可证。

喜欢这个项目吗?

如果您喜欢这个项目,请给它点个赞 ⭐️ 并分享给朋友和同事。为了进一步支持该项目的持续开发,您也可以考虑捐赠。感谢您的支持!

捐赠

我们也在寻找贡献者或投资者来帮助发展和支持这个项目。如果您感兴趣,请随时与我们联系。

📫 联系方式

如有关于该项目的问题,欢迎通过 电子邮件、我们的 网站 或 Discord 与我们联系: Discord

版本历史

1.13.02026/04/02
1.12.02026/03/27
1.11.02026/03/13
1.10.02026/03/09
1.9.02026/03/06
1.8.32026/02/17
1.8.22026/02/16
1.8.12026/02/14
1.8.02026/02/14
1.7.32026/02/06
1.7.12026/02/05
1.7.02026/02/05
1.6.02026/02/04
1.5.02026/01/17
1.4.02026/01/07
1.3.02026/01/05
1.2.12025/12/12
1.2.02025/12/05
1.1.12025/11/18
1.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 真正成长为懂上

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

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 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

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

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

OpenHands

OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。

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