跳到主要内容
Open In ColabOpen on GitHub

Prolog

LangChain 工具,它使用 Prolog 规则来生成答案。

概述

PrologTool 类允许生成使用 Prolog 规则来生成答案的 langchain 工具。

设置

让我们在 family.pl 文件中使用以下 Prolog 规则

parent(john, bianca, mary).
parent(john, bianca, michael).
parent(peter, patricia, jennifer).
partner(X, Y) :- parent(X, Y, _).

#!pip install langchain-prolog

from langchain_prolog import PrologConfig, PrologRunnable, PrologTool

TEST_SCRIPT = "family.pl"

实例化

首先创建 Prolog 工具

schema = PrologRunnable.create_schema("parent", ["men", "women", "child"])
config = PrologConfig(
rules_file=TEST_SCRIPT,
query_schema=schema,
)
prolog_tool = PrologTool(
prolog_config=config,
name="family_query",
description="""
Query family relationships using Prolog.
parent(X, Y, Z) implies only that Z is a child of X and Y.
Input can be a query string like 'parent(john, X, Y)' or 'john, X, Y'"
You have to specify 3 parameters: men, woman, child. Do not use quotes.
""",
)

调用

将 Prolog 工具与 LLM 和函数调用一起使用

#!pip install python-dotenv

from dotenv import find_dotenv, load_dotenv

load_dotenv(find_dotenv(), override=True)

#!pip install langchain-openai

from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
API 参考:HumanMessage | ChatOpenAI

要使用该工具,请将其绑定到 LLM 模型

llm = ChatOpenAI(model="gpt-4o-mini")
llm_with_tools = llm.bind_tools([prolog_tool])

然后查询模型

query = "Who are John's children?"
messages = [HumanMessage(query)]
response = llm_with_tools.invoke(messages)

LLM 将响应工具调用请求

messages.append(response)
response.tool_calls[0]
{'name': 'family_query',
'args': {'men': 'john', 'women': None, 'child': None},
'id': 'call_gH8rWamYXITrkfvRP2s5pkbF',
'type': 'tool_call'}

该工具接受此请求并查询 Prolog 数据库

tool_msg = prolog_tool.invoke(response.tool_calls[0])

该工具返回一个包含查询所有解决方案的列表

messages.append(tool_msg)
tool_msg
ToolMessage(content='[{"Women": "bianca", "Child": "mary"}, {"Women": "bianca", "Child": "michael"}]', name='family_query', tool_call_id='call_gH8rWamYXITrkfvRP2s5pkbF')

然后我们将其传递给 LLM,LLM 使用工具响应来回答原始查询

answer = llm_with_tools.invoke(messages)
print(answer.content)
John has two children: Mary and Michael, with Bianca as their mother.

链接

将 Prolog 工具与代理一起使用

要将 prolog 工具与代理一起使用,请将其传递给代理的构造函数

#!pip install langgraph

from langgraph.prebuilt import create_react_agent

agent_executor = create_react_agent(llm, [prolog_tool])
API 参考:create_react_agent

代理接受查询并在需要时使用 Prolog 工具

messages = agent_executor.invoke({"messages": [("human", query)]})

然后代理接收工具响应并生成答案

messages["messages"][-1].pretty_print()
================================== Ai Message ==================================

John has two children: Mary and Michael, with Bianca as their mother.

API 参考

有关详细信息,请参阅 https://langchain-prolog.readthedocs.io/en/latest/modules.html


此页对您有帮助吗?