|
Download docs/architecture/data-flow.md from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 18.3 kB
-
https://huggingface.co/chenbhao/codev/resolve/afbc7edaae4e6bb0102ba024b49ce8be89d2264c/docs/architecture/data-flow.md
- Command line
-
hf download hf://chenbhao/codev@afbc7edaae4e6bb0102ba024b49ce8be89d2264c/docs/architecture/data-flow.md
-
curl -L -o data-flow.md https://huggingface.co/chenbhao/codev/resolve/afbc7edaae4e6bb0102ba024b49ce8be89d2264c/docs/architecture/data-flow.md
18.3 kB
| # ๆ ธๅฟๆฐๆฎๆต | |
| ๆฌๆๆกฃ่ฏฆ็ปๆ่ฟฐ VersperClaw ็ๅ ญๅคงๆ ธๅฟๆฐๆฎๆต๏ผๅ ๅซ ASCII ๅบๅๅพๅๅ ณ้ฎไปฃ็ ่ทฏๅพใ | |
| --- | |
| ## 1. ็จๆท่พๅ ฅๆต | |
| ็จๆท้่ฟ็ป็ซฏ่พๅ ฅๆๆฌๅฐ AI ๅๅบ็ๅฎๆด้พ่ทฏใ | |
| ``` | |
| User (้ฎ็) | |
| โ | |
| โ ้ฎๅ ฅๆๆฌ + Enter | |
| โผ | |
| PromptInput ็ปไปถ | |
| (screens/PromptInput.tsx) | |
| โ | |
| โ handlePromptSubmit() | |
| โผ | |
| messageQueueManager.enqueue() | |
| (utils/messageQueueManager.ts) | |
| โ | |
| โ ๅฝไปคๅ ฅ้ (priority: 'now' | 'next' | 'later') | |
| โ FIFO ๆไผๅ ็บงๆๅบ | |
| โผ | |
| useCommandQueue hook | |
| (hooks/useCommandQueue.ts) | |
| โ | |
| โ ๅบ้ โ ไบค็ป REPL ไธปๅพช็ฏ | |
| โผ | |
| query() ๅฝๆฐ | |
| (query.ts โ QueryEngine.ts) | |
| โ | |
| โโโ ็ป่ฃ ๆถๆฏๅๅฒ | |
| โโโ ่ทๅ็ณป็ปๆ็คบ่ฏ (src/context.ts) | |
| โโโ ๅๅนถๅทฅๅ ทๅ่กจ (assembleToolPool) | |
| โโโ ้ๆฉ Provider | |
| โ | |
| โโโ [1P Anthropic] โโ Anthropic SDK โโ POST /v1/messages | |
| โ | |
| โโโ [3P Provider] โโ server/proxy/handler.ts | |
| โ | |
| โโโ anthropicToOpenaiChat.ts (่ฏทๆฑ่ฝฌๆข) | |
| โโโ POST provider API (OpenAI/Groq/DeepSeek...) | |
| โโโ openaiChatToAnthropic.ts (ๅๅบ่ฝฌๆข) | |
| โ | |
| โผ | |
| ๆตๅผๅๅบๅๅฐ query() | |
| โ | |
| โผ | |
| ๅทฅๅ ท่ฐ็จๅๅ (Tool Execution) | |
| โ | |
| โผ | |
| ๆธฒๆๅๅบๅฐ็ป็ซฏ (Ink UI) | |
| ``` | |
| ### ๅ ณ้ฎไปฃ็ ่ทฏๅพ | |
| | ๆญฅ้ชค | ๆไปถ | ๆ ธๅฟๅฝๆฐ | | |
| |------|------|----------| | |
| | ่พๅ ฅ | `src/components/PromptInput/PromptInput.tsx` | `handlePromptSubmit()` | | |
| | ้ๅ | `src/utils/messageQueueManager.ts` | `enqueue()`, `dequeue()` | | |
| | ๆฅ่ฏข | `src/query.ts` | `query()` | | |
| | ๅผๆ | `src/QueryEngine.ts` | `QueryEngine` ็ฑป | | |
| | ๅทฅๅ ท | `src/tools.ts` | `assembleToolPool()`, `getTools()` | | |
| | ไปฃ็ | `src/server/proxy/handler.ts` | `handleProxyRequest()` | | |
| | ๅๅบๆธฒๆ | `src/screens/REPL.tsx` | ๆถๆฏๅ่กจ + ๆตๅผๆธฒๆ | | |
| ### ้ๅไผๅ ็บงๆบๅถ | |
| ``` | |
| ไผๅ ็บง: 'now' > 'next' > 'later' | |
| ๅไธไผๅ ็บงๅ FIFO | |
| โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโ | |
| โ 'now' โ โ 'next' โ โ 'later' โ | |
| โ (็ดงๆฅ) โ โ (ๆญฃๅธธ) โ โ (้็ฅ) โ | |
| โโโโโโโโโโโค โโโโโโโโโโโโค โโโโโโโโโโโค | |
| โ โโโโถ โ โ โโโโถ โ โ โโโโถ โ | |
| โ ๅบ้ไผๅ โ โ โ โ โ | |
| โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโ | |
| ``` | |
| --- | |
| ## 2. ่ฏญ้ณๆ่ทๆต | |
| ไป้บฆๅ ้ฃๅฐ VRM ๅ็ซฏ่ฏญ้ณๆญๆพ็ๅฎๆด็ฎก้ใ | |
| ### ่ฏญ้ณๆ่ทๆถๆ | |
| VersperClaw ไฝฟ็จ่ฟ็จๅ ้ณ้ขๆ่ท๏ผcpal Rust ๅบ๏ผ้่ฟ `native-modules/audio-capture-napi`๏ผ๏ผ่ไธๆฏไผ ็ป็ arecord/parecord ๅญ่ฟ็จใ | |
| ``` | |
| ้บฆๅ ้ฃ (็กฌไปถ) | |
| โ | |
| โ 16kHz S16LE PCM | |
| โผ | |
| cpal (Rust ๅ็ๆจกๅ) | |
| (native-modules/audio-capture-napi) | |
| โ | |
| โ onData(chunk: Buffer) | |
| โผ | |
| FriendService.startVoiceCapture() | |
| (friend/FriendService.ts) | |
| โ | |
| โโโโถ Silero VAD (่ฏญ้ณๆดปๅจๆฃๆต) | |
| โ (friend/voice/vad-service.ts) | |
| โ โ | |
| โ โ onnxruntime-web WASM ๆจ็ | |
| โ โ 512 samples/frame @ 16kHz (32ms) | |
| โ โ | |
| โ โโโ ่ฏด่ฏๅผๅง โ ๅผๅง็งฏ็ดฏ้ณ้ข | |
| โ โโโ ๆฃๆตๆ็ปญ่ฏญ้ณ (โฅ10 ๅธง โ 320ms ๆฟๆดป) | |
| โ โโโ ๆฃๆต้้ณ (โฅ20 ๅธง โ 640ms) โ onSpeechEnd | |
| โ โ | |
| โ โผ | |
| โ ้ณ้ขๆฎต (Float32Array) | |
| โ โ | |
| โ โผ | |
| โ STT (่ฏญ้ณ่ฝฌๆๅญ) | |
| โ โโโ Doubao ASM (็ซๅฑฑๅผๆ) | |
| โ โ (doubaoime-asr ๅ ) | |
| โ โโโ Anthropic STT | |
| โ โโโ Whisper (OpenAI) | |
| โ โ | |
| โ โผ | |
| โ ่ฝฌๅฝๆๆฌ (transcript) | |
| โ | |
| โโโโถ messageQueueManager.enqueue() | |
| โ | |
| โ { value: transcript, mode: 'prompt', origin: { kind: 'channel', server: 'friend' } } | |
| โผ | |
| AI ๅค็ (ๅ็จๆท่พๅ ฅๆต) | |
| โ | |
| โ AI ๅๅบๆๆฌ | |
| โผ | |
| TTS (ๆๆฌ่ฝฌ่ฏญ้ณ) | |
| โโโ Edge TTS (node-edge-tts, ้ป่ฎค zh-CN-XiaoxiaoNeural) | |
| โโโ Qwen TTS (DashScope API, qwen3-tts-flash) | |
| โ | |
| โ ็ๆ MP3 ๆไปถ | |
| โผ | |
| broadcastToVrm() | |
| (friend/sse.ts) | |
| โ | |
| โ SSE โ { text, audioUrl, audioIndex } | |
| โผ | |
| VRM ๅ็ซฏ | |
| โโโ ๆญๆพ้ณ้ข | |
| โโโ ๆพ็คบๆๆฌๆฐๆณก | |
| โโโ ่งฆๅๅฃๅๅๆญฅ | |
| ``` | |
| ### VAD ็ถๆๆบ | |
| ``` | |
| Silero VAD ๅ ้จ็ถๆ: | |
| [้้ณ] โโโโโโโโโโโโโโ ๅธงๆฆ็ < ๆญฃ้ๅผ โโโโโโโโโโโโโโโถ [้้ณ] | |
| โ โฒ | |
| โ ๅธงๆฆ็ โฅ positiveSpeechThreshold โ | |
| โ (่ฟ็ปญ โฅ preSpeechTriggerFrames) โ ๅธงๆฆ็ < ่ด้ๅผ | |
| โผ โ (่ฟ็ปญ โฅ redemptionFrames) | |
| [ๅฏ่ฝ่ฏด่ฏ] โโโโโโ ๅธงๆฆ็ < ๆญฃ้ๅผ โโโโโโโถ [็กฎ่ฎค่ฏด่ฏ] โโโ | |
| โ โ | |
| โ onSpeechStart() โ onSpeechEnd(audio) | |
| โผ โผ | |
| [็งฏ็ดฏ้ณ้ขๅธง] [ๅ้้ณ้ขๆฎตๅฐ STT] | |
| ``` | |
| | ๅๆฐ | ้ป่ฎคๅผ | ๅซไน | | |
| |------|--------|------| | |
| | `positiveSpeechThreshold` | 0.75 | ๅคๅฎไธบ่ฏญ้ณ็็ฝฎไฟกๅบฆ้ๅผ | | |
| | `negativeSpeechThreshold` | 0.50 | ๅคๅฎไธบ้้ณ็็ฝฎไฟกๅบฆ้ๅผ | | |
| | `preSpeechTriggerFrames` | 10 | ๆฟๆดปๅ้่ฆ่ฟ็ปญ่ฏญ้ณๅธงๆฐ | | |
| | `redemptionFrames` | 20 | ็ปๆๅ้่ฆ่ฟ็ปญ้้ณๅธงๆฐ | | |
| | `minSpeechFrames` | 6 | ๆๅฐๆๆ่ฏญ้ณๅธงๆฐ | | |
| | `rmsThreshold` | 0.004 | RMS ่ฝ้้ๅผ (-48dBFS)๏ผไฝไบๆญคๅผ่ทณ่ฟๆจ็ | | |
| ### ๅๅฃฐๆถ้คๆบๅถ | |
| ``` | |
| FriendService ๅจ TTS ๆญๆพๆถ่ชๅจ้้ณ้บฆๅ ้ฃ: | |
| AI ๅๅบๆๆฌ | |
| โ | |
| โผ | |
| TTS ๅผๅง็ๆ | |
| โ | |
| โผ | |
| friend.muted = true | |
| โ muteTimer = setTimeout(unmute, estimatedTtsDuration) | |
| โ | |
| โผ | |
| TTS ๆญๆพๆ้ด: ้บฆๅ ้ฃๆฐๆฎ โ ไธขๅผ (ไธ้ VAD/STT) | |
| โ | |
| โผ | |
| TTS ๆญๆพ็ปๆ (ๆไผฐ็ฎๆถ้ดๅฐ) | |
| โ | |
| โผ | |
| friend.muted = false | |
| โ | |
| โผ | |
| ๆขๅคๆญฃๅธธๆ่ท | |
| ``` | |
| --- | |
| ## 3. ่ฟ็จๆกฅๆฅๆต | |
| Local CLI ๅฐ `claude.ai` ่ฟ็จไผ่ฏ็ WebSocket ๆกฅๆฅใ | |
| ``` | |
| Local CLI (ไฝ ็ๆบๅจ) claude.ai ๆๅกๅจ | |
| โโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ | |
| claude --remote start | |
| โ | |
| โผ | |
| bridgeMain() | |
| (bridge/bridgeMain.ts) | |
| โ | |
| โ ๅๅปบๆฌๅฐ HTTP ๆๅก | |
| โ ๅ่ตท OAuth ็ปๅฝ | |
| โผ | |
| WebSocket ่ฟๆฅ | |
| (bridge/replBridgeTransport.ts) | |
| โ โโโโโโโโโโโโบ claude.ai ่ฟ็จไผ่ฏ | |
| โ wss://api.claude.ai/... | |
| โ | |
| โผ | |
| replBridge.ts | |
| โ | |
| โโโ ไป่ฟ็จๆฅๆถ่พๅ ฅ โ ๅ ฅ้ๅฐๆฌๅฐ messageQueueManager | |
| โโโ ๅฐๆฌๅฐ่พๅบ/ๅทฅๅ ท็ปๆ โ ๅ้ๅ่ฟ็จ | |
| โโโ ๅๆญฅๆฌๅฐๅฝไปคๅฐ่ฟ็จ็ฝๅๅ | |
| (BRIDGE_SAFE_COMMANDS) | |
| ``` | |
| ### ๅฝไปค่ฟๆปค | |
| ่ฟ็จๆจกๅผไธๅชๅ ่ฎธๅฎๅ จๅฝไปคๆง่ก๏ผ | |
| ``` | |
| REMOTE_SAFE_COMMANDS = { | |
| session, // ๆพ็คบ QR/URL | |
| exit, // ้ๅบ | |
| clear, // ๆธ ๅฑ | |
| help, // ๅธฎๅฉ | |
| theme, // ไธป้ข | |
| color, // ้ข่ฒ | |
| vim, // Vim ๆจกๅผ | |
| cost, // ่ฎก่ดน | |
| usage, // ็จ้ | |
| copy, // ๅคๅถ | |
| btw, // ไพฟ็ญพ | |
| feedback, // ๅ้ฆ | |
| plan, // ่ฎกๅๆจกๅผ | |
| keybindings, // ๅฟซๆท้ฎ | |
| statusline, // ็ถๆๆ | |
| stickers, // ่ดด็บธ | |
| mobile, // ็งปๅจ็ซฏ | |
| } | |
| ``` | |
| ๆกฅๆฅๅฎๅ จๅฝไปค๏ผไป็งปๅจ็ซฏไนๅฏๆง่ก๏ผ๏ผ | |
| ``` | |
| BRIDGE_SAFE_COMMANDS = { | |
| compact, // ๅ็ผฉไธไธๆ | |
| clear, // ๆธ ๅฑ | |
| cost, // ่ฎก่ดน | |
| summary, // ไผ่ฏๆป็ป | |
| releaseNotes, // ๆดๆฐๆฅๅฟ | |
| files, // ๆไปถๅ่กจ | |
| } | |
| ``` | |
| --- | |
| ## 4. Friend ่กจๆ ๆต | |
| LLM ่ฐ็จ `friend_emotion` ๅทฅๅ ทๅฐ VRM ๅ็ซฏ 3D ่ง่ฒ่กจๆ ๆธฒๆ็ๅฎๆด้พ่ทฏใ | |
| ``` | |
| LLM ๆจ็ | |
| โ | |
| โ ๆ่ไธไธๆๅ่ฐ็จ FriendEmotionTool | |
| โผ | |
| FriendEmotionTool.call({ emotion, intensity, mood_delta }) | |
| (tools/FriendEmotionTool.ts) | |
| โ | |
| โโโ ๆดๆฐๅฟๆ ๆๆฐ moodIndex (0-100, ๅบๅๅผ 60) | |
| โ โโโ mood_delta > 0: moodIndex += delta (ไธ้ 100) | |
| โ โโโ mood_delta < 0: moodIndex -= delta (ไธ้ 0) | |
| โ | |
| โโโ broadcastToVrm({ | |
| โ emotion: 'happy'|'sad'|'angry'|..., | |
| โ emotionIntensity: 0..1, | |
| โ moodDelta: n, | |
| โ moodIndex: n | |
| โ }) | |
| โ | |
| โผ | |
| broadcastToVrm() | |
| (friend/sse.ts) | |
| โ | |
| โ SSE data: JSON.stringify(payload) + "\n\n" | |
| โ ๅ้็ปๆๆๅทฒ่ฟๆฅ็ SSE ๅฎขๆท็ซฏ | |
| โผ | |
| VRM ๅ็ซฏ (Three.js / React Three Fiber) | |
| โ | |
| โโโ SSE ไบไปถ่งฃๆ | |
| โ | |
| โโโ VRMScene ็ปไปถ | |
| โ โโโ EmoteController โ ่ฎพ็ฝฎ BlendShape ๆททๅๅฝข็ถ | |
| โ โ (happy โ ๅด่งไธๆฌ, sad โ ็็ผไธๅ, ็ญ) | |
| โ โโโ MotionController โ ่งฆๅ็็ๅจ็ป (ๅผๅธใ็จ็ผ) | |
| โ โโโ TextBubble โ ๆพ็คบ่ๅคฉๆๆฌๆฐๆณก | |
| โ | |
| โโโ AudioPlayback (ๅฆๆๆ audioUrl) | |
| โโโ ๆญๆพ TTS ้ณ้ข + ๅฃๅๅๆญฅ | |
| ``` | |
| ### ๅฏ็จ่กจๆ ๅ่กจ | |
| | ่กจๆ | ่ฏดๆ | | |
| |------|------| | |
| | `happy` | ๅผๅฟ | | |
| | `sad` | ๆฒไผค | | |
| | `angry` | ็ๆฐ | | |
| | `surprised` | ๆ่ฎถ | | |
| | `think` | ๆ่ | | |
| | `awkward` | ๅฐดๅฐฌ | | |
| | `question` | ็้ฎ | | |
| | `curious` | ๅฅฝๅฅ | | |
| | `neutral` | ไธญๆง/้ป่ฎค | | |
| | `love` | ๅ็ฑ | | |
| | `flirty` | ่ฐๆ | | |
| | `greeting` | ๆๆๅผ | | |
| | `relaxed` | ๆพๆพ | | |
| ### ๅฟๆ ็ณป็ป | |
| ``` | |
| ๅฟๆ ๆๆฐ (moodIndex) ่ๅด 0-100๏ผๅบๅๅผ 60 | |
| 0 โโโโโโโโโโโโโโ 60 โโโโโโโโโโโโโโ 100 | |
| [ไฝ่ฝ] [ไธญๆง] [้ซๆถจ] | |
| ๆฏๆฌก mood_delta: -3 ๅฐ +3 (ๆๅฐ็ปๅฏนๅผ 1) | |
| ้่ฟ prefs ๆไน ๅ (friend/prefs.ts) | |
| moodIndex ๅฝฑๅ: | |
| - ๆๆฌๆฐๆณก้ข่ฒ/ๆ ทๅผ | |
| - ๅๅงฟๅงฟๆ (ๆพๆพ vs ็ดงๅผ ) | |
| - ๆ่ๅจไฝๅน ๅบฆ | |
| ``` | |
| ### SSE ๅนฟๆญไบไปถ็ฑปๅ | |
| Friend SSE ้้้่ฟ `broadcastToVrm()` ๅ้ JSON ไบไปถ๏ผๆๆๅญๆฎตๅไธบๅฏ้๏ผ | |
| ```typescript | |
| type VrmBroadcastPayload = { | |
| text?: string; // ๆพ็คบๆๆฌ | |
| emotion?: string; // ่กจๆ ๅ็งฐ | |
| emotionIntensity?: number; // ่กจๆ ๅผบๅบฆ 0-1 | |
| audioUrl?: string; // TTS ้ณ้ข URL | |
| audioIndex?: number; // ้ณ้ขๅบๅๅท | |
| clearText?: boolean; // ๆธ ้คๅฝๅๆๆฌ | |
| imageUrl?: string; // ๆพ็คบ็ๅพ็ URL | |
| moodDelta?: number; // ๅฟๆ ๅๅ้ | |
| moodIndex?: number; // ๅฝๅๅฟๆ ๆๆฐ | |
| sendFirstTts?: boolean; // ๅ้็ฌฌไธไธช TTS ๆฎต | |
| appendText?: boolean; // ่ฟฝๅ ๅฐๅทฒๆๆๆฌ | |
| replyDone?: boolean; // ๅๅบ็ปๆๆ ่ฎฐ | |
| }; | |
| ``` | |
| --- | |
| ## 5. Provider ไปฃ็ๆต | |
| CLI ้่ฟ็ปไธๆฅๅฃๅไธๅ LLM Provider ๅ้่ฏทๆฑ็ๅฎๆด่ทฏๅพใ | |
| ### ๅ่ทฏ็ฑๆถๆ | |
| ``` | |
| CLI (Anthropic Messages API format) | |
| โ | |
| โ ้ๆฉ Provider | |
| โผ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ Provider ่ทฏ็ฑๅณ็ญ โ | |
| โ โ | |
| โ isFirstPartyAnthropicBaseUrl() โ | |
| โ + isClaudeAISubscriber() โ | |
| โ + !isUsing3PServices() โ | |
| โ โ โ โ | |
| โ ๆฏ/ โ ๅฆ โ | |
| โ โ โ โ | |
| โ โผ โผ โ | |
| โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ | |
| โ โ Anthropicโ โ Proxy Handler โ โ | |
| โ โ SDK ็ด่ฟ โ โ (server/proxy/ โ โ | |
| โ โ โ โ handler.ts) โ โ | |
| โ โPOST /v1/ โ โ โ โ | |
| โ โmessages โ โ apiFormat? โ โ | |
| โ โโโโโโโโโโโโ โ โ โ | |
| โ โ โโโ 'openai' โโโถ โ โ | |
| โ โ โ Anthropic โ โ โ | |
| โ โ โ OpenAI Chat โ โ | |
| โ โ โ Completions โ โ | |
| โ โ โ โ โ | |
| โ โ โโโ 'openai- โ โ | |
| โ โ โ responses' โ โ | |
| โ โ โ Anthropic โ โ โ | |
| โ โ โ OpenAI โ โ | |
| โ โ โ Responses API โ โ | |
| โ โ โโโโโโโโโโโโโโโโโโ โ | |
| โ โโโโโโโโโโโโโโโโโโโโ โ | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| ``` | |
| ### ่ฏทๆฑ/ๅๅบ่ฝฌๆขๆต็จ | |
| ``` | |
| Anthropic Messages API ่ฏทๆฑ | |
| { | |
| model: "claude-3-opus", | |
| messages: [{role: "user", content: "Hello"}], | |
| system: "You are helpful", | |
| max_tokens: 1024, | |
| stream: true | |
| } | |
| โ | |
| โผ | |
| anthropicToOpenaiChat.ts / anthropicToOpenaiResponses.ts | |
| โ | |
| โ ่ฝฌๆข้ป่พ: | |
| โ - system โ system message (prefix) | |
| โ - messages[] โ messages[] (role ๆ ๅฐ) | |
| โ - max_tokens โ max_tokens | |
| โ - stream โ stream | |
| โ - tools โ tools (ๆ ผๅผ้้ ) | |
| โ | |
| โผ | |
| OpenAI Chat/Responses API ่ฏทๆฑ | |
| { | |
| model: "gpt-4", | |
| messages: [ | |
| {role: "system", content: "You are helpful"}, | |
| {role: "user", content: "Hello"} | |
| ], | |
| max_tokens: 1024, | |
| stream: true | |
| } | |
| โ | |
| โ POST ๅฐไธๆธธ Provider URL | |
| โผ | |
| OpenAI ๆตๅผๅๅบ | |
| โ | |
| โผ | |
| openaiChatToAnthropic.ts / openaiResponsesToAnthropic.ts (ๆตๅผ) | |
| โ | |
| โ ่ฝฌๆข้ป่พ: | |
| โ - delta.content โ delta.text | |
| โ - tool_calls โ content_block / tool_use | |
| โ - finish_reason โ stop_reason | |
| โ | |
| โผ | |
| Anthropic ๆ ผๅผๆตๅผไบไปถๅ CLI | |
| ``` | |
| ### Provider ้ ็ฝฎ | |
| ้่ฟ ProviderService (`src/server/services/providerService.ts`) ็ฎก็๏ผ | |
| ```typescript | |
| type ProviderConfig = { | |
| id: string; | |
| name: string; | |
| apiFormat: 'openai' | 'openai-responses' | 'anthropic'; | |
| baseUrl: string; | |
| apiKey: string; | |
| models: string[]; | |
| }; | |
| ``` | |
| ๆฏๆ็ๅ ็ฝฎ Provider๏ผ้จๅ๏ผ๏ผ | |
| - OpenAI (GPT-4, GPT-4o) | |
| - Groq (Llama, Mixtral) | |
| - DeepSeek | |
| - ่ชๅฎไน OpenAI ๅ ผๅฎน API | |
| --- | |
| ## ๆฐๆฎๆตๆฑๆปๅพ | |
| ``` | |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| โ ็จๆท็่พๅ ฅๆฅๆบ โ | |
| โโโโโโโฌโโโโโโฌโโโโโโโฌโโโโโโโค | |
| โ้ฎ็ โ่ฏญ้ณ โ่ฟ็จ โ Bot โ | |
| โ โ โWebSocket โ | |
| โโโโฌโโโดโโโฌโโโดโโโฌโโโโดโโโฌโโโ | |
| โ โ โ โ | |
| โผ โ โ โ | |
| โโโโโโโโโโโโ โ โ โ | |
| โ message โโโ โ โ | |
| โ Queue โโโโโโโโโ โ | |
| โ Manager โโโโโโโโโโโโโโโโ | |
| โโโโโโโฌโโโโโ | |
| โ | |
| โผ | |
| โโโโโโโโโโโโ | |
| โ query() โ | |
| โ AI ๅผๆ โ | |
| โโโโฌโโโโโฌโโโ | |
| โ โ | |
| โโโโโโโโโโโโ โโโโโโโโโโโโ | |
| โผ โผ | |
| โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ | |
| โ Tool ๆง่ก โ โ LLM ๆๆฌๅๅบ โ | |
| โ (Bash/Read/ โ โโโโโโโโโฌโโโโโโโโโ | |
| โ Edit/... โ โ | |
| โโโโโโโโโโโโโโโโ โโโโโโโโโดโโโโโโโโโ | |
| โ ๅๅๅฐๆถ่ดน่ โ | |
| โโโโโโฌโโโโโฌโโโโโโโค | |
| โTUI โTTS โSSE โ | |
| โๆพ็คบ โๆญๆพ โๆจ้ โ | |
| โโโโโโดโโโโโดโโโโโโโ | |
| ``` | |
| --- | |
| ## ๅ่ๆไปถ่ทฏๅพ | |
| | ๆไปถ | ่ฏดๆ | | |
| |------|------| | |
| | `src/utils/messageQueueManager.ts` | ็ปไธๅฝไปค้ๅ | | |
| | `src/query.ts` | AI ๆฅ่ฏขๅ ฅๅฃ | | |
| | `src/QueryEngine.ts` | ๆฅ่ฏขๅผๆๅฎ็ฐ | | |
| | `src/friend/FriendService.ts` | Friend ่ฏญ้ณ/ๆๆฌๆๅก | | |
| | `src/friend/voice/vad-service.ts` | Silero VAD ๅฎ็ฐ | | |
| | `src/friend/tts.ts` | Edge TTS / Qwen TTS | | |
| | `src/friend/sse.ts` | SSE ๅนฟๆญไธๅฎขๆท็ซฏ็ฎก็ | | |
| | `src/friend/server.ts` | Friend HTTP ๆๅก (Bun.serve) | | |
| | `src/tools/FriendEmotionTool.ts` | VRM ่กจๆ ๅทฅๅ ท | | |
| | `src/friend/constants.ts` | ๆ ็ปชๅ่กจๅธธ้ | | |
| | `src/server/proxy/handler.ts` | Provider ไปฃ็ๅฅๆ | | |
| | `src/server/proxy/transform/` | ๅ่ฎฎ่ฝฌๆขๅจ | | |
| | `src/server/proxy/streaming/` | ๆตๅผๅๅบ่ฝฌๆข | | |
| | `src/server/services/providerService.ts` | Provider ้ ็ฝฎ็ฎก็ | | |
| | `src/bridge/bridgeMain.ts` | ่ฟ็จๆกฅๆฅไธปๅ ฅๅฃ | | |
| | `src/bridge/replBridgeTransport.ts` | WebSocket ไผ ่พๅฑ | | |
| | `src/bridge/replBridge.ts` | REPL ๆกฅๆฅ้ป่พ | | |