1774673562

This commit is contained in:
Docker7530
2026-03-28 12:52:49 +08:00
parent e4a339bd77
commit d17550351d
7 changed files with 75 additions and 74 deletions
-40
View File
@@ -1,40 +0,0 @@
# 常用 Screen 命令大全
## 创建会话(最常用)
- `screen -U -S vllm_server` → 新建并命名
- `screen -U -dmS vllm_server`**新建后立即分离**(最推荐!直接后台启动)
- `screen -U -dmS vllm_server "python -m vllm serve …"` → 新建 + 直接执行命令(一键启动服务)
## 管理会话
- `screen -U -ls``screen -U -list` → 列出所有会话(你现在用的)
- `screen -U -r` → 进入最后一个会话
- `screen -U -r vllm_server` → 按名字进入(推荐,比数字更稳)
- `screen -U -r 89505` → 只输入数字也可以(简写)
- `screen -U -S vllm_server -X quit` → 杀死指定会话(你现在用的)
- `screen -wipe` → 清理已死亡的会话记录(偶尔用)
# 在 screen 里面的快捷键(记住这几个就够用 90%)
| 快捷键 | 功能 |
|--------|------|
| `Ctrl-a ?` | 显示帮助(所有快捷键列表) |
| `Ctrl-a c` | 新建一个窗口(像 tab |
| `Ctrl-a n` / `Ctrl-a p` | 切换到下一个/上一个窗口 |
| `Ctrl-a 0~9` | 直接跳到第几个窗口 |
| `Ctrl-a d` | 分离(退出) |
| `Ctrl-a k` | 杀死当前窗口(确认 y |
| `Ctrl-a A` | 重命名当前窗口(好认) |
| `Ctrl-a "` | 显示窗口列表,选择切换 |
# 高级实用技巧
- 滚动屏幕:`Ctrl-a [` → 进入复制模式,用上下键翻历史,按 `Esc` 退出
- 发送命令给后台会话:`screen -S vllm_server -X stuff "echo hello\n"`
- 自动启动 vLLM(推荐写进脚本):
```bash
screen -U -dmS vllm_server
screen -S vllm_server -X stuff "python -m vllm serve --model /root/autodl-tmp/DeepSeek-R1-1.5B --port 8000\n"
```
-53
View File
@@ -1,53 +0,0 @@
`x-csrf-token` 是 Spring Security CSRF 防护机制 的一部分,用于防止跨站请求伪造(CSRF)攻击。
后端接口需要通过请求头接收前端携带的 CSRF token,以验证请求的合法性。
其中 IBSCsrfTokenRepository 管理 CSRF token,是一个 `UUID.randomUUID().toString()` 随机字符串
登录成功后,SecurityConfig.writeLoginSuccessResult()SecurityConfig.java:482)会将 token 存入 sessionrequest.getSession().setAttribute(IBSCsrfTokenRepository.class.getName() + ".CSRF_TOKEN", token)
同时通过 /admin/getCurrentUser 接口返回给前端:userVO.setCsrfToken(csrfToken.getToken())
```
前端获取 Token
前端有两套机制,取决于环境:
生产环境(cdn-web 模板):页面通过 Thymeleaf 模板将 token 渲染到 HTML meta 标签中
<meta name="_csrf" th:content="${_csrf.token}">
<meta name="_csrf_header" th:content="${_csrf.headerName}">
前端通过 getCsrfHeaderFromMeta() 读取这两个 meta 标签,动态设置请求头。
非生产环境(IBS-web):通过调用 /admin/getCurrentUser 接口获取 token 并缓存在 window.XTOKEN 中。
```
后端 Filter 链验证 Token
RequestReplaceFilter
```
response.setHeader("Access-Control-Allow-Headers",
"content-type,x-requested-with,Authorization, x-request-with,x-ui-request,lang,x-csrf-token,csrf-token");
```
```
在 SecurityConfig.csrf() 配置中(SecurityConfig.java:211-218),以下路径不进行 CSRF 校验:
// CSRF
String[] ignorePathes = {"/v1/**", "/v2/**", "/v1.0/**", "/analyzer/**", "/puppet/**", "/api/**",
"/sso/**", "/ssoapi/**", "/dss/prohibit/**", "/dss/v1/log/subscribe/callback", "/portal/**",
"/param/config/**", "/bboss/**", "/sync/BBOSS/**", "/download/exportFile", "/action", "/actionpm",
"/action/cms", "/action/cdn/statistics", "/action/enterprise/domains","/action/enterprise/productId/domains",
"/action/js", "/content/delivery/**", "/information/**","/testAction","/api/v2/**",
"/home/page/help/Doc/**", "/home/page/security/**", "/query/cmcc/party/**", "/query/enterprise/domain/info", "/v2.0/log/template/**"};
http.csrf().ignoringAntMatchers(ignorePathes)
.csrfTokenRepository(new IBSCsrfTokenRepository(Arrays.asList(ignorePathes)));//不塞在cookie中
```
如果请求路径在 ignorePathes 列表中(如 /v1/**, /api/**, /action, /actionpm 等),loadToken 返回硬编码的 "1111111111",此时:
请求带 X-CSRF-TOKEN: 1111111111 → 可以通过
请求带 X-CSRF-TOKEN: 任意UUID → 失败
-139
View File
@@ -1,139 +0,0 @@
```
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "北京现在的天气怎么样?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称"
}
},
"required": [
"city"
]
}
}
}
],
"tool_choice": "auto"
}
{
"id": "06bcc2b7-602a-474b-bdd3-01cea249b121",
"object": "chat.completion",
"created": 1774519072,
"model": "deepseek-chat",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "我来帮您查询北京的天气情况。",
"tool_calls": [
{
"index": 0,
"id": "call_00_s4Qs5fJiG0yeRTpOgYxnxRyp",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"北京\"}"
}
}
]
},
"logprobs": null,
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 309,
"completion_tokens": 51,
"total_tokens": 360,
"prompt_tokens_details": {
"cached_tokens": 0
},
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 309
},
"system_fingerprint": "fp_eaab8d114b_prod0820_fp8_kvcache_new_kvcache"
}
```
```
{
"model": "deepseek-chat",
"messages": [
{
"role": "user",
"content": "给我返回一个水果的信息,包含名称和颜色"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "fruit",
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "水果名称"
},
"color": {
"type": "string",
"description": "水果颜色"
}
},
"required": [
"name",
"color"
]
}
}
}
}
```
```
{
"id": "chatcmpl-2b2225c5-02d0-4817-8039-329b3c790128",
"object": "chat.completion",
"created": 1774519551,
"model": "gpt-5.4",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\"color\":\"红色\",\"name\":\"苹果\"}"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 80,
"completion_tokens": 17,
"total_tokens": 97,
"prompt_tokens_details": {},
"completion_tokens_details": {
"reasoning_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
}
}
```
+20
View File
@@ -22,3 +22,23 @@ com.cmcc.cdn.platform.selfservice.controller.StatisticsController#getHitRatio
给我梳理下这个接口的功能,输出一个 markdown 文档到项目的根目录。
主要是用到哪些参数,有哪些校验,有没有参数转换和默认值。掉了哪些三方接口,调了接口后做了哪些事情。尽量清晰。注意细节。
---
com.cmcc.cdn.platform.selfservice.controller.StatisticsController#getHitRatio
getHitRatio接口分析.md 是我 getHitRatio 命中率接口的梳理,是在跑的业务。我现在给你安排一个艰巨的任务。
因为我们有一个 MCP 注册中心。我要接入进去。接入我们只需要提供标准的 http 接口就行了。所以按照这个接口做 3 个新接口出来:
1. 请求数
2. 命中请求数
3. 计算命中率(命中率 = 命中请求数 / 总请求数)的接口。
controller 在 ibs-portal\cdn-web\src\main\java\com\cmcc\cdn\platform 下建一个 mcp 文件夹写。
service 在 ibs-portal\cdn-service\src\main\java\com\cmcc\cdn\platform 下建一个 mcp 文件夹写。
因为是新接口代码一定要标准易读清晰,不要用原来的垃圾逻辑。
再帮我额外提供一个接口。可以实现比如 AI 获取 请求数 然后获取 命中请求数 。然后可以计算他们两个得出命中率的工具接口。方便我测试是调用一次计算命中率比较好,还是调用 请求数 然后调用 命中请求数 然后调用计算工具计算合适。