Compass LangChain 工具包
使用各种DeFi协议进行交互。非托管工具返回未签名交易。该工具包基于一个通用的DeFi API(Compass API),允许代理执行如下的金融操作:
- Swap tokens on Uniswap and Aerodrome
- 使用Aave上的协议进行资产的 借贷
- 提供流动性在Aerodrome和Uniswap
- 钱包间转账。
- 查询余额、持仓并监控仓位。
概览
集成细节
| Class | 包 | 序列化 | JS支持 | Package 最新版本 |
|---|---|---|---|---|
| LangchainCompassToolkit | langchain-compass | ❌ | ❌ |
Tool features
此工具包提供的部分工具样本(每日可能更改):
aave_supply: 将资产提供给Aave以赚取利息。aave_borrow: 使用抵押品从Aave借取资产。uniswap_swap_sell_exactly: 在Uniswap上交换特定数量的一种代币。generic_portfolio_get: 从钱包中检索以美元和代币余额形式的资产组合。generic_transfer_erc20: 跨地址转移ERC20代币。
设置
这里我们将:
- 安装 langchain 包
- 导入并实例化工具包
- 将工具传递给您的代理,请使用
toolkit.get_tools()
安装
这个工具包位于langchain-compass包中:
%pip install -qU langchain-compass
环境设置
要运行这些示例,请确保 LangChain 可以访问一个语言模型服务。例如,如果你正在使用 GPT-4o,则需要创建一个 .env 文件,内容如下:
# .env file
OPENAI_API_KEY=<your_openai_api_key_here>
Instantiation
现在我们可以实例化我们的工具包:
from langchain_compass.toolkits import LangchainCompassToolkit
toolkit = LangchainCompassToolkit(compass_api_key=None)
工具
查看 可用工具:
tools = toolkit.get_tools()
for tool in tools:
print(tool.name)
# Expected output:
aave_supply
aave_borrow
aave_repay
aave_withdraw
aave_asset_price_get
aave_liquidity_change_get
aave_user_position_summary_get
...
Invocation
程序化调用单个工具的方法如下:
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')
使用于代理
我们需要一个大语言模型或聊天模型:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
llm = ChatOpenAI(model="gpt-4o")
API 参考:ChatOpenAI
使用工具初始化代理:
from langgraph.prebuilt import create_react_agent
tools = toolkit.get_tools()
agent_executor = create_react_agent(llm, tools)
API 参考:create_react_agent
示例用法:
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()
预期输出:
================================[1m Human Message [0m=================================
please set an allowance on Uniswap of 10 WETH for vitalic.eth.
==================================[1m Ai Message [0m==================================
Tool Calls:
generic_ens_get (call_MHIXRXxWH0L7iUEYHwvDUdU1)
Call ID: call_MHIXRXxWH0L7iUEYHwvDUdU1
Args:
chain: ethereum:mainnet
ens_name: vitalic.eth
=================================[1m Tool Message [0m=================================
Name: generic_ens_get
wallet_address='0x44761Ef63FaD902D8f8dC77e559Ab116929881Db' registrant='0x44761Ef63FaD902D8f8dC77e559Ab116929881Db'
==================================[1m Ai Message [0m==================================
Tool Calls:
generic_allowance_set (call_IEBftbtBfKCkI1zFXXtEY8tq)
Call ID: call_IEBftbtBfKCkI1zFXXtEY8tq
Args:
amount: 10
chain: ethereum:mainnet
contract_name: UniswapV3Router
sender: 0x44761Ef63FaD902D8f8dC77e559Ab116929881Db
token: WETH
=================================[1m Tool Message [0m=================================
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 端点。请查看文档