Skip to main content
本页面涵盖所有 LangChain 与 Open Agent Specification 的集成。 Open Agent Spec 是 Oracle 提供的一种与框架无关的声明式语言,用于定义 Agentic 系统。它允许以可移植的 JSON/YAML 格式定义 Agent 和工作流,并可在不同的运行时中执行。

安装与设置

您可以参考 安装指南 安装 pyagentspec 您可以通过其额外依赖项安装 LangGraph 适配器:
pip install "pyagentspec[langgraph]"

LangGraph 适配器

LangGraph 适配器允许使用 LangGraph 实例化和执行 Open Agent Spec 配置。 AgentSpecLoader 类负责加载 Agent Spec 配置(JSON 或 YAML 格式)并在 LangGraph 环境中将其实例化为可运行的 Agent。它还支持将已声明的工具映射到对应的 Python 函数。 以下示例展示了创建一个简单的 Agent Spec Agent 并将其转换为 LangGraph 助手的过程。 从创建 Agent Spec Agent 开始:
# 创建一个 Agent Spec agent
from pyagentspec.agent import Agent
from pyagentspec.llms.openaicompatibleconfig import OpenAiCompatibleConfig
from pyagentspec.property import FloatProperty
from pyagentspec.tools import ServerTool

subtraction_tool = ServerTool(
    name="subtraction-tool",
    description="subtract two numbers together",
    inputs=[FloatProperty(title="a"), FloatProperty(title="b")],
    outputs=[FloatProperty(title="difference")],
)

agentspec_llm_config = OpenAiCompatibleConfig(
    name="llama-3.3-70b-instruct",
    model_id="/storage/models/Llama-3.3-70B-Instruct",
    url="url.to.my.llm",
)

agentspec_agent = Agent(
    name="agentspec_tools_test",
    description="agentspec_tools_test",
    llm_config=agentspec_llm_config,
    system_prompt="Perform subtraction with the given tool.",
    tools=[subtraction_tool],
)
随后可以将 Agent 导出为 JSON:
# 导出 Agent Spec 配置
from pyagentspec.serialization import AgentSpecSerializer

agentspec_config = AgentSpecSerializer().to_json(agentspec_agent)
然后使用 AgentSpecLoader 将其转换为 LangGraph 助手。 示例还展示了工具映射和会话执行。
# 使用 LangGraph 加载并运行 Agent Spec 配置
from pyagentspec.adapters.langgraph import AgentSpecLoader

def subtract(a: float, b: float) -> float:
    return a - b

async def main():
    loader = AgentSpecLoader(tool_registry={"subtraction-tool": subtract})
    assistant = loader.load_json(agentspec_config)

    while True:
        user_input = input("USER >> ")
        if user_input == "exit":
            break
        result = await assistant.ainvoke(
            input={"messages": [{"role": "user", "content": user_input}]},
        )
        print(f"AGENT >> {result['messages'][-1].content}")