You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLIPS初学者:如何使用clipspy将Python字典导入为CLIPS事实

报错原因
  • 第一个报错是Python字符串格式化语法不规范:使用%占位符做格式化时,变量占位符后必须指定类型标识(字符串类型对应%s),你代码中的%(name)后缺失类型说明,Python会把后续的)误识别为格式字符,触发ValueError。
  • 第二个隐性问题是clipspy的API调用错误:Template.assert_fact原生支持字典/关键字参数传值,完全不需要手动拼接CLIPS格式的字符串。
修正后可运行代码
import clips
template_string = """
(deftemplate person
  (slot name (type STRING))
  (slot surname (type STRING)))
"""
person_dict = {'name': 'John', 'surname': 'Doe' }

env = clips.Environment()
env.build(template_string)

template = env.find_template('person')
# 直接对字典做解包传参即可
fact = template.assert_fact(**person_dict)

env.run()
# 遍历打印所有事实
for fact in env.facts():
    print(fact)
运行输出结果
(initial-fact)
(person (name "John") (surname "Doe"))

如果你确实需要手动拼接字符串实现(不推荐,容易出现格式错误和注入风险),修正后的写法如下:

# 补充%s类型说明符,同时给字符串值加双引号符合CLIPS语法
parstr = """(name "%(name)s")(surname "%(surname)s")""" % person_dict
# 字符串格式的事实需要调用env.assert_string方法断言
fact = env.assert_string(f"(person {parstr})")

内容的提问来源于stack exchange,提问作者ANA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:39:03