SymbolicAI入门实战:手把手教你构建第一个组合可微程序

【免费下载链接】symbolicai Compositional Differentiable Programming Library 【免费下载链接】symbolicai 项目地址: https://gitcode.com/gh_mirrors/sy/symbolicai

SymbolicAI是一个强大的组合可微编程库,它将形式逻辑与现代机器学习相结合,允许透明推理和显式知识表示,同时仍能从统计模型中受益。本教程将带领你从零开始,构建你的第一个组合可微程序,体验SymbolicAI的核心功能和独特魅力。

🔧 环境准备与安装

在开始之前,我们需要先安装SymbolicAI库。最简单的方法是通过Git克隆仓库并安装:

git clone https://gitcode.com/gh_mirrors/sy/symbolicai
cd symbolicai
pip install -e .

安装完成后,我们就可以开始探索SymbolicAI的世界了!

🧩 SymbolicAI核心概念

SymbolicAI的核心是Symbol类,它是所有功能操作的基类。在符号编程中,我们将其称为终端符号。Symbol类包含了许多有用的操作,可以被解释为操作其内容和评估新符号的表达式。

SymbolicAI核心概念图示 图:SymbolicAI核心概念与工作流程

创建和操作符号

让我们从最基本的符号创建和操作开始。首先导入Symbol类:

from symai import Symbol

创建一个简单的符号并进行基本操作:

# 创建一个Symbol
s = Symbol("Welcome to SymbolicAI tutorial.")
# 翻译符号内容
print(s.translate('German'))  # 输出: Willkommen zum SymbolicAI-Tutorial.

符号运算与推理

SymbolicAI的强大之处在于它能够进行复杂的符号运算和推理。例如,我们可以进行类似Word2Vec的语义类比:

Word2Vec语义类比图示 图:Word2Vec风格的语义类比在SymbolicAI中的实现

# 语义类比推理
analogy = Symbol('King - Man + Woman').interpret()
print(analogy)  # 输出: Queen

甚至可以进行句子级别的操作:

# 句子操作
sentence = Symbol('Hello my enemy').sem - 'enemy' + 'friend'
print(sentence)  # 输出: Hello my friend

📝 构建第一个组合可微程序

现在,让我们构建一个更复杂的组合可微程序。我们将创建一个基于合同(Contract)的问答系统,它能够根据提供的文档回答问题并提供证据支持。

定义数据模型

首先,我们需要定义数据模型来结构化我们的输入和输出。SymbolicAI使用LLMDataModel,它是Pydantic模型的扩展,带有LLM提示。

from pydantic import Field
from symai.models import LLMDataModel

class Document(LLMDataModel):
    """代表语料库中的一个文档"""
    id: str = Field(description="文档的唯一标识符")
    content: str = Field(description="文档的完整原始文本")

class AnswerWithEvidence(LLMDataModel):
    """包含证据的最终回答"""
    answer: str = Field(description="简洁、独立的答案")
    evidence: list = Field(description="引用的支持段落")
    coverage_score: float = Field(ge=0.0, le=1.0, description="答案被证据支持的程度")

创建合同化的问答代理

使用@contract装饰器,我们可以为我们的问答系统添加前置条件和后置条件验证,确保输入输出的质量。

from symai import Expression
from symai.strategy import contract

@contract(pre_remedy=True, post_remedy=True)
class QAAgent(Expression):
    @property
    def prompt(self) -> str:
        return "你是一个专家助手。根据提供的文档回答问题,并提供证据支持你的答案。"
    
    def pre(self, input: dict) -> bool:
        if not input.get('question'):
            raise ValueError("问题不能为空")
        if not input.get('documents'):
            raise ValueError("必须提供至少一个文档")
        return True
    
    def post(self, output: AnswerWithEvidence) -> bool:
        if not output.answer.strip():
            raise ValueError("答案不能为空")
        if output.coverage_score < 0.5:
            raise ValueError("答案的证据覆盖率太低")
        return True
    
    def forward(self, input: dict) -> AnswerWithEvidence:
        if self.contract_successful and self.contract_result:
            return self.contract_result
        return AnswerWithEvidence(
            answer="无法生成足够可靠的答案",
            evidence=[],
            coverage_score=0.0
        )

合同流程图示 图:SymbolicAI合同执行流程

使用问答代理

现在我们可以使用我们创建的问答代理来回答问题了:

# 创建文档集合
documents = [
    Document(
        id="doc1",
        content="SymbolicAI是一个组合可微编程库,它将形式逻辑与机器学习相结合。"
    ),
    Document(
        id="doc2",
        content="组合可微编程允许开发者构建具有推理能力的AI系统,同时保持可解释性。"
    )
]

# 创建问答代理
agent = QAAgent()

# 提问
result = agent({
    "question": "SymbolicAI的主要特点是什么?",
    "documents": documents
})

print(f"答案: {result.answer}")
print(f"证据覆盖率: {result.coverage_score}")
for i, evidence in enumerate(result.evidence):
    print(f"证据 {i+1}: {evidence}")

🚀 高级功能探索

SymbolicAI还提供了许多高级功能,如概率编程、因果推理等。例如,我们可以进行模糊比较:

# 模糊比较
pi_approx = Symbol('3.14159...', semantic=True)
print(pi_approx == 'π')  # 输出: True

或者进行因果推理:

# 因果推理
rule = Symbol('如果下雨,地面会湿。', semantic=True)
observation = Symbol('地面是湿的。')
conclusion = rule & observation  # 因此,可能下雨了。
print(conclusion)

📚 进一步学习资源

要深入学习SymbolicAI,建议查阅以下资源:

SymbolicAI Shell界面 图:SymbolicAI交互式Shell界面

通过本教程,你已经了解了SymbolicAI的基本概念和使用方法。现在,你可以开始构建自己的组合可微程序,探索人工智能与符号推理的无限可能!

【免费下载链接】symbolicai Compositional Differentiable Programming Library 【免费下载链接】symbolicai 项目地址: https://gitcode.com/gh_mirrors/sy/symbolicai

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐