1774110743
This commit is contained in:
+3
-3
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "obsidian-excalidraw-plugin",
|
"id": "obsidian-excalidraw-plugin",
|
||||||
"name": "Excalidraw",
|
"name": "Excalidraw",
|
||||||
"version": "2.21.0",
|
"version": "2.21.2",
|
||||||
"minAppVersion": "1.5.7",
|
"minAppVersion": "1.5.7",
|
||||||
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
|
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
|
||||||
"author": "Zsolt Viczian",
|
"author": "Zsolt Viczian",
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+112
-120
@@ -1,17 +1,121 @@
|
|||||||
{
|
{
|
||||||
"recentFiles": [
|
"recentFiles": [
|
||||||
|
{
|
||||||
|
"basename": "如何成为一个 React 工程师呢?",
|
||||||
|
"path": "resource/前端/如何成为一个 React 工程师呢?.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "TG 备忘录",
|
||||||
|
"path": "personal/TG 备忘录.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "开发笔记",
|
||||||
|
"path": "work/移动杭研/开发记录/7.19.0/开发笔记.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "20260321211989",
|
||||||
|
"path": "000-Inbox/20260321211989.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "20260320234712",
|
||||||
|
"path": "000-Inbox/20260320234712.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "20260320124131",
|
||||||
|
"path": "000-Inbox/20260320124131.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "IBS 智能体具体落实技术方案",
|
||||||
|
"path": "work/移动杭研/AI 项目/IBS 智能体具体落实技术方案.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "CLAUDE.md",
|
||||||
|
"path": "work/移动杭研/AI 项目/CLAUDE.md.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "图纸-IBS 智能体-v3-项目架构",
|
||||||
|
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v3-项目架构.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "图纸-IBS 智能体-v1-流量查询 demo 对象存储",
|
||||||
|
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo 对象存储.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "图纸-IBS 智能体-v1-流量查询 demo",
|
||||||
|
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "ibs-ai 项目梳理",
|
||||||
|
"path": "work/移动杭研/AI 项目/ibs-ai 项目梳理.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 01 COSMIC 需求扩写",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 01 COSMIC 需求扩写.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 06 COSMIC 锐评",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 06 COSMIC 锐评.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 05 COSMIC 时序图",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 05 COSMIC 时序图.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 04 COSMIC PRD 文档",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 04 COSMIC PRD 文档.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 03 COSMIC 子过程",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 03 COSMIC 子过程.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 02 COSMIC 功能过程",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 02 COSMIC 功能过程.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Prompt 00 COSMIC v1",
|
||||||
|
"path": "resource/ai/prompts/cosmic/Prompt 00 COSMIC v1.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "20260319165480",
|
||||||
|
"path": "000-Inbox/20260319165480.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "RAG Flow 部署",
|
||||||
|
"path": "work/移动杭研/AI 项目/RAG Flow 部署.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "杭州服务器-172.21.30.23-AI",
|
||||||
|
"path": "work/移动杭研/项目备忘/杭州服务器-172.21.30.23-AI.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "settings.local.json",
|
||||||
|
"path": "work/移动杭研/AI 项目/settings.local.json.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "RAG Flow",
|
||||||
|
"path": "work/移动杭研/AI 项目/RAG Flow.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "20260318101127",
|
||||||
|
"path": "000-Inbox/20260318101127.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "20260318100374",
|
||||||
|
"path": "000-Inbox/20260318100374.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "ubuntu",
|
||||||
|
"path": "resource/系统/ubuntu.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"basename": "Anolis 系统 Redis 安装",
|
||||||
|
"path": "resource/组件/Anolis 系统 Redis 安装.md"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"basename": "tg-bot",
|
"basename": "tg-bot",
|
||||||
"path": "000-inbox/tg-bot.md"
|
"path": "000-inbox/tg-bot.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "Redis 安装",
|
|
||||||
"path": "000-inbox/Redis 安装.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "杭州服务器-AI",
|
|
||||||
"path": "000-inbox/杭州服务器-AI.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "常用命令",
|
"basename": "常用命令",
|
||||||
"path": "resource/常用命令.md"
|
"path": "resource/常用命令.md"
|
||||||
@@ -20,10 +124,6 @@
|
|||||||
"basename": "20260316213546",
|
"basename": "20260316213546",
|
||||||
"path": "000-Inbox/20260316213546.md"
|
"path": "000-Inbox/20260316213546.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "IBS 智能体具体落实技术方案",
|
|
||||||
"path": "work/移动杭研/AI 项目/IBS 智能体具体落实技术方案.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "20260316160264",
|
"basename": "20260316160264",
|
||||||
"path": "000-Inbox/20260316160264.md"
|
"path": "000-Inbox/20260316160264.md"
|
||||||
@@ -52,34 +152,6 @@
|
|||||||
"basename": "20260313151563",
|
"basename": "20260313151563",
|
||||||
"path": "000-Inbox/20260313151563.md"
|
"path": "000-Inbox/20260313151563.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "Prompt 02 COSMIC 功能过程",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 02 COSMIC 功能过程.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt 03 COSMIC 子过程",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 03 COSMIC 子过程.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt 01 COSMIC 需求扩写",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 01 COSMIC 需求扩写.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt 06 COSMIC 锐评",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 06 COSMIC 锐评.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt 05 COSMIC 时序图",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 05 COSMIC 时序图.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt 04 COSMIC PRD 文档",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 04 COSMIC PRD 文档.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt 00 COSMIC v1",
|
|
||||||
"path": "resource/ai/prompts/cosmic/Prompt 00 COSMIC v1.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "BUSI_REQUIREMENT_COSMIC",
|
"basename": "BUSI_REQUIREMENT_COSMIC",
|
||||||
"path": "resource/ai/prompts/cosmic 业务版本/BUSI_REQUIREMENT_COSMIC.md"
|
"path": "resource/ai/prompts/cosmic 业务版本/BUSI_REQUIREMENT_COSMIC.md"
|
||||||
@@ -96,30 +168,10 @@
|
|||||||
"basename": "Prompt 考勤数据规整助手 小杨",
|
"basename": "Prompt 考勤数据规整助手 小杨",
|
||||||
"path": "resource/ai/prompts/Prompt 考勤数据规整助手 小杨.md"
|
"path": "resource/ai/prompts/Prompt 考勤数据规整助手 小杨.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "RAG Flow",
|
|
||||||
"path": "work/移动杭研/AI 项目/RAG Flow.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "ibs-ai 项目梳理",
|
|
||||||
"path": "work/移动杭研/AI 项目/ibs-ai 项目梳理.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "开发备注",
|
"basename": "开发备注",
|
||||||
"path": "work/移动杭研/AI 项目/开发备注.md"
|
"path": "work/移动杭研/AI 项目/开发备注.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"basename": "CLAUDE.md",
|
|
||||||
"path": "work/移动杭研/AI 项目/CLAUDE.md.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "RAG Flow 部署",
|
|
||||||
"path": "work/移动杭研/AI 项目/RAG Flow 部署.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "settings.local.json",
|
|
||||||
"path": "work/移动杭研/AI 项目/settings.local.json.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"basename": "Prompt 公司智能体",
|
"basename": "Prompt 公司智能体",
|
||||||
"path": "resource/ai/prompts/临时/Prompt 公司智能体.md"
|
"path": "resource/ai/prompts/临时/Prompt 公司智能体.md"
|
||||||
@@ -139,66 +191,6 @@
|
|||||||
{
|
{
|
||||||
"basename": "Prompt Linus",
|
"basename": "Prompt Linus",
|
||||||
"path": "resource/ai/prompts/Prompt Linus.md"
|
"path": "resource/ai/prompts/Prompt Linus.md"
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt Lisp 语言",
|
|
||||||
"path": "resource/ai/prompts/Prompt Lisp 语言.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt PPT 大纲制作专家",
|
|
||||||
"path": "resource/ai/prompts/Prompt PPT 大纲制作专家.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "Prompt PPT 逐字稿编写专家",
|
|
||||||
"path": "resource/ai/prompts/Prompt PPT 逐字稿编写专家.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "开发笔记",
|
|
||||||
"path": "work/移动杭研/开发记录/7.19.0/开发笔记.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "20260312105716",
|
|
||||||
"path": "000-Inbox/20260312105716.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "服务器-香港",
|
|
||||||
"path": "personal/服务器-香港.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "20260311142461",
|
|
||||||
"path": "000-Inbox/20260311142461.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "K-V 功能",
|
|
||||||
"path": "work/移动杭研/项目备忘/K-V 功能.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "IBS NG 日志模板",
|
|
||||||
"path": "work/移动杭研/项目备忘/IBS NG 日志模板.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "项目杂记",
|
|
||||||
"path": "work/移动杭研/项目备忘/项目杂记.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "数据库信息",
|
|
||||||
"path": "work/移动杭研/项目备忘/数据库信息.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "获取企业 token 脚本",
|
|
||||||
"path": "work/移动杭研/项目备忘/获取企业 token 脚本.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "环境账号",
|
|
||||||
"path": "work/移动杭研/项目备忘/环境账号.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "工作账号",
|
|
||||||
"path": "work/移动杭研/项目备忘/工作账号.md"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"basename": "20260311083458",
|
|
||||||
"path": "000-Inbox/20260311083458.md"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"omittedPaths": [
|
"omittedPaths": [
|
||||||
|
|||||||
Vendored
+30
-30
@@ -4,11 +4,11 @@
|
|||||||
"type": "split",
|
"type": "split",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "b29f1eccf46b0980",
|
"id": "67738bd5acdbd7ce",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "431eb252187a1635",
|
"id": "00649b8cd88fe2b8",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "empty",
|
"type": "empty",
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "search",
|
"type": "search",
|
||||||
"state": {
|
"state": {
|
||||||
"query": "培训",
|
"query": "sk-839b2fd5ec74530fe339c6640a7c2d486428101fbfdafc4c38824f9970d33046",
|
||||||
"matchingCase": false,
|
"matchingCase": false,
|
||||||
"explainSearch": true,
|
"explainSearch": true,
|
||||||
"collapseAll": false,
|
"collapseAll": false,
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 222.5
|
"width": 242.5
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"id": "ca733f6d5936ae40",
|
"id": "ca733f6d5936ae40",
|
||||||
@@ -226,35 +226,35 @@
|
|||||||
"obsidian-excalidraw-plugin:New drawing": false
|
"obsidian-excalidraw-plugin:New drawing": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "c8718c0c63702202",
|
"active": "00649b8cd88fe2b8",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"calendar/diary/2026-03-17.md",
|
"resource/前端/如何成为一个 React 工程师呢?.md",
|
||||||
"calendar/diary/2026-03-16.md",
|
"calendar/diary/2026-03-21.md",
|
||||||
"000-inbox/tg-bot.md",
|
"000-inbox/20260321211989.md",
|
||||||
"000-inbox/Redis 安装.md",
|
"000-inbox/20260320234712.md",
|
||||||
"000-inbox/杭州服务器-AI.md",
|
"000-inbox/20260320124131.md",
|
||||||
"000-inbox/20260316213546.md",
|
"000-inbox/20260319165480.md",
|
||||||
"resource/常用命令.md",
|
"000-inbox/20260318101127.md",
|
||||||
"000-Inbox/20260316213546.md",
|
"000-inbox/20260318100374.md",
|
||||||
|
"calendar/diary/2026-03-20.md",
|
||||||
|
"calendar/diary/2026-03-19.md",
|
||||||
|
"calendar/diary/2026-03-18.md",
|
||||||
|
"personal/TG 备忘录.md",
|
||||||
|
"work/移动杭研/开发记录/7.19.0/开发笔记.md",
|
||||||
|
"000-Inbox/20260321211989.md",
|
||||||
|
"000-Inbox/20260320234712.md",
|
||||||
|
"000-Inbox/20260320124131.md",
|
||||||
"work/移动杭研/AI 项目/IBS 智能体具体落实技术方案.md",
|
"work/移动杭研/AI 项目/IBS 智能体具体落实技术方案.md",
|
||||||
"000-Inbox/20260316160264.md",
|
"work/移动杭研/AI 项目/CLAUDE.md.md",
|
||||||
"000-inbox/20260316105203.md",
|
"work/移动杭研/AI 项目/图纸-IBS 智能体-v3-项目架构.md",
|
||||||
"000-Inbox/20260316102936.md",
|
"work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo 对象存储.md",
|
||||||
"000-Inbox/20260316105203.md",
|
"work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo.md",
|
||||||
"calendar/diary/2026-03-13.md",
|
"work/移动杭研/AI 项目/ibs-ai 项目梳理.md",
|
||||||
"calendar/diary/2026-03-15.md",
|
"resource/ai/prompts/cosmic/Prompt 01 COSMIC 需求扩写.md",
|
||||||
"calendar/weeks/2026-W11.md",
|
"resource/ai/prompts/cosmic/Prompt 06 COSMIC 锐评.md",
|
||||||
"calendar/diary/2026-03-14.md",
|
"resource/ai/prompts/cosmic/Prompt 05 COSMIC 时序图.md",
|
||||||
"calendar/diary/2026-03-12.md",
|
"resource/ai/prompts/cosmic/Prompt 04 COSMIC PRD 文档.md",
|
||||||
"calendar/diary/2026-03-11.md",
|
|
||||||
"calendar/diary/2026-03-10.md",
|
|
||||||
"calendar/diary/2026-03-09.md",
|
|
||||||
"work/移动杭研/问题处理/2026-03/0316-配管任务限流问题.md",
|
|
||||||
"work/移动杭研/问题处理/2026-03",
|
"work/移动杭研/问题处理/2026-03",
|
||||||
"000-inbox/20260313151563.md",
|
|
||||||
"000-Inbox/0316-配管任务限流问题.md",
|
|
||||||
"work/移动杭研/问题处理/2025-11/1107-试用单删除问题.md",
|
|
||||||
"000-Inbox/20260313151563.md",
|
|
||||||
"resource/ai/prompts/cosmic 业务版本",
|
"resource/ai/prompts/cosmic 业务版本",
|
||||||
"resource/ai/prompts/cosmic",
|
"resource/ai/prompts/cosmic",
|
||||||
"resource/ai/prompts/临时",
|
"resource/ai/prompts/临时",
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
```
|
|
||||||
测试云主机信息 172.21.30.23 用户名:root 密码:Melo@3023
|
|
||||||
测试mysql: 172.21.33.224 用户名:cosmic_ai 密码:Cosmic@3306
|
|
||||||
测试redis: 172.21.43.68:6379 密码:chRdw@redis
|
|
||||||
|
|
||||||
1.DeepSeek-671B http://36.137.208.165:5020/v1/chat/completions
|
|
||||||
2.Qwen3-8B http://172.21.9.104:31554/v1/chat/completions
|
|
||||||
|
|
||||||
redis-cli -h 127.0.0.1 -p 6379 -a '5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1'
|
|
||||||
```
|
|
||||||
|
|
||||||
| 项目 | 配置 |
|
|
||||||
| --- | ------------------ |
|
|
||||||
| 系统 | Anolis OS 8.6 |
|
|
||||||
| 内核 | 4.18 |
|
|
||||||
| CPU | Intel Xeon Skylake |
|
|
||||||
| 核心 | **8 vCPU** |
|
|
||||||
| 主频 | 2.2 GHz |
|
|
||||||
| 虚拟化 | KVM |
|
|
||||||
| 架构 | x86_64 |
|
|
||||||
@@ -1,8 +1,38 @@
|
|||||||
# 任务
|
# 任务
|
||||||
|
|
||||||
- [ ] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5)
|
- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5)
|
||||||
- [ ] 开发:开发 IBS V7.19.0 需求。(新业务平面引入与系统集成实施 50% 李春良 5)
|
- [x] 开发:开发 IBS V7.19.0 需求。(新业务平面引入与系统集成实施 70% 李春良 7)
|
||||||
|
- [x] 客响:周一的信安信息邮件未发送。
|
||||||
|
|
||||||
# 日志
|
# 日志
|
||||||
|
|
||||||
|
```
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: =================感谢您的耐心等待,安装已完成==================
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]:
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 请使用您的浏览器访问面板:
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 外部地址: http://182.255.32.64:22448/e506222c7e
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 内部地址: http://192.168.126.129:22448/e506222c7e
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 面板用户: fcee1b68c9
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 面板密码: 2692d0bd2c
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]:
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 官方网站:https://1panel.cn
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 项目文档:https://1panel.cn/docs
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 代码仓库:https://github.com/1Panel-dev/1Panel
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 前往 1Panel 官方论坛获取帮助:https://bbs.fit2cloud.com/c/1p/7
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]:
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 如果您使用的是云服务器,请在安全组中打开端口 22448
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]:
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: 为了您的服务器安全,离开此屏幕后您将无法再次看到您的密码,请记住您的密码。
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]:
|
||||||
|
[1Panel 2026-03-17 10:07:10 install Log]: ================================================================
|
||||||
|
```
|
||||||
|
|
||||||
# 总结
|
# 总结
|
||||||
|
|
||||||
|
```
|
||||||
|
更新方式也究极无敌简单,你直接把这段话,发给你的Agent就行,无论是Claude code、OpenClaw、OpenCode等等等等:https://github.com/anthropics/skills/tree/main/skills/skill-creator,这个skills更新了,帮我更新到最新版本
|
||||||
|
```
|
||||||
|
|
||||||
|
调研了 Dify,今天小杨下班比较早。
|
||||||
|
|
||||||
|
晚上割接,自己页放开了。
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# 任务
|
||||||
|
|
||||||
|
- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5)
|
||||||
|
- [x] 开发:开发 IBS V7.19.0 需求。(新业务平面引入与系统集成实施 代发完成 李春良 7)
|
||||||
|
|
||||||
|
# 日志
|
||||||
|
|
||||||
|
# 总结
|
||||||
|
|
||||||
|
今天发现了在 Java 枚举类中可以使用 spring context 获取已经注册的 service,并从而实现枚举的业务过滤,从而简化了大部分的代码,是一个很好的技巧
|
||||||
|
|
||||||
|
下班时,李虎和我讨论了关于 rag 的实现,能为他的材料提供一些功能。我发现沟通是成长最好的途径,因为在沟通中,你可以知道每个人擅长的和了解的领域进行知识交换,从而发现每个人对从功能上到,就是整个对相同的事情有不同的学习领域、学习方式以及了解程度和多多维度的知识扩展
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# 任务
|
||||||
|
|
||||||
|
- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5)
|
||||||
|
- [x] 开发:自测 IBS V7.19.0 需求。(新业务平面引入与系统集成实施 代发完成 李春良 5)
|
||||||
|
- [x] 测试:IBS 7.19.0 测试用例评审。(961-570-648 郑子雯 2.5)
|
||||||
|
|
||||||
|
# 日志
|
||||||
|
|
||||||
|
130623200701082153
|
||||||
|
|
||||||
|
tianhao123@
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
511725200605244415
|
||||||
|
|
||||||
|
wang8023941@
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 总结
|
||||||
|
|
||||||
|
早晨帮田昊强了四六级。8 点准时拿下。
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# 任务
|
||||||
|
|
||||||
|
- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5)
|
||||||
|
- [x] 开发:自测 IBS V7.19.0 需求。(新业务平面引入与系统集成实施 自测完成 李春良 7)
|
||||||
|
|
||||||
|
# 日志
|
||||||
|
|
||||||
|
# 总结
|
||||||
|
|
||||||
|
最近自己心态变化了一些,这次提测也没那么紧张了。
|
||||||
|
|
||||||
|
和志龙走用例。
|
||||||
|
|
||||||
|
下班带田宝去剪头发。二月二龙抬头。
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# 任务
|
||||||
|
|
||||||
|
# 日志
|
||||||
|
|
||||||
|
# 总结
|
||||||
|
|
||||||
|
早晨起来收拾了一下屋子,上午去小寨大集吃东西。中午叫张泽过来吃饭。
|
||||||
|
|
||||||
|
下午去了全季酒店。
|
||||||
|
|
||||||
|
晚上回来带田宝去公园玩儿了会儿。
|
||||||
+2
-14
@@ -4,11 +4,7 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
https://t.me/tgcnx【Telegram 中文社群】
|
https://t.me/tgcnx【Telegram 中文社群】
|
||||||
https://t.me/jisou2【极搜大船团】
|
|
||||||
https://t.me/animation_cn_chat【小乔国产动漫交流】
|
|
||||||
https://t.me/gmjlq【动漫交流群 Anime Group】
|
https://t.me/gmjlq【动漫交流群 Anime Group】
|
||||||
https://t.me/IPTV6789【IPTV📺軟件&直播源】
|
|
||||||
https://t.me/se_talk【SE-索引社群】
|
|
||||||
https://t.me/pixelexperiencechat_chn【Pixel Experience China】
|
https://t.me/pixelexperiencechat_chn【Pixel Experience China】
|
||||||
https://t.me/simpreadgroup【简悦 - SimpRead】
|
https://t.me/simpreadgroup【简悦 - SimpRead】
|
||||||
https://t.me/eryidebiji【二一交流群】
|
https://t.me/eryidebiji【二一交流群】
|
||||||
@@ -22,8 +18,6 @@ https://t.me/BinanceChinese【币安官方中文群】
|
|||||||
https://t.me/OKXGroup_CN【欧易OKX官方中文群】
|
https://t.me/OKXGroup_CN【欧易OKX官方中文群】
|
||||||
https://t.me/ChinaPumpNow【中国密码鲸公司 WHALE CHINESE 🇨🇳🐳🚀🌖】
|
https://t.me/ChinaPumpNow【中国密码鲸公司 WHALE CHINESE 🇨🇳🐳🚀🌖】
|
||||||
https://t.me/airdrop_newer【币圈 小白 撸 空投】
|
https://t.me/airdrop_newer【币圈 小白 撸 空投】
|
||||||
https://t.me/SZ399001【A股🚀股票炒股投资📈】
|
|
||||||
https://t.me/anyplus【A股@炒股笔记 股票 股市 股吧】
|
|
||||||
https://t.me/tonkeeper_chinese_chat【Tonkeeper中文频道 Chat】
|
https://t.me/tonkeeper_chinese_chat【Tonkeeper中文频道 Chat】
|
||||||
https://t.me/InvestSoftGroup【InvestSoft】
|
https://t.me/InvestSoftGroup【InvestSoft】
|
||||||
```
|
```
|
||||||
@@ -33,31 +27,24 @@ https://t.me/InvestSoftGroup【InvestSoft】
|
|||||||
```
|
```
|
||||||
https://t.me/haitunspeed【🐬海豚测速|公益EMBY|后端招募】
|
https://t.me/haitunspeed【🐬海豚测速|公益EMBY|后端招募】
|
||||||
https://t.me/ShadowrocketApp【Shadowrocket】
|
https://t.me/ShadowrocketApp【Shadowrocket】
|
||||||
https://t.me/SURGEPRO【SURGE PRO】
|
|
||||||
https://t.me/Loon0x00【Loon-0x00】
|
https://t.me/Loon0x00【Loon-0x00】
|
||||||
https://t.me/projectXray【Project X】
|
https://t.me/projectXray【Project X】
|
||||||
https://t.me/jichang_user【机场交流群|吃瓜群众】
|
|
||||||
https://t.me/v2rayN【v2rayN&G】
|
https://t.me/v2rayN【v2rayN&G】
|
||||||
https://t.me/Clashclient【Clash 交流群】
|
https://t.me/Clashclient【Clash 交流群】
|
||||||
https://t.me/qichiyuchat【七尺宇交流群】
|
|
||||||
https://t.me/airport_chat【离港[̲̅V̲̅I̲̅P̅]候机室|机场交流🅥】
|
https://t.me/airport_chat【离港[̲̅V̲̅I̲̅P̅]候机室|机场交流🅥】
|
||||||
https://t.me/qichiyu_bot【七尺宇私聊】
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 技术
|
## 技术
|
||||||
|
|
||||||
```
|
```
|
||||||
https://t.me/gekugou2【iOS破解软件交流】
|
https://t.me/gekugou2【iOS破解软件交流】
|
||||||
https://t.me/gpt_user【ChatGPT AI】
|
|
||||||
https://t.me/BotTalk【Telegram Bot Talk】
|
https://t.me/BotTalk【Telegram Bot Talk】
|
||||||
https://t.me/JavaBotsApi【Telegram Bots】
|
https://t.me/JavaBotsApi【Telegram Bots】
|
||||||
https://t.me/linux_home【Linux窝】
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 业务
|
## 业务
|
||||||
|
|
||||||
```
|
```
|
||||||
https://t.me/SVIP334179【开户 话费 电费 油卡 Q币 E卡7折优惠 赚钱项目】
|
|
||||||
https://t.me/hezu1【[合租社群]Netflix|YouTube|Spotify |office365|Hbo|Surge|美剧|等音乐影视聊天机场电影盒子软路由】
|
https://t.me/hezu1【[合租社群]Netflix|YouTube|Spotify |office365|Hbo|Surge|美剧|等音乐影视聊天机场电影盒子软路由】
|
||||||
https://t.me/voicebygoogle【Google Voice 中文群】
|
https://t.me/voicebygoogle【Google Voice 中文群】
|
||||||
```
|
```
|
||||||
@@ -66,7 +53,6 @@ https://t.me/voicebygoogle【Google Voice 中文群】
|
|||||||
|
|
||||||
```
|
```
|
||||||
https://t.me/Deno333【Denis D】备注:mt4 插件。
|
https://t.me/Deno333【Denis D】备注:mt4 插件。
|
||||||
https://t.me/ycmjdev【Kennel,GPT 拼车】
|
|
||||||
https://t.me/xinchent【似水流年】
|
https://t.me/xinchent【似水流年】
|
||||||
https://t.me/Cococeo【奇迹】
|
https://t.me/Cococeo【奇迹】
|
||||||
```
|
```
|
||||||
@@ -74,11 +60,13 @@ https://t.me/Cococeo【奇迹】
|
|||||||
## 机器人
|
## 机器人
|
||||||
|
|
||||||
```
|
```
|
||||||
|
https://t.me/jisou【极搜🔍资源搜索@JISOU】
|
||||||
https://t.me/OkayPayBot【Okpay💰】
|
https://t.me/OkayPayBot【Okpay💰】
|
||||||
https://t.me/freenodeshare_bot【免费节点自动分享】
|
https://t.me/freenodeshare_bot【免费节点自动分享】
|
||||||
https://t.me/SpamBot【Spam Info Bot】
|
https://t.me/SpamBot【Spam Info Bot】
|
||||||
https://t.me/aaooVbot【退押中·Kvmidc海外服务器🧑💻负责人】
|
https://t.me/aaooVbot【退押中·Kvmidc海外服务器🧑💻负责人】
|
||||||
https://t.me/dmssrobot【动漫搜索 Bot】
|
https://t.me/dmssrobot【动漫搜索 Bot】
|
||||||
|
https://t.me/qichiyu_bot【七尺宇私聊】
|
||||||
```
|
```
|
||||||
|
|
||||||
# Google Voice 选购清单
|
# Google Voice 选购清单
|
||||||
|
|||||||
@@ -63,3 +63,5 @@
|
|||||||
5、建立客户跟进记录管理体系,支持对跟进情况的记录、查询、修改和删除。
|
5、建立客户跟进记录管理体系,支持对跟进情况的记录、查询、修改和删除。
|
||||||
|
|
||||||
6、建立自动化的预警机制,支持预警规则的自定义配置,支持查询、修改、删除预警规则,并能定时生成预警提醒,防范业务风险。
|
6、建立自动化的预警机制,支持预警规则的自定义配置,支持查询、修改、删除预警规则,并能定时生成预警提醒,防范业务风险。
|
||||||
|
|
||||||
|
帮我看下现在 spring ai 底层的重试机制是怎么样的?会重试多少次?我怎么看到过 30 多次的日志。
|
||||||
|
|||||||
@@ -216,6 +216,498 @@ export const User = (user: UserProps) => {
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
关于 TypeScript 定义 Props 类型:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
type UserProps = {
|
||||||
|
name: string
|
||||||
|
age: number
|
||||||
|
isVerified: boolean
|
||||||
|
hobbies?: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export const User = (user: UserProps) => {
|
||||||
|
const { name, age, isVerified, hobbies } = user // 这里是解构的意思。
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h2>{name}</h2>
|
||||||
|
<p>Age: {age}</p>
|
||||||
|
<p>校验: {isVerified ? '已验证' : '未验证'}</p>
|
||||||
|
{hobbies && hobbies.length > 0 && <p>爱好: {hobbies.join(', ')}</p>}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
事件处理和合成事件系统
|
||||||
|
|
||||||
|
这里相当于把函数当作了 Porps,此时实现了子组件决定函数的调用,但是父组件可以控制状态。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
export const Button = () => {
|
||||||
|
const handeClick = () => {
|
||||||
|
alert('按钮触发了事件')
|
||||||
|
}
|
||||||
|
|
||||||
|
return <button onClick={handeClick}>点击我</button>
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
这里我们自己实现一个父子组件函数通信的能力。这里相当于我们自己声明了一个类似 onClick 的子组件。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
type LoginButtonProps = {
|
||||||
|
onLogin: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
export const LoginButton = ({ onLogin }: LoginButtonProps) => {
|
||||||
|
return <button onClick={onLogin}>登录</button>
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
> 这里的时间对象不是原生浏览器对象,是一个合成事件。
|
||||||
|
|
||||||
|
useState
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useState } from 'react'
|
||||||
|
|
||||||
|
const Counter = () => {
|
||||||
|
const [count, setCount] = useState(0)
|
||||||
|
const handelClick = () => {
|
||||||
|
setCount(count + 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>Counter</h1>
|
||||||
|
<p>Count: {count}</p>
|
||||||
|
<button onClick={handelClick}>增加</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Counter
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
这里 `setUser` 要用一个新的对象,否则话是不会生效的。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useState } from 'react'
|
||||||
|
|
||||||
|
const ErrorState = () => {
|
||||||
|
const [user, setUser] = useState({ name: 'tianzhuo', age: 20 })
|
||||||
|
const handelClick = () => {
|
||||||
|
setUser({ ...user, age: user.age + 1 })
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>ErrorState</h1>
|
||||||
|
<p>Name {user.name}</p>
|
||||||
|
<p>Age {user.age}</p>
|
||||||
|
<button onClick={handelClick}>Increment Age</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ErrorState
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
三元运算符
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useState } from 'react'
|
||||||
|
|
||||||
|
export const Login = () => {
|
||||||
|
const [isLogin, setIsLogin] = useState(false)
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>{isLogin ? 'Welcome Back!' : 'Please Login'}</h1>
|
||||||
|
<button onClick={() => setIsLogin(!isLogin)}>Toggle Login</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
`&&` 标签显示问题
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
export const MaillBox = ({ messge }) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>MailBox</h1>
|
||||||
|
{messge.length > 0 && <h2>You have {messge.length} unread messages.</h2>}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
代办
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
const todos = [
|
||||||
|
{ id: 1, tesx: 'Learn React' },
|
||||||
|
{ id: 2, tesx: 'Learn TypeScript' },
|
||||||
|
{ id: 3, tesx: 'Build a React App' },
|
||||||
|
]
|
||||||
|
|
||||||
|
export const TodoList = () => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>Todo List</h1>
|
||||||
|
<ul className="li">
|
||||||
|
{todos.map((todo) => (
|
||||||
|
<li key={todo.id}>{todo.tesx}</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## hook 生命周期
|
||||||
|
|
||||||
|
因为 StrictMode 的关系,这里会展示两次挂载。
|
||||||
|
|
||||||
|
同时如果依赖数组如果是空的话,只会渲染一次。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
|
export const UserProfile = ({ userId }) => {
|
||||||
|
const [userData, setUserData] = useState(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
console.log('Fetching user data for userId:', userId)
|
||||||
|
const timer = setTimeout(() => {
|
||||||
|
setUserData({ name: 'John Doe', age: 30 })
|
||||||
|
}, 1000)
|
||||||
|
return () => {
|
||||||
|
clearTimeout(timer)
|
||||||
|
console.log('🧹 定时器已清理')
|
||||||
|
}
|
||||||
|
}, [userId])
|
||||||
|
|
||||||
|
if (!userData) {
|
||||||
|
return <div>Loading...</div>
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>User Profile</h1>
|
||||||
|
<p>Name: {userData.name}</p>
|
||||||
|
<p>Age: {userData.age}</p>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
hook 的更新
|
||||||
|
|
||||||
|
这里相当与用 useState 触发了依赖数组的更新。只得关注的是每变化的时候,是先执行上一次的 clean。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
|
export const UserProfile = () => {
|
||||||
|
const [userId, setUserId] = useState(1) // ← 当前用户ID
|
||||||
|
const [userData, setUserData] = useState(null)
|
||||||
|
|
||||||
|
// 模拟不同ID返回不同数据
|
||||||
|
const mockUsers = {
|
||||||
|
1: { name: '张三', age: 28 },
|
||||||
|
2: { name: '李四', age: 35 },
|
||||||
|
3: { name: '王五', age: 42 },
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
console.log(`🚀 开始请求 userId: ${userId}`)
|
||||||
|
|
||||||
|
const timer = setTimeout(() => {
|
||||||
|
setUserData(mockUsers[userId] || { name: '未知用户', age: 0 })
|
||||||
|
console.log(`✅ 数据加载完成!当前用户: ${mockUsers[userId]?.name}`)
|
||||||
|
}, 800)
|
||||||
|
|
||||||
|
// 清理函数(StrictMode 会展示)
|
||||||
|
return () => {
|
||||||
|
console.log(`🧹 清理上一次的定时器 (userId: ${userId})`)
|
||||||
|
clearTimeout(timer)
|
||||||
|
}
|
||||||
|
}, [userId]) // ← 关键!依赖 userId
|
||||||
|
|
||||||
|
if (!userData) {
|
||||||
|
return <div>加载中...</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div style={{ padding: '20px', border: '1px solid #ccc' }}>
|
||||||
|
<h1>用户资料(当前 ID: {userId})</h1>
|
||||||
|
<p>姓名:{userData.name}</p>
|
||||||
|
<p>年龄:{userData.age}</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<button onClick={() => setUserId(1)}>切换到张三 (ID=1)</button>
|
||||||
|
<button onClick={() => setUserId(2)} style={{ marginLeft: '10px' }}>
|
||||||
|
切换到李四 (ID=2)
|
||||||
|
</button>
|
||||||
|
<button onClick={() => setUserId(3)} style={{ marginLeft: '10px' }}>
|
||||||
|
切换到王五 (ID=3)
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
hook 常见问题
|
||||||
|
|
||||||
|
1. 无限循环
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useState, useEffect } from 'react'
|
||||||
|
|
||||||
|
export const BadExample = () => {
|
||||||
|
const [count, setCount] = useState(0)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
console.log(`🔄 Effect 执行了!当前 count = ${count}`)
|
||||||
|
|
||||||
|
// 这里更新了 count,而 count 又是依赖项
|
||||||
|
setCount(count + 1) // ← 罪魁祸首!
|
||||||
|
}, [count]) // ← 依赖了 count
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div style={{ padding: '20px', border: '2px solid red' }}>
|
||||||
|
<h1>无限循环演示</h1>
|
||||||
|
<p>当前 count: {count}</p>
|
||||||
|
<p style={{ color: 'red' }}>看控制台!页面会疯狂卡顿,count 一直加!</p>
|
||||||
|
<button onClick={() => setCount(0)}>重置(也没用)</button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 忘记放依赖项。
|
||||||
|
|
||||||
|
useRef
|
||||||
|
|
||||||
|
这里放的是 input
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useRef, useEffect } from 'react'
|
||||||
|
|
||||||
|
export const RefExample = () => {
|
||||||
|
const inputRef = useRef(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
inputRef.current?.focus()
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>useRef 示例:自动聚焦输入框</h1>
|
||||||
|
<input ref={inputRef} type="text" placeholder="focus"></input>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
动态数据存储
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useRef, useState, useEffect } from 'react'
|
||||||
|
|
||||||
|
export const Search = () => {
|
||||||
|
const [query, setQuery] = useState('')
|
||||||
|
const timeOutRef = useRef(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
timeOutRef.current = setTimeout(() => {
|
||||||
|
console.log('搜索:', query)
|
||||||
|
}, 500)
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
console.log('清除上一次的定时器')
|
||||||
|
clearTimeout(timeOutRef.current)
|
||||||
|
}
|
||||||
|
}, [query])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<input value={query} onChange={(e) => setQuery(e.target.value)}></input>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 第二部分
|
||||||
|
|
||||||
|
新老表单
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
export const OldForm = () => {
|
||||||
|
const handleSubmit = (e) => {
|
||||||
|
e.preventDefault() // 这里是为了阻止表单提交默认的动作。
|
||||||
|
const formData = new FormData(e.target)
|
||||||
|
const name = formData.get('name')
|
||||||
|
console.log(name)
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<form onSubmit={handleSubmit}>
|
||||||
|
<input type="text" name="name" />
|
||||||
|
</form>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
export const NewForm = () => {
|
||||||
|
const handleSubmit = async (formdata: FormData) => { // 异步操作
|
||||||
|
const name = formdata.get('name')
|
||||||
|
console.log(name)
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 1000))
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<form action={handleSubmit}>
|
||||||
|
<input type="text" name="name" />
|
||||||
|
<button type="submit">Submit</button>
|
||||||
|
</form>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
useActionState,这个我理解其实是一个对历史功能的封装优化。简化了自己需要声明很多的 state。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useActionState } from 'react'
|
||||||
|
|
||||||
|
export const UseActionState = ({ productId }) => {
|
||||||
|
const addToCart = async (previousState, formData) => {
|
||||||
|
const quantity = formData.get('quantity')
|
||||||
|
console.log('Added to cart')
|
||||||
|
const result = await addToCart1(productId, quantity)
|
||||||
|
if (result.success) {
|
||||||
|
return { success: true, message: 'Product added to cart successfully!' }
|
||||||
|
} else {
|
||||||
|
return { success: false, message: 'Failed to add product to cart.' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const addToCart1 = (productId, quantity) => {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve({ success: true })
|
||||||
|
}, 1000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const [state, submitAction, isPending] = useActionState(addToCart, null)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<form action={submitAction}>
|
||||||
|
<input type="number" name="quantity" defaultValue={1} min={1} />
|
||||||
|
<button type="submit" disabled={isPending}>
|
||||||
|
{isPending ? 'Adding...' : 'Add to Cart'}
|
||||||
|
</button>
|
||||||
|
{state?.message && <p>{state.message}</p>}
|
||||||
|
</form>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
useformState
|
||||||
|
|
||||||
|
可使用 useFormState 获取父组件的表单状态。
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import { useFormStatus } from 'react-dom'
|
||||||
|
|
||||||
|
const SubButton = () => {
|
||||||
|
const { pending } = useFormStatus()
|
||||||
|
return (
|
||||||
|
<button type="subbmit" disabled={pending}>
|
||||||
|
{pending ? 'Submitting...' : 'Submit'}
|
||||||
|
</button>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const NewForm = () => {
|
||||||
|
const handeSubmit = async (formData) => {
|
||||||
|
const name = formData.get('name')
|
||||||
|
console.log('Form submitted with name:', name)
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 2000))
|
||||||
|
console.log('Form submission completed')
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<form action={handeSubmit}>
|
||||||
|
<input type="text" name="name" />
|
||||||
|
<SubButton />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
use
|
||||||
|
|
||||||
|
这里的一个想法是实现了层级 fallback
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
import React, { Suspense, use } from 'react'
|
||||||
|
import { ErrorBoundary } from 'react-error-boundary'
|
||||||
|
|
||||||
|
function fetchUser() {
|
||||||
|
return new Promise<{ name: string }>((resolve, reject) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
const success = false
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
resolve({ name: '张三' })
|
||||||
|
} else {
|
||||||
|
reject(new Error('获取用户失败'))
|
||||||
|
}
|
||||||
|
}, 2000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function UserInfo({ userPromise }: { userPromise: Promise<{ name: string }> }) {
|
||||||
|
const user = use(userPromise)
|
||||||
|
return <h2>用户名:{user.name}</h2>
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function App() {
|
||||||
|
const userPromise = fetchUser()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ErrorBoundary fallback={<p>加载失败了</p>}>
|
||||||
|
<Suspense fallback={<p>用户加载中...</p>}>
|
||||||
|
<UserInfo userPromise={userPromise} />
|
||||||
|
</Suspense>
|
||||||
|
</ErrorBoundary>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
# CSS
|
# CSS
|
||||||
|
|
||||||
顶级作用域
|
顶级作用域
|
||||||
|
|||||||
@@ -1,17 +1,3 @@
|
|||||||
下面给你一份**适用于 Anolis OS 8.6 / x86_64 / 源码包 redis-8.6.1.tar.gz** 的**标准安装文档**,包含:
|
|
||||||
|
|
||||||
- 安装编译依赖
|
|
||||||
- 源码编译安装
|
|
||||||
- 创建专用运行用户
|
|
||||||
- 配置目录与日志目录
|
|
||||||
- 设置 Redis 密码
|
|
||||||
- 配置 systemd 开机自启
|
|
||||||
- 启动、验证、常用维护命令
|
|
||||||
|
|
||||||
我按**生产环境标准化安装方式**写,你可以直接照着执行。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Redis 8.6.1 标准安装文档
|
# Redis 8.6.1 标准安装文档
|
||||||
|
|
||||||
适用系统:**Anolis OS 8.6 x86_64**
|
适用系统:**Anolis OS 8.6 x86_64**
|
||||||
@@ -241,20 +227,6 @@ dbfilename dump.rdb
|
|||||||
requirepass 5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1
|
requirepass 5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
|
||||||
/usr/local/redis/bin/redis-cli -a '5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1' MODULE LIST
|
|
||||||
/usr/local/redis/bin/redis-cli -a '5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1' FT._LIST
|
|
||||||
/usr/local/redis/bin/redis-cli -a '5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1' INFO server
|
|
||||||
|
|
||||||
AUTH 5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1
|
|
||||||
```
|
|
||||||
|
|
||||||
例如:
|
|
||||||
|
|
||||||
```conf
|
|
||||||
requirepass Redis@2025#Strong
|
|
||||||
```
|
|
||||||
|
|
||||||
> 这是你最关心的“设置密码”方式,客户端连接时必须认证。
|
> 这是你最关心的“设置密码”方式,客户端连接时必须认证。
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -813,12 +785,3 @@ systemctl status redis --no-pager -l
|
|||||||
```text
|
```text
|
||||||
PONG
|
PONG
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
如果你愿意,我还可以继续给你补两份内容之一:
|
|
||||||
|
|
||||||
1. **一份可直接执行的自动化安装脚本 install_redis_8.6.1.sh**
|
|
||||||
2. **一份更严格的生产环境配置版(限制 IP、ACL 用户、systemd 安全加固、日志轮转)**
|
|
||||||
|
|
||||||
如果你要,我可以直接继续输出。
|
|
||||||
@@ -34,7 +34,7 @@ Function Calling / Tool Call / Tool Calling
|
|||||||
> 调用工具:客户端发起 call tool,带上符合 schema 的参数
|
> 调用工具:客户端发起 call tool,带上符合 schema 的参数
|
||||||
> 返回结果:服务器返回结构化结果(文本/数据/错误),客户端再交给模型继续推理
|
> 返回结果:服务器返回结构化结果(文本/数据/错误),客户端再交给模型继续推理
|
||||||
|
|
||||||
**ReAct**: Synergizing Reasoning and Acting in Language Models
|
**ReAct**: Synergizing Reasoning(推理) and Acting(行动) in Language Models
|
||||||
|
|
||||||
> Question: 用户问题
|
> Question: 用户问题
|
||||||
>
|
>
|
||||||
@@ -47,6 +47,36 @@ Function Calling / Tool Call / Tool Calling
|
|||||||
>
|
>
|
||||||
> Final Answer: 最终结果
|
> Final Answer: 最终结果
|
||||||
|
|
||||||
|
Thought(思考) → Action(行动) → Observation(观察) → Thought → … → Final Answer
|
||||||
|
|
||||||
|
- 用户:北京今天天气?
|
||||||
|
- Thought:需要实时天气,我没有实时数据,调用天气API
|
||||||
|
- Action:get_weather("北京")
|
||||||
|
- Observation:北京晴天,15–25℃
|
||||||
|
- Thought:信息足够,直接回答
|
||||||
|
- Answer:北京今天晴天,15–25℃,适合户外活动
|
||||||
|
|
||||||
|
例如在 Dify 中:
|
||||||
|
|
||||||
|
```
|
||||||
|
用户问题
|
||||||
|
↓
|
||||||
|
Dify Agent 接收
|
||||||
|
↓
|
||||||
|
选择策略 (Function Calling / ReAct)
|
||||||
|
↓
|
||||||
|
连接 MCP 服务器
|
||||||
|
↓
|
||||||
|
发现可用工具列表
|
||||||
|
↓
|
||||||
|
根据用户问题选择工具
|
||||||
|
↓
|
||||||
|
调用工具获取结果
|
||||||
|
↓
|
||||||
|
返回给模型生成回答
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
**RAGFlow**(开源的 RAG 工程化平台 / 系统)Python TypeScript
|
**RAGFlow**(开源的 RAG 工程化平台 / 系统)Python TypeScript
|
||||||
|
|
||||||
本质是 RAG(Retrieval-Augmented Generation)检索增强生成
|
本质是 RAG(Retrieval-Augmented Generation)检索增强生成
|
||||||
@@ -96,3 +126,13 @@ DeepSeek-R1-Distill-Qwen-32B 工具调用。
|
|||||||
后期 Tool 多了,我们是否提供 MCP 注册中心。
|
后期 Tool 多了,我们是否提供 MCP 注册中心。
|
||||||
|
|
||||||
DeepSeek-R1-Distill-Qwen-32B 工具调用。
|
DeepSeek-R1-Distill-Qwen-32B 工具调用。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- **可以商用**
|
||||||
|
- **可以二次开发**
|
||||||
|
- **可以作为企业应用开发平台使用**
|
||||||
|
- 但如果你要:
|
||||||
|
- 搭建**多租户服务**
|
||||||
|
- 或修改/去掉其前端品牌标识
|
||||||
|
- 那就**需要向官方购买商业授权**。
|
||||||
|
|||||||
@@ -10,6 +10,90 @@ Add/Fix/Mod JiraID BYMC 说明
|
|||||||
|
|
||||||
## 需求开发
|
## 需求开发
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"企业月流量": {
|
||||||
|
"华为平面": "1",
|
||||||
|
"中兴平面": "2",
|
||||||
|
"HCDN": "3",
|
||||||
|
"自研2.0": "8",
|
||||||
|
"自研RTMP": "5",
|
||||||
|
"合作服务商1": "10",
|
||||||
|
"合作服务商2": "11"
|
||||||
|
},
|
||||||
|
"试商用客户峰值带宽": {
|
||||||
|
"华为平面": "1",
|
||||||
|
"中兴平面": "2",
|
||||||
|
"HCDN": "3",
|
||||||
|
"自研2.0": "4",
|
||||||
|
"合作服务商1": "6",
|
||||||
|
"合作服务商2": "7"
|
||||||
|
},
|
||||||
|
"非系统分发域名日峰值": {
|
||||||
|
"华为": "1",
|
||||||
|
"中兴": "2",
|
||||||
|
"HCDN": "3",
|
||||||
|
"自研2.0": "8",
|
||||||
|
"合作服务商1": "10",
|
||||||
|
"合作服务商2": "11"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
# 用例评审
|
# 用例评审
|
||||||
|
|
||||||
# 冒烟自测
|
# 冒烟自测
|
||||||
|
|
||||||
|
企业名称:ECName1773900714
|
||||||
|
|
||||||
|
订购:PRODUCTID1773900830
|
||||||
|
|
||||||
|
网页加速
|
||||||
|
|
||||||
|
融合2平面
|
||||||
|
|
||||||
|
DevReq1773900714B.komect.com
|
||||||
|
|
||||||
|
DevReq1773900714A.komect.com
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
企业名称:ECName1773900498
|
||||||
|
|
||||||
|
订购:PRODUCTID1773900678
|
||||||
|
|
||||||
|
网页加速
|
||||||
|
|
||||||
|
融合1平面
|
||||||
|
|
||||||
|
DevReq1773900498B.komect.com
|
||||||
|
|
||||||
|
DevReq1773900498A.komect.com
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
企业名称:ECName1773972775
|
||||||
|
|
||||||
|
订购:PRODUCTID1773972906
|
||||||
|
|
||||||
|
网页加速
|
||||||
|
|
||||||
|
合作服务商1
|
||||||
|
|
||||||
|
devreq1773972775b.komect.com
|
||||||
|
|
||||||
|
devreq1773972775a.komect.com
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
企业名称:ECName1773973012
|
||||||
|
|
||||||
|
订购:PRODUCTID1773973126
|
||||||
|
|
||||||
|
网页加速
|
||||||
|
|
||||||
|
合作服务商2
|
||||||
|
|
||||||
|
devreq1773973012b.komect.com
|
||||||
|
|
||||||
|
devreq1773973012a.komect.com
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
| 项目 | 配置 |
|
||||||
|
| --- | ------------------ |
|
||||||
|
| 系统 | Anolis OS 8.6 |
|
||||||
|
| 内核 | 4.18 |
|
||||||
|
| CPU | Intel Xeon Skylake |
|
||||||
|
| 核心 | 8 vCPU |
|
||||||
|
| 主频 | 2.2 GHz |
|
||||||
|
| 架构 | x86_64 |
|
||||||
|
|
||||||
|
OpenResty:`/apprun/openresty/nginx/conf/conf.d/excalicode-ai.conf`
|
||||||
|
|
||||||
|
openjdk-25.0.2:`/opt/java/jdk-25.0.2`
|
||||||
|
|
||||||
|
前端文件:`/var/www/excalicode-ai`
|
||||||
|
|
||||||
|
后端文件:`/opt/excalicode-ai`
|
||||||
|
|
||||||
|
配置信息:`/etc/excalicode-ai/excalicode-ai.env`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name redis \
|
||||||
|
--restart always \
|
||||||
|
-p 6379:6379 \
|
||||||
|
-v $(pwd)/data:/data \
|
||||||
|
-v $(pwd)/conf/redis.conf:/usr/local/etc/redis/redis.conf \
|
||||||
|
-v $(pwd)/logs:/logs \
|
||||||
|
-e TZ=Asia/Shanghai \
|
||||||
|
--ulimit nofile=65536:65536 \
|
||||||
|
redis:8.6.1 \
|
||||||
|
redis-server /usr/local/etc/redis/redis.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
主机:172.21.30.23 用户名:root 密码:Melo@3023
|
||||||
|
mysql:172.21.33.224 用户名:cosmic_ai 密码:Cosmic@3306
|
||||||
|
|
||||||
|
redis:172.21.43.68:6379 密码:chRdw@redis
|
||||||
|
redis(8.6.1):172.21.30.23 密码:5sTb7fHFbsYl6KmI6pvC^XMw!7Y^Pbc1
|
||||||
|
|
||||||
|
http://172.21.9.104:31554/v1/chat/completions
|
||||||
|
|
||||||
|
vllm-qwen8b-pkQCNH9bBLboUy8aDlPj3IpwOJu9ZAsXzDKUDHlIwPE
|
||||||
|
qwen8b-embedding
|
||||||
|
|
||||||
|
http://36.137.208.165:5020/v1/chat/completions
|
||||||
|
DeepSeek-671B
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
https://cloud.siliconflow.cn/
|
||||||
|
Qwen/Qwen3-Embedding-8B
|
||||||
|
4096 维
|
||||||
|
32K
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user