From a55759d92f0eb58cec1defa933809b5c025510e7 Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Sun, 27 Apr 2025 15:23:43 +0800 Subject: [PATCH] update ocr --- README.md | 2 +- renderer/public/iconfont.css | 14 +- renderer/public/iconfont.woff2 | Bin 5640 -> 5752 bytes renderer/public/index.html | 1 + renderer/src/App.vue | 6 +- .../src/components/main-panel/chat/index.vue | 2 +- .../main-panel/chat/message/toolcall.vue | 43 ++++-- service/src/hook/mcp-server.ts | 53 ++++++-- service/src/hook/ocr.ts | 2 + service/tabs.image_crawler.json | 122 +++++++++++++----- 10 files changed, 179 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index f5cbb98..f1e9052 100644 --- a/README.md +++ b/README.md @@ -105,4 +105,4 @@ B <--mcp--> m(MCP Server) ./build_service.ps1 ``` -and just press f5, いただきます +and just press f5, いただきます \ No newline at end of file diff --git a/renderer/public/iconfont.css b/renderer/public/iconfont.css index 38d4f03..27c1d78 100644 --- a/renderer/public/iconfont.css +++ b/renderer/public/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4870215 */ - src: url('iconfont.woff2?t=1745654620708') format('woff2'), - url('iconfont.woff?t=1745654620708') format('woff'), - url('iconfont.ttf?t=1745654620708') format('truetype'); + src: url('iconfont.woff2?t=1745735110196') format('woff2'), + url('iconfont.woff?t=1745735110196') format('woff'), + url('iconfont.ttf?t=1745735110196') format('truetype'); } .iconfont { @@ -13,6 +13,14 @@ -moz-osx-font-smoothing: grayscale; } +.icon-error:before { + content: "\e6c6"; +} + +.icon-warning:before { + content: "\e681"; +} + .icon-copy:before { content: "\e77c"; } diff --git a/renderer/public/iconfont.woff2 b/renderer/public/iconfont.woff2 index 6a0068afbdad0632e0319ad6d1bdc2389c173093..d9738d64192073104ed60cee5fa927c14084d2e0 100644 GIT binary patch literal 5752 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 literal 5640 zcmV+j7We6QPew8T0RR9102T-U3jhEB04L-C02R3a0RR9100000000000000000000 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 + diff --git a/renderer/src/App.vue b/renderer/src/App.vue index c8597c9..d6af53d 100644 --- a/renderer/src/App.vue +++ b/renderer/src/App.vue @@ -29,9 +29,9 @@ bridge.addCommandListener('hello', data => { function initDebug() { - // connectionArgs.commandString = 'node /Users/bytedance/projects/mcp/servers/src/puppeteer/dist/index.js'; + connectionArgs.commandString = 'node /Users/bytedance/projects/mcp/servers/src/puppeteer/dist/index.js'; // connectionArgs.commandString = 'node C:/Users/K/code/servers/src/puppeteer/dist/index.js'; - connectionArgs.commandString = 'uv run mcp run bing-picture.py'; + // connectionArgs.commandString = 'uv run mcp run bing-picture.py'; connectionArgs.cwd = '../servers'; connectionMethods.current = 'STDIO'; @@ -104,7 +104,7 @@ onMounted(() => { } .message-text img { - max-width: 98%; + max-width: 300px; } diff --git a/renderer/src/components/main-panel/chat/index.vue b/renderer/src/components/main-panel/chat/index.vue index 81e6fc1..cef30a0 100644 --- a/renderer/src/components/main-panel/chat/index.vue +++ b/renderer/src/components/main-panel/chat/index.vue @@ -331,7 +331,7 @@ onUnmounted(() => { .message-avatar { margin-right: 12px; - margin-top: 7px; + margin-top: 1px; } .message-content { diff --git a/renderer/src/components/main-panel/chat/message/toolcall.vue b/renderer/src/components/main-panel/chat/message/toolcall.vue index 81806ac..8be6b99 100644 --- a/renderer/src/components/main-panel/chat/message/toolcall.vue +++ b/renderer/src/components/main-panel/chat/message/toolcall.vue @@ -6,7 +6,7 @@ -
+
@@ -37,9 +37,9 @@
- + + {{ isValid ? '响应': '错误' }} - @@ -76,7 +76,7 @@
-
+
{ } }); +const currentMessageLevel = computed(() => { + if (!isValid.value) { + return 'error'; + } + if (props.message.extraInfo.state != MessageState.Success) { + return 'warning'; + } + return 'info'; +}) + const collectErrors = computed(() => { const errorMessages = []; try { @@ -186,14 +196,31 @@ const collectErrors = computed(() => { padding: 3px 10px; } -.message-text.tool_calls.fail { +.message-text.tool_calls.warning { + border: 1px solid var(--el-color-warning); +} + +.message-text.tool_calls.warning .tool-name { + color: var(--el-color-warning); +} + +.message-text.tool_calls.warning .tool-result { + background-color: rgba(230, 162, 60, 0.5); +} + +.message-text.tool_calls.error { border: 1px solid var(--el-color-error); } -.message-text.tool_calls.fail .tool-name { +.message-text.tool_calls.error .tool-name { color: var(--el-color-error); } +.message-text.tool_calls.error .tool-result { + background-color: rgba(245, 108, 108, 0.5); +} + + .message-text .el-collapse-item__header { display: flex; align-items: center; @@ -265,10 +292,6 @@ const collectErrors = computed(() => { border-radius: 4px; } -.tool-result.error { - background-color: rgba(245, 108, 108, 0.5); -} - .tool-text { white-space: pre-wrap; line-height: 1.6; diff --git a/service/src/hook/mcp-server.ts b/service/src/hook/mcp-server.ts index fa656a5..b79b0ca 100644 --- a/service/src/hook/mcp-server.ts +++ b/service/src/hook/mcp-server.ts @@ -3,6 +3,7 @@ import * as path from 'path'; import * as fs from 'fs'; import { v4 as uuidv4 } from 'uuid'; import { diskStorage } from './db'; +import { PostMessageble } from './adapter'; export function saveBase64ImageData( base64String: string, @@ -51,26 +52,50 @@ interface ToolCallResponse { toolResult?: any; } -export function postProcessToolcallResponse(response: ToolCallResponse): ToolCallResponse { +async function handleImage( + content: ToolCallContent, + webview: PostMessageble +) { + if (content.data && content.mimeType) { + const fileName = saveBase64ImageData(content.data, content.mimeType); + content.data = fileName; + content._meta = { + ocr: true, + status: 'pending' + }; + + // 加入工作线程 + + } +} + + +/** + * @description 对 mcp server 返回的结果进行预处理 + * 对于特殊结果构造工作线程解析成文本或者其他格式的数据(比如 image url) + * 0.x.x 受限于技术,暂时将所有结果转化成文本 + * @param response + * @returns + */ +export function postProcessMcpToolcallResponse( + response: ToolCallResponse, + webview: PostMessageble +): ToolCallResponse { if (response.isError) { // 如果是错误响应,将其转换为错误信息 return response; } // 将 content 中的图像 base64 提取出来,并保存到本地 - if (response.content) { - response.content.forEach((content) => { - if (content.type === 'image') { - // TODO: check here - if (content.data && content.mimeType) { - const fileName = saveBase64ImageData(content.data, content.mimeType); - content.data = fileName; - content._meta = { - ocr: true - }; - } - } - }) + for (const content of response.content || []) { + switch (content.type) { + case 'image': + handleImage(content, webview); + break; + + default: + break; + } } return response; diff --git a/service/src/hook/ocr.ts b/service/src/hook/ocr.ts index d191881..4d27ab9 100644 --- a/service/src/hook/ocr.ts +++ b/service/src/hook/ocr.ts @@ -1,5 +1,7 @@ import Tesseract from 'tesseract.js'; + + export async function tesseractOCR( imagePath: string, logger: (message: Tesseract.LoggerMessage) => void, diff --git a/service/tabs.image_crawler.json b/service/tabs.image_crawler.json index 980b61f..7959821 100644 --- a/service/tabs.image_crawler.json +++ b/service/tabs.image_crawler.json @@ -17,7 +17,10 @@ "componentIndex": 2, "storage": { "currentToolName": "image_crawler", - "formData": {} + "formData": { + "key_word": "", + "image_num": 0 + } } }, { @@ -29,11 +32,11 @@ "messages": [ { "role": "user", - "content": "帮我找几张 明日方舟 m3 的图片", + "content": "帮我找几张 明日方舟 m3 的图片,渲染出来", "extraInfo": { - "created": 1745687338279, + "created": 1745730609368, "state": "success", - "serverName": "deepseek" + "serverName": "Huoshan DeepSeek" } }, { @@ -41,7 +44,7 @@ "content": "", "tool_calls": [ { - "id": "call_0_ccaf0a55-06d5-4db0-82ac-62ca44cfa812", + "id": "call_660r5ehyhh86cjtqnako0mnt", "index": 0, "type": "function", "function": { @@ -51,58 +54,109 @@ } ], "extraInfo": { - "created": 1745687343346, + "created": 1745730610263, "state": "success", - "serverName": "deepseek" + "serverName": "Huoshan DeepSeek" } }, { "role": "tool", - "tool_call_id": "call_0_ccaf0a55-06d5-4db0-82ac-62ca44cfa812", + "tool_call_id": "call_660r5ehyhh86cjtqnako0mnt", "content": [ { "type": "text", - "text": "[ImageResult(url='https://c-img.18183.com/images/2023/06/14/beedbfb9dc8312034e008d31cef057aa.png@!te5', title='', source='bing'), ImageResult(url='https://c-img.18183.com/images/2023/06/14/dbd58facae1dc77dcc15f3099b312e19.png@!te5', title='', source='bing'), ImageResult(url='https://media.9game.cn/gamebase/2021/6/2/227331281.jpg', title='', source='bing'), ImageResult(url='https://media.9game.cn/gamebase/ieu-gdc-pre-process/images/20231208/13/29/b0765f37ad86ebe8d09a2274ab590fa0.jpg', title='', source='bing'), ImageResult(url='https://i0.hdslb.com/bfs/article/847d632ae30d6ef39498e17fa390d6bb064bf6fc.jpg', title='', source='bing')]" + "text": "[ImageResult(url='https://gd-hbimg.huaban.com/0c97d53a94f333fad66ca70f32601d8c34c2d4db8f53e0-netl2f_fw658', title='', source='bing'), ImageResult(url='https://ts1.tc.mm.bing.net/th/id/R-C.db1a4364345d8b082d4de48cae32ae05?rik=rhE9iKxzhvwzDg', title='', source='bing'), ImageResult(url='https://gd-hbimg.huaban.com/a4b669d3e68da3ee91a12afe7a0bd689038bdc262aece-yasxcI_fw658', title='', source='bing'), ImageResult(url='https://ts1.tc.mm.bing.net/th/id/R-C.d9dc5fcd4b628e805d4b6a0edb0f9a48?rik=RiUbfVRpViaT%2fw', title='', source='bing'), ImageResult(url='https://gd-hbimg.huaban.com/205d12dbf22aec83ff34bd533616575f0939b561136c6-jwF7XH_fw658', title='', source='bing')]" } ], "extraInfo": { - "created": 1745687344413, + "created": 1745730610855, "state": "success", - "serverName": "deepseek", - "usage": { - "prompt_tokens": 169, - "completion_tokens": 32, - "total_tokens": 201, - "prompt_tokens_details": { - "cached_tokens": 128 - }, - "prompt_cache_hit_tokens": 128, - "prompt_cache_miss_tokens": 41 - } + "serverName": "Huoshan DeepSeek" } }, { "role": "assistant", - "content": "我找到了几张关于“明日方舟 M3”的图片,以下是它们的链接:\n\n1. [图片链接](https://c-img.18183.com/images/2023/06/14/beedbfb9dc8312034e008d31cef057aa.png@!te5)\n2. [图片链接](https://c-img.18183.com/images/2023/06/14/dbd58facae1dc77dcc15f3099b312e19.png@!te5)\n3. [图片链接](https://media.9game.cn/gamebase/2021/6/2/227331281.jpg)\n4. [图片链接](https://media.9game.cn/gamebase/ieu-gdc-pre-process/images/20231208/13/29/b0765f37ad86ebe8d09a2274ab590fa0.jpg)\n5. [图片链接](https://i0.hdslb.com/bfs/article/847d632ae30d6ef39498e17fa390d6bb064bf6fc.jpg)\n\n你可以点击链接查看或下载这些图片。如果需要更多图片或其他帮助,请告诉我!", + "content": "以下是根据关键词“明日方舟 m3”找到的图片:\n\n1. ![Image 1](https://gd-hbimg.huaban.com/0c97d53a94f333fad66ca70f32601d8c34c2d4db8f53e0-netl2f_fw658)\n2. ![Image 2](https://ts1.tc.mm.bing.net/th/id/R-C.db1a4364345d8b082d4de48cae32ae05?rik=rhE9iKxzhvwzDg)\n3. ![Image 3](https://gd-hbimg.huaban.com/a4b669d3e68da3ee91a12afe7a0bd689038bdc262aece-yasxcI_fw658)\n4. ![Image 4](https://ts1.tc.mm.bing.net/th/id/R-C.d9dc5fcd4b628e805d4b6a0edb0f9a48?rik=RiUbfVRpViaT%2fw)\n5. ![Image 5](https://gd-hbimg.huaban.com/205d12dbf22aec83ff34bd533616575f0939b561136c6-jwF7XH_fw658)\n\n你可以点击链接查看这些图片。", "extraInfo": { - "created": 1745687357235, + "created": 1745730615968, "state": "success", - "serverName": "deepseek", - "usage": { - "prompt_tokens": 454, - "completion_tokens": 250, - "total_tokens": 704, - "prompt_tokens_details": { - "cached_tokens": 128 - }, - "prompt_cache_hit_tokens": 128, - "prompt_cache_miss_tokens": 326 + "serverName": "Huoshan DeepSeek" + } + }, + { + "role": "user", + "content": "图源是哪里", + "extraInfo": { + "created": 1745730806510, + "state": "success", + "serverName": "Huoshan DeepSeek" + } + }, + { + "role": "assistant", + "content": "这些图片的来源是Bing搜索引擎和Huaban网站。具体来源如下:\n\n1. **Bing**:\n - [Image 2](https://ts1.tc.mm.bing.net/th/id/R-C.db1a4364345d8b082d4de48cae32ae05?rik=rhE9iKxzhvwzDg)\n - [Image 4](https://ts1.tc.mm.bing.net/th/id/R-C.d9dc5fcd4b628e805d4b6a0edb0f9a48?rik=RiUbfVRpViaT%2fw)\n\n2. **Huaban**:\n - [Image 1](https://gd-hbimg.huaban.com/0c97d53a94f333fad66ca70f32601d8c34c2d4db8f53e0-netl2f_fw658)\n - [Image 3](https://gd-hbimg.huaban.com/a4b669d3e68da3ee91a12afe7a0bd689038bdc262aece-yasxcI_fw658)\n - [Image 5](https://gd-hbimg.huaban.com/205d12dbf22aec83ff34bd533616575f0939b561136c6-jwF7XH_fw658)\n\n你可以通过点击链接查看图片的详细信息。", + "extraInfo": { + "created": 1745730812395, + "state": "success", + "serverName": "Huoshan DeepSeek" + } + }, + { + "role": "user", + "content": "帮我找几张 明日方舟 白面鸮 的图片,渲染出来", + "extraInfo": { + "created": 1745730909927, + "state": "success", + "serverName": "Huoshan DeepSeek" + } + }, + { + "role": "assistant", + "content": "", + "tool_calls": [ + { + "id": "call_ho74cop478w5gbfc0jnuo12f", + "index": 0, + "type": "function", + "function": { + "name": "image_crawler", + "arguments": "{\"key_word\":\"明日方舟 白面鸮\",\"image_num\":5}" + } } + ], + "extraInfo": { + "created": 1745730910906, + "state": "success", + "serverName": "Huoshan DeepSeek" + } + }, + { + "role": "tool", + "tool_call_id": "call_ho74cop478w5gbfc0jnuo12f", + "content": [ + { + "type": "text", + "text": "[ImageResult(url='https://c-ssl.duitang.com/uploads/item/201910/22/20191022190241_dixsc.thumb.1000_0.jpg', title='', source='bing'), ImageResult(url='https://img-baofun.zhhainiao.com/pcwallpaper_ugc_mobile/live/e06866505212ddcce0dabf9afebce225.mp4.jpg', title='', source='bing'), ImageResult(url='https://c-ssl.dtstatic.com/uploads/item/202007/15/20200715183732_iomsj.thumb.1000_0.jpg', title='', source='bing'), ImageResult(url='https://img-baofun.zhhainiao.com/pcwallpaper_ugc_mobile/live/710b67dfa125248f816d63617f551452_preview.jpg', title='', source='bing'), ImageResult(url='https://n.sinaimg.cn/sinacn10122/670/w400h270/20200104/db75-imrkkfx7540303.jpg', title='', source='bing')]" + } + ], + "extraInfo": { + "created": 1745730911376, + "state": "success", + "serverName": "Huoshan DeepSeek" + } + }, + { + "role": "assistant", + "content": "以下是根据关键词“明日方舟 白面鸮”找到的图片:\n\n1. ![Image 1](https://c-ssl.duitang.com/uploads/item/201910/22/20191022190241_dixsc.thumb.1000_0.jpg)\n2. ![Image 2](https://img-baofun.zhhainiao.com/pcwallpaper_ugc_mobile/live/e06866505212ddcce0dabf9afebce225.mp4.jpg)\n3. ![Image 3](https://c-ssl.dtstatic.com/uploads/item/202007/15/20200715183732_iomsj.thumb.1000_0.jpg)\n4. ![Image 4](https://img-baofun.zhhainiao.com/pcwallpaper_ugc_mobile/live/710b67dfa125248f816d63617f551452_preview.jpg)\n5. ![Image 5](https://n.sinaimg.cn/sinacn10122/670/w400h270/20200104/db75-imrkkfx7540303.jpg)\n\n你可以点击链接查看这些图片。", + "extraInfo": { + "created": 1745730916072, + "state": "success", + "serverName": "Huoshan DeepSeek" } } ], "settings": { - "modelIndex": 0, + "modelIndex": 8, "enableTools": [ { "name": "image_crawler",