Views
No views yet
| 测评集 | 测评指标 | openPangu-7B-DeepDiver |
|---|---|---|
| BrowseComp-zh | Acc | 18.3 |
| BrowseComp-en | Acc | 8.3 |
| XBench-DeepSearch | Acc | 39.0 |
1# 克隆并安装
2git clone <repository-url>
3cd deepdiver_v2
4pip install -r requirements.txtdocker pull quay.io/ascend/vllm-ascend:v0.9.2rc1docker run -itd --name vllm-deepdiver \
--network host \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
-u root \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi:ro \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool:ro \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/:ro \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro \
-v /etc/ascend_install.info:/etc/ascend_install.info:ro \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware:ro \
-v /data:/data:ro \
-v /home/work:/home/work \ # 配置一个可读写的工作目录
quay.io/ascend/vllm-ascend:v0.9.2rc1docker exec -itu root vllm-deepdiver bash-itu root。cp ./vllm_ascend/open_pangu.py /vllm-workspace/vllm-ascend/vllm_ascend/models/
cp ./vllm_ascend/__init__.py /vllm-workspace/vllm-ascend/vllm_ascend/models/PRECHECKPOINT_PATH="path/to/deepdiver_model"
export VLLM_USE_V1=1
export VLLM_WORKER_MULTIPROC_METHOD=fork
# export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
vllm serve $PRECHECKPOINT_PATH \
--served-model-name ${SERVED_MODEL_NAME:=pangu_auto} \
--tensor-parallel-size ${tensor_parallel_size:=8} \
--trust-remote-code \
--host 127.0.0.1 \
--port 8888 \
--max-num-seqs 256 \
--max-model-len ${MAX_MODEL_LEN:=131072} \
--max-num-batched-tokens ${MAX_NUM_BATCHED_TOKENS:=4096} \
--tokenizer-mode "slow" \
--dtype bfloat16 \
--distributed-executor-backend mp \
--gpu-memory-utilization 0.93 \curl -X POST http://127.0.0.1:8888/v1/completions -H "Content-Type: application/json" -d '{
"model": "pangu_auto",
"prompt": ["Tell me who you are?"],
"max_tokens": 50
}'_generic_search)src/tools/mcp_tools.py - _generic_search 方法NotImplementedError 替换为你的搜索工具实现:1def _generic_search(self, query: str, max_results: int, config: Dict[str, Any]) -> MCPToolResult:
2 """Your custom search implementation - based on the commented code example"""
3 try:
4 # Example implementation for search API:
5 url = config.get('base_url', 'https://api.search-provider.com/search')
6 payload = json.dumps({"q": query, "num": max_results})
7 api_keys = config.get('api_keys', [])
8 headers = {
9 'X-API-KEY': random.choice(api_keys),
10 'Content-Type': 'application/json'
11 }
12
13 response = requests.post(url, data=payload, headers=headers)
14 response.raise_for_status()
15
16 # Transform your API response to required format
17 search_results = {
18 "organic": [
19 {
20 "title": result["title"],
21 "link": result["link"],
22 "snippet": result["snippet"],
23 "date": result.get("date", "unknown")
24 }
25 for result in response.json().get("organic", [])
26 ]
27 }
28
29 return MCPToolResult(success=True, data=search_results)
30
31 except Exception as e:
32 return MCPToolResult(success=False, error=f"Generic search failed: {e}")url_crawler 与 _content_extractor)src/tools/mcp_tools.py - _content_extractorNotImplementedError 部分替换为你的网页抓取工具实现:1# Example implementation for content extractor:
2 crawler_url = f"{crawler_config.get('base_url', 'https://api.content-extractor.com')}/{url}"
3 response = requests.get(crawler_url, headers=headers, timeout=crawler_config.get('timeout', 30))
4 response.raise_for_status()
5
6 content = response.text
7
8 # Truncate if needed
9 if max_tokens and len(content.split()) > max_tokens:
10 words = content.split()[:max_tokens]
11 content = ' '.join(words) + '...'
12
13 return MCPToolResult(success=True, data=content)env.template 到 config/.env 并配置如下选项:1# LLM Service
2MODEL_REQUEST_URL=http://localhost:8888/v1/chat/completions # 你的 LLM endpoint
3
4# Agent 限制
5PLANNER_MODE=auto # 在 auto、writing 或 qa 模式间切换
6
7# 外部 API(先实现函数)
8SEARCH_ENGINE_BASE_URL= # 搜索 API endpoint
9SEARCH_ENGINE_API_KEYS= # 搜索 API keys
10URL_CRAWLER_BASE_URL= # URL Crawler API endpoint
11URL_CRAWLER_API_KEYS= # URL Crawler API keysMODEL_REQUEST_URLPLANNER_MODE 中指定模式。auto 会自动决策回答复杂问题或生成长文;若希望优先长文写作,可设置为 writing;若希望专注解决高难度问题,可设置为 qapython src/tools/mcp_server_standard.py1# 交互模式
2python cli/demo.py
3
4# 单次查询
5python cli/demo.py -q "$your_query"batch_web_search:多查询 web 搜索url_crawler:从 URL 抽取内容download_files:从 URL 下载文件file_read、file_write:基础文件 I/Olist_workspace:目录列表document_qa:针对特定文档问答document_extract:多格式文本抽取section_writer:结构化内容生成think、reflect:推理与规划task_done:任务完成汇报assign_task_xxx: 分发任务并创建子智能体src/tools/mcp_tools.py - 在 MCPTools 类中添加方法1def your_new_tool(self, param1: str, param2: int) -> MCPToolResult:
2 """
3 Description of what your tool does.
4
5 Args:
6 param1: Description of parameter 1
7 param2: Description of parameter 2
8
9 Returns:
10 MCPToolResult: Standardized result format
11 """
12 try:
13 # Your tool implementation here
14 result_data = {
15 "output": "Tool result",
16 "processed_items": param2
17 }
18
19 return MCPToolResult(
20 success=True,
21 data=result_data,
22 metadata={"tool_name": "your_new_tool"}
23 )
24
25 except Exception as e:
26 logger.error(f"Tool execution failed: {e}")
27 return MCPToolResult(
28 success=False,
29 error=f"Tool failed: {str(e)}"
30 )src/tools/mcp_tools.py - 添加到 MCP_TOOL_SCHEMAS 字典1MCP_TOOL_SCHEMAS = {
2 # ... existing tools ...
3
4 "your_new_tool": {
5 "name": "your_new_tool",
6 "description": "Brief description of what your tool does",
7 "inputSchema": {
8 "type": "object",
9 "properties": {
10 "param1": {
11 "type": "string",
12 "description": "Description of parameter 1"
13 },
14 "param2": {
15 "type": "integer",
16 "default": 10,
17 "description": "Description of parameter 2"
18 }
19 },
20 "required": ["param1"]
21 }
22 }
23}src/tools/mcp_server_standard.py - 添加到 get_tool_function()1def get_tool_function(tool_name: str):
2 """Get the actual function for a tool"""
3 tool_map = {
4 # ... existing tools ...
5 "your_new_tool": lambda tools, **kwargs: tools.your_new_tool(**kwargs),
6 }
7 return tool_map.get(tool_name)src/tools/mcp_client.py - 修改各智能体的工具集1# Define which MCP server tools each agent can access
2PLANNER_AGENT_TOOLS = [
3 "download_files",
4 "document_qa",
5 "file_read",
6 "file_write",
7 "str_replace_based_edit_tool",
8 "list_workspace",
9 "file_find_by_name",
10 "your_new_tool", # Add your new tool here
11]
12
13INFORMATION_SEEKER_TOOLS = [
14 "batch_web_search",
15 "url_crawler",
16 "document_extract",
17 "document_qa",
18 "download_files",
19 "file_read",
20 "file_write",
21 "str_replace_based_edit_tool",
22 "list_workspace",
23 "file_find_by_name",
24 "your_new_tool", # Add your new tool here if needed
25]
26
27WRITER_AGENT_TOOLS = [
28 "file_read",
29 "list_workspace",
30 "file_find_by_name",
31 "search_result_classifier",
32 "section_writer",
33 "concat_section_files",
34 # Add your tool if the writer agent needs it
35]assign_subjective_task_to_writer, assign_multi_objective_tasks_to_info_seeker 等内置函数作为工具, 这类函数除了具体实现之外,还需要使用_build_agent_specific_tool_schemas() 添加专属的tool schema。src/agents/your_agent.py1def _build_agent_specific_tool_schemas(self) -> List[Dict[str, Any]]:
2 """Add built-in agent functions (not MCP server tools)"""
3
4 # Get base schemas from MCP server via client
5 schemas = super()._build_agent_specific_tool_schemas()
6
7 # Add agent-specific built-in functions like task assignment, completion reporting
8 builtin_functions = [
9 {
10 "type": "function",
11 "function": {
12 "name": "agent_specific_task_done",
13 "description": "Report task completion for this agent",
14 "parameters": {
15 "type": "object",
16 "properties": {
17 "result": {"type": "string", "description": "Task result"},
18 "status": {"type": "string", "description": "Completion status"}
19 },
20 "required": ["result", "status"]
21 }
22 }
23 }
24 ]
25
26 schemas.extend(builtin_functions)
27 return schemasplanner_agent.py 中_execute_react_loop()的实现):1if tool_call["name"] in ["think", "reflect"]:
2 tool_result = {"tool_results": "You can proceed to invoke other tools if needed. "}_build_agent_specific_tool_schemas() 添加专属的tool schema。env.template 到 config/.env 并配置如下选项:1# LLM Service
2MODEL_REQUEST_URL=http://localhost:8000 # 你的 LLM endpoint
3MODEL_REQUEST_TOKEN=your-token # LLM auth token
4MODEL_NAME=pangu_auto # 模型名
5MODEL_TEMPERATURE=0.3 # 随机度(0.0-1.0)
6MODEL_MAX_TOKENS=8192 # 最大回复长度
7MODEL_REQUEST_TIMEOUT=60 # 请求超时(秒)
8
9# Agent 限制
10PLANNER_MAX_ITERATION=40 # Planner 最大 ReAct 步数
11INFORMATION_SEEKER_MAX_ITERATION=30 # 信息搜集最大 ReAct 步数
12WRITER_MAX_ITERATION=40 # Writer 最大 ReAct 步数
13PLANNER_MODE=auto # auto / 长文优先 / qa 优先
14
15# MCP Server
16MCP_SERVER_URL=http://localhost:6274/mcp # MCP server endpoint
17MCP_USE_STDIO=false # 使用 stdio 或 HTTP
18
19# 外部 API(先实现函数)
20SEARCH_ENGINE_BASE_URL= # 搜索 API endpoint
21SEARCH_ENGINE_API_KEYS= # 搜索 API keys
22URL_CRAWLER_BASE_URL= # URL Crawler API endpoint
23URL_CRAWLER_API_KEYS= # URL Crawler API keys
24URL_CRAWLER_MAX_TOKENS=100000 # URL Crawler 内容最大长度
25
26# 存储路径
27TRAJECTORY_STORAGE_PATH=./workspace # Agent工作目录
28REPORT_OUTPUT_PATH=./report # 报告输出目录
29DOCUMENT_ANALYSIS_PATH=./doc_analysis # 文档分析目录
30
31# 系统
32DEBUG_MODE=false # 是否开启调试日志
33MAX_RETRIES=3 # API 重试次数
34TIMEOUT=30 # 通用超时(秒)server_config.yaml 控制服务器行为、工具限流与运行设置:1server:
2 host: "127.0.0.1" # 服务器绑定地址
3 port: 6274 # 端口
4 debug_mode: false # 调试日志
5 session_ttl_seconds: 21600 # 会话过期(6小时)
6 max_sessions: 1000 # 并发会话上限1tool_rate_limits:
2 batch_web_search:
3 requests_per_minute: 9000 # 每分钟限制
4 burst_limit: 35 # 短时突发
5
6 url_crawler:
7 requests_per_minute: 9000
8 burst_limit: 601server:
2 cleanup_interval_seconds: 600 # 清理过期会话(5分钟)
3 enable_session_keepalive: true # 长时操作期间保活
4 keepalive_touch_interval: 300 # 保活触发间隔(秒)1server:
2 request_timeout_seconds: 1800 # 请求超时
3 max_request_size_mb: 1000 # 最大请求体
4 rate_limit_requests_per_minute: 300000 # 每 IP 限流