LangChain TS Adapter
Enable LangChain Agent to support the AG-UI Protocol.
What is AG-UI?
AG-UI is an open, lightweight, event-based protocol for standardizing interactions between AI Agents and user interfaces. It enables Agents to:
- Real-time streaming conversations
- Bidirectional state synchronization
- Frontend tool integration (Client Tools)
- Human-in-the-loop collaboration
What does this package solve?
- Enable LangChain Agent to support AG-UI protocol: Adapts the Agent created by LangChain's
createAgent()to be AG-UI compatible - Client tool support: Provides
clientTools()middleware, allowing the frontend to dynamically inject tools into Agent calls
Used Together With
| Package | Purpose |
|---|---|
@cloudbase/agent-server | Deploy Agent as an AG-UI compatible HTTP service |
langchain | LangChain Agent framework |
@langchain/openai | OpenAI compatible model integration |
@langchain/langgraph | Agent session memory (MemorySaver) |
Architecture Diagram
Installation
pnpm add @cloudbase/agent-adapter-langchain @cloudbase/agent-server langchain @langchain/openai @langchain/langgraph
Quick Start
1. Create LangChain Agent
// agent.ts
import { createAgent as createLangchainAgent } from "langchain";
import { MemorySaver } from "@langchain/langgraph";
import { ChatOpenAI } from "@langchain/openai";
import { clientTools } from "@cloudbase/agent-adapter-langchain";
const checkpointer = new MemorySaver();
export function createAgent() {
// Configure the model
const model = new ChatOpenAI({
model: process.env.OPENAI_MODEL!,
apiKey: process.env.OPENAI_API_KEY!,
configuration: {
baseURL: process.env.OPENAI_BASE_URL!,
},
});
// Create Agent with clientTools middleware to support client tools
return createLangchainAgent({
model,
checkpointer,
middleware: [clientTools()],
});
}
2. Wrap and Deploy as HTTP Service
// index.ts
import { createExpressRoutes } from "@cloudbase/agent-server";
import { LangchainAgent } from "@cloudbase/agent-adapter-langchain";
import { createAgent as createLangchainAgent } from "./agent.js";
import express from "express";
function createAgent() {
const lcAgent = createLangchainAgent();
return {
agent: new LangchainAgent({
agent: lcAgent,
}),
};
}
const app = express();
createExpressRoutes({
createAgent,
express: app,
});
app.listen(9000, () => console.log("Listening on 9000!"));
3. Configure Environment Variables
Create a .env file:
OPENAI_API_KEY=your-deepseek-api-key
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat
4. Start the Service
npx tsx src/index.ts
For complete project configuration (tsconfig.json, package.json, etc.), please refer to the example project.
API Reference
LangchainAgent
Wraps a LangChain Agent as an AG-UI compatible Agent, making it deployable through @cloudbase/agent-server.
import { LangchainAgent } from "@cloudbase/agent-adapter-langchain";
const agent = new LangchainAgent({
agent: lcAgent, // LangChain Agent returned by createAgent()
});
Constructor Parameters:
| Parameter | Type | Description |
|---|---|---|
agent | ReturnType<typeof createAgent> | Return value of LangChain's createAgent() |
clientTools()
Creates middleware that allows the client to dynamically inject tools into Agent calls.
import { clientTools } from "@cloudbase/agent-adapter-langchain";
const agent = createAgent({
model,
checkpointer,
middleware: [clientTools()],
});
Purpose:
- Allows frontend clients to define tools and dynamically pass them to the Agent during calls
- The Agent merges client tools with server-side tools for use