诸葛温侯 пре 1 година
родитељ
комит
6d7246c615

+ 8 - 0
AI/关键词.md

@@ -0,0 +1,8 @@
+线稿
+black lines Monochrome, 
+
+三视图
+multiple views, three_views, front, side, back, character chart
+
+尖刺头发
+spiked hair

+ 6 - 0
AI/开启功能.md

@@ -0,0 +1,6 @@
+# 开启功能
+
+# VAE
+Stable Diffusion不显示VAE模型、CLIP终止层数?一分钟解决
+
+Settings->User Interface->Quicksettings list -> 添加sd_vae 和 CLIP_stop_at_last_layers

+ 80 - 0
AI/推荐模型/1、大模型.md

@@ -0,0 +1,80 @@
+# 模型推荐
+## 大模型
+###  一、动漫模型
+#### 1、Counterfeit-V3.0
+元老级AI绘画大模型,画面精美,人物有立体感,画出的画面有一种厚涂的油质感,通常配合EasyNegative2使用
+
+#### 2、AbyssOrangeMix3
+橘子模型,画出的画通常带有浓厚的油光质感,形成了它独特的画风,适合画人物景物
+
+#### 3、blue_pencil
+不同于那些2.5D的动漫模型,没有油光厚涂的质感,就是普普通通的平面动漫风模型,画风干净清爽
+
+#### 4、Breakdomain
+非常优质的插画模型,人物和景物能够很好的融合在一起,生成的人物具有特殊美感,我的主用模型之一,目前只能在Huggingface上下载
+
+#### 5、AWPainting
+画面干净清爽,适合画单独的人物肖像或人物立绘,但是大场景的绘制有所欠缺
+
+#### 6、TMND-Mix
+非常适合绘制室内环境和一些静止的物品和食物等,细节非常丰富,会给人一种精致的感觉;但是由于太过精致,所以画一些室外大场景时会有一些过噪,不过可以利用一些手段轻易去除
+
+#### 7、Brixel - Three flavors
+虽然画面没有之前几个大模型那么精致,但是它的画风还是给人很舒适的感觉的
+
+#### 8、Three Delicacy Wonton
+非常优质的水墨风格大模型,适合山水人物画,适合和其它水墨Lora共同使用
+
+#### 9、SeekYou
+卡通动漫模型,儿童动漫
+
+#### 10、Flat-2D Animerge
+卡通平面动漫模型,儿童动漫风格
+
+#### 11、Dark Sushi Mix 大颗寿司Mix
+该模型有多个不同的版本,总体偏向暗色调,画风独特,非常易于区分
+
+#### 12、MeinaMix
+人物身材比例完美,画出来的人物偏成熟
+
+#### 13、Manmaru mix
+儿童动漫画风,可爱精致
+
+#### 14、hellokid2d
+儿童插画风格
+
+#### 15、abyssorangemix3AOM3_aom3a1b
+#### 16、pastelMixStylizedAnime_pastelMixPrunedFP16
+油画风格
+#### 17、threeDelicacyWonton_threeflavorwontonmixv
+水墨风格
+#### 18、revAnimated_v11
+大场景必备
+
+#### 19、cetusMix
+融合模型
+#### 20、Color Box Model
+特殊的美感
+#### 21、Night Sky YOZORA Style Model
+#### 22、dark Sushi Mix
+#### 23、kawaii mix
+依据Niji生成的图片训练而来
+#### 24、meina mix
+完美人物身材,适合全身图,成熟女性
+#### 25、BreakDomain, BreakDomainAnime, BreakDro
+Break系列一款非常优质的画景物与人物融合的模型,非常推荐
+#### 26、GhostMix
+非常强大的2.5D融合模型,非常适合抽象类华丽艺术
+
+### 二、真实模型
+#### 1、AWPortrait
+优质的真人人物肖像模型
+
+#### 2、XXMix_9realistic
+非常精美的2.5D人物模型,因为画面带有一丝油画的感觉,可以制作古典风格的人物肖像
+
+#### 3、majicMIX 真实 系列
+优质真实人物模型,majicMIX系列包含男性,女性,机甲,奇幻等多种风格,当然了,它只适合画人物特写图,以及小范围的场景图,对大场景的处理比较生硬,不过这也是真实模型的弊端
+
+#### 4、墨幽人造人
+这是一个全功能的综合模型,包含真实的一切。拥有着极强的各类lora兼容性,并且还是一个用来训练真实系lora的绝佳底模。可以是女人,也可以是男人,她还可以是各种动物、或是想象中的物种。是建筑、是风景、是房间、是产品、或是食物。更可以是玄幻的、科幻的、古风的、现当代的、或是奇幻的、甚至是恐怖的。是真实与可能存在的真实的一切

+ 178 - 0
AI/推荐模型/2、LoRA.md

@@ -0,0 +1,178 @@
+# 模型推荐
+## LoRA
+### 一、功能型
+#### 1、三视图 
+名称:CharTurner,模型地址:https://civitai.com/models/3036
+
+#### 2、Block building
+类似游戏设计中的方块建筑,可以利用像素Lora对其进行二次处理
+
+#### 3、 LEOSAM's Clothing +/- Adjuster
+该Lora可以控制画面中人物身上衣物的多少,权重从-1到1;动漫真人均可
+
+#### 4、Ink scenery
+适合画一些山水彩色墨水画
+
+#### 5、Anime Magazine Cover
+动漫杂志风
+
+#### 6、Anime Realism Control
+该Lora可以控制图画中的人物从2d->2.5d->3d
+
+#### 7、Complex food
+非常丰富的不同国家的食物,饮料,水果等
+
+#### 8、tangbohu-breasts
+可以改变胸部大小,权重从-1~1,0是正常
+
+#### 9、 2dSpriteBetaStyle_20
+设计类lora
+
+#### 10、animeLineartStyle
+线稿
+
+#### 11、concept Scenery Scene
+景观
+
+#### 12、Minimalist icons
+ICON图标
+
+#### 13、Stylized 3D Model
+3D二次元模型,结合figma和盲盒Lora更好哦
+
+#### 14、Anylogo
+帅气的Logo设计
+
+#### 15、ShojoVibe少女感
+2.5D,3D美少女优化Lora
+
+#### 16、Q版手绘
+推荐分辨率:512*512
+推荐采样方法:Euler a ,DPM++ 2M Karras ,DPM++ 2S a Karras,
+
+如果开启高清修复,出图效果会更好
+
+高清修复推荐设置:
+放大算法:R-ESRGAN 4x+ Anime6B 放大倍数1.5-2倍
+
+重绘幅度:0.3-0.6
+
+推荐大模型::sdhk_v30.preview,meinamix_meinaV11.preview,kidsmix_v10.preview,CounterfeitV30_v30.preview,darkSushiMixMix_225D.preview ,二次元模型基本都可以。
+
+
+### 二、增强型
+#### 1、Detail Tweaker LoRA
+能为一幅图片添加或减少细节,权重大于0增加画面细节,小于零减少画面细节
+
+#### 2、Better light
+为你的画面增加更好的光线和阴影,使用“体积光”、“阴影”等描述来增加这种效果
+
+#### 3、Clearlight 清光 Concept
+光影Lora:可以实现更详细的冷光影分割效果,描绘冬季光线下风景的不同部分。
+
+#### 4、pseudo-daylight
+伪日光,光线增强
+
+#### 5、epi_Noiseoffset
+画质补丁:增强对比度和饱和度
+
+#### 6、gachaSplashLORA_gachaSplashFarShot
+带背景的立绘风格
+
+#### 7、genshinImpactModel_v10
+3渲2风格,原神风格,强推
+
+#### 8、gloriousAzurLaneSpring_GloriousSpiring
+光荣 凉夜春雪 厚涂风格
+
+#### 9、stLouisLuxuriousWheels
+圣路易斯
+#### 10、graphicDesign_graphicDesign
+杂志风,设定集
+#### 11、Howls Moving Castle
+景观
+#### 12、ligne claire style
+焦茶画风,非常推荐
+#### 13、Gem & Gear/宝石と歯車 Concept
+立绘,宝石,装饰,概念
+#### 14、makotoShinkaiSubstyles_offset
+新海诚画风,强推(非常适合组合使用)
+#### 15、specimenGirl
+服装拆分,适合做服装设计和nsfw
+#### 16、ForegroundPlant
+前景龟背竹,这是一个植物(龟背竹)LORA,用于增加画面的前景
+#### 17、yoneyamaMaiStyleLora_yoneyamaMai
+#### 18、blindbox_V1Mix
+盲盒公仔类型lora
+#### 19、Cartoon test
+卡通风格
+#### 20、childrensDrawingLora_v10
+儿童的大师级作品
+#### 21、Xiaorenshu_v20
+制作这个Lora的人真是一个人才
+#### 22、Stamp_v1
+图标lora,logo
+#### 23、Studio Ghibli Style LoRA
+吉卜力风格
+#### 24、graphic Design20_v10
+游戏设计稿
+#### 25、Figma Anime Figures
+手办,玩具人偶
+
+### 三、风格型
+#### 1、3D rendering style
+游戏/CG人物 3D 渲染风格
+
+#### 2、Clay Render Style
+白模渲染风格
+
+#### 3、KIDS ILLUSTRATION
+儿童插画风格
+
+#### 4、极乐迪斯科(风格) | Disco Elysium
+
+#### 5、 LEOSAM's FilmGirl
+使你生成的真人图片有照片的质感,就好像是用老式相机拍出来的样子
+
+#### 6、Gongbi系列
+工笔质感
+
+#### 7、Hyouka
+京阿尼画风
+
+#### 8、Mochizuki Kei
+一种画风的lora,不好描述,看图
+
+#### 9、NijiMecha - Artstyle
+Niji机甲风格
+
+#### 10、1990
+90年代动漫风格
+
+#### 11、手绘+极简+线稿风格
+
+#### 12、Niji - minimal vector style
+矢量风格
+
+#### 13、Airconditioner
+适合画城镇,荒野,鲜花,小清新质感
+#### 14、Minimalist Anime Style
+极简主义
+#### 15、moffmachi_style
+卡通
+#### 16、M_Pixel 像素人人
+像素最优模型
+#### 17、剪纸
+中国剪纸风格
+#### 18、A-Mecha Musume A素体机娘
+#### 19、Gundam RX78-2 outfit style 高达RX78-2外观风格
+高达风格,减少Lora比重有奇效
+#### 20、不是青花瓷-机甲
+超级炫酷的3D机甲风格
+#### 21、Clothes Spacesuit
+宇航服
+#### 22、KIDS ILLUSTRATION
+儿童卡通画
+#### 23、Fake Van Gogh Style v1.0
+梵高笔触画风
+

+ 24 - 0
AI/推荐模型/3、Embeddings.md

@@ -0,0 +1,24 @@
+# 模型推荐
+## Embeddings
+### 一、AS-系列
+可以控制画面中人物的年龄,从小孩-> 老人
+- AS-YoungV2-Neg:将其放在负面提示中,权重为1.0至1.3,通常会移除场景中的成年人。
+- AS-YoungV2:将其放在正面提示的开始处,权重为1.0至1.3。概念上是青少年,可能因模型、lora或提示而不同。
+- AS-YoungerV2:将其放在正面提示的开始处,权重为1.0至1.3。概念上是一个儿童,可能因模型、lora或提示而不同。
+- AS-YoungestV2:将其放在正面提示的开始处,权重为1.0至1.3。概念上是婴幼儿,可能因模型、lora或提示而不同。
+- AS-Adult-Neg:将其放在负面提示中,权重为1.0至1.3。这将移除场景中的任何年轻人和/或青少年。
+- AS-Adult:将其放在正面提示的开始处,权重为1.0至1.3。概念上是20几30岁的完全成熟的成年人,可能因模型、lora或提示而不同。
+- AS-MidAged:将其放在正面提示的开始处,权重为1.0至1.3。概念上是四十岁到六十岁的中年成年人。
+- AS-Elderly:将其放在正面提示的开始处,权重为1.0至1.3。概念上是70岁以上的老年人。
+
+### 二、GS-系列
+可以一键变男女的嵌入模型(embedding),嵌入模型一般体积比较小,但往往有奇效,大多数情况下是放在负面提示词栏里来优化出图质量,这组变男女的embedding在正向提示词和负面提示词可以组合使用。
+- GS-DeFeminize-Neg:在您的负面提示中以1.0到1.3的强度放置,可去除美丽、化妆、胸部和其他女性特征。
+- GS-Boyish:在您的正面提示中以0.4到1.3的强度放置。在概念上推动朝向中性,但更具有但ch或男孩气质。可能因模型、lora或提示而异。
+- GS-Masculine:在您的正面提示中以0.2到1.3的强度放置。在概念上推动朝向粗犷和强健的成熟男子气概。可能因模型、lora或提示而异。这些嵌入将人们推向阳刚之气。
+- GS-DeMasculate-Neg:在您的负面提示中以1.0到1.3的强度放置。这将去除胡子和其他阳刚特征。非常适合从场景中去除男性。
+- GS-Girlish:在您的正面提示中以0.1到1.3的强度放置。在概念上推动朝向可爱、漂亮、有趣和充满活力的女孩气质。可能因模型、lora或提示而异。
+- GS-Womanly:在您的正面提示中以0.2到1.3的强度放置。在概念上推动朝向成熟和魅力的成熟女子气概。可能因模型、lora或提示而异。这些嵌入将人们推向阴柔之气。
+
+### 三、其他
+EasyNegativeV2,bad_prompt_version,badhand,ng_deepnegative,verybadimagenegative,pureerosface,yaguru magiku,laxpeint,21charturner 

+ 10 - 0
AI/推荐模型/4、ControlNet.md

@@ -0,0 +1,10 @@
+# 模型推荐
+## ControlNet
+### 一、光影ControlNet模型
+#### 1、control_v1p_sd15_qrcode_monster
+制作二维码的模型,这个模型和tile,lineart一起使用更佳;可能很多人制作出来的二维码根本扫不出来,这很正常,这玩意需要耐心,慢慢调参
+
+#### 2、control_v1p_sd15_brightness
+光影增强模型,可以用来制作光影嵌入错位图
+
+#### 3、lightingBasedPicture_v10

+ 8 - 6
AI/模型整理.md → AI/推荐模型/模型整理.md

@@ -1,5 +1,5 @@
 # 模型整理
-## 插件
+## 一、 插件
 ### 提示词
 名称:a1111-sd-webui-tagcomplete
 
@@ -9,13 +9,15 @@
 预处理器模型存放地址:
 模型存放地址:
 
-## LORA模型
-### 三视图 
-名称:CharTurner,模型地址:https://civitai.com/models/3036
 
-## 负面词
+## 三、负面词
 ### easynegative
 模型地址:https://civitai.com/models/7808?modelVersionId=9208
 存放地址:放在stable-diffusion/embeddings下
 
-## PS插件
+## 四、PS插件
+
+
+
+
+

+ 10 - 1
Common/Git指令.md

@@ -5,4 +5,13 @@
 git rm -r --cache (需要删除的内容)
 git commit -m "提交更改"
 git push
-```
+```
+
+## 合并分支
+git checkout main
+git pull origin main
+git checkout main(如果是第一次,本地没有main)
+git merge --allow-unrelated-histories master 
+git add .
+git commit -m "1"
+git push origin main

+ 19 - 0
Common/Ubuntu安装docker.md

@@ -0,0 +1,19 @@
+# Ubuntu安装docker
+apt-get remove docker docker-engine docker.io containerd runc
+sudo apt update
+sudo apt upgrade
+apt-get install ca-certificates curl gnupg lsb-release
+curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
+sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
+apt-get install docker-ce docker-ce-cli containerd.io
+sudo usermod -aG docker $USER
+systemctl start docker
+systemctl enable docker
+
+sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+sudo chmod +x /usr/local/bin/docker-compose
+
+podman rm $(docker ps -a -q)
+podman image prune
+podman system prune -a
+podman container prune

+ 6 - 0
Common/Yrm.md

@@ -0,0 +1,6 @@
+# Yrm
+npm install -g yrm
+
+yrm ls 查看所有的NPM源
+yrm test taobao 测试taobao源速度
+yrm use taobao

+ 97 - 0
React/依赖库 - Recoil.md

@@ -0,0 +1,97 @@
+# 依赖库-Recoil
+
+## 一、概述
+Recoil是由Facebook开发的一款用于React应用程序状态管理的库。它提供了一个可预测、可扩展和灵活的状态管理方案,可以帮助开发者在大型React应用中更好地组织和管理状态。
+
+以下是Recoil的一些关键特性:
+
+1. 原子状态管理:Recoil基于原子状态管理模式,允许开发者将应用程序的状态划分为许多原子(`atom`)。每个原子都是一个独立的状态单元,可以被订阅、更新和使用。
+
+2. 可预测和可组合:Recoil使用Recoil的选择器(selector)来定义计算状态派生的逻辑。选择器可以组合、链式调用和传递给其他选择器,从而实现状态的可预测和可组合。
+
+3. 强大的异步支持:Recoil专为异步操作而设计,可以轻松处理异步数据获取和处理。开发者可以使用异步选择器(async selector)来处理异步操作并管理相关状态。
+
+4. 优化性能:Recoil使用了类似React的调和(reconciliation)算法来管理状态变化,并且支持使用React的Memoized Selectors来避免不必要的重渲染,从而提高应用程序的性能表现。
+
+5. 非侵入式接入:Recoil可以与现有的React应用程序无缝集成,并且不需要改变现有的代码结构。开发者可以逐步采用Recoil,只需在需要的组件中使用Recoil提供的钩子函数即可。
+
+总体来说,Recoil提供了一种简单而强大的状态管理方案,使开发者可以更好地管理和组织React应用程序中的状态,并且具有良好的性能和扩展性。
+
+## 二、快速开始
+1、设置Recoil根节点:在您的应用程序中,您需要创建一个RecoilRoot组件,它将是Recoil状态的根节点。您可以在应用程序的顶层组件中放置RecoilRoot。
+``` jsx
+import React from 'react';
+import { RecoilRoot } from 'recoil';
+
+function App() {
+  return (
+    <RecoilRoot>
+      {/* Your application components */}
+    </RecoilRoot>
+  );
+}
+
+export default App;
+```
+
+2、创建和管理状态原子:您可以使用atom函数来创建状态原子。一个状态原子是一个包含状态值的对象,可以被多个组件订阅和修改。
+```jsx
+import { atom } from 'recoil';
+
+const countState = atom({
+  key: 'countState', // 唯一标识该状态原子
+  default: 0, // 初始状态值
+});
+```
+
+3、使用状态原子:在您的组件中,您可以使用Recoil提供的钩子函数来订阅和更新状态原子。
+```jsx
+import React from 'react';
+import { useRecoilState } from 'recoil';
+import { countState } from './state';
+
+function Counter() {
+  const [count, setCount] = useRecoilState(countState);
+
+  const increment = () => {
+    setCount(count + 1);
+  };
+
+  return (
+    <div>
+      <p>Count: {count}</p>
+      <button onClick={increment}>Increment</button>
+    </div>
+  );
+}
+
+export default Counter;
+```
+
+4、使用选择器(selectors):Recoil还允许您使用选择器从状态原子派生出其他计算状态。
+``` jsx
+import { selector } from 'recoil';
+import { countState } from './state';
+
+const evenCountSelector = selector({
+  key: 'evenCountSelector', // 唯一标识该选择器
+  get: ({ get }) => {
+    const count = get(countState);
+    return count % 2 === 0;
+  },
+});
+```
+
+5、使用异步选择器:如果您需要处理异步操作,Recoil还提供了异步选择器。
+```jsx
+import { selectorFamily } from 'recoil';
+
+const userDataSelector = selectorFamily({
+  key: 'userDataSelector', // 唯一标识该选择器
+  get: (userId) => async ({ get }) => {
+    const response = await fetch(`/api/user/${userId}`);
+    const data = await response.json();
+    return data;
+  },
+});
+```

+ 313 - 0
React/案例一说明.md

@@ -0,0 +1,313 @@
+# chat-client-new
+
+自修改版chat源码
+
+## 一、构建步骤
+### 1、创建测试路由,由于整个项目是需要用到路由的,所以直接先构建路由
+#### 1.1 新建路由文件
+```tsx
+// 创建routes文件夹,并新建index.tsx文件
+import {createBrowserRouter} from 'react-router-dom'
+
+function Test() {
+    return (<div>Hello World</div>)
+}
+
+function TestA() {
+    return (<div>Hello Hello</div>)
+}
+
+export const router = createBrowserRouter([
+    {
+        path: '/',
+        element: <Test/>
+    },
+    {
+        path: '/hello',
+        element: <TestA/>
+
+    }
+]);
+
+```
+#### 1.2 在App.tsx中使用路由
+```tsx
+import {RouterProvider} from "react-router-dom";
+import {router} from "./routes";
+
+function App() {
+    return (
+        <RouterProvider router={router}/>
+    )
+}
+
+export default App
+```
+
+### 2、创建测试布局
+```tsx
+// layouts/Chat.tsx
+export default function Chat() {
+    return <div>Chat</div>
+}
+
+// layouts/service.ts.ts
+export {default as ChatLayout} from './Chat.tsx'
+
+// routes/service.ts.tsx
+export const router = createBrowserRouter([
+    // 新增
+    {
+        path: 'chat/:conversationId?',
+        element: <ChatLayout/>
+    }
+]);
+
+```
+### 3、创建正式聊天布局
+#### 3.1 创建正式主布局RootLayout
+简单实现布局,左侧菜单,右侧<Outlet>主要读取子布局,这里的话会读取ChatView
+```tsx
+import {Outlet} from "react-router-dom";
+import {Nav} from "../components/Nav";
+
+export default function Root() {
+    return (
+        <>
+            <div className="flex h-screen">
+                <Nav/>
+                <div className="flex h-full w-full flex-1 flex-col bg-gray-50">
+                    <div
+                        className="transition-width relative flex h-full w-full flex-1 flex-col items-stretch overflow-hidden bg-white pt-10 dark:bg-gray-800 md:pt-0">
+                        <Outlet/>
+                    </div>
+                </div>
+            </div>
+        </>
+    )
+}
+```
+#### 3.2、创建正式的聊天页面ChatView
+简单实现聊天页面,暂时只加了信息展示区域
+```tsx
+import Messages from "../components/Messages/Messages.tsx";
+
+export default function Chat() {
+    return <>
+        <Messages/>
+    </>
+}
+```
+#### 3.3 修改路由参数
+```tsx
+import {createBrowserRouter} from 'react-router-dom'
+import {RootLayout} from '../layouts'
+import {ChatView} from "../views";
+
+
+export const router = createBrowserRouter([
+    {
+        path: '/',
+        element: <RootLayout/>,
+        children: [
+            {
+                path: 'chat/:conversationId?',
+                element: <ChatView/>
+            }
+        ]
+    }
+]);
+```
+
+### 4、添加请求功能
+#### 4.1 添加根节点
+```tsx
+import {RouterProvider} from "react-router-dom";
+import {router} from "./routes";
+import {QueryClient, QueryCache, QueryClientProvider} from "@tanstack/react-query";
+
+function App() {
+    const queryClient = new QueryClient({
+        queryCache: new QueryCache({
+            onError: (error: any) => {
+                if (error?.response?.status === 401) {
+                    console.error(error)
+                }
+            }
+        })
+    })
+
+    return (
+        <QueryClientProvider client={queryClient}>
+            <RouterProvider router={router}/>
+        </QueryClientProvider>
+    )
+}
+
+export default App
+
+```
+
+#### 4.2 添加请求参数
+```tsx
+import {useQuery, QueryObserverResult} from "@tanstack/react-query";
+import * as t from '../types';
+import * as service from './service';
+
+export enum QueryKeys {
+    startupConfig = 'startupConfig'
+}
+
+export const useGetStartupConfig = (): QueryObserverResult<t.TStartupConfig> => {
+    return useQuery<t.TStartupConfig>(
+        [QueryKeys.startupConfig],
+        () => service.getStartupConfig(),
+        {
+            refetchOnWindowFocus: false,
+            refetchOnReconnect: false,
+            refetchOnMount: false,
+        },
+    );
+};
+```
+
+```tsx
+import * as t from '../types';
+import request from './request';
+import * as endpoints from './endpoints'
+
+export const getStartupConfig = (): Promise<t.TStartupConfig> => {
+    return request.get(endpoints.config())
+}
+```
+
+``` tsx
+export const config = () => {
+    return '/api/config';
+}
+```
+
+### 5、添加状态管理器
+#### 5.1 设置 recoil 根节点
+```tsx
+import {RecoilRoot} from 'recoil';
+import {RouterProvider} from "react-router-dom";
+import {router} from "./routes";
+import {QueryClient, QueryCache, QueryClientProvider} from "@tanstack/react-query";
+
+function App() {
+    const queryClient = new QueryClient({
+        queryCache: new QueryCache({
+            onError: (error: any) => {
+                if (error?.response?.status === 401) {
+                    console.error(error)
+                }
+            }
+        })
+    })
+
+    return (
+        <QueryClientProvider client={queryClient}>
+            <RecoilRoot>
+                <RouterProvider router={router}/>
+            </RecoilRoot>
+        </QueryClientProvider>
+    )
+}
+
+export default App
+```
+
+#### 5.2 添加conversation存储
+```tsx
+import {atom} from 'recoil';
+import {TConversation} from "../data-provider/types";
+const conversation = atom<TConversation | null>({key: 'conversation', default: null})
+
+export default {
+    conversation,
+}
+```
+
+#### 5.3 在页面中调用
+```tsx
+import {useRecoilState} from "recoil";
+
+export default function ChatView() {
+     const [conversation] = useRecoilState(store.conversation)
+}
+
+```
+## 二、依赖库
+### 1、Tailwind CSS
+#### 1.1 安装Tailwind CSS支持
+```shell
+yarn add tailwindcss postcss autoprefixer
+
+# 初始化tailwind
+npx tailwindcss init
+```
+#### 1.2 创建postcss配置文件
+```javascript
+// 创建名为postcss.config.js
+module.exports = {
+    plugins: [
+        require('tailwindcss'),
+        require('autoprefixer')
+    ]
+}
+```
+#### 1.3 创建名为styles.css
+```css
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+```
+
+### 2、zod
+TypeScript的强类型验证库
+
+## 三、样式说明
+### 1、布局
+flex : flex布局
+flex-col: 子元素垂直布局
+flex-1:
+### 2、尺寸
+h-screen 一屏高 (100vh)
+w-full 宽度填满(width:100%)
+h-full 高度填满(height:100%)
+
+## 四、数据说明
+### 1、conversation
+对话,也就左侧导航菜单栏里,一个对话可以包含很多条消息(message)
+``` tsx
+export const tConversationSchema = z.object({
+    conversationId: z.string().nullable(),          // 对话ID,唯一标识
+    title: z.string(),                              // 对话名称
+    user: z.string().optional(),                    // 对话所属用户
+    endpoint: eModelEndpointSchema.nullable(),  
+    createAt: z.string(),                           // 对话创建时间
+    updateAt: z.string()                            // 对话更新时间
+})
+```
+
+### 2、endpoint
+``` tsx
+import {z} from 'zod';
+import {openAISchema} from "./openai.ts";
+
+export enum EModelEndpoint {
+    azureOpenAI = 'azureOpenAI',
+    openAI = 'openAI',
+}
+
+export const eModelEndpointSchema = z.nativeEnum(EModelEndpoint)
+
+type EndpointSchema =
+    | typeof openAISchema
+
+export const endpointSchemas: Record<EModelEndpoint, EndpointSchema> = {
+    openAI: openAISchema,
+    azureOpenAI: openAISchema,
+}
+```