# ใช้ blockchain RPC ใน LangChain agent ด้วย BlockVectra

> Source: https://docs.blockvectra.com/th/guides/langchain/

LangChain agent อ่านข้อมูลบล็อกเชนแบบสดผ่านเครื่องมือเดียวที่ POST JSON-RPC ไปยัง `https://api.blockvectra.com/v1/eth_mainnet/public` endpoint นั้นไม่ต้องใช้ API key หรือการลงทะเบียนสำหรับเมธอดใน `public.methods` ของแต่ละเชน คีย์ช่วยเพิ่มเมธอดที่เหลือ และแผนบริการฟรีให้ 30,000,000 CU ต่อช่วงเวลา 30 วัน ตรวจสอบเมื่อ 2026-10-11

```python
import httpx
from langchain.agents import create_agent
from langchain.tools import tool

RPC = "https://api.blockvectra.com/v1/eth_mainnet/public"

@tool
def eth_block_number() -> str:
    """Return the latest Ethereum mainnet block number as a hex string."""
    body = {"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}
    return httpx.post(RPC, json=body, timeout=10).json()["result"]

agent = create_agent("claude-sonnet-5", tools=[eth_block_number])
result = agent.invoke({"messages": [{"role": "user", "content": "What is the latest block?"}]})
print(result["messages"][-1].content)
```

ติดตั้งด้วย `pip install langchain httpx`; สตริงโมเดลและคีย์ของผู้ให้บริการเป็นไปตาม[LangChain quickstart](https://docs.langchain.com/oss/python/langchain/quickstart) เครื่องมือนี้ใช้ [`@tool` decorator](https://docs.langchain.com/oss/python/langchain/tools) และ [`create_agent`](https://reference.langchain.com/python/langchain/agents/factory/create_agent) ของ LangChain

## เครื่องมือเดียวกันใน TypeScript

```typescript
import * as z from "zod";
import { createAgent, tool } from "langchain";

const ethBlockNumber = tool(
  async () => {
    const res = await fetch("https://api.blockvectra.com/v1/eth_mainnet/public", {
      method: "POST",
      headers: { "content-type": "application/json" },
      body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_blockNumber", params: [] }),
    });
    return (await res.json()).result as string;
  },
  { name: "eth_block_number", description: "Latest Ethereum mainnet block number (hex).", schema: z.object({}) },
);

const agent = createAgent({ model: "claude-sonnet-5", tools: [ethBlockNumber] });
```

ดู[คู่มือ tools](https://docs.langchain.com/oss/javascript/langchain/tools)ของ LangChain JS สำหรับซิกเนเจอร์ของ `tool()`

## เรียกเมธอดใดก็ได้ด้วย API key

เมธอดนอก `public.methods` เช่น `eth_getLogs` ต้องใช้คีย์ อ่านคีย์จากสภาพแวดล้อมและส่งในส่วนหัว `x-api-key`; slug ของเชน (`eth_mainnet`, `base_mainnet` และอื่นๆ) ได้จาก `GET /v1/chains`:

```python
import os
import httpx
from langchain.tools import tool

@tool
def rpc_call(chain: str, method: str, params: list) -> dict:
    """Call a JSON-RPC method on a BlockVectra chain slug such as base_mainnet."""
    headers = {"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]}
    body = {"jsonrpc": "2.0", "id": 1, "method": method, "params": params}
    return httpx.post(f"https://api.blockvectra.com/v1/{chain}", json=body, headers=headers, timeout=15).json()
```

การส่งกลับการตอบกลับ JSON-RPC ทั้งหมดช่วยให้โมเดลอ่านออบเจกต์ `error` และปรับการเรียกครั้งถัดไปได้ หากต้องการสร้างคีย์โดยไม่ใช้เบราว์เซอร์ ให้ทำโฟลว์สี่ขั้นตอนใน[คู่มือการลงทะเบียนแบบเป็นโปรแกรม](https://docs.blockvectra.com/th/guides/programmatic-signup/?ref=docs-langchain): challenge, ลายเซ็น, login แล้ว `POST /keys` นักพัฒนายัง[สร้างคีย์ในคอนโซล](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain)ได้ด้วย

## เพิ่ม docs MCP server

LangChain agent เชื่อมต่อกับ MCP server ผ่าน `MCPAdapter` ชี้ไปที่ `https://docs.blockvectra.com/mcp` เพื่อให้ agent มี `list_chains`, `get_status`, `rpc_call`, `read_doc` และเครื่องมืออื่นที่ระบุไว้ใน[หน้า MCP server](https://docs.blockvectra.com/th/guides/mcp-server/) การเชื่อมต่อไม่ต้องใช้คีย์

```python
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter

async def main():
    async with MCPAdapter("https://docs.blockvectra.com/mcp") as adapter:
        tools = await adapter.list_tools()
        agent = create_agent("claude-sonnet-5", tools)
        return await agent.ainvoke({"messages": [{"role": "user", "content": "List the supported chains."}]})
```

ติดตั้งด้วย `pip install "langchain[mcp]"` (`langchain>=1.4.0`, อยู่ในช่วงเบต้า) หากต้องการใช้เครื่องมือที่ต้องใช้คีย์ ให้ส่งคีย์เป็น bearer token: `MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"]))` พร้อม `from fastmcp.client import Client` ตามที่ระบุใน[คู่มือ MCP authentication](https://docs.langchain.com/oss/python/langchain/mcp/auth) ของ LangChain

ใน TypeScript ให้ติดตั้ง `@langchain/mcp-adapters@^2.0.0` และส่งแมปส่วนหัว:

```typescript
import { MCPAdapter } from "@langchain/mcp-adapters";
import { createAgent } from "langchain";

const adapter = new MCPAdapter({
  servers: {
    blockvectra: {
      url: "https://docs.blockvectra.com/mcp",
      headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
    },
  },
});

try {
  const agent = createAgent({ model: "claude-sonnet-5", tools: await adapter.listTools() });
  // agent.invoke(...)
} finally {
  await adapter.close();
}
```

ลบบรรทัด `headers` ออกเพื่อเชื่อมต่อโดยไม่ใช้คีย์ เอกสารอ้างอิงทางการ: [LangChain MCP (Python)](https://docs.langchain.com/oss/python/langchain/mcp) และ [LangChain MCP (JavaScript)](https://docs.langchain.com/oss/javascript/langchain/mcp)

## ข้อผิดพลาดที่เครื่องมือของคุณจะพบ

| การตอบกลับ                            | ความหมาย                                  | สิ่งที่ agent ควรทำ                                             |
| ------------------------------------- | ----------------------------------------- | --------------------------------------------------------------- |
| HTTP 401, `-32024`, `missing_api_key` | เรียก URL ที่ต้องใช้คีย์โดยไม่มีคีย์      | ส่งคีย์ใน `x-api-key` หรือในพาธ                                 |
| HTTP 401, `-32024`, `invalid_api_key` | ไม่รู้จักคีย์ ถูกปิดใช้งาน หรือถูกเพิกถอน | ตรวจสอบคีย์ในคอนโซล; คีย์ใหม่ใช้เวลาไม่กี่วินาทีจึงจะเปิดใช้งาน |
| `-32601`, `method_not_public`         | เมธอดไม่อยู่ใน `public.methods` ของเชน    | ใช้ URL ที่ต้องใช้คีย์แทน `/public`                             |
| `-32601`, method not available        | เมธอดไม่ได้เปิดใช้บนเชนนั้น               | ตรวจสอบ `methods.allow` ใน `GET /v1/chains`                     |

ทุกข้อผิดพลาดมี `data.reason` และ `docs_url`; รายการทั้งหมดอยู่ใน[หน้าข้อผิดพลาด](https://docs.blockvectra.com/th/errors/)

## คำถามที่พบบ่อย

**endpoint สาธารณะใช้กับ `eth_getLogs` ได้หรือไม่** ไม่ได้ ให้บริการเฉพาะเมธอดใน `public.methods` ของเชน; `eth_getLogs` และ Data API ต้องใช้ API key

**agent ส่ง API key เป็นอาร์กิวเมนต์ของเครื่องมือได้หรือไม่** ไม่ได้ เก็บไว้ในสภาพแวดล้อมหรือส่วนหัวของไคลเอนต์ MCP; MCP server ปฏิเสธคีย์ในอาร์กิวเมนต์ของเครื่องมือ

**เครื่องมือชี้ไปยังเชนอื่นได้หรือไม่** ได้ แทน `eth_mainnet` ด้วย slug ของเชนใดก็ได้ที่มี `public.url` ใน `GET /v1/chains`

## ขั้นตอนถัดไป

* [ภาพรวมเฟรมเวิร์ก agent](https://docs.blockvectra.com/th/guides/agent-frameworks/) สำหรับ ElizaOS, viem, wagmi และ Coinbase AgentKit
* [เชื่อมต่อ AI Agent](https://docs.blockvectra.com/th/guides/ai-agents/) เพื่อค้นหา endpoint ด้วย MCP, llms.txt และ OpenAPI
* [กฎการเรียกเก็บเงิน](https://docs.blockvectra.com/th/guides/billing-rules/) สำหรับการวัด CU ขีดจำกัดอัตรา และข้อผิดพลาดที่ไม่คิดค่าบริการ
