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

Prolog专家系统实现多选答案支持 保留布尔答案功能的咨询

实现方案(完全兼容原有布尔答案逻辑)

1. 扩展askable谓词定义,向下兼容

保留原有的二元askable(Goal, Question)谓词作为布尔类型问题的默认写法,原有知识库中所有旧的askable无需修改直接可用。新增带配置参数的谓词格式支持多类型问题:

% 通用格式:askable(目标, 问题文本, [type(答案类型), options(可选答案列表)])
% 单选示例:对应颜色选择场景
askable(prefer_color(X), '你偏好哪种颜色?', [type(single_choice), options(['红','绿','黄'])]).
% 多选示例:允许多选的场景
askable(have_symptom(X), '你存在以下哪些症状?', [type(multiple_choice), options(['头痛','恶心','乏力'])]).

系统判断askable参数个数即可自动识别问题类型,二元参数默认判定为布尔类型问题。

2. 统一答案存储与匹配规则

新增动态事实user_answer(Goal, AnswerValue)存储所有用户提交的答案,统一适配不同类型:

  • 布尔答案存储格式:user_answer(presents(X, fever), true) / user_answer(presents(X, fever), false)
  • 单选答案存储格式:user_answer(prefer_color(X), '红')
  • 多选答案存储格式:user_answer(have_symptom(X), ['头痛','乏力'])

扩展原有shows/presents谓词的匹配逻辑,无需修改原有规则写法,新增多类型匹配分支即可:

% 原有布尔匹配逻辑保留
shows(X, Goal) :-
    askable(Goal, _),
    user_answer(Goal, true).

% 新增单选值匹配逻辑
shows(X, Goal, Value) :-
    askable(Goal, _, _),
    user_answer(Goal, Value).

% 新增多选包含匹配逻辑:判断某选项是否在用户选中的列表中
shows(X, Goal, ContainValue) :-
    askable(Goal, _, [type(multiple_choice), _]),
    user_answer(Goal, SelectedList),
    member(ContainValue, SelectedList).

3. 规则写法示例

原有布尔类型规则完全不需要修改,你给出的pica诊断规则可以直接正常运行。新增多答案类型的规则写法如下:

% 单选判断:用户选了红色时触发推荐
rule (21, recommend(X, '红色主题皮肤'), and ([
    shows(X, is_vip, true), % 原有布尔类型判断写法不变
    shows(X, prefer_color, '红')
])).

% 多选判断:用户同时选了头痛和乏力时触发对应的诊断分支
rule (22, suspect(X, '病毒性感冒'), and ([
    shows(X, have_symptom, '头痛'),
    shows(X, have_symptom, '乏力'),
    shows(X, temperature_over_38, true)
])).

4. 交互逻辑调整

当系统触发askable调用时,按参数走不同的交互分支即可:

  • 二元askable:走原有布尔提问流程,输出问题后让用户回答是/否
  • 带配置的askable:读取type参数,单选场景列出选项让用户选1个,多选场景提示用户可选择多个,提交后按上述统一格式存储答案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:06:04