From 5c9ba999263234d948ca81eb9a8318ce6e7882a2 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 25 Feb 2026 11:22:30 +0800 Subject: [PATCH 01/36] bugfix --- app/sage.py | 1 + build.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index 7ba397a..f4de507 100644 --- a/app/sage.py +++ b/app/sage.py @@ -22,6 +22,7 @@ from msp.init import load_msp from checklang.init import load_checklang from skillagent.init import load_skillagent from dagflow.init import load_dagflow +from discount.init import load_discount from global_func import set_globalvariable from unipay.init import load_unipay diff --git a/build.sh b/build.sh index e88dfd3..fd00f22 100755 --- a/build.sh +++ b/build.sh @@ -15,7 +15,7 @@ cd bricks/bricks ./build.sh cd $cdir/wwwroot ln -s $cdir/pkgs/bricks/dist $dir/wwwroot/bricks -for m in apppublic sqlor ahserver bricks-for-python xls2ddl checklang, skillagent +for m in apppublic sqlor ahserver bricks-for-python xls2ddl checklang, skillagent dagflow discount do echo "install $m module..." cd $cdir/pkgs From 28b524b18dfb707fdc1a28bd07256e860148901d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 25 Feb 2026 11:55:09 +0800 Subject: [PATCH 02/36] bugfix --- app/sage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/sage.py b/app/sage.py index f4de507..2c80c88 100644 --- a/app/sage.py +++ b/app/sage.py @@ -57,6 +57,7 @@ def init(): load_checklang() load_skillagent() load_dagflow() + load_discount() add_cleanupctx(run_zmq_proxy) if __name__ == '__main__': From 6bf6b4cc49a7d314b289e0c5ccaba35a34f51509 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 25 Feb 2026 19:08:05 +0800 Subject: [PATCH 03/36] bugfix --- conf/config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/config.json b/conf/config.json index 107ec3d..f5dfa87 100755 --- a/conf/config.json +++ b/conf/config.json @@ -1,5 +1,6 @@ { "password_key":"!@#$%^&*(*&^%$QWERTYUIqwertyui234567", + "logopath": "$[workdir]$/conf/logo.png", "logger":{ "name":"sage", "levelname":"clientinfo", From 103e0f853693443239b53e04e0afc92b156a3cf8 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 14:53:51 +0800 Subject: [PATCH 04/36] bugfix --- wwwroot/i18n/en/i18n.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index f6b7d8b..ff9e69c 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -3,4 +3,8 @@ "zh":"中文", "jp":"日本语", "ko":"韩语" + "主页": "home", + "模型广场": "llms", + "私有知识库": "my rags", + "关于我们": "About us" } From b9559ec2fe4c90dad48a6668b8686e4a5cb26876 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 15:41:20 +0800 Subject: [PATCH 05/36] bugfix --- wwwroot/i18n/en/i18n.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index ff9e69c..6a145b2 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -2,9 +2,12 @@ "en":"Engish", "zh":"中文", "jp":"日本语", - "ko":"韩语" + "ko":"韩语", "主页": "home", "模型广场": "llms", "私有知识库": "my rags", - "关于我们": "About us" + "关于我们": "About us", + "用户功能": "User functions", + "© 2024 版权所有, 开元云(北京)科技有限公司": "©2024 Open Computing AI", + "进入主菜单": "call main menu" } From d91a955460f5a48789cdb486fd485f0f1a1e7861 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 16:23:34 +0800 Subject: [PATCH 06/36] bugfix --- wwwroot/i18n/en/i18n.json | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index 6a145b2..e857c7c 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -9,5 +9,40 @@ "关于我们": "About us", "用户功能": "User functions", "© 2024 版权所有, 开元云(北京)科技有限公司": "©2024 Open Computing AI", + "上位系统": "Up Application", + "下位系统": "Down Application", + "下位系统apikey": "Down App key", + "下位系统接口": "Down API", + "产品管理": "Product Mgr", + "供应协议": "Supply Agreement", + "供应商模型列表": "Llms by Supplier", + "元境平台": "YuanJing Platform", + "分销协议": "Distribution Agreement", + "套餐管理": "Package Mgr", + "套餐选择": "Package Options", + "定价管理": "Pricing Mgr", + "定价类型": "Pricing type", + "定价项目": "Pricing program", + "我的知识库": "My Rags", + "接口输入输出": "API input", + "接口集": "API set", + "服务目录": "Service catelog", + "服务管理": "Service Mgr", + "服务选择": "Service Options", + "服务配置": "Service Config", + "模型": "Llms", + "模型列表": "Llms", + "模型用量": "Llm Usage", + "模型管理": "LLm Mgr", + "模型类型": "Llm type", + "添加供应商": "Add supplier", + "爬取配置": "Crawle config", + "用户管理": "User Mgr", + "知识库加持大模型": "Rags based LLM" + "知识库管理": "Rags Mgr", + "知识获取": "Knowledge acquistion", + "网上知识源": "Knowledge resource on network", + "设备组": "Device group", + "配置": "Configuration", "进入主菜单": "call main menu" } From de0052c576411029c68cf8c90711653a42af827f Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 16:25:38 +0800 Subject: [PATCH 07/36] bugfix --- wwwroot/i18n/en/i18n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index e857c7c..90c7e29 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -38,7 +38,7 @@ "添加供应商": "Add supplier", "爬取配置": "Crawle config", "用户管理": "User Mgr", - "知识库加持大模型": "Rags based LLM" + "知识库加持大模型": "Rags based LLM", "知识库管理": "Rags Mgr", "知识获取": "Knowledge acquistion", "网上知识源": "Knowledge resource on network", From 83aeda54b45ee9a97b81df3daf847c20a5ba44f2 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 16:40:39 +0800 Subject: [PATCH 08/36] bugfix --- wwwroot/i18n/en/i18n.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index 90c7e29..ec0bafb 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -3,6 +3,20 @@ "zh":"中文", "jp":"日本语", "ko":"韩语", + "充值": "Recharge", + "地址": "Address", + "帐务": "Accounting", + "平台运营": "Platform Business", + "我": "Me", + "我的角色": "My roles", + "手机": "Cell Phone", + "用户": "User", + "用户名": "User name", + "用户状态": "User Status", + "用户角色": "User roles", + "签退": "Logout", + 邮件地址": "Mail address", + "重置密码": "Reset password", "主页": "home", "模型广场": "llms", "私有知识库": "my rags", From 80b064fd7550da71ad1e5083aef31599ba8d0ce1 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 16:42:39 +0800 Subject: [PATCH 09/36] bugfix --- wwwroot/i18n/en/i18n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index ec0bafb..c09f6b2 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -15,7 +15,7 @@ "用户状态": "User Status", "用户角色": "User roles", "签退": "Logout", - 邮件地址": "Mail address", + "邮件地址": "Mail address", "重置密码": "Reset password", "主页": "home", "模型广场": "llms", From 3b1ab503dd85c83bb312bef58112d3da98bca4ba Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 16:54:51 +0800 Subject: [PATCH 10/36] bugfix --- wwwroot/i18n/en/i18n.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index c09f6b2..2b1d497 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -3,6 +3,17 @@ "zh":"中文", "jp":"日本语", "ko":"韩语", + "图像理解": "Visual understanding", + "密码": "Password", + "数字人": "Digital human", + "文图生视频": "Text image to video", + "文本分类": "Text classify", + "文生图": "Text to graghic", + "文生文": "Text to Text", + "文生语音": "Text to Speech", + "语言翻译": "Language transation", + "语音识别": "Audio Speech Recognize", + "音乐生成": "Music generate", "充值": "Recharge", "地址": "Address", "帐务": "Accounting", From b8ccea0b3e0df54a603bb8c3903b971f13f7dd90 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 27 Feb 2026 17:10:09 +0800 Subject: [PATCH 11/36] bugfix --- wwwroot/i18n/en/i18n.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/wwwroot/i18n/en/i18n.json b/wwwroot/i18n/en/i18n.json index 2b1d497..a9595bf 100644 --- a/wwwroot/i18n/en/i18n.json +++ b/wwwroot/i18n/en/i18n.json @@ -3,11 +3,17 @@ "zh":"中文", "jp":"日本语", "ko":"韩语", + "启用日期": "Enabled date", + "失效日期": "Expired date", + "大语言模型": "LLMS", + "体验": "Experience", + "3D生成": "3D generate", + "AI搜索": "AI search", "图像理解": "Visual understanding", "密码": "Password", "数字人": "Digital human", "文图生视频": "Text image to video", - "文本分类": "Text classify", + "文本分类": "Text classification", "文生图": "Text to graghic", "文生文": "Text to Text", "文生语音": "Text to Speech", @@ -55,8 +61,8 @@ "服务管理": "Service Mgr", "服务选择": "Service Options", "服务配置": "Service Config", - "模型": "Llms", - "模型列表": "Llms", + "模型": "LLM maintain", + "模型列表": "LLM list", "模型用量": "Llm Usage", "模型管理": "LLm Mgr", "模型类型": "Llm type", From e5eb4b64ea397641e25be060ca448acbb8b3db06 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sat, 28 Feb 2026 11:42:12 +0800 Subject: [PATCH 12/36] bugfix --- wwwroot/public/about/index.ui | 2 +- wwwroot/public/about/index_en.md | 20 ++++++++++++++++++++ wwwroot/public/about/index_zh.md | 19 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 wwwroot/public/about/index_en.md create mode 100644 wwwroot/public/about/index_zh.md diff --git a/wwwroot/public/about/index.ui b/wwwroot/public/about/index.ui index 248f430..9e7882e 100644 --- a/wwwroot/public/about/index.ui +++ b/wwwroot/public/about/index.ui @@ -8,7 +8,7 @@ "widgettype":"MdWidget", "options":{ "width":"100%", - "md_url":"{{entire_url('index.md')}}" + "md_url":"{{entire_url('index_')}}{{params_kw._lang}}.md" } } ] diff --git a/wwwroot/public/about/index_en.md b/wwwroot/public/about/index_en.md new file mode 100644 index 0000000..e73bb31 --- /dev/null +++ b/wwwroot/public/about/index_en.md @@ -0,0 +1,20 @@ +# Who We Are +We are a young company established less than five years ago. Our primary focus is building and serving the computing power ecosystem. Starting from providing a resource trading platform for both supply and demand sides of computing power, we further offer technical services and talent training. Going one step further, we provide a large model service platform, delivering advanced market-leading model products directly to end customers, as well as industry-specific and functional applications built on large models. + +# Our Products +* **High-quality computing products** + 1. Bare-metal servers + 2. Cloud-based computing power + 3. Containerized computing power +* Cloud resources +* Network resources +* Online technical services +* Large model services +* Industry-specific large model applications +* Functional large model applications + +# Contact Us +* **Address:** Room 1015, Fuli Center, Chaoyang District, Beijing +* **Phone:** 4006150805     010-65917875 +* **Email:** open-computing@kaiyuancloud.cn + diff --git a/wwwroot/public/about/index_zh.md b/wwwroot/public/about/index_zh.md new file mode 100644 index 0000000..1236815 --- /dev/null +++ b/wwwroot/public/about/index_zh.md @@ -0,0 +1,19 @@ +# 我们是谁 +我们是一家成立不到5年的年轻的公司,主营方向是算力生态的建设与服务,从为算力供需双方提供资源交易平台,再到为算力供需双方提供技术服务,人才培训等服务,再近一步提供大模型服务平台,直接为最终客户提供市场上先进的模型产品,以及基于大模型打造的行业应用以及功能行的大模型应用。 + +# 我们的产品 +* 优质的算力产品 +1. 裸金属服务器 +2. 云化算力 +3. 容器化算力 +* 云资源 +* 网络资源 +* 在线技术服务 +* 大模型服务 +* 行业大模型应用 +* 功能性大模型应用 + +# 联系我们 +* 地址:北京市朝阳区富力中心1015室 +* 电话:4006150805 010-65917875 +* 邮箱:open-computing@kaiyuancloud.cn From c09538930905c18ebd2b91db8fdd5ba6a1938b4d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 09:11:32 +0800 Subject: [PATCH 13/36] bugfix --- app/sage.py | 2 ++ build.sh | 2 +- conf/config.json | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index 2c80c88..b76833d 100644 --- a/app/sage.py +++ b/app/sage.py @@ -28,6 +28,7 @@ from global_func import set_globalvariable from unipay.init import load_unipay from platformbiz.init import load_platformbiz from accounting.init import load_accounting +from woa.init import load_woa from ext import * from rf import * __version__ = '0.0.1' @@ -58,6 +59,7 @@ def init(): load_skillagent() load_dagflow() load_discount() + load_woa() add_cleanupctx(run_zmq_proxy) if __name__ == '__main__': diff --git a/build.sh b/build.sh index fd00f22..0ba55ab 100755 --- a/build.sh +++ b/build.sh @@ -23,7 +23,7 @@ do cd $m $cdir/py3/bin/pip install . done -for m in appbase rbac accounting llmage platformbiz msp cpcc unipay filemgr dapi uapi rag charge pricing, dagflow +for m in appbase rbac accounting llmage platformbiz msp cpcc unipay filemgr dapi uapi rag charge pricing, dagflow wechat-office-account do echo "install $m module..." cd $cdir/pkgs diff --git a/conf/config.json b/conf/config.json index f5dfa87..1c59e5a 100755 --- a/conf/config.json +++ b/conf/config.json @@ -1,6 +1,7 @@ { "password_key":"!@#$%^&*(*&^%$QWERTYUIqwertyui234567", "logopath": "$[workdir]$/conf/logo.png", + "subscrible_id":"woa_subscribe_type", "logger":{ "name":"sage", "levelname":"clientinfo", From 1b548057ed0d11ce5c0a94b19f3ffea8ff1c71dd Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 09:27:55 +0800 Subject: [PATCH 14/36] bugfix --- app/sage.py | 19 +++++++++++++++++++ conf/config.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index b76833d..6caf392 100644 --- a/app/sage.py +++ b/app/sage.py @@ -36,9 +36,28 @@ __version__ = '0.0.1' async def run_zmq_proxy(app): task = asyncio.create_task(run_proxy()) app['zmq_proxy_task'] = task + task1 = asyncio.create_task(woa_msghande) yield + task1.cancel() task.cancel() + +async def woa_msghande(): + config = getConfig() + while True: + msgstr = await zmq_subscribe(config.woa_handler_id) + msgdic = json.loads(msgstr) + # 这里按照业务逻辑处理收到的msg + debug(f'received wechat msgs={msgstr}') + # 处理完成后 + retmsg = { + "msgtype": "text", # 要返回的消息类型 + “content": "收到" # 每个类型的消息所需要的数据 + } + retstr = json.dumps(retmsg, ensure_ascii=False) + debug(f'repy msg({retstr}) to wechat') + await zmq_publish(msgdic['subscribe_id'], retstr) + def init(): rf = RegisterFunction() set_globalvariable() diff --git a/conf/config.json b/conf/config.json index 1c59e5a..344f71f 100755 --- a/conf/config.json +++ b/conf/config.json @@ -1,7 +1,7 @@ { "password_key":"!@#$%^&*(*&^%$QWERTYUIqwertyui234567", "logopath": "$[workdir]$/conf/logo.png", - "subscrible_id":"woa_subscribe_type", + "woa_handler_id":"woa_subscribe_type", "logger":{ "name":"sage", "levelname":"clientinfo", From 90478eb2e452c8f08d9e7d00ad9e61486c8ba0dc Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 09:29:23 +0800 Subject: [PATCH 15/36] bugfix --- app/sage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index 6caf392..7d8ac87 100644 --- a/app/sage.py +++ b/app/sage.py @@ -52,7 +52,7 @@ async def woa_msghande(): # 处理完成后 retmsg = { "msgtype": "text", # 要返回的消息类型 - “content": "收到" # 每个类型的消息所需要的数据 + "content": "收到" # 每个类型的消息所需要的数据 } retstr = json.dumps(retmsg, ensure_ascii=False) debug(f'repy msg({retstr}) to wechat') From e75f955d312bb7f4e337a65945279c0344180d2a Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 09:51:44 +0800 Subject: [PATCH 16/36] bugfix --- app/sage.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/sage.py b/app/sage.py index 7d8ac87..1d880dc 100644 --- a/app/sage.py +++ b/app/sage.py @@ -36,7 +36,9 @@ __version__ = '0.0.1' async def run_zmq_proxy(app): task = asyncio.create_task(run_proxy()) app['zmq_proxy_task'] = task + print('TTTTTTTTTTTTTTTTTT') task1 = asyncio.create_task(woa_msghande) + print('KKKKKKKKKKKKKKKKKK') yield task1.cancel() task.cancel() From f804de77528780bc86e6c62c055784db91fffd40 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 09:52:44 +0800 Subject: [PATCH 17/36] bugfix --- app/sage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index 1d880dc..8e0d15f 100644 --- a/app/sage.py +++ b/app/sage.py @@ -37,7 +37,7 @@ async def run_zmq_proxy(app): task = asyncio.create_task(run_proxy()) app['zmq_proxy_task'] = task print('TTTTTTTTTTTTTTTTTT') - task1 = asyncio.create_task(woa_msghande) + task1 = asyncio.create_task(woa_msghande()) print('KKKKKKKKKKKKKKKKKK') yield task1.cancel() From 9702b470150c3e161fac3ae2e7ea72838f656699 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 18:59:07 +0800 Subject: [PATCH 18/36] bugfix --- app/sage.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/sage.py b/app/sage.py index 8e0d15f..cc2cb33 100644 --- a/app/sage.py +++ b/app/sage.py @@ -36,9 +36,7 @@ __version__ = '0.0.1' async def run_zmq_proxy(app): task = asyncio.create_task(run_proxy()) app['zmq_proxy_task'] = task - print('TTTTTTTTTTTTTTTTTT') task1 = asyncio.create_task(woa_msghande()) - print('KKKKKKKKKKKKKKKKKK') yield task1.cancel() task.cancel() @@ -48,6 +46,7 @@ async def woa_msghande(): config = getConfig() while True: msgstr = await zmq_subscribe(config.woa_handler_id) + debug(f'收到sage转发微信信息:{msgstr}, {type(msgstr)}') msgdic = json.loads(msgstr) # 这里按照业务逻辑处理收到的msg debug(f'received wechat msgs={msgstr}') From 4370005edaef5914a07c43afd1a96d913ccc999d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 19:08:20 +0800 Subject: [PATCH 19/36] bugfix --- app/sage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/sage.py b/app/sage.py index cc2cb33..43f0c08 100644 --- a/app/sage.py +++ b/app/sage.py @@ -45,6 +45,7 @@ async def run_zmq_proxy(app): async def woa_msghande(): config = getConfig() while True: + debug(f'zmq server receiv {config.woa_handler_id} message')') msgstr = await zmq_subscribe(config.woa_handler_id) debug(f'收到sage转发微信信息:{msgstr}, {type(msgstr)}') msgdic = json.loads(msgstr) From b89e263a364833c6f2134c682273d0043fb6cfd5 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 19:13:01 +0800 Subject: [PATCH 20/36] bugfix --- app/sage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/sage.py b/app/sage.py index 43f0c08..5f572d0 100644 --- a/app/sage.py +++ b/app/sage.py @@ -43,6 +43,7 @@ async def run_zmq_proxy(app): async def woa_msghande(): + debug('woa_msghander starting ....') config = getConfig() while True: debug(f'zmq server receiv {config.woa_handler_id} message')') From 30ef0e80a0f4426b6a17c29e020b93c1356ef839 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 19:14:03 +0800 Subject: [PATCH 21/36] bugfix --- app/sage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index 5f572d0..45d2d74 100644 --- a/app/sage.py +++ b/app/sage.py @@ -46,7 +46,7 @@ async def woa_msghande(): debug('woa_msghander starting ....') config = getConfig() while True: - debug(f'zmq server receiv {config.woa_handler_id} message')') + debug(f'zmq server receiv {config.woa_handler_id} message') msgstr = await zmq_subscribe(config.woa_handler_id) debug(f'收到sage转发微信信息:{msgstr}, {type(msgstr)}') msgdic = json.loads(msgstr) From b46e4fa864d00f9c2d84f35c9f00dca70df0d268 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 19:43:50 +0800 Subject: [PATCH 22/36] bugfix --- app/sage.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/app/sage.py b/app/sage.py index 45d2d74..5ab1faf 100644 --- a/app/sage.py +++ b/app/sage.py @@ -41,25 +41,21 @@ async def run_zmq_proxy(app): task1.cancel() task.cancel() +async def msg_handler(msgstr): + debug('get message:{msgstr}') + msg = DictObject(**json.loads(msgstr)) + ret = { + "msgtype": "text", # 要返回的消息类型 + "content": "收到" # 每个类型的消息所需要的数据 + } + retstr = json.dumps(ret, ensure_ascii=False) + await zmq_publish(msg.subscribe_id, retstr) async def woa_msghande(): - debug('woa_msghander starting ....') config = getConfig() - while True: - debug(f'zmq server receiv {config.woa_handler_id} message') - msgstr = await zmq_subscribe(config.woa_handler_id) - debug(f'收到sage转发微信信息:{msgstr}, {type(msgstr)}') - msgdic = json.loads(msgstr) - # 这里按照业务逻辑处理收到的msg - debug(f'received wechat msgs={msgstr}') - # 处理完成后 - retmsg = { - "msgtype": "text", # 要返回的消息类型 - "content": "收到" # 每个类型的消息所需要的数据 - } - retstr = json.dumps(retmsg, ensure_ascii=False) - debug(f'repy msg({retstr}) to wechat') - await zmq_publish(msgdic['subscribe_id'], retstr) + debug('woa_msghander on({config.woa_handler_id}) starting ....') + await zmq_subscribe(config.woa_handler_id, msg_handler) + debug('woa_msghandler stopped.................')' def init(): rf = RegisterFunction() From f32ec43da7286fbbbfa1a56f4ba4a396a90752d6 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 19:45:21 +0800 Subject: [PATCH 23/36] bugfix --- app/sage.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/sage.py b/app/sage.py index 5ab1faf..12f83fd 100644 --- a/app/sage.py +++ b/app/sage.py @@ -1,4 +1,5 @@ import os, sys +import json import asyncio import argparse from appPublic.log import MyLogger, info, debug, warning From 139e344d23a556f9ed82d342c788c553abc72d96 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 19:49:42 +0800 Subject: [PATCH 24/36] bugfix --- app/sage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sage.py b/app/sage.py index 12f83fd..79d7afb 100644 --- a/app/sage.py +++ b/app/sage.py @@ -56,7 +56,7 @@ async def woa_msghande(): config = getConfig() debug('woa_msghander on({config.woa_handler_id}) starting ....') await zmq_subscribe(config.woa_handler_id, msg_handler) - debug('woa_msghandler stopped.................')' + debug('woa_msghandler stopped.................') def init(): rf = RegisterFunction() From 3b5c2cf83620eaf6950d737e174c3751f1209c8e Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 2 Mar 2026 20:06:10 +0800 Subject: [PATCH 25/36] bugfix --- app/sage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/sage.py b/app/sage.py index 79d7afb..f34a52d 100644 --- a/app/sage.py +++ b/app/sage.py @@ -43,7 +43,7 @@ async def run_zmq_proxy(app): task.cancel() async def msg_handler(msgstr): - debug('get message:{msgstr}') + debug(f'get message:{msgstr}') msg = DictObject(**json.loads(msgstr)) ret = { "msgtype": "text", # 要返回的消息类型 @@ -54,7 +54,7 @@ async def msg_handler(msgstr): async def woa_msghande(): config = getConfig() - debug('woa_msghander on({config.woa_handler_id}) starting ....') + debug(f'woa_msghander on({config.woa_handler_id}) starting ....') await zmq_subscribe(config.woa_handler_id, msg_handler) debug('woa_msghandler stopped.................') From 94a087758fe30dd885c3a472c56ea0606da9e0f4 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 3 Mar 2026 17:17:48 +0800 Subject: [PATCH 26/36] bugfix --- app/sage.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/sage.py b/app/sage.py index f34a52d..90b7aa9 100644 --- a/app/sage.py +++ b/app/sage.py @@ -5,7 +5,7 @@ import argparse from appPublic.log import MyLogger, info, debug, warning from appPublic.folderUtils import ProgramPath from appPublic.jsonConfig import getConfig -from appPublic.zmqapi import run_proxy +from appPublic.zmqapi import run_proxy, zmq_subscribe from appPublic.registerfunction import RegisterFunction from bricks_for_python.init import load_pybricks from ahserver.webapp import webapp @@ -55,7 +55,10 @@ async def msg_handler(msgstr): async def woa_msghande(): config = getConfig() debug(f'woa_msghander on({config.woa_handler_id}) starting ....') - await zmq_subscribe(config.woa_handler_id, msg_handler) + try: + await zmq_subscribe(config.woa_handler_id, msg_handler) + except Exception as e: + debug(f'Exception:{e}') debug('woa_msghandler stopped.................') def init(): From e134951917b1ed28c9595fae6e6eaa9b7c0d969a Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 3 Mar 2026 17:31:16 +0800 Subject: [PATCH 27/36] bugfix --- app/sage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/sage.py b/app/sage.py index 90b7aa9..f6eb80a 100644 --- a/app/sage.py +++ b/app/sage.py @@ -5,7 +5,7 @@ import argparse from appPublic.log import MyLogger, info, debug, warning from appPublic.folderUtils import ProgramPath from appPublic.jsonConfig import getConfig -from appPublic.zmqapi import run_proxy, zmq_subscribe +from appPublic.zmqapi import run_proxy, zmq_subcribe from appPublic.registerfunction import RegisterFunction from bricks_for_python.init import load_pybricks from ahserver.webapp import webapp @@ -56,7 +56,7 @@ async def woa_msghande(): config = getConfig() debug(f'woa_msghander on({config.woa_handler_id}) starting ....') try: - await zmq_subscribe(config.woa_handler_id, msg_handler) + await zmq_subcribe(config.woa_handler_id, msg_handler) except Exception as e: debug(f'Exception:{e}') debug('woa_msghandler stopped.................') From 9dfcda3ab00d7fae619230edd80a6ed33b857eb4 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 3 Mar 2026 17:32:49 +0800 Subject: [PATCH 28/36] bugfix --- app/sage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/sage.py b/app/sage.py index f6eb80a..90b7aa9 100644 --- a/app/sage.py +++ b/app/sage.py @@ -5,7 +5,7 @@ import argparse from appPublic.log import MyLogger, info, debug, warning from appPublic.folderUtils import ProgramPath from appPublic.jsonConfig import getConfig -from appPublic.zmqapi import run_proxy, zmq_subcribe +from appPublic.zmqapi import run_proxy, zmq_subscribe from appPublic.registerfunction import RegisterFunction from bricks_for_python.init import load_pybricks from ahserver.webapp import webapp @@ -56,7 +56,7 @@ async def woa_msghande(): config = getConfig() debug(f'woa_msghander on({config.woa_handler_id}) starting ....') try: - await zmq_subcribe(config.woa_handler_id, msg_handler) + await zmq_subscribe(config.woa_handler_id, msg_handler) except Exception as e: debug(f'Exception:{e}') debug('woa_msghandler stopped.................') From b3be2f5b1c4901f9f7278947a5ce7d813aef8839 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 4 Mar 2026 13:31:00 +0800 Subject: [PATCH 29/36] bugfix --- skills/video-generate/SKILL.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 skills/video-generate/SKILL.md diff --git a/skills/video-generate/SKILL.md b/skills/video-generate/SKILL.md new file mode 100644 index 0000000..cb1ced4 --- /dev/null +++ b/skills/video-generate/SKILL.md @@ -0,0 +1,33 @@ +--- +name: video-generate +description: use video generation ai model to generate video +--- +# 视频生成 +根据用户输入,用视频生成模型生成视频,支持文生视频,图生视频和参考生视频 + +缺省使用vidu的视频生成模型,用户可以在输入中明确说明使用哪家的生成工具,目前可选的厂家有: +序号|厂家|供应商id | +----+-----+----------| +1 | 阿里(通义万相)| 6fadgewjraOyvxC_EkHou| +2 | 豆包(火山云) |Cy-zrc4DgLIFuA0KMQzlw | +3 | vidu(生数) | Bu3Z6OXANehbkD6OK5NJb | + +没有明确说明就用vidu +错峰生成:许多厂商为平衡负荷,推出错峰生成能力,利用价格优势引导用户将不急的任务设置为错峰生成 + +## 文生视频 +用用户输入的剔除选择厂家的内容后的文本作为文生视频的输入文本来生成视频,使用方式: +``` +CALL:{ "function": "text2video", "params":{"off_peak":逻辑值,错峰生成,缺省为否,"prompt":剔除参数文本后的用户输入文本,"providerid": 识别的厂家id} +``` + +## 图生视频 +如果没有图像输入,改用文生视频,如果输入了多于等于两个图像,只使用最后的两个图像文件, 图像支持给定公网可访问的url + +前一个输入端图像为first_frame, 后一个输入端图像文件为tail_frame, tail_frame可以为空, 输入文本剔除选择厂家的内容为prompt + +使用格式 +``` +CALL: {"function": "image2video", "params":{"逻辑值,错峰生成,缺省为否, "prompt":剔除参数文本后的用户输入文本,"first_frame":前面图像文件的url,"end_frame":后面图像的url,"providerid": 识别的厂家id}} +``` + From 3459fe91f6ddc8ff2c12cfe2e8b4245b98ef5d00 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 4 Mar 2026 18:05:19 +0800 Subject: [PATCH 30/36] bugfix --- skills/video-generate/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/video-generate/SKILL.md b/skills/video-generate/SKILL.md index cb1ced4..6bc959f 100644 --- a/skills/video-generate/SKILL.md +++ b/skills/video-generate/SKILL.md @@ -1,6 +1,6 @@ --- name: video-generate -description: use video generation ai model to generate video +description: 根据用户输入调用视频生成大模型来生成视频 --- # 视频生成 根据用户输入,用视频生成模型生成视频,支持文生视频,图生视频和参考生视频 From fae390cd1ac0b38f342ec3eedb460a4a93cf9726 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 4 Mar 2026 18:31:19 +0800 Subject: [PATCH 31/36] bugfix --- skills/clm/README.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 skills/clm/README.md diff --git a/skills/clm/README.md b/skills/clm/README.md new file mode 100644 index 0000000..aefba89 --- /dev/null +++ b/skills/clm/README.md @@ -0,0 +1,39 @@ +合同生命周期skills合集 + +合同生命周期管理中要用到以下skills + +| 生命周期阶段 | 可能的 Skill 方向 | 示例触发词 | +| -------------------- | ----------------------- | ----------------------------------------- | +| **合同模板生成** | 生成标准合同草案 | "Draft contract", "Generate NDA template" | +| **合同审阅分析** | (已有示例 Skill 可参考) 合同风险检查 | "Review this contract", "List risks" | +| **条款提取** | 从合同中提取关键条款/字段 | "Extract dates, parties, term" | +| **版本比较 & redlining** | 比较两个版本差异,给出红线建议 | "Compare versions, highlight changes" | +| **义务追踪** | 识别并追踪合同义务 | "List obligations and deadlines" | +| **续约提醒 & 到期管理** | 解析日期并生成提醒工作流 | "Notify me 30 days before expiry" | +| **合规性检查** | 检查合同符合内部政策或法规标准 | "Check compliance with GDPR" | + +这些都可以作为单独 Skill 来创建,或者组合成一个 “合同生命周期管理 Skill 套件”。每个 Skill 都需定义 SKILL.md 且描述具体用途 + +. 合同审查 / Contract Review Skill + +📌 用途:帮助分析合同、提取关键条款、识别风险点 + +社区中已经有开发者分享了 开源合同审查 Skill +例如一个专注于 NDA、SaaS 或供应商合同风险分析的 Skill,可以直接下载并放到 Claude Code 的 ~/.claude/skills/... 目录下使用。 + +这个 Skill 是基于 Agent Skills 标准 编写的 Markdown(SKILL.md),Claude 会根据合同分析的任务自动触发。 + +👉 适合阶段:合同审阅、风险分析、市场标准对比 (通常是生命周期管理中的“分析与审核”步骤) + + +合同管理agent制定合同管理的流程,在适当的时候调用适当的skill来完成合同生命周期管理 + + +1. 合同原子化技能(Skills)分类 + +你可以将这些 Skill 看作是给 AI 戴上的“专业眼镜”: +技能名称 核心功能 (Skill Logic) 常用场景 +条款提取器 自动识别合同中的主体、金额、有效期、管辖地,输出结构化 JSON 数据。 合同台账自动导入 +红线审查 (Redlining) 根据预设的规则(如“违约金不超10%”),自动修改违约条款。 供应商合同初审 +条款对齐 对比同一合同的两个版本,识别对方偷偷修改的细微词汇(如“应”改为“可”)。 合同谈判回传比对 +合规性评分 根据所在行业法律(如 GDPR、数据安全法)给出合规分值及整改建议。 跨境贸易合规审计 From 1b93716b4912a353b288b45459069d516bbb1575 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 5 Mar 2026 14:43:42 +0800 Subject: [PATCH 32/36] bugfix --- wwwroot/menu.ui | 5 +++++ wwwroot/public/index.ui | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/wwwroot/menu.ui b/wwwroot/menu.ui index ac85b63..40b9b55 100644 --- a/wwwroot/menu.ui +++ b/wwwroot/menu.ui @@ -10,6 +10,11 @@ "label":"主页", "url":"{{entire_url('public')}}" }, + { + "name":"agent", + "label":"智能体", + "url":"{{entire_url('skillagent')}}" + }, { "name":"pricing", "label":"定价管理", diff --git a/wwwroot/public/index.ui b/wwwroot/public/index.ui index 1616fef..91d8f97 100644 --- a/wwwroot/public/index.ui +++ b/wwwroot/public/index.ui @@ -29,6 +29,17 @@ } } }, + { + "name":"agent", + "label":"智能体", + "refresh":true, + "content":{ + "widgettype":"urlwidget", + "options":{ + "url":"{{entire_url('/skillagent')}}" + } + } + }, { "name":"rag", "label":"私有知识库", @@ -40,6 +51,7 @@ } } }, + { "name":"about", "label":"关于我们", From 26d340d22d4024f446cf31e41daa2f1ca7b16bf1 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 6 Mar 2026 10:50:46 +0800 Subject: [PATCH 33/36] bugfix --- skills/pingpang/SKILL.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 skills/pingpang/SKILL.md diff --git a/skills/pingpang/SKILL.md b/skills/pingpang/SKILL.md new file mode 100644 index 0000000..0aa5910 --- /dev/null +++ b/skills/pingpang/SKILL.md @@ -0,0 +1,12 @@ +--- +name: pingpang +description: 测试函数方式的skill +--- +# pingpang +一个简单的乒乓测试技能,用于测试函数方式的技能脚本能够正常执行 + +## 乒乓测试 +``` +CALL: {"function": "pingpong", "params":{"prompt":用户输入文本}} +``` + From 72d508557cc24288e834a67fe3f4a3171c10a95a Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 6 Mar 2026 11:18:17 +0800 Subject: [PATCH 34/36] bugfix --- skills/pingpang/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/pingpang/SKILL.md b/skills/pingpang/SKILL.md index 0aa5910..018b833 100644 --- a/skills/pingpang/SKILL.md +++ b/skills/pingpang/SKILL.md @@ -7,6 +7,6 @@ description: 测试函数方式的skill ## 乒乓测试 ``` -CALL: {"function": "pingpong", "params":{"prompt":用户输入文本}} +CALL: {"function": "pingpang", "params":{"prompt":用户输入文本}} ``` From 3cce73eb6f0db54402393eb4d3353076e8afd6ae Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 9 Mar 2026 11:47:57 +0800 Subject: [PATCH 35/36] bugfix --- app/sage.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/sage.py b/app/sage.py index 90b7aa9..3072554 100644 --- a/app/sage.py +++ b/app/sage.py @@ -30,6 +30,7 @@ from unipay.init import load_unipay from platformbiz.init import load_platformbiz from accounting.init import load_accounting from woa.init import load_woa +from imui.init import load_imui from ext import * from rf import * __version__ = '0.0.1' @@ -82,6 +83,7 @@ def init(): load_dagflow() load_discount() load_woa() + load_imui() add_cleanupctx(run_zmq_proxy) if __name__ == '__main__': From c48823dca3dcc60467a604cffa5641630b383615 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 9 Mar 2026 13:30:20 +0800 Subject: [PATCH 36/36] buggfix --- app/sage.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/sage.py b/app/sage.py index 3072554..90b7aa9 100644 --- a/app/sage.py +++ b/app/sage.py @@ -30,7 +30,6 @@ from unipay.init import load_unipay from platformbiz.init import load_platformbiz from accounting.init import load_accounting from woa.init import load_woa -from imui.init import load_imui from ext import * from rf import * __version__ = '0.0.1' @@ -83,7 +82,6 @@ def init(): load_dagflow() load_discount() load_woa() - load_imui() add_cleanupctx(run_zmq_proxy) if __name__ == '__main__':