Skip to main content
与各种 DeFi 协议交互。非托管模式,工具返回未签名的交易。该工具包构建于通用 DeFi API(Compass API)之上,允许智能体执行以下金融操作:
  • 在 Uniswap 和 Aerodrome 上交换代币
  • 使用 Aave 上的协议借出借入资产
  • 在 Aerodrome 和 Uniswap 上提供流动性
  • 在钱包之间转移资金
  • 查询余额、投资组合并监控头寸

概述

集成详情

ClassPackageSerializableJS supportVersion
LangchainCompassToolkitlangchain-compassPyPI - Version

工具功能

Here’s a sample of the tools this toolkit provides (subject to change daily):
  • aave_supply:向 Aave 提供资产以赚取利息。
  • aave_borrow:使用抵押品从 Aave 借入资产。
  • uniswap_swap_sell_exactly:在 Uniswap 上交换特定数量的代币。
  • generic_portfolio_get: Retrieve a wallet’s portfolio in USD and token balances.
  • generic_transfer_erc20:在地址之间转移 ERC20 代币。

设置

在这里我们将:
  1. 安装 langchain 包
  2. 导入并实例化工具包
  3. 使用 toolkit.get_tools() 将工具传递给您的智能体

安装

该工具包位于 langchain-compass 包中:
pip install -qU langchain-compass

环境配置

要运行这些示例,请确保 LangChain 可以访问 LLM 服务。例如,如果您使用 GPT-4o,请创建包含以下内容的 .env 文件:
# .env file
OPENAI_API_KEY=<your_openai_api_key_here>

实例化

现在我们可以实例化工具包:
from langchain_compass.toolkits import LangchainCompassToolkit

toolkit = LangchainCompassToolkit(compass_api_key=None)

工具

查看可用工具
tools = toolkit.get_tools()
for tool in tools:
    print(tool.name)
# 预期输出:

aave_supply
aave_borrow
aave_repay
aave_withdraw
aave_asset_price_get
aave_liquidity_change_get
aave_user_position_summary_get
...

调用

以编程方式调用单个工具:
tool_name = "generic_ens_get"
tool = next(tool for tool in tools if tool.name == tool_name)
tool.invoke({"ens_name": "vitalik.eth", "chain": "ethereum:mainnet"})
EnsNameInfoResponse(wallet_address='0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045', registrant='0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045')

在智能体中使用

我们需要一个 LLM 或聊天模型:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

llm = ChatOpenAI(model="gpt-4.1")
使用工具初始化智能体:
from langchain.agents import create_agent


tools = toolkit.get_tools()
agent_executor = create_agent(llm, tools)
使用示例:
example_query = "please set an allowance on Uniswap of 10 WETH for vitalic.eth."  # spelt wrong intentionally

events = agent_executor.stream(
    {"messages": [("user", example_query)]},
    stream_mode="values",
)
for event in events:
    event["messages"][-1].pretty_print()
预期输出:
================================ Human Message =================================

please set an allowance on Uniswap of 10 WETH for vitalic.eth.
================================== Ai Message ==================================
Tool Calls:
  generic_ens_get (call_MHIXRXxWH0L7iUEYHwvDUdU1)
 Call ID: call_MHIXRXxWH0L7iUEYHwvDUdU1
  Args:
    chain: ethereum:mainnet
    ens_name: vitalic.eth
================================= Tool Message =================================
Name: generic_ens_get

wallet_address='0x44761Ef63FaD902D8f8dC77e559Ab116929881Db' registrant='0x44761Ef63FaD902D8f8dC77e559Ab116929881Db'
================================== Ai Message ==================================
Tool Calls:
  generic_allowance_set (call_IEBftbtBfKCkI1zFXXtEY8tq)
 Call ID: call_IEBftbtBfKCkI1zFXXtEY8tq
  Args:
    amount: 10
    chain: ethereum:mainnet
    contract_name: UniswapV3Router
    sender: 0x44761Ef63FaD902D8f8dC77e559Ab116929881Db
    token: WETH
================================= Tool Message =================================
Name: generic_allowance_set

{"type": "unsigned_transaction", "content": {"chainId": 1, "data": "0x095ea7b300000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc450000000000000000000000000000000000000000000000008ac7230489e80000", "from": "0x44761Ef63FaD902D8f8dC77e559Ab116929881Db", "gas": 46434, "to": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "value": 0, "nonce": 79, "maxFeePerGas": 2265376912, "maxPriorityFeePerGas": 6400594}}

API 参考

langchain-compass 构建于 Compass API 之上。每个工具对应一个 API 端点。请在此处查看文档