# Prolog-LLM：为SWI-Prolog注入大语言模型能力的开源库

> prolog-llm是一个为SWI-Prolog提供大语言模型集成的开源库，支持Claude、ChatGPT、Gemini、Grok和Ollama五大主流服务，实现了流式响应、对话历史管理和模型间调用等高级功能。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-05-14T11:24:16.000Z
- 最近活动: 2026-05-14T11:35:06.716Z
- 热度: 167.8
- 关键词: Prolog, SWI-Prolog, LLM, 大语言模型, Claude, ChatGPT, Gemini, Grok, Ollama, 逻辑编程, 流式响应, AI集成
- 页面链接: https://www.zingnex.cn/forum/thread/prolog-llm-swi-prolog
- Canonical: https://www.zingnex.cn/forum/thread/prolog-llm-swi-prolog
- Markdown 来源: ingested_event

---

# Prolog-LLM：为SWI-Prolog注入大语言模型能力的开源库

## 项目背景与动机

Prolog作为一门历史悠久的逻辑编程语言，在人工智能领域有着深厚的根基。然而，随着大语言模型（LLM）的崛起，传统Prolog系统与现代AI能力之间出现了断层。prolog-llm项目应运而生，它搭建了一座桥梁，让Prolog开发者能够无缝接入当今最先进的语言模型服务。

该项目最初从portage-ng项目中提取而来，经过精心重构后成为一个独立的、依赖轻量的LLM客户端库。它的设计理念是在保持Prolog原有编程范式的同时，赋予其现代自然语言处理能力。

## 核心功能详解

### 多服务统一接口

prolog-llm最引人注目的特性是它对五大主流LLM服务的统一支持：

- **Grok**（xAI）：通过`llm/grok.pl`模块接入，采用OpenAI兼容的API格式
- **ChatGPT**（OpenAI）：通过`llm/chatgpt.pl`模块接入，同样使用OpenAI标准接口
- **Claude**（Anthropic）：通过`llm/claude.pl`模块接入，使用Anthropic原生协议
- **Gemini**（Google）：通过`llm/gemini.pl`模块接入，OpenAI兼容格式
- **Ollama**（本地部署）：通过`llm/ollama.pl`模块接入，支持本地模型运行

这种统一封装意味着开发者可以用几乎相同的代码逻辑调用不同厂商的模型，大大降低了多供应商集成的复杂度。

### 流式响应与实时输出

与许多需要等待完整响应才能处理的LLM库不同，prolog-llm实现了真正的流式输出。响应以token为单位实时传输到`current_output`流，同时可选地将完整内容捕获为Prolog字符串供下游处理。这种设计特别适合需要实时反馈的交互式应用场景。

### 对话历史管理

每个服务模块维护独立的`history/1`动态谓词，确保不同服务之间的对话不会相互干扰。这种设计允许开发者在一个Prolog会话中同时与多个模型进行独立对话，实现真正的多模型协作。

### 标签重放循环（Tag Replay Loop）

这是prolog-llm最具创新性的功能。当配置中加载了`chat`和`code`能力后，模型可以在回答中嵌入特殊XML标签：

- `<call:chatgpt>...</call:chatgpt>`：将内部文本转发给ChatGPT并返回答案
- `<call:swi_prolog>:- between(1, 5, X), writeln(X), fail.</call:swi_prolog>`：将代码加载到临时沙箱模块中执行，并捕获输出返回

这种机制实现了模型间的链式调用和代码的安全执行，重放循环会持续运行直到没有更多标签需要处理。这意味着一个模型可以连续调用多个工具或执行多段代码后才给出最终答案。

## 技术实现细节

### 模块化架构

项目采用清晰的模块化设计：

```
prolog-llm/
├── llm.pl              # 共享流式运行时 + 标签重放循环
├── llm/
│   ├── chatgpt.pl      # OpenAI兼容服务
│   ├── claude.pl       # Anthropic原生协议
│   ├── gemini.pl       # Google Gemini
│   ├── grok.pl         # xAI Grok
│   └── ollama.pl       # 本地Ollama
├── message.pl          # ANSI颜色/样式处理
├── config.sample.pl    # 配置模板
└── README.md
```

### 配置系统

所有配置通过`config:`命名空间管理，支持以下关键配置项：

- `llm_api_key(Service, Key)`：各服务的Bearer令牌
- `llm_endpoint(Service, URL)`：自定义API端点
- `llm_model(Service, Model)`：默认模型名称
- `llm_max_tokens(N)`：响应长度上限
- `llm_temperature(T)`：采样温度（0.0-1.0）
- `llm_sandboxed_execution(Bool)`：是否启用沙箱执行
- `llm_capability(Name, Prompt)`：可选的能力提示（chat、code）

### UTF-8安全与兼容性

库实现完全UTF-8安全，emoji和复杂脚本开箱即用。同时提供了与宿主应用集成的指导：如果宿主应用已有`message`模块处理颜色和样式，可以删除库中的`message.pl`；如果已有`config`模块，可以直接在现有配置中添加`config:llm_*`谓词。

## 使用示例

### 快速单次调用

```prolog
?- chatgpt:chatgpt("Explain the difference between SLD and SLG resolution.", Reply).
```

`Reply`将被统一为完整的响应字符串，同时答案会流式输出到当前输出流。

### 交互式提示

```prolog
?- gemini:gemini.
```

这将打开`$EDITOR`环境变量指定的编辑器，让用户撰写多行提示。退出编辑器后，缓冲区内容会被发送给模型。

### 多服务协作

```prolog
?- grok:grok("Draft a one-paragraph summary of monotonic reasoning.", Draft),
   claude:claude(Draft, Critique),
   format("~nClaude says: ~w~n", [Critique]).
```

这个例子展示了如何让Grok起草内容，然后让Claude进行批评分析。

## 实际应用场景

prolog-llm在多个领域具有实用价值：

**知识库增强**：将LLM的自然语言理解能力与Prolog的逻辑推理相结合，构建更智能的专家系统。

**代码生成与验证**：利用标签重放功能，让LLM生成Prolog代码并立即在沙箱中验证执行。

**多模型工作流**：通过链式调用不同厂商的模型，发挥各模型的特长（如Grok的实时信息、Claude的深度分析）。

**教学与原型开发**：快速验证AI与逻辑编程结合的想法，无需复杂的集成工作。

## 项目现状与展望

prolog-llm采用BSD 2-Clause许可证开源，代码从portage-ng项目完整提取，保留了完整的文件历史。项目目前处于活跃开发阶段，已实现对五大主流服务的完整支持。

对于Prolog社区而言，这个项目代表了传统逻辑编程与现代生成式AI融合的重要尝试。它不仅是一个工具库，更是一种探索性的架构示范——展示了如何在保持语言纯粹性的同时，拥抱外部AI能力。

随着LLM能力的不断增强和Prolog在知识表示领域的持续价值，prolog-llm这类桥接项目将在AI系统架构中扮演越来越重要的角色。
