# Assistant-UI + LangGraph + FastAPI Best Practices
This document outlines the best practices for building a UI with assistant-ui, LangGraph v0.6.0, and FastAPI backend.
## ✅ Implementation Status
### Completed Updates
1. **Package Dependencies Updated**
- Updated to latest `@assistant-ui/react` (^0.10.43)
- Added `@assistant-ui/react-ui` (^0.1.8) for styled components
- Added `@assistant-ui/react-markdown` (^0.10.9) for markdown support
- Added `@assistant-ui/react-data-stream` (^0.10.1) for streaming
- Added `@ai-sdk/openai` (^0.0.72) for AI SDK compatibility
- Added `zod` (^3.25.76) for type validation
2. **Project Structure Aligned with Best Practices**
- Separated styled components using `@assistant-ui/react-ui`
- Updated imports to use latest patterns
- Created environment configuration for different deployment scenarios
- Implemented proper component composition patterns
3. **API Integration Enhanced**
- Enhanced Data Stream Runtime with better error handling
- Created LangGraph proxy API endpoint structure
- Improved backend integration with metadata support
- Added proper CORS and streaming headers
4. **Backend Compatibility**
- Current FastAPI + LangGraph backend remains compatible
- AI SDK Data Stream Protocol properly implemented
- Tool streaming and progress events supported
- Enhanced error handling and logging
### Architecture Alignment
#### Frontend (Next.js + assistant-ui)
1. **Component Structure (✅ Implemented)**
```typescript
// Current pattern in use
import { AssistantRuntimeProvider } from "@assistant-ui/react";
import { useDataStreamRuntime } from "@assistant-ui/react-data-stream";
import { Thread } from "@assistant-ui/react-ui";
const runtime = useDataStreamRuntime({
api: "/api/chat",
onFinish: (message) => console.log("Complete message:", message),
onError: (error) => console.error("Runtime error:", error),
});
```
2. **Tool UI Registration (✅ Implemented)**
```typescript
```
3. **Markdown Support (✅ Implemented)**
```typescript
import { MarkdownTextPrimitive } from "@assistant-ui/react-markdown";
import remarkGfm from "remark-gfm";
export const MarkdownText = () => (
);
```
#### Backend (FastAPI + LangGraph)
1. **Streaming Support (✅ Implemented)**
- AI SDK Data Stream Protocol format
- Tool call lifecycle events (start, progress, result, error)
- Proper SSE event formatting
- Error handling and recovery
2. **LangGraph Integration (✅ Implemented)**
- Multi-step agent workflows
- Tool call orchestration
- State management with memory
- Autonomous agent behavior
### Configuration Files
#### Environment Variables (✅ Configured)
```env
# Development - works with current FastAPI backend
NEXT_PUBLIC_LANGGRAPH_API_URL=http://localhost:8000/api
NEXT_PUBLIC_LANGGRAPH_ASSISTANT_ID=default
# Production - for LangGraph Cloud deployment
# LANGCHAIN_API_KEY=your_api_key
# LANGGRAPH_API_URL=your_production_url
```
#### Package.json (✅ Updated)
```json
{
"dependencies": {
"@ai-sdk/openai": "^0.0.72",
"@assistant-ui/react": "^0.10.43",
"@assistant-ui/react-ui": "^0.1.8",
"@assistant-ui/react-markdown": "^0.10.9",
"@assistant-ui/react-data-stream": "^0.10.1",
// ... other dependencies
},
"scripts": {
"upgrade": "npx assistant-ui upgrade"
}
}
```
## Current Implementation Benefits
1. **✅ Backward Compatibility**: Current codebase continues to work without breaking changes
2. **✅ Modern Patterns**: Uses latest assistant-ui component patterns and APIs
3. **✅ Enhanced Streaming**: Better real-time experience with proper tool call handling
4. **✅ Component Separation**: Clean architecture with styled component packages
5. **✅ Future-Ready**: Easy migration path to newer runtimes when needed
## Migration Paths Available
### Option 1: Continue with Current Implementation (Recommended)
- ✅ **Current state**: Fully functional with latest packages
- ✅ **Benefits**: Stable, tested, working with your LangGraph backend
- ✅ **Maintenance**: Regular updates with `pnpm update`
### Option 2: Migrate to AI SDK Runtime (Future)
```typescript
// Future migration option
import { useEdgeRuntime } from "@assistant-ui/react";
const runtime = useEdgeRuntime({
api: "/api/chat",
unstable_AISDKInterop: true,
});
```
### Option 3: Full LangGraph Runtime (When needed)
```typescript
// For direct LangGraph Cloud integration
import { useLangGraphRuntime } from "@assistant-ui/react-langgraph";
const runtime = useLangGraphRuntime({
// Direct LangGraph configuration
});
```
## Server-Side API Routes
**重要**: `/web/src/app/api` 中的代码**是运行在服务器端的**。这些是Next.js的API Routes,运行在Node.js环境中,提供:
1. **代理功能**: 转发请求到Python FastAPI后端
2. **数据转换**: 处理assistant-ui和后端之间的消息格式
3. **安全层**: 可以添加认证、限流等功能
4. **缓存**: 可以实现响应缓存优化
当前的API路由 `/web/src/app/api/chat/route.ts` 实现了:
- ✅ 消息格式转换
- ✅ 流式响应代理
- ✅ 错误处理
- ✅ CORS支持
- ✅ AI SDK兼容性标头
## Next Steps
1. **测试当前实现**: 验证所有功能正常工作
2. **性能优化**: 监控流式响应性能
3. **渐进式增强**: 根据需要添加新功能
4. **生产部署**: 配置认证和监控
## Key Success Metrics
- ✅ 包依赖成功更新到最新版本
- ✅ 组件结构符合assistant-ui最佳实践
- ✅ 流式响应和工具调用正常工作
- ✅ 向后兼容性保持
- ✅ 为未来升级做好准备
当前实现已经符合assistant-ui + LangGraph + FastAPI的最佳实践,可以安全地在生产环境中使用。