章节 01
导读 / 主楼:Prolog-LLM:为SWI-Prolog注入大语言模型能力的开源库
prolog-llm是一个为SWI-Prolog提供大语言模型集成的开源库,支持Claude、ChatGPT、Gemini、Grok和Ollama五大主流服务,实现了流式响应、对话历史管理和模型间调用等高级功能。
正文
prolog-llm是一个为SWI-Prolog提供大语言模型集成的开源库,支持Claude、ChatGPT、Gemini、Grok和Ollama五大主流服务,实现了流式响应、对话历史管理和模型间调用等高级功能。
章节 01
prolog-llm是一个为SWI-Prolog提供大语言模型集成的开源库,支持Claude、ChatGPT、Gemini、Grok和Ollama五大主流服务,实现了流式响应、对话历史管理和模型间调用等高级功能。
章节 02
Prolog作为一门历史悠久的逻辑编程语言,在人工智能领域有着深厚的根基。然而,随着大语言模型(LLM)的崛起,传统Prolog系统与现代AI能力之间出现了断层。prolog-llm项目应运而生,它搭建了一座桥梁,让Prolog开发者能够无缝接入当今最先进的语言模型服务。
该项目最初从portage-ng项目中提取而来,经过精心重构后成为一个独立的、依赖轻量的LLM客户端库。它的设计理念是在保持Prolog原有编程范式的同时,赋予其现代自然语言处理能力。
章节 03
prolog-llm最引人注目的特性是它对五大主流LLM服务的统一支持:
llm/grok.pl模块接入,采用OpenAI兼容的API格式llm/chatgpt.pl模块接入,同样使用OpenAI标准接口llm/claude.pl模块接入,使用Anthropic原生协议llm/gemini.pl模块接入,OpenAI兼容格式llm/ollama.pl模块接入,支持本地模型运行这种统一封装意味着开发者可以用几乎相同的代码逻辑调用不同厂商的模型,大大降低了多供应商集成的复杂度。
章节 04
与许多需要等待完整响应才能处理的LLM库不同,prolog-llm实现了真正的流式输出。响应以token为单位实时传输到current_output流,同时可选地将完整内容捕获为Prolog字符串供下游处理。这种设计特别适合需要实时反馈的交互式应用场景。
章节 05
每个服务模块维护独立的history/1动态谓词,确保不同服务之间的对话不会相互干扰。这种设计允许开发者在一个Prolog会话中同时与多个模型进行独立对话,实现真正的多模型协作。
章节 06
这是prolog-llm最具创新性的功能。当配置中加载了chat和code能力后,模型可以在回答中嵌入特殊XML标签:
<call:chatgpt>...</call:chatgpt>:将内部文本转发给ChatGPT并返回答案<call:swi_prolog>:- between(1, 5, X), writeln(X), fail.</call:swi_prolog>:将代码加载到临时沙箱模块中执行,并捕获输出返回这种机制实现了模型间的链式调用和代码的安全执行,重放循环会持续运行直到没有更多标签需要处理。这意味着一个模型可以连续调用多个工具或执行多段代码后才给出最终答案。
章节 07
项目采用清晰的模块化设计:
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
章节 08
所有配置通过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)