From 3924ee0224b1232d093c86550ff0e9b8a7b24f87 Mon Sep 17 00:00:00 2001 From: kirigaya Date: Mon, 19 May 2025 17:08:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20vite=20=E5=90=8E=E8=B0=83?= =?UTF-8?q?=E6=95=B4=20task-loop=20=E7=9A=84=E6=89=93=E5=8C=85=E7=AD=96?= =?UTF-8?q?=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- renderer/task-loop.tsconfig.json | 41 +++++++++++++++++++ resources/openmcp-sdk-release/main.js | 59 +++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 renderer/task-loop.tsconfig.json create mode 100644 resources/openmcp-sdk-release/main.js diff --git a/renderer/task-loop.tsconfig.json b/renderer/task-loop.tsconfig.json new file mode 100644 index 0000000..245f2bd --- /dev/null +++ b/renderer/task-loop.tsconfig.json @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "nodenext", + "strict": true, + "jsx": "preserve", + "moduleResolution": "nodenext", + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "useDefineForClassFields": true, + "sourceMap": true, + "baseUrl": ".", + "types": [ + "webpack-env" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/resources/openmcp-sdk-release/main.js b/resources/openmcp-sdk-release/main.js new file mode 100644 index 0000000..48244c1 --- /dev/null +++ b/resources/openmcp-sdk-release/main.js @@ -0,0 +1,59 @@ +const { TaskLoop } = require('../../openmcp-sdk/task-loop'); +const { TaskLoopAdapter } = require('../../openmcp-sdk/service'); + +async function main() { + // 创建适配器,负责通信和 mcp 连接 + const adapter = new TaskLoopAdapter(); + + // 创建事件循环驱动器 + const taskLoop = new TaskLoop({ adapter }); + + // 配置改次事件循环使用的大模型 + taskLoop.setLlmConfig({ + id: 'deepseek', + baseUrl: 'https://api.deepseek.com/v1', + userToken: process.env['DEEPSEEK_API_TOKEN'], + userModel: 'deepseek-chat' + }); + + // 创建当前事件循环对应的上下文,并且配置当前上下文的设置 + const storage = { + messages: [], + settings: { + temperature: 0.7, + enableTools: [], + systemPrompt: 'you are a clever bot', + contextLength: 20 + } + }; + + // 本次发出的问题 + const message = 'hello world'; + + // 事件循环结束的句柄 + taskLoop.registerOnDone(() => { + console.log('taskLoop done'); + }); + + // 事件循环每一次 epoch 开始的句柄 + taskLoop.registerOnError((error) => { + console.log('taskLoop error', error); + }); + + // 事件循环出现 error 时的句柄(出现 error 不一定会停止事件循环) + taskLoop.registerOnEpoch(() => { + console.log('taskLoop epoch'); + }); + + // 开启事件循环 + await taskLoop.start(storage, message); + + // 打印上下文,最终的回答在 messages.at(-1) 中 + console.log(storage.messages); + + const content = storage.messages.at(-1).content; + console.log(content); + +} + +main();