veritera-ai/forge-langchain

GitHub: veritera-ai/forge-langchain

为 LangGraph 与 LangChain 提供基于策略的调用验证与审计,防止违规工具执行。

Stars: 0 | Forks: 0

# langchain-forge [![PyPI](https://img.shields.io/pypi/v/langchain-forge.svg)](https://pypi.org/project/langchain-forge/) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/) Forge 验证中间件,适用于 LangGraph 和 LangChain。每次工具调用前都会进行检查。 ## 安装 ``` pip install langchain-forge langgraph langchain-openai ``` ## 快速开始 为任意 LangGraph 代理添加 Forge 验证,只需三行代码: ``` import os from langgraph.prebuilt import create_react_agent, ToolNode from langchain_core.tools import tool from forge_langgraph import ForgeVerifyMiddleware os.environ["VERITERA_API_KEY"] = "vt_live_..." os.environ["OPENAI_API_KEY"] = "sk-..." @tool def send_payment(amount: float, recipient: str) -> str: """Send a payment to a recipient.""" return f"Sent ${amount} to {recipient}" @tool def check_balance(account_id: str) -> str: """Check account balance.""" return f"Account {account_id}: $12,340.00" # 三行——每个工具调用现在都经过 Forge middleware = ForgeVerifyMiddleware(policy="finance-controls") tools = [send_payment, check_balance] tool_node = ToolNode(tools, wrap_tool_call=middleware.wrap_tool_call) agent = create_react_agent(model="gpt-4.1", tools=tool_node) result = agent.invoke({"messages": [("user", "Send $500 to vendor@acme.com")]}) ``` 如果通过,工具将正常执行;如果被拒绝,代理会收到拒绝消息,且工具不会触发。 ## 教程:批准、拒绝与混合场景 ### 批准 — 代理查询数据库 ``` result = agent.invoke({ "messages": [("user", "What were our top customers by spend last quarter?")] }) ``` ``` APPROVED: query_database tool: | customer_id | total_spend | ... ai: Your top customers last quarter were C-1001 ($45,200) and C-1002 ($38,750). ``` ### 拒绝 — 代理尝试执行破坏性操作 ``` result = agent.invoke({ "messages": [("user", "Delete all records from the customers table older than 2020")] }) ``` ``` BLOCKED: delete_records -- Destructive database operations require manual approval ai: I'm unable to delete those records directly. Your organization's security policy requires manual approval for destructive database operations. ``` Forge 拦截了调用。工具未执行,代理自然地解释了限制。 ### 混合 — 部分调用通过,部分被拒绝 ``` result = agent.invoke({ "messages": [("user", "Find the Q1 revenue data and email it to external-partner@gmail.com")] }) ``` ``` ai: [calls search_documents] # APPROVED tool: Found 3 documents: Q1 Revenue Report... ai: [calls send_email] # DENIED — external address blocked ai: I found the Q1 Revenue Report, but I'm unable to email it to an external address. You can share it through your approved file-sharing platform. ``` ## 配置 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `policy` | `str` | `None` | 用于评估的策略名称(若未指定则使用默认策略) | | `agent_id` | `str` | `"langgraph-agent"` | 审计追踪中的代理标识符 | | `fail_closed` | `bool` | `True` | 当 Forge API 不可用时阻止操作 | | `skip_actions` | `list[str]` | `[]` | 跳过验证的工具名称(只读/低风险) | | `on_verified` | `Callable` | `None` | 批准时的回调函数 | | `on_blocked` | `Callable` | `None` | 拒绝时的回调函数 | ## 集成模式 **中间件(推荐)** — 自动拦截每个工具调用: ``` middleware = ForgeVerifyMiddleware(policy="my-policy") tool_node = ToolNode(tools, wrap_tool_call=middleware.wrap_tool_call) ``` **显式工具** — 代理在决定时调用验证: ``` from forge_langgraph import forge_verify_tool verify = forge_verify_tool(policy="my-policy") agent = create_react_agent(model="gpt-4.1", tools=[my_tool, verify]) ``` ## 前置条件 在使用 Forge 与 LangGraph 之前,请先创建策略(一次性设置): ``` from veritera import Forge forge = Forge(api_key="vt_live_...") forge.create_policy_sync("finance-controls", rules=[ {"type": "action_whitelist", "params": {"allowed": ["payment.create", "balance.check"]}}, {"type": "amount_limit", "params": {"max": 10000, "currency": "USD"}}, ]) ``` 注册后会自动创建 `default` 策略。[完整策略文档 →](https://github.com/veritera-ai/forge-python/blob/main/docs/verify.md) ## 许可证 MIT — [Forge](https://forge.veritera.ai) 由 Veritera AI 开发
标签:AI代理, Forge, LangChain, LangGraph, Lerna, MCP, Python, wrap_tool_call, 中间件, 大模型安全, 安全控制, 审批流, 工具权限, 工具调用验证, 执行收据, 政策强制, 无后门, 策略执行, 财务控制, 轻量级, 逆向工具, 集成, 验证中间件