다양한 DeFi 프로토콜과 상호작용합니다. 비수탁형입니다. 도구는 서명되지 않은 트랜잭션을 반환합니다. 이 toolkit은 Universal DeFi API(Compass API)를 기반으로 구축되어 에이전트가 다음과 같은 금융 작업을 수행할 수 있습니다:
  • Uniswap과 Aerodrome에서 토큰 스왑
  • Aave 프로토콜을 사용한 자산 대출 또는 차입
  • Aerodrome과 Uniswap에서 유동성 공급
  • 지갑 간 자금 이체
  • 잔액, 포트폴리오 조회 및 포지션 모니터링

Overview

Integration details

ClassPackageSerializableJS supportVersion
LangchainCompassToolkitlangchain-compassPyPI - Version

Tool features

이 toolkit이 제공하는 도구 샘플입니다(매일 변경될 수 있음):
  • aave_supply: Aave에 자산을 공급하여 이자를 얻습니다.
  • aave_borrow: 담보를 사용하여 Aave에서 자산을 차입합니다.
  • uniswap_swap_sell_exactly: Uniswap에서 특정 수량의 토큰을 스왑합니다.
  • generic_portfolio_get: 지갑의 포트폴리오를 USD 및 토큰 잔액으로 조회합니다.
  • generic_transfer_erc20: 주소 간 ERC20 토큰을 이체합니다.

Setup

여기서 다음을 수행합니다:
  1. langchain 패키지 설치
  2. toolkit import 및 인스턴스화
  3. toolkit.get_tools()를 사용하여 에이전트에 도구 전달

Installation

이 toolkit은 langchain-compass 패키지에 있습니다:
pip install -qU langchain-compass

Environment Setup

이 예제를 실행하려면 LangChain이 LLM 서비스에 액세스할 수 있어야 합니다. 예를 들어, GPT-4o를 사용하는 경우 다음 내용이 포함된 .env 파일을 생성하세요:
# .env file
OPENAI_API_KEY=<your_openai_api_key_here>

Instantiation

이제 toolkit을 인스턴스화할 수 있습니다:
from langchain_compass.toolkits import LangchainCompassToolkit

toolkit = LangchainCompassToolkit(compass_api_key=None)

Tools

사용 가능한 도구 보기:
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')

Use within an agent

LLM 또는 chat model이 필요합니다:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

llm = ChatOpenAI(model="gpt-4o")
도구를 사용하여 에이전트를 초기화합니다:
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 reference

langchain-compass는 Compass API를 기반으로 구축되었습니다. 각 도구는 API 엔드포인트에 해당합니다. 여기에서 문서를 확인하세요
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I