add modelstudio_demos package with 2 demos (#76)

This commit is contained in:
Attan
2026-01-04 17:46:28 +08:00
committed by GitHub
parent f32ef5e059
commit 80421039a0
22 changed files with 2422 additions and 0 deletions

View File

@@ -0,0 +1,336 @@
# FastMCP Server Development Template
> MCP Server development template based on FastMCP framework, quickly develop and deploy to Alibaba Cloud Bailian high-code platform
## 🎉 Features
Core features of this project:
- **🔧 Modular Architecture**: MCP Server code separated into `mcp_server.py`, main program `main.py` handles routing integration
- **💬 Chat API Integration**: New `/process` endpoint supporting Alibaba Cloud Bailian LLM calls and streaming responses
- **🤖 Intelligent Tool Calling**: LLM can automatically identify and call MCP tools (Function Calling)
- **📡 Unified Service Architecture**: FastAPI + FastMCP integration, one service providing both MCP and Chat functionality
- **🔄 Standardized Responses**: Structured streaming responses based on AgentScope ResponseBuilder
- **🌐 CORS Support**: Cross-origin requests supported for frontend integration
- **🎯 Route Optimization**: MCP Server mounted at `/mcp` path, main app provides more endpoints
## ⚡ Quick Start Locally
### 1. Install Dependencies
```bash
pip install -r requirements.txt
```
### 2. Start Service
```bash
python -m deploy_starter.main
```
### 3. Verify Running
**Health Check:**
```bash
curl http://localhost:8080/health
```
**Test Chat Endpoint:**
```bash
curl -X POST http://localhost:8080/process \
-H "Content-Type: application/json" \
-d '{
"input": [
{
"role": "user",
"content": [{"type": "text", "text": "Hello"}]
}
],
"session_id": "test-session-001",
"stream": true
}'
```
### 4. Recommended: Use MCP Inspector to Verify MCP Server Locally
```bash
npx @modelcontextprotocol/inspector
```
Connect to: `http://localhost:8080/mcp`
![MCP inspector.png](MCP inspector.png)
---
## 🛠️ Develop Your First MCP Tool
Define tools in `deploy_starter/mcp_server.py` using the `@mcp.tool()` decorator:
> **Note**: After refactoring, all MCP tool definitions are in `mcp_server.py`, while `main.py` handles integration and routing
### Example 1: Synchronous Tool (Simple call, average IO performance)
```python
from typing import Annotated
from pydantic import Field
@mcp.tool(
name="add Tool",
description="A simple addition tool example"
)
def add_numbers(
a: Annotated[int, Field(description="add a")],
b: Annotated[int, Field(description="add b")]
) -> int:
return a + b
```
### Example 2: Asynchronous Tool (Async call, high IO performance)
```python
@mcp.tool(
name="Alibaba Cloud Bailian search",
description="Search via Alibaba Cloud Bailian API"
)
async def search_by_modelStudio(
query: Annotated[str, Field(description="Search query statement")],
count: Annotated[int, Field(description="Number of search results returned")] = 5
) -> SearchLiteOutput:
input_data = SearchLiteInput(query=query, count=count)
search_component = ModelstudioSearchLite()
result = await search_component.arun(input_data)
return result
```
**Note**: Async tools require setting the environment variable `DASHSCOPE_API_KEY` to call Bailian services
```bash
export DASHSCOPE_API_KEY='sk-xxxxxx'
```
---
## 📝 Parameter Description Specification
Use `Annotated` + `Field` to add descriptions for each parameter:
```python
from typing import Annotated, Optional
from pydantic import Field
@mcp.tool(
name="your_tool_name", # Tool name (what AI sees)
description="Detailed tool description" # Tool purpose description
)
def your_tool(
param1: Annotated[str, Field(description="Description of parameter 1")],
param2: Annotated[int, Field(description="Description of parameter 2")] = 10
) -> dict:
# Your business logic
return {"result": "success"}
```
---
## Alibaba Cloud Bailian High-Code Cloud Deployment
### Priority option: Upload code package directly through Alibaba Cloud Bailian high-code console
[Create Application - High-Code Application](https://bailian.console.aliyun.com//app-center?tab=app#/app-center)
### Command line console method for code upload and deployment - Better for quick code modifications and update deployments
#### 1. Install Dependencies
```bash
pip install agentscope-runtime==1.0.0
pip install "agentscope-runtime[deployment]==1.0.0"
```
#### 2. Set Environment Variables
```bash
export ALIBABA_CLOUD_ACCESS_KEY_ID=... # Your Alibaba Cloud AccessKey (required)
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=... # Your Alibaba Cloud SecurityKey (required)
# Optional: If you want to use separate OSS AK/SK, you can set the following (if not set, the above account AK/SK will be used), please ensure the account has OSS read/write permissions
export MODELSTUDIO_WORKSPACE_ID=... # Your Bailian workspace ID
export OSS_ACCESS_KEY_ID=...
export OSS_ACCESS_KEY_SECRET=...
export OSS_REGION=cn-beijing
```
#### 3. Package and Deploy
##### Method A: Manually Build Wheel File
Ensure your project can be built as a wheel file. You can use setup.py, setup.cfg, or pyproject.toml.
Build wheel file:
```bash
python setup.py bdist_wheel
```
Deploy:
```bash
runtime-fc-deploy \
--deploy-name [Your application name] \
--whl-path [Relative path to your wheel file e.g. "/dist/your_app.whl"]
```
For details, please refer to the Alibaba Cloud Bailian high-code deployment documentation: [Alibaba Cloud Bailian High-Code Deployment Documentation](https://bailian.console.aliyun.com/?tab=api#/api/?type=app&url=2983030)
---
## 📋 Project Structure
```
.
├── deploy_starter/
│ ├── main.py # Main program - FastAPI app entry, integrates Chat and MCP routing
│ ├── mcp_server.py # MCP Server definition - Define your MCP tools here
│ └── config.yml # Configuration file
├── requirements.txt # Dependency list
├── setup.py # Package configuration (for cloud deployment)
├── README_zh.md # Chinese documentation
└── README_en.md # English documentation
```
**Core Files Description:**
- `main.py`: FastAPI main app, provides `/process` endpoint and lifecycle management, mounts MCP Server at `/mcp` path
- `mcp_server.py`: FastMCP server instance, defines all MCP tools, provides tool list and call functions
---
## 🔧 Configuration
Edit `deploy_starter/config.yml`:
```yaml
# MCP Server Configuration
MCP_SERVER_NAME: "my-mcp-server"
MCP_SERVER_VERSION: "1.0.0"
# Server Configuration
FC_START_HOST: "0.0.0.0" # For cloud deployment
PORT: 8080
HOST: "127.0.0.1" # For local development
# Alibaba Cloud Bailian API Key (optional, can also use environment variable)
# DASHSCOPE_API_KEY: "sk-xxx"
DASHSCOPE_MODEL_NAME: "qwen-plus" # LLM model name
```
### DashScope API Configuration
To use Chat and LLM features, you need to configure the Alibaba Cloud Bailian DashScope API KEY:
1. Set `DASHSCOPE_API_KEY` in `deploy_starter/config.yml`:
```yaml
DASHSCOPE_API_KEY: "sk-xxx"
```
2. Or set it as an environment variable:
```bash
export DASHSCOPE_API_KEY="sk-xxx"
```
---
## 💡 Development Suggestions
### Synchronous vs Asynchronous Tools
- **Synchronous Tools**: Suitable for simple calculations, local operations
```python
@mcp.tool()
def sync_tool(param: str) -> str:
return f"processed: {param}"
```
- **Asynchronous Tools**: Suitable for API calls, database queries, I/O operations
```python
@mcp.tool()
async def async_tool(param: str) -> str:
result = await some_api_call(param)
return result
```
### Tool Naming Conventions
- `name`: Tool name visible to AI (supports Chinese)
- `description`: Detailed explanation of tool purpose, helps AI understand when to call
---
## 🎯 Using in AI Clients
### Claude Desktop
Edit the configuration file `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
```json
{
"mcpServers": {
"my-mcp-server": {
"command": "python",
"args": ["-m", "deploy_starter.main"],
"env": {}
}
}
}
```
### Cursor / Cline
Connect to MCP Server URL:
```
http://localhost:8080/mcp
```
### Bailian High-Code Agent Integration
If your application is deployed to Bailian high-code platform, you can directly use the `/process` endpoint for Agent conversations, supporting:
- Natural language interaction
- Automatic tool calling
- Streaming responses
- Complete conversation context management
---
## 📚 API Endpoints
| Endpoint | Method | Description |
|------------|------|------|
| `/` | GET | Server information |
| `/health` | GET | Health check (do not modify) |
| `/process` | POST | Chat endpoint, supports LLM conversation and tool calling (requires DASHSCOPE_API_KEY) |
| `/mcp` | GET/POST | MCP Server endpoint (Streamable HTTP transport) |
### Chat Endpoint Details
**Request Format:**
```json
{
"input": [
{
"role": "user",
"content": [
{"type": "text", "text": "User message"}
]
}
],
"session_id": "Session ID",
"stream": true
}
```
**Response Format:**
- Streaming response (SSE), complies with AgentScope ResponseBuilder standard
- Supports multiple message types: `message` (normal answer), `reasoning` (thinking process), `plugin_call` (tool call), `plugin_call_output` (tool output)
**Core Features:**
- ✅ Automatically identify and call MCP tools
- ✅ Support multi-turn conversation context
- ✅ Streaming response, real-time results
- ✅ Transparent tool calling process