From 5d44c39a5639a9a2769fc543bf40d2f1eb989cb0 Mon Sep 17 00:00:00 2001 From: wdj Date: Sun, 26 May 2024 20:35:39 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BD=91=E9=A1=B5?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.html b/index.html index 8096a3b3..6099965d 100644 --- a/index.html +++ b/index.html @@ -82,3 +82,5 @@ + + From 2af4e8c752ff3b336474f5b04a1cfc5f4fb32395 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Mon, 27 May 2024 02:03:20 +0800 Subject: [PATCH 02/17] Add files via upload Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- prompts-zj.json | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 prompts-zj.json diff --git a/prompts-zj.json b/prompts-zj.json new file mode 100644 index 00000000..944fe20e --- /dev/null +++ b/prompts-zj.json @@ -0,0 +1,38 @@ +[ + { + "act": "担任造价工程师", + "prompt": "我希望你假定自己是造价工程师,根据提问,回答造价专业的问题" + }, + { + "act": "担任面试官", + "prompt": "我想让你担任造价工程师面试官。我将成为候选人,您将向我询问造价工程师职位的面试问题。我希望你只作为面试官回答。不要一次写出所有的问题。我希望你只对我进行采访。问我问题,等待我的回答。不要写解释。像面试官一样一个一个问我,等我回答。我的第一句话是“面试官你好”\n" + }, + { + "act": "充当 Excel 工作表", + "prompt": "我希望你充当基于文本的 excel。您只会回复我基于文本的 10 行 Excel 工作表,其中行号和单元格字母作为列(A 到 L)。第一列标题应为空以引用行号。我会告诉你在单元格中写入什么,你只会以文本形式回复 excel 表格的结果,而不是其他任何内容。不要写解释。我会写你的公式,你会执行公式,你只会回复 excel 表的结果作为文本。首先,回复我空表。\n" + }, + { + "act": "担任造价写作导师", + "prompt": "我想让你做一个造价写作导师。我将为您提供一名需要帮助改进其写作的学生,您的任务是使用人工智能工具(例如自然语言处理)向学生提供有关如何改进其作文的反馈。您还应该利用您在有效写作技巧方面的修辞知识和经验来建议学生可以更好地以书面形式表达他们的想法和想法的方法。我的第一个请求是“我需要有人帮我修改我的硕士论文”。\n" + }, + { + "act": "作为造价师的招聘人员", + "prompt": "我想让你担任招聘人员。我将提供一些关于职位空缺的信息,而你的工作是制定寻找合格申请人的策略。这可能包括通过社交媒体、社交活动甚至参加招聘会接触潜在候选人,以便为每个职位找到最合适的人选。我的第一个请求是“我需要帮助改进我的简历。”\n" + }, + { + "act": "担任职业顾问", + "prompt": "我想让你担任职业顾问。我将为您提供一个在职业生涯中寻求指导的人,您的任务是帮助他们根据自己的技能、兴趣和经验确定最适合的职业。您还应该对可用的各种选项进行研究,解释不同行业的就业市场趋势,并就哪些资格对追求特定领域有益提出建议。我的第一个请求是“我想建议那些想在软件工程领域从事潜在职业的人。”\n" + }, + { + "act": "担任造价工程师", + "prompt": "我希望你担任造价工程师,并想出创造性的方法来管理工程造价。在为客户制定财务计划时,您需要考虑预算、投资策略和风险管理。在某些情况下,您可能还需要提供有关税收法律法规的建议,以帮助他们实现利润最大化。我的第一个建议请求是“为小型企业制定一个专注于成本节约和长期投资的财务计划”。\n" + }, + { + "act": "担任造价顾问", + "prompt": "我希望你担任造价顾问,为各种造价方案提供建议,例如如何套定额、如何计价、如何计算工程量等" + }, + { + "act":"论文优化助理", + "prompt":"你现在来扮演一个大学生毕业论文指导老师,研究方向是《自行输入》,现在你来开始教我怎么做。比如先给我列出此研究方向的大纲。" + } +] From 6167408d6c0045051901dd3ae8ffd7ab0f016011 Mon Sep 17 00:00:00 2001 From: wdj Date: Mon, 27 May 2024 03:57:56 +0800 Subject: [PATCH 03/17] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=84=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E4=B8=BAzjai?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 4 +- Dockerfile | 4 +- prompts-zj.json | 34 +++++++++ public/favicon.ico | Bin 41662 -> 134702 bytes public/favicon.svg | 69 ++++++++++++++++++- public/pwa-192x192.png | Bin 7361 -> 5642 bytes public/pwa-512x512.png | Bin 34373 -> 7407 bytes service/src/storage/config.ts | 4 +- service/src/storage/mongo.ts | 2 +- src/assets/avatar.jpg | Bin 5155 -> 14730 bytes src/assets/avatar.jpg.bak | Bin 0 -> 5155 bytes src/assets/recommend.json | 14 ++-- src/assets/zje.jpg | Bin 0 -> 29054 bytes src/components/common/GitHubSite/index.vue | 12 +--- src/store/modules/auth/index.ts | 2 +- src/store/modules/user/helper.ts | 8 +-- src/views/chat/components/Message/Avatar.vue | 2 +- 17 files changed, 122 insertions(+), 33 deletions(-) create mode 100644 prompts-zj.json create mode 100644 src/assets/avatar.jpg.bak create mode 100644 src/assets/zje.jpg diff --git a/.env b/.env index a3913ffa..260379f2 100644 --- a/.env +++ b/.env @@ -11,7 +11,7 @@ VITE_GLOB_APP_PWA=false # git commit hash # GITHUB_SHA -VITE_GIT_COMMIT_HASH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +VITE_GIT_COMMIT_HASH= # release version -VITE_RELEASE_VERSION=v0.0.0 +VITE_RELEASE_VERSION=v0.0.1 diff --git a/Dockerfile b/Dockerfile index 8d148d02..64698cce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ # build front-end FROM node:20-alpine AS frontend -ARG GIT_COMMIT_HASH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -ARG RELEASE_VERSION=v0.0.0 +ARG GIT_COMMIT_HASH=0 +ARG RELEASE_VERSION=v1.0.0 ENV VITE_GIT_COMMIT_HASH $GIT_COMMIT_HASH ENV VITE_RELEASE_VERSION $RELEASE_VERSION diff --git a/prompts-zj.json b/prompts-zj.json new file mode 100644 index 00000000..f32a94c7 --- /dev/null +++ b/prompts-zj.json @@ -0,0 +1,34 @@ +[ + { + "act": "担任造价工程师", + "prompt": "我希望你假定自己是造价工程师,根据提问,回答造价专业的问题" + }, + { + "act": "担任面试官", + "prompt": "我想让你担任造价工程师面试官。我将成为候选人,您将向我询问造价工程师职位的面试问题。我希望你只作为面试官回答。不要一次写出所有的问题。我希望你只对我进行采访。问我问题,等待我的回答。不要写解释。像面试官一样一个一个问我,等我回答。我的第一句话是“面试官你好”\n" + }, + { + "act": "充当 Excel 工作表", + "prompt": "我希望你充当基于文本的 excel。您只会回复我基于文本的 10 行 Excel 工作表,其中行号和单元格字母作为列(A 到 L)。第一列标题应为空以引用行号。我会告诉你在单元格中写入什么,你只会以文本形式回复 excel 表格的结果,而不是其他任何内容。不要写解释。我会写你的公式,你会执行公式,你只会回复 excel 表的结果作为文本。首先,回复我空表。\n" + }, + { + "act": "担任造价写作导师", + "prompt": "我想让你做一个造价写作导师。我将为您提供一名需要帮助改进其写作的学生,您的任务是使用人工智能工具(例如自然语言处理)向学生提供有关如何改进其作文的反馈。您还应该利用您在有效写作技巧方面的修辞知识和经验来建议学生可以更好地以书面形式表达他们的想法和想法的方法。我的第一个请求是“我需要有人帮我修改我的硕士论文”。\n" + }, + { + "act": "作为造价师的招聘人员", + "prompt": "我想让你担任招聘人员。我将提供一些关于职位空缺的信息,而你的工作是制定寻找合格申请人的策略。这可能包括通过社交媒体、社交活动甚至参加招聘会接触潜在候选人,以便为每个职位找到最合适的人选。我的第一个请求是“我需要帮助改进我的简历。”\n" + }, + { + "act": "担任职业顾问", + "prompt": "我想让你担任职业顾问。我将为您提供一个在职业生涯中寻求指导的人,您的任务是帮助他们根据自己的技能、兴趣和经验确定最适合的职业。您还应该对可用的各种选项进行研究,解释不同行业的就业市场趋势,并就哪些资格对追求特定领域有益提出建议。我的第一个请求是“我想建议那些想在软件工程领域从事潜在职业的人。”\n" + }, + { + "act": "担任造价顾问", + "prompt": "我希望你担任造价顾问,为各种造价方案提供建议,例如如何套定额、如何计价、如何计算工程量等" + }, + { + "act":"论文优化助理", + "prompt":"你现在来扮演一个大学生毕业论文指导老师,研究方向是《自行输入》,现在你来开始教我怎么做。比如先给我列出此研究方向的大纲。" + } +] diff --git a/public/favicon.ico b/public/favicon.ico index fd7ff8c4ebd26e9970a3c054181eaeb1a696c378..9658b9d0f5a9230192e87ee5207b4d7cde5db3bc 100644 GIT binary patch literal 134702 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 F{{bw{7Dxa9 literal 41662 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 diff --git a/public/favicon.svg b/public/favicon.svg index ab38bce9..c50272b9 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1 +1,68 @@ - \ No newline at end of file + + + + diff --git a/public/pwa-192x192.png b/public/pwa-192x192.png index 05826b3c6a4841f466b06ce3b3f6c707db5d5873..3ef07dcdd27cdb37f93668e704067ebedc91d7f1 100644 GIT binary patch literal 5642 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 N@1gO722JPK{|7!zzQ6zg literal 7361 zcmV;y96sZTP)l$=>F4L?+9<@G&JDg;L_64 z-re3xN=hy+E;lzfC@3h)%gd9KlTJ=fSy@?fa&lEwRl&i*xw*M{d3h@H}XeA{j&(F`Zv$L+QuBfP}kB*OBU0p#zL7ADEe0+RwZ*NCOM?^$K*Vosuu&~C) z#(;o;Y;0`4zP?gYQp3Z;Wo2cxwY7_ji(+D8$H&Lw;^M2TtDKyic6N5j$;pU_h=zuS zU|?Va-W9h102^^hL_t(|+U%PLR~tDHfGuW5+D3K31>6e;Q%nzpo=^gWlE(l4CFhk_ zlI?ScoqZD}Uwv2sED!3H?9i|GMrD1OWff|DzTF!jarX z?e6UQ;md4f)A_$3$Q_4h?&#--+x$~TAY>y>9_2R_x32P2Lp@i8Wtx8|J{@twC`B2%n$qX9XeJodCobio|w3Vp;E$0DwCW+Zl$)8iEZ8);{4s z13`CgXZF3i*62&sLl&%6u3xTQ1NaYQh{>4>yhAVRoZowh%{@0V5s3V&)n3Ae=&h}^^3#b&+-BIN>v~c>P^=O{}y>jFnhB1jsT{Ar3i@- zm8q+}mfNm$5S(a~oFpEP`8!BCpdozkkXW#@t>%vmJI#82xk8)x9#ilRYBgT&#SfB^5k?h99xQ%9+qzt zLJ)Q^y7f5cn&6M37=T<=AYz;8i1e@0G;duFKs>kmoFUfXX1(tY5BV?Tj^kL3*Z*M# zfBgky?S|nV99sZg_7f)SX<`#?xZc-F?fcYCx|nE4zOeDFz7~o8xq}US>4uEaBV&|3 zICpw30K%&UA#6g_J}HxMNxp@ObRtz)+|5~kD9S|-87j|7wqWANQ5>L;#;o$MgaVKZ zYW3Q<(6&)5+^lX|e?Sp@zHKec`?$vk97V87>%z8MatuN=F;8bvR9q}Ye|z3qdt%5m zfJpE9nukHhW^YOu038=PzGO(rgO&Ji1%S;eW6hisZHDY-cBu3QoVz5p z1YjVtRoWni!LiZs<`k&o+~!q@*|!mZw@);ds`^6+6KjLt-Kxwaq|;Y*vT^_n$tDuQ z76M7GS*5T63sqO%K5vCHq4$x*FK3|jFP#<6xQkOeLefVNM=j9~4b#Cxws_5AnD4 zrm&LLl?r;t0|J0k`s^XLB@Mm?lJ|E@9g!PCz@6ObWyZWt)^N0N2cfs@Wmt=-_6Xg@ z-uo{@!_wCjqAB%}h-^Y{u@r}19`5MI^?!g=Rmv!T5qhhb27VBp(@Lg=2=8b7(fWeG z09Qf~A~JiU)Gu3u_`{{ml)sf)$d}*bAcKrXr4vs9FgmgN?0@v((bb1niVRObj-vgR zFt2v$vR;ipXWaz>k|e6ndW+GWTwL4aoCjE!C?T zo&PIF=>oEIGPtx1<~Hl=F(nwOSQKLRx_VK-`XZF$S={$ZVkhMgC{m zf?)yVi^9tS&30wi##I47z8A>QM#kDyz{E1|qJYWy1!~STu%#{S&1~^NKSMigD>_4_ zT%+|cjAK3Ax-Qy;I+7Ye@2GA6rE9Sss$}%eR92Z@8)wu9v0K-8qRbKJFgn2Ipu-MZFFQ$1pK^8#1OH|)B@9!9mZci zNf9<-wIEAm6QLa{Vxt z1E1bN6^)tL4v$0tU_BH`u0{zmVOneS!D)AU>o%gSx+I@uv~Sid<5xO^OMGkXc)I_R z;5>!uvoW(W;`(2TwrB&eMIuRrfmJ@Y0l-=k+lMqLiuFn88C$|f8%dG8T#fbBj`s!r32s_w)j}Push9r79rDj1zQf*(0?+_&rkNw zuD`e{AlhtsSODPG1}e)Fgv?G{hvmP_%lO(2U`myOh$8uQsdvWdtlW|&^&gTq4A8xJ zk5!4(!TMwknTY`ZPPRI^NJNiI08Ie7{H_2P0FWm=f3KQx>%b+gtN;K>tbcL3W=a5G ziPWCC!{(%L{-hOvMBdD##Wg@6{|3P3m}XD7w@-WU?J_Z<`gWlv`PpX<`c%nIeY z?b?t4(>H<{0KdZr!vc6e`?!ke-9EL3bTd^(MA0}3-463)fwbA44yk~;M?o6K&~|^t z<#+o7@F^x`AqTztiw76NR0FhqH z&n+j&ZVr}6pqot+Dgx!J$@_fnK<5PcqZx6oJ41zl6H>VVGW0tFuLbY}?`csWG71Vb zs@5tyo#z!Qlx)^(o4oJ#|Lm;sshO+Y__@ZsUGFP zXFmi4%6}muiNsY5oK}Dm>g6QLLjX8C!kn5+4S48v007qUeU{KBlmNl-g#$o*_lJ!J zK;j{z$A`9oXC-5nlN&+-m7+=t7~+XCy0HPk+FV{hYTAfEL~nh?GQ+m3Cqbm|cm+@I z^MxO>0^P?Fx*g(Gh5$Gv{d%0+gjWGT2x6;g5fu2$CgJ|@gRapIR8CT;0Cc%c3qQ;H zAcXTH0Yo2ByJ@FWY^05FExo3;2D0B~ZX@@rJ*d`tlFW%6g}GPxOhLplGZz*B?4{J)1_uMc^rMN5b7g?g$N;+JdMUVsrpbbHv%N2J z!0~5~2uTm}B>~D_@T^Axzz|*two**pKg1Jfd;sfW{a^P8vh&k@W>GH%LSoo9Eha47 z#n*@_fa20X6RMjamRx~x0r=L85X!Y^0A|lUMEhMtC| zy7=Id?&TmQcV_Q?xQKxrGqj7RJ^JkacjHIvLec6hPyX@=RtEyCxC#JMTO$Mb-upgp z>pet~Jt#Q?x zQn%|Fz`?1lyJ#k_RQ$Qbp%+7=hbI`Ct2!vIoPhww3(b!OfJB*@3h&*uY&1p*8=@R- z;W`WeJ+su5u#wb-5lr0;8uhG`23Q^sz`O09G#fSS?c{Ajg^TXSd7SqmaE=OOqXxiF zl>q>Uq)liB#sToIVgP)=rHhOG06-oFmYJ&bI-Ow6{&0y*XxtdkSXtHp>;u3U0Er3= zx*`SuGpGUlX*T8SG2T7F1Bk4P765V9Uj?TORUUHbbkhJ107&JAX+15fL=zh#vz+RY z)9XLKmM>cXXs&;Ude_$RbZ!&I07woAAWfQV1;E_o!MW94b$qFaEzR<8eLYbrqc5dr zkAEwG9BfDr(~NwG3sdFpGc{`^K?=d9RH@%vZ!YLOP@MHY1Fr`l@9NScQlSm8SdaC% zYU>dq236)kKOf-~%r&ED%ak1kKvn6l1n`A$a`P%L3$7qu+3Rc3E)Dj^v{jI*>ria= zd+S33Ft-N{=>RZo%tZ@eOn}f#Q1HaSsw@g*MzV*;R+pOzk-3(v;$y!l!8IuW@?LnT z6W~hm5j%9=0KmU2TH27FzKKD0>Sx)sUyKpC2B5gvXRth*)WdC3OEdxxOx0DCSl;CD zdH}x=KdXAObFH%r2Y6?{>Jm`_;8`DlaMeub6S;q#fpWIF4}`A3{f9V=1pqUwDKVXB zXGKeXep93_t9RbiwU$&m)`bs7O01aSf zetmOvp55WVZbe^E?XlPlj-!**mI46yY4-zkPKE`C18@Z9T%5RO%$or^lKvsHrNG#W z4hCNGsH!AdB)mL;FE!cCJ^(_g89ljR@(PB?u6`v+hfySvKi zU;?sKKxNRuVPAP3U!v*!^Q^Szc~a*=&9t9E0fdVN@QMVO;s8E&n)o$9 z0|2IkXaKJ)S|F!!d3eqNNyb%-0TG?6MM47WoZEQ--HHd-Rx@-s0NwpungoC(BPwz* zdpsO~t}qDzh=A43xAMKty`AR=5fx1Z3uj}C_7DP+*jZ+Vknu)fBdY)+wa|iF%ae=* z5cv_MBsdZ471gPmhhU~@H`AUB^ggrC?i_^40G9H)|3D*bnq|IWl4!k%D05;hX0*;s z37`?uKO-P&awnO@8#zM~L~5Y`sV&x5Ee^Tu1wwKdGZV6af6{!il$P#5_K50K0S(0vw|ur5X*jcz5)_ zrc0R7X>q?tfFyo!n;qoQ@7qeMJ7k2;Z;Jq~)B-;Mci|WU@Jo|lq{0BqnBh~skIb5V znxVn(+KgpECb$Da>EJlyE=cK=c z`>ptomIJ_XI9Ks`fzIIsDzsEUIRb2*gaOowD%#H-l7`1{27|R$?ZBcivUHyZsU)6M z4|L~nH_JPQ#<&24G_(uP2``KL&eT5al$aqESPFIm)ij8}G&lDnD0D^}dW<29zqnO1 zB-R`Ti7$lphU0z;IV9koXQ9eU+n+1d7V=Pew- zFvgt&(-qzL&$OC6D$9r61gQL3}9auUo|Nql+J(2i=r1#r4{7r^ETCHn{FVMxLHQ z^hp`8uc;y+yF4?gx1>1BbT16FzBYLH@l61kEzc@=nHdQ{3SJY>DSrOB1Sr|$Ou)zb z2Bl({j$YB2Qon+Z^VdJfHx&+`tE!rgr%l5uSI5x-zL-6$LG4bQt-UQ$VY!(gyj0*I zVo4`B0u<+xl=uKljR8OjnJ-uXatkVilqbt+1|SYtmv)bDm!x(o4hj=N5uo#R)uud` z-cWu$=d!^+D+s_CaRipWF#wP)v35qP&2MVA;c}v9h2h3dRjrY-MVy7D!;`qh!302M zCq+p|d;yHn0WyaSP~1;Io{vkz(-$4pSE1xFJVaj$bB22r(U9U^3m&_JkOZv_GrmcI%Awj{u)$*=8o7i75Sp+A9SVbw7{@0ib4jj-diTaBfB|&$rvU zvZype{G5tzZD$Mh2#CwE+)nYNE&tq^#u_3Yxe)*eJ-$K!l@9D!b$jH-0ILxOQYU`W zpxS2p=&Pd^TrS1A8IuH9sBYhqoOkt2`vahBu5~1_UX`5&xWL`+=r#4b1yBGNsX%TT zeYs!)p!32yo|FOQ*F`ngW%MNP0tNtBMxg^>-)=d4`BakMB%=e^pFmqrf07}g@#L4h z1;{P!z0))|dwf7ixA&BH!T_dx0StgbG_m>=;dfsNWN*nB0AxkG7U9(LKfDTG+#Z%`8(H8XPxFyi{1%v7sjb z81ebuw;ZwF9YwHo!Lz@{?f6G$@`fM)U?+4~t2e?WuwC2A9s`EZThxSZs>?u zH?n#wEr_wEv2v|Iyf&=q{*YV4Eo?whIIIAysvGm^1!(g<#i!%EWi201&|Zd~&ng=h zaBay4ARK`#b(CKut9wG9kyw)U*EyP(T+0Rt(D|}4QI|9OlP469_0$9%mQpW!3_$k9 z2X&0TwFmFlbOFKWzx&7xtnQ>HY|?gILJq+HcTP+?=KC{^7T>3P3{_z9W{Q%*5!{TZ zD>VRM@hNH3NgG3MNA#z|Y||X8JrrG>%L)gn20$#g7kpMULg>1lC0cuOt)t8vdgMiy znFfGjvo`=77S4V|Vv*sUl?IDQL`dgv3lM~q6h!#%C(13NA*0o>3*lw3{N94|k zzmVrfpAOmWx+QF~+7EME>l-F{dxy^Sn#FYIHG^F>RQxyCvPjmmAkX#!9stVQNlHo3 zo6^fV>yqsqG#4}P(_xg(>tzw8or#G>Gi5Of-B)gmNj$8*pVHknv@u=1QGJ) z4zHBZMwNjE;Qa>DbZ9OI3^a-`aBC$)hHcsD2SeGac=Vo~nu&Q+gx+I_^V(eCDdrvN zUwTfr92rL7#4ZZ5^7RrOoVmFHnK>&ykfk@%MW0raCAB9D7_cb5m3m-`P@chC0hyRySHtGpya4S9N0 z1YImPXTI}Og4`PA)i`*(xytW5<^MDRT@;`D92J>Q0m6T~Sp`FV|JgHr@%v3=vbg3z zZ@Kmej}R!vr1B3v2`xN;$4wlw>H7l^N)qi^1C5aYL~uXy&Fwc8{!d5uJvRm~7Abju z0N%}L<(0`uCx00tfWY>eX)?;aNzXZ;0i0`_{0#uz|DyFWsBr&q0OlIaWE6mfgPtm; zwe;WlxHU5KocGkB4$&d!3%3SB?+V@InQbEJ-h%vD2=yC<+Q;>hKo|x9R^&MvLg4<= z+=(+VJcr-#&KGZAkdmL*atMe+0l;DpM|M~a^2S_*d7I1Q_V0KQDxuTo^{d&T00uI& zW@E`=20e-1R4fZT0Qi-s5d0QNY~I9{%Mk`3)YpkTF0V2997lt@1EGAs8=yvR%i0Hq z-X3iRmgmWD0MI*wnO&Pi9Ky*yTz)?NbER>6bo26ME1tvd<2XE~D_DEy;(+n{#rtSL`=q3^ z-oX{A;b5_d!@!U~f}V$|vDQ5O7|;K;Ppg)8gnC7TshCF6)-=C);G`ETf7W#}qH!Zw) zvAt=3DDCgt8fcpI`46N^&L(5UhS{-|m`SPy7c3 z@Q4{bU%fuuzbaJo<%`$5gZi(=LgJ&|_yCW9`^Qf2ZY-sFFQ<>IIDzxQt6BdBt?7}T n?3I7v_y1r1m;dE|`47lnkB2ULe(b}-+TXo?+<6My`R0F^PIi+bM|_#*NW5Dgpd+55MyCsk*cXG>0oRF=J`p8k7=jK zUH`)v7Hd@<4J@n=99URkkyu#&9x?Ve7M9OTEG*PJEG%#q78bzmvqirO#+S%l)z}LQ ziw@&U$APV;^WqN{7Nd`vl7gPU`Eedm7ES-+z&gm!*G}k9qJly{JkCKHR)Ew>^Dm53 zpk(zgWWi4_WKn#Q6!wXmmx7#)H=es2SD93JO-(6DB?+QP1w2zsiX#{?7nKr~8km1v zS`xCUhjgya%E-uE2IdDhR{mKuD|<9EyUY)VVLOV+vT=7hi*+a@yxo@i2?ut(`d@c= zW&esj4h^I~{s|s_w5HybefSiwk)-#gNmqED^+ARrS)0W`BRuCV@!XuQ`$i+pik%d( z_DL_XiAfo( zf=Ejz$)w^!=kK^Ocu+z4b2MR2Tb6FimJqYy%N`4%28_iFGV!Et7i1qpt z{oaLfGja~^#u6*@+D*l1>*m2+B|4hKe2AZsrwZFq5<~s>&3Mjt@8PIeYo6A11tjw~ zi&iteOn3sGy4<~FgPb?Or~T3%Wc;9nW>A^s%2%&-`)__r9R3vQcee|4GHFNzi+Awa z-$85^u=PYkc$GWqI&;h41PP(6#9t2qC7@2n&#g+(GD!93%wBXH$h?82{aYf71O|ex zOlLr>e(O}1lbM7yQ*?)<(YPL22dxi!cOP#1JBZh1k>8#-Wh2ZLegeazkvVt?(xt!F znK|xkEqLo@+SllCP3fZGRBHNWcAbgC{x0QIDbLi4gu_ti3%dqj!J136;05FXX$X67 z76NQ|+i;xOwNE1b%CppmnQc-I49QDd7Y&IGJJ-2QpuPC3?GEC*YXPsv zjkwxx^Yw!7hG_1WHrrW>f;x0}Vz=cfKC?Dk;fJe&V9Cjv_T(#bsj+9RRpY+ScY4*m98V^{4b((-K5g{ zik55VB;^G2+RIgP4fln;7qJ8~?IZ6!OQp}+;T~Ad7NO)Er)E6pD&H>I#`klIwSMSl zZ2TKJBYh8RWDENP1BqoQN^7a@o)HSI1n|Y38&Aug9mhvDMyx|2lQ)}1fg|*fskh4( z<^QiVe|p?^UEWi%!=cXR z^v#fUjJW!J#zuxw;0b>`shrxlLu=R8FW(ER5Kv4A;jwfSs&wK~ude10_CD0V${p4< zTS=8p1kV%s+GBB3m;1|`fK$%qiBEeAbR3S2c9C?g==6%u8`sb8r8+7*x z>n+ONO=sY-Gh+KIk3zl<1eCmBJL&#psTP=qPX%Ss_Y@iVp@vGAk99cT;(?|JMad5J z@M0J;zv?Vv+SLT~!ws31f)Eu^5*rUoWIAe~l(z$?l>sPnUT(C`a)9lLUWvN=-Np@i;*UJR~Le1yM%@=Bb8zVSK>4eZw8N+dEX{j4Y?Q;z~W@<4`K7x%Ee+4%B)*T|)C0 zqZNe7`KBBq?*I1_`;MxvNaAfYu_2@Tpr5lvmEKJBgly5BoZRQ)hwzd}=g03L`wzf`@VML&$xM#?N5Y!DlLZdfBAn%?0b1`Fm62v2NA%iBgQ0MMY*YgWY~;l zuiZDqX%~}bwW9DzOEKYg7arPY`78QB-4=GzRhhi$O+?C6p<6f1XjIel%J&O9br;bE z`YYyLD5ZO3!A=H3GTF+CtQl#dZ@1<1HEKl)IMY#D`KvxhZ|n4eRx$g?|X~o7SP2`TtJX2YQ`> zV%d>Y(6WMH9rJA5eh2S&pXIuO6OSwfS*l28OQPGXO=kWa?5=IlGA5o}0Ru|TaDUzV zJDN`>#LLPeEKO$EYCqRrhS76dvCdb0BeYjpL)3`iUZv^&#QzZfKDQ_HtLY3nD~Pyq zjQ+E8YTl9Z#?ynB1{6^fY)cf%p2Qj^@GK|MOu*GtDvl2>w}`h;1^CXvi(X+>n5hTJ zW4)+0Y%1|@PVD~AZTkH*^A0>T_dAi*>lwIJycHLtQ`rQqhDSRNF}t1liu~fd1zj!G z`(_VNUoyQy!*ocWRAjpR%yG*1;<>|6e#qXBi`$!?b2RSQ?lNK!?yxcw>Iyu&o(+dmu-H^1r?k#EOynwMJHs3w0_(pJvffZ zBVfGTAq$e1dQJ%6aK1GGT9$UvQ=Kq`zBW-IM(phlGEQpkWpnMQKA%%^Wwg_Yk(AuH zj6+J4u-y)m{IuPB;)FQkeI4zqPGnF|h74)Y(<^wH<61!r)(MhqeBq>5u%BZC`^dyI z+}29k$Utc4*6JNU)wA_JZTW9<`?+9qXY&MOVe#n51STBt$F<%Uwe4gCY_U&#GCT<< zcS-Qz-M6v#r?m{{!QJA@dU7q&?I zIq&#rgPYKIuZ>Awod}Tl9O5XHG!SoY?ccnZnz;9qz~#%L13Ia?*VAdUjgs0YIGnl9 za^(LdeA`3u(m>;9nM3oQ_^-#Wk+jst4sFLgM(ch&wq!<=%^X{WLbN6n)3wY$I18%@ zKE^~##7@;DTYVqZ@G65E6jf1E+81@VL3du?YA;aebu}w=`ztWUwvm!p~uhZ0W$@*F%CUW?Ft2MlUR5ujs;NirRwfka|| zCLZ$l7gutYc24I+;zE5n84EHT@5Uz&EjIn^1^=LyjNJ}%SnQ4lgo z(dl^duhFIL47$COAxe`S7(~0zFb&%~k-B)i`Pi;QB9a=2Dt5)6d8W1?1_;1;;kXhg z1srSZnq#8j^QIMj$bS7`eQ~T47JrfC2=#*X$)A|nqrkCXb|gAdgGCj%Z)$|jFi5RM z*rLCUN7+j$m|RPb%UT5aQT<%o>zXyz$^rn(Y$~z)?B`eJsM)H96oUv1Uhp9r5LoDu z9w~`XFwjgo8=Q4^BmE^xxORY2thT5-`J1i+a~J zMoI2~k^Q*XphJpi7==es3smxpHXD8STV86nP0;fn{w3Sv!mo2YrZtj#2lq}>Y^pkH zH@Tpz(HA>|vdxPJwmnrjJny&a+KkkS7TU^~jk!=ydPej|?f4O_-?jT1dy4$sy~TQQ znHIg6LEDT1ulM4p$nCmcHIBs-xB{AmL$$?1pf+yi>IQR)cRm&y+IrWCrylV~SHR4| zGYJU`5oMeFZG9mF)SI_PrYqN;BHcxp|In0D?1c72j^N<6azE!B4=XY;3HfNWw^)Yx zD1VdKuj4OTC$P_l8C^$e>@p^K0aV*%I+zqGmEC?w`idq{VH;H`VFXKNy6e2-m4n(qjtcO;ak|HUas)h#Og>1|>&-&*(VQL><7B2AN{Ed1pP+7AX_cr8NsC{Dg^a8*I3PCd<1?%#H?>Q_p>yk1& zTOE!^9ZpS0e~wh1Y{J+r{ZhFMa>o>IXTEK3Z z6>&4a|8zZVP;|OqJs*~?IP5W^0;2r?9D-d68H*zg%QqN#5%^>#3-85DJ*?GQiMAiM zWWC&Bf{7eZb|#Rl)py3MSGlp6(}b*XfRE&TcgJ-iy>QvcmB9>+&&US6{>H#1##Y#n zT4LVcngtVg9|LFDRNgax9Gy<#@j*&rpHo*Rdk$c@K{_h?aAv2fNI@YQNxB+Hj z=p0q%Zqhb!iC@KiKWV-FLvfuZJ0Ta06 zX!z~mZ(sa8NmpYXHq>OHnNo&!{l@P-P8+B8xIqP*+%m2Bb%v^mWmAlffbEhugm7 zY!26f_Tn)xi0CDcrmp>oG6IT~;2HCkCTKHUkqFd-qTE$&qI4D%%Hay$>$sR5ovit` zEnqI6s3Oy|=OXe_ZKYm9eE9z*GM>=l*Zh1xR{c@B&i}^vfhgfNowAd*$SYsqUl#98 zs$pdT9D^)lfoy;uQW4vhbIe7BP1OMX+h)EKrvc@asIb~P2{+vZ1BPaCT3a>&Tf z2h9yl08x!MPF#na#m=`z!R@BTNT!t~EnG-uM@4T3N6jeih0X{Jlt)yJ=sGiUx{kUf zWLD|E&E&J!eMn2$O$?~$7{?@ijFdh$3*l_IIV4UeMO^RPs$wbs(~Tc~l@T^*bXsyL zUV$ejlx10NCowG1yju2)5?YLFaI`?Z8~gEqR5DQHa;H23Th0S%gGpUqcr1NmGTUn= z*8ph2{s);b%|cS#5$rkaF#OqGtvb^J9Oj)&W9stz%?8iC^}db(=~>MdqthB%>?=vs z>E#Ue(*n5@+@?8i0Q{IzD$@ekC8%yK*P7NIh{ti-3{Cz{i9w7N^m6)raW16iTiUdQ ztChqBp;L=@5bJn(?icEr%4kN;_&mRwKT&l6*QWJ%%gYIhrw8vg#FOJ0J|+lEBNxep z`x}dI+N`-{QEwo;HxA%%ANGb5O{d4*C0X(#JHpde0@7ym_-7>unAa)H>d?WV9QFdo z;7eZ?5sg%c-lAXiB~|REs$6UGXJ@yjIm5DN%@U-B>%7E&zu*iglTvskESTuWGHoNf zOKFt*@9`VmhuREc1wQg>htrlszmDdE;UAPFah~xiNUZi{>zWP)UOcl}cggkJVAUha z;cQv8E|sc|W7wFC?JZV+7ZYC)q+(wfNQ8FV#YYd92O8+0ihx_A#Z*lqCO5tMP~5Dz zrT4}#=`_aMCXAxN5SM9D?yDI0Cw*F#PZEemBmRfHswW)6@Fk@iP20lGnLC8+XTtQ` z&@09;uGT#{1>32)uhq~FFuQk=?~Q4E(BeNfpdC*f9NV;JNPmR!H!d}^OuiGRW*WN& z2L6@I-1`lug596K$-Tt&1=y7FWW(FK6iQroFEbGa2v+G7z<7wtC_qGXqY%a7MTo_2GHy2A=%Nkd^pPr#VlmjKXC=(WjSJMY`WDRAqj&);~=e z^CDzIFR1|nV2kkQ!zwdou^&EEW-fMwJG?TJa*W|CvCYHr*r{sbw{6loAtQ^3tDm?U zi!}Fz;lI>v;0KyFi1)rw=00>xQ<{T-5Kfjj8jm-Y>I@$pmkYwrwCBf6S-_OH(RDPy zumnWFFBguFsz#8Fw>98v_x$KSf0K6wDN|$%BXnnos*Lz50lm>usdY}IFBe4;w6HNb z0@y&~@RS>k{_!u~TS8@%*+^VONCxs7!mO>c{Osf2O+w9|Jbk!}GARq^<~#p;4v;l@ zU-COSdM4>~#pP4gaHS;HLEdcuZIoYimdhc{S>_m$_+Pohabk-VxSx2k#{|2R#A0xV zh-{(pA}}~o_{+iH2>eLo#As|m%CK6ChFb!GvHlVMQpYTP1Ue_d1kYB$DeUV?oxh-M z$dxmw_&0ej*Q9!zY1OlPC>n;ZO6!a`8AuQDMEu{fz@-PfvK?{dnq~GT3Doab>z$L+ zWB;n>x8G#np8?bC22(@NGT_)B#tW|!_vF+P3)JIksdoq0uQg||gqK_;%u8NGB38ml zTkTMcwa0LpARZ^I3G0#1Ej>EW@-8w9iEYn;XDflE>+uX-)ys8%JyT^39F=08%ll04 z8`vmlVCp3ANFro>odoJ{f?KGFp;mwW;|qirXLBaad#+$7IF&#vmH%IW@m`PY3!i+g z_M@cGN=ZQ8u)K^JU?-<<%xaFc%US`+*Q{kv7CwPnN4t!~3{&|4Vw&rb@p+4XnrkCE zH9=x6HY)c-0KeX@@vP)leBwT5u(g!cnWmPRB)|D%4^G-hT(f)gw6cq8MU|+*w+7|r zo5gCkSIwKOZ3$L;`Z1r1kq^cR|JLe_9N*a_(!6ba3KLbDvn3OYqL0;2 z0FM*OQ-!N8yV#q~`w%ZsG;y5fo>3@_Djtk!=sDaao`01qW~(+K?Ji6DSjf(|rAa}; z#>DnZD~KZ6Z!IH2>PYWb_IWV$3^sR7em_2SO(x)!bUKL{{jWO{EH`pj0IHLZ^GhC> Qsw9@0vZhkC;=73d14Bu5F8}}l literal 34373 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 Y6A#vmz>0yNmH+?%07*qoM6N<$g8Yh!C;$Ke diff --git a/service/src/storage/config.ts b/service/src/storage/config.ts index 9aba3ec5..efe8ce53 100644 --- a/service/src/storage/config.ts +++ b/service/src/storage/config.ts @@ -102,7 +102,7 @@ export async function getOriginConfig() { if (!config.advancedConfig) { config.advancedConfig = new AdvancedConfig( - 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully.Respond using markdown (latex start with $).', + '你是江苏省的一名造价工程师,一个造价专业的AI大模型。请仔细遵循用户的指示。使用 Markdown 进行回复(LaTeX 以 $ 开始)。', 0.8, 1, 20, @@ -117,7 +117,7 @@ export async function getOriginConfig() { } if (!isNotEmptyString(config.siteConfig.chatModels)) - config.siteConfig.chatModels = 'gpt-3.5-turbo,gpt-4-turbo-preview,gpt-4-vision-preview' + config.siteConfig.chatModels = 'zjai' return config } diff --git a/service/src/storage/mongo.ts b/service/src/storage/mongo.ts index 5803ad21..7995b426 100644 --- a/service/src/storage/mongo.ts +++ b/service/src/storage/mongo.ts @@ -362,7 +362,7 @@ async function initUserInfo(userInfo: WithId) { if (userInfo.config == null) userInfo.config = new UserConfig() if (userInfo.config.chatModel == null) - userInfo.config.chatModel = 'gpt-3.5-turbo' + userInfo.config.chatModel = 'zjai' if (userInfo.roles == null || userInfo.roles.length <= 0) { userInfo.roles = [] if (process.env.ROOT_USER === userInfo.email.toLowerCase()) diff --git a/src/assets/avatar.jpg b/src/assets/avatar.jpg index 9be9587ff23cc0efbf6e9d7222959950bc4b8d2e..8c1909468f57b582bf4e9fe0defac5ae4c58c324 100644 GIT binary patch literal 14730 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

wi5vuzNcLzFFydDNu}3>^VwaqL;o=(Ce+ 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 literal 5155 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

h%Nh>>>MPPzqj?o+6WLXk#(OCx7!!&bT@#qmjm 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 J>Hd%5{{w(OgJS>y literal 0 HcmV?d00001 diff --git a/src/components/common/GitHubSite/index.vue b/src/components/common/GitHubSite/index.vue index 607cf90c..1d2d58ca 100644 --- a/src/components/common/GitHubSite/index.vue +++ b/src/components/common/GitHubSite/index.vue @@ -1,18 +1,12 @@ + diff --git a/src/store/modules/auth/index.ts b/src/store/modules/auth/index.ts index b3c43e46..62933293 100644 --- a/src/store/modules/auth/index.ts +++ b/src/store/modules/auth/index.ts @@ -64,7 +64,7 @@ export const useAuthStore = defineStore('auth-store', { const userStore = useUserStore() if (decoded.config === undefined || decoded.config === null) { decoded.config = new UserConfig() - decoded.config.chatModel = 'gpt-3.5-turbo' + decoded.config.chatModel = 'zjai' } await userStore.updateUserInfo(false, { diff --git a/src/store/modules/user/helper.ts b/src/store/modules/user/helper.ts index a44aa175..cae2b417 100644 --- a/src/store/modules/user/helper.ts +++ b/src/store/modules/user/helper.ts @@ -35,10 +35,10 @@ export function defaultSetting(): UserState { name: '', description: '', root: false, - config: { chatModel: 'gpt-3.5-turbo' }, + config: { chatModel: 'zjai' }, roles: [], advanced: { - systemMessage: 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully. Respond using markdown.', + systemMessage: '你是江苏省的一名造价工程师,一个造价专业的AI大模型。请仔细遵循用户的指示。使用 Markdown 进行回复(LaTeX 以 $ 开始)。', temperature: 0.8, top_p: 1, maxContextCount: 20, @@ -53,11 +53,11 @@ export function getLocalState(): UserState { if (localSetting != null && localSetting.userInfo != null) { if (localSetting.userInfo.config == null) { localSetting.userInfo.config = new UserConfig() - localSetting.userInfo.config.chatModel = 'gpt-3.5-turbo' + localSetting.userInfo.config.chatModel = 'zjai' } if (!localSetting.userInfo.advanced) { localSetting.userInfo.advanced = { - systemMessage: 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully. Respond using markdown.', + systemMessage: '你是江苏省的一名造价工程师,一个造价专业的AI大模型。请仔细遵循用户的指示。使用 Markdown 进行回复(LaTeX 以 $ 开始)。', temperature: 0.8, top_p: 1, maxContextCount: 20, diff --git a/src/views/chat/components/Message/Avatar.vue b/src/views/chat/components/Message/Avatar.vue index 1b265f9d..23f1f929 100644 --- a/src/views/chat/components/Message/Avatar.vue +++ b/src/views/chat/components/Message/Avatar.vue @@ -22,7 +22,7 @@ const avatar = computed(() => userStore.userInfo.avatar) From f3bb6aa73f9ed05b5cc67f61e97b049a60c76400 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Mon, 27 May 2024 04:02:30 +0800 Subject: [PATCH 04/17] Delete prompts-zj.json Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- prompts-zj.json | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 prompts-zj.json diff --git a/prompts-zj.json b/prompts-zj.json deleted file mode 100644 index 944fe20e..00000000 --- a/prompts-zj.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "act": "担任造价工程师", - "prompt": "我希望你假定自己是造价工程师,根据提问,回答造价专业的问题" - }, - { - "act": "担任面试官", - "prompt": "我想让你担任造价工程师面试官。我将成为候选人,您将向我询问造价工程师职位的面试问题。我希望你只作为面试官回答。不要一次写出所有的问题。我希望你只对我进行采访。问我问题,等待我的回答。不要写解释。像面试官一样一个一个问我,等我回答。我的第一句话是“面试官你好”\n" - }, - { - "act": "充当 Excel 工作表", - "prompt": "我希望你充当基于文本的 excel。您只会回复我基于文本的 10 行 Excel 工作表,其中行号和单元格字母作为列(A 到 L)。第一列标题应为空以引用行号。我会告诉你在单元格中写入什么,你只会以文本形式回复 excel 表格的结果,而不是其他任何内容。不要写解释。我会写你的公式,你会执行公式,你只会回复 excel 表的结果作为文本。首先,回复我空表。\n" - }, - { - "act": "担任造价写作导师", - "prompt": "我想让你做一个造价写作导师。我将为您提供一名需要帮助改进其写作的学生,您的任务是使用人工智能工具(例如自然语言处理)向学生提供有关如何改进其作文的反馈。您还应该利用您在有效写作技巧方面的修辞知识和经验来建议学生可以更好地以书面形式表达他们的想法和想法的方法。我的第一个请求是“我需要有人帮我修改我的硕士论文”。\n" - }, - { - "act": "作为造价师的招聘人员", - "prompt": "我想让你担任招聘人员。我将提供一些关于职位空缺的信息,而你的工作是制定寻找合格申请人的策略。这可能包括通过社交媒体、社交活动甚至参加招聘会接触潜在候选人,以便为每个职位找到最合适的人选。我的第一个请求是“我需要帮助改进我的简历。”\n" - }, - { - "act": "担任职业顾问", - "prompt": "我想让你担任职业顾问。我将为您提供一个在职业生涯中寻求指导的人,您的任务是帮助他们根据自己的技能、兴趣和经验确定最适合的职业。您还应该对可用的各种选项进行研究,解释不同行业的就业市场趋势,并就哪些资格对追求特定领域有益提出建议。我的第一个请求是“我想建议那些想在软件工程领域从事潜在职业的人。”\n" - }, - { - "act": "担任造价工程师", - "prompt": "我希望你担任造价工程师,并想出创造性的方法来管理工程造价。在为客户制定财务计划时,您需要考虑预算、投资策略和风险管理。在某些情况下,您可能还需要提供有关税收法律法规的建议,以帮助他们实现利润最大化。我的第一个建议请求是“为小型企业制定一个专注于成本节约和长期投资的财务计划”。\n" - }, - { - "act": "担任造价顾问", - "prompt": "我希望你担任造价顾问,为各种造价方案提供建议,例如如何套定额、如何计价、如何计算工程量等" - }, - { - "act":"论文优化助理", - "prompt":"你现在来扮演一个大学生毕业论文指导老师,研究方向是《自行输入》,现在你来开始教我怎么做。比如先给我列出此研究方向的大纲。" - } -] From c24234585d380e71c626da0c18fb907ff10a1aaa Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:03:26 +0800 Subject: [PATCH 05/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 83357628..98094bb3 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -21,7 +21,7 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - repository: ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web + repository: ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web # Description length should be no longer than 100 characters. short-description: A third-party ChatGPT Web UI page, through the official OpenAI completion API. readme-filepath: README.en.md From 8fda6bba0cc24b1a0f208f794938d99196d3d3b5 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:13:18 +0800 Subject: [PATCH 06/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 105 +++++++++++++++-------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 98094bb3..c7dc9c59 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -1,65 +1,68 @@ -name: build_docker +name: build_docker # 工作流名称:构建 Docker on: push: - branches: [main] + branches: [main] # 当推送到 main 分支时触发 release: - types: [created] # This will only run on new releases + types: [created] # 仅在创建新版本时触发 + workflow_dispatch: # 启用手动触发 jobs: - docker_hub_description: - name: Docker Hub description - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 + docker_hub_description: # 任务名称:更新 Docker Hub 描述 + name: Docker Hub description # 任务显示名称 + runs-on: ubuntu-latest # 运行环境:最新的 Ubuntu + steps: # 任务步骤 + - name: Checkout # 步骤名称:检出代码 + uses: actions/checkout@v4 # 使用 GitHub 官方的检出操作 with: sparse-checkout: | - README.en.md - - name: Docker Hub Description - uses: peter-evans/dockerhub-description@v4 + README.en.md # 仅检出 README.en.md 文件 + + - name: Docker Hub Description # 步骤名称:更新 Docker Hub 描述 + uses: peter-evans/dockerhub-description@v4 # 使用第三方操作更新描述 with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - repository: ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web - # Description length should be no longer than 100 characters. - short-description: A third-party ChatGPT Web UI page, through the official OpenAI completion API. - readme-filepath: README.en.md - enable-url-completion: true + username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub 用户名 + password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub 密码 + repository: ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web # Docker Hub 仓库名称 + short-description: A third-party ChatGPT Web UI page, through the official OpenAI completion API. # 简短描述 + readme-filepath: README.en.md # 用于描述的 README 文件路径 + enable-url-completion: true # 启用 URL 完成功能 + + build_docker: # 任务名称:构建 Docker 镜像 + name: Build docker # 任务显示名称 + runs-on: ubuntu-latest # 运行环境:最新的 Ubuntu + steps: # 任务步骤 + - name: Checkout # 步骤名称:检出代码 + uses: actions/checkout@v4 # 使用 GitHub 官方的检出操作 - build_docker: - name: Build docker - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 + - run: | # 运行命令 + env # 打印所有环境变量 - # Print out all environment variables - - run: | - env + - name: Set up QEMU # 步骤名称:设置 QEMU + uses: docker/setup-qemu-action@v3 # 使用 Docker 官方的 QEMU 设置操作 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to Docker Hub - uses: docker/login-action@v3 + - name: Set up Docker Buildx # 步骤名称:设置 Docker Buildx + uses: docker/setup-buildx-action@v3 # 使用 Docker 官方的 Buildx 设置操作 + + - name: Login to Docker Hub # 步骤名称:登录 Docker Hub + uses: docker/login-action@v3 # 使用 Docker 官方的登录操作 with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push - id: docker_build - uses: docker/build-push-action@v5 + username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub 用户名 + password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub 密码 + + - name: Build and push # 步骤名称:构建并推送镜像 + id: docker_build # 步骤 ID + uses: docker/build-push-action@v5 # 使用 Docker 官方的构建和推送操作 with: - context: . - push: true - labels: ${{ steps.meta.outputs.labels }} - platforms: linux/amd64,linux/arm64 - tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/chatgpt-web:${{ github.ref_name }} - ${{ secrets.DOCKERHUB_USERNAME }}/chatgpt-web:latest - ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web:${{ github.ref_name }} - ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web:latest - build-args: | - GIT_COMMIT_HASH=${{ github.sha }} - RELEASE_VERSION=${{ github.ref_name }} + context: . # 构建上下文目录 + push: true # 构建成功后推送镜像 + labels: ${{ steps.meta.outputs.labels }} # 镜像标签 + platforms: linux/amd64,linux/arm64 # 支持的平台架构 + tags: | # 镜像标签列表 + ${{ secrets.DOCKERHUB_USERNAME }}/chatgpt-web:${{ github.ref_name }} # 使用 GitHub 参考名称作为标签 + ${{ secrets.DOCKERHUB_USERNAME }}/chatgpt-web:latest # 最新标签 + ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web:${{ github.ref_name }} # 使用命名空间和参考名称作为标签 + ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web:latest # 使用命名空间的最新标签 + build-args: | # 构建参数 + GIT_COMMIT_HASH=${{ github.sha }} # Git 提交哈希 + RELEASE_VERSION=${{ github.ref_name }} # 发布版本 From e4179c1a260d619e227029d847058ab11ae84e0a Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:16:19 +0800 Subject: [PATCH 07/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index c7dc9c59..d5c40c60 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -59,10 +59,10 @@ jobs: labels: ${{ steps.meta.outputs.labels }} # 镜像标签 platforms: linux/amd64,linux/arm64 # 支持的平台架构 tags: | # 镜像标签列表 - ${{ secrets.DOCKERHUB_USERNAME }}/chatgpt-web:${{ github.ref_name }} # 使用 GitHub 参考名称作为标签 - ${{ secrets.DOCKERHUB_USERNAME }}/chatgpt-web:latest # 最新标签 - ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web:${{ github.ref_name }} # 使用命名空间和参考名称作为标签 - ${{ vars.DOCKERHUB_NAMESPACE }}/chatgpt-web:latest # 使用命名空间的最新标签 + ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:${{ github.ref_name }} # 使用 GitHub 参考名称作为标签 + ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:latest # 最新标签 + ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:${{ github.ref_name }} # 使用命名空间和参考名称作为标签 + ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:latest # 使用命名空间的最新标签 build-args: | # 构建参数 GIT_COMMIT_HASH=${{ github.sha }} # Git 提交哈希 RELEASE_VERSION=${{ github.ref_name }} # 发布版本 From c3b228184465efa3345d7abe549ff1fd07e572a3 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:19:18 +0800 Subject: [PATCH 08/17] Delete .github/workflows/ci.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/ci.yml | 47 ---------------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index a9ffddf4..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: CI - -on: - push: - branches: - - main - - pull_request: - branches: - - main - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - - name: Setup - run: npm i -g @antfu/ni - - - name: Install - run: nci - - - name: Lint - run: nr lint - - typecheck: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set node - uses: actions/setup-node@v3 - with: - node-version: 18.x - - - name: Setup - run: npm i -g @antfu/ni - - - name: Install - run: nci - - - name: Typecheck - run: nr type-check From d0471459e07a242f136c4f9f93337a26fb21c4d3 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:20:45 +0800 Subject: [PATCH 09/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index d5c40c60..ffc580eb 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -59,10 +59,10 @@ jobs: labels: ${{ steps.meta.outputs.labels }} # 镜像标签 platforms: linux/amd64,linux/arm64 # 支持的平台架构 tags: | # 镜像标签列表 - ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:${{ github.ref_name }} # 使用 GitHub 参考名称作为标签 + # ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:${{ github.ref_name }} # 使用 GitHub 参考名称作为标签 ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:latest # 最新标签 - ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:${{ github.ref_name }} # 使用命名空间和参考名称作为标签 - ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:latest # 使用命名空间的最新标签 + # ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:${{ github.ref_name }} # 使用命名空间和参考名称作为标签 + # ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:latest # 使用命名空间的最新标签 build-args: | # 构建参数 GIT_COMMIT_HASH=${{ github.sha }} # Git 提交哈希 RELEASE_VERSION=${{ github.ref_name }} # 发布版本 From bd8467e43b09b793752f562211478a6420abafae Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:27:25 +0800 Subject: [PATCH 10/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 84 +++++++++--------------------- 1 file changed, 26 insertions(+), 58 deletions(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index ffc580eb..b7a668e6 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -7,62 +7,30 @@ on: types: [created] # 仅在创建新版本时触发 workflow_dispatch: # 启用手动触发 -jobs: - docker_hub_description: # 任务名称:更新 Docker Hub 描述 - name: Docker Hub description # 任务显示名称 - runs-on: ubuntu-latest # 运行环境:最新的 Ubuntu - steps: # 任务步骤 - - name: Checkout # 步骤名称:检出代码 - uses: actions/checkout@v4 # 使用 GitHub 官方的检出操作 - with: - sparse-checkout: | - README.en.md # 仅检出 README.en.md 文件 - - - name: Docker Hub Description # 步骤名称:更新 Docker Hub 描述 - uses: peter-evans/dockerhub-description@v4 # 使用第三方操作更新描述 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub 用户名 - password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub 密码 - repository: ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web # Docker Hub 仓库名称 - short-description: A third-party ChatGPT Web UI page, through the official OpenAI completion API. # 简短描述 - readme-filepath: README.en.md # 用于描述的 README 文件路径 - enable-url-completion: true # 启用 URL 完成功能 - - build_docker: # 任务名称:构建 Docker 镜像 - name: Build docker # 任务显示名称 - runs-on: ubuntu-latest # 运行环境:最新的 Ubuntu - steps: # 任务步骤 - - name: Checkout # 步骤名称:检出代码 - uses: actions/checkout@v4 # 使用 GitHub 官方的检出操作 - - - run: | # 运行命令 - env # 打印所有环境变量 - - - name: Set up QEMU # 步骤名称:设置 QEMU - uses: docker/setup-qemu-action@v3 # 使用 Docker 官方的 QEMU 设置操作 - - - name: Set up Docker Buildx # 步骤名称:设置 Docker Buildx - uses: docker/setup-buildx-action@v3 # 使用 Docker 官方的 Buildx 设置操作 - - - name: Login to Docker Hub # 步骤名称:登录 Docker Hub - uses: docker/login-action@v3 # 使用 Docker 官方的登录操作 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub 用户名 - password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub 密码 - - - name: Build and push # 步骤名称:构建并推送镜像 - id: docker_build # 步骤 ID - uses: docker/build-push-action@v5 # 使用 Docker 官方的构建和推送操作 - with: - context: . # 构建上下文目录 - push: true # 构建成功后推送镜像 - labels: ${{ steps.meta.outputs.labels }} # 镜像标签 +jobs: # 定义作业 + build: # 作业名称 + + runs-on: ubuntu-latest # 指定在最新的 Ubuntu 环境中运行作业 + + steps: # 定义作业的步骤 + - name: Set up QEMU # 设置 QEMU + uses: docker/setup-qemu-action@v2 # 使用 docker/setup-qemu-action@v2 GitHub Action + + - name: Set up Docker Buildx # 设置 Docker Buildx + uses: docker/setup-buildx-action@v2 # 使用 docker/setup-buildx-action@v2 GitHub Action + + - name: Login to DockerHub # 登录到 DockerHub + uses: docker/login-action@v1 # 使用 docker/login-action@v1 GitHub Action + with: # 提供登录所需的凭据 + username: ${{ secrets.DOCKERHUB_USERNAME }} # DockerHub 用户名,从 GitHub Secrets 获取 + password: ${{ secrets.DOCKERHUB_TOKEN }} # DockerHub 密码,从 GitHub Secrets 获取 + + - name: Build and push # 构建并推送 Docker 镜像 + uses: docker/build-push-action@v4 # 使用 docker/build-push-action@v4 GitHub Action + env: # 设置环境变量 + DOCKER_BUILDKIT: "1" # 启用 Docker BuildKit + with: # 提供构建和推送所需的参数 + # file: mlc-llm-rk3588/Dockerfile-base # 指定 Dockerfile 的路径 + push: true # 构建完成后推送镜像 platforms: linux/amd64,linux/arm64 # 支持的平台架构 - tags: | # 镜像标签列表 - # ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:${{ github.ref_name }} # 使用 GitHub 参考名称作为标签 - ${{ secrets.DOCKERHUB_USERNAME }}/zjai-web:latest # 最新标签 - # ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:${{ github.ref_name }} # 使用命名空间和参考名称作为标签 - # ${{ vars.DOCKERHUB_NAMESPACE }}/zjai-web:latest # 使用命名空间的最新标签 - build-args: | # 构建参数 - GIT_COMMIT_HASH=${{ github.sha }} # Git 提交哈希 - RELEASE_VERSION=${{ github.ref_name }} # 发布版本 + tags: jsntwdj/zjai-web:latest # 指定镜像的标签 From 23b2ee18cf2085a5d791739afc2b9012b7cbe14f Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 30 Oct 2024 01:34:18 +0800 Subject: [PATCH 11/17] Update index.vue Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- src/components/common/GitHubSite/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/GitHubSite/index.vue b/src/components/common/GitHubSite/index.vue index 1d2d58ca..37de314a 100644 --- a/src/components/common/GitHubSite/index.vue +++ b/src/components/common/GitHubSite/index.vue @@ -5,7 +5,7 @@ const releaseVersion = import.meta.env.VITE_RELEASE_VERSION || 'v0.0.0' From ffd5864ee0f9013652509aedcba021042cb77811 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 20 Aug 2025 21:23:45 +0800 Subject: [PATCH 12/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 3e9774c7..406e80f2 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -36,4 +36,4 @@ jobs: # 定义作业 # file: mlc-llm-rk3588/Dockerfile-base # 指定 Dockerfile 的路径 push: true # 构建完成后推送镜像 platforms: linux/amd64,linux/arm64 # 支持的平台架构 - tags: jsntwdj/zjai-web:latest # 指定镜像的标签 + tags: jsntwdj/zjai-web:2.0 # latest # 指定镜像的标签 From 86f4dde86eb082e998814a7210607a63fa68c1d9 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 20 Aug 2025 21:31:34 +0800 Subject: [PATCH 13/17] Update index.ts Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- src/store/modules/auth/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/store/modules/auth/index.ts b/src/store/modules/auth/index.ts index d67dbfd6..e586d477 100644 --- a/src/store/modules/auth/index.ts +++ b/src/store/modules/auth/index.ts @@ -56,7 +56,6 @@ export const useAuthStore = defineStore('auth-store', { const userStore = useUserStore() if (decoded.config === undefined || decoded.config === null) decoded.config = new UserConfig() - decoded.config.chatModel = 'zjai' } From 1a2c31a9bbe19223d51719fc63a676533edd0271 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 20 Aug 2025 21:36:58 +0800 Subject: [PATCH 14/17] Update index.ts Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- src/store/modules/auth/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store/modules/auth/index.ts b/src/store/modules/auth/index.ts index e586d477..d906c960 100644 --- a/src/store/modules/auth/index.ts +++ b/src/store/modules/auth/index.ts @@ -54,7 +54,7 @@ export const useAuthStore = defineStore('auth-store', { this.token = token const decoded = jwtDecode(token) as UserInfo const userStore = useUserStore() - if (decoded.config === undefined || decoded.config === null) + if (decoded.config === undefined || decoded.config === null){ decoded.config = new UserConfig() decoded.config.chatModel = 'zjai' } From 7c70f337f8d00229a669dd746a37c66460f3de14 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 20 Aug 2025 21:59:09 +0800 Subject: [PATCH 15/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 169 ++++++++++++++++++++++++----- 1 file changed, 141 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 406e80f2..4370614d 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -1,39 +1,152 @@ +# 工作流名称 +name: Build and push docker image -name: build_docker # 工作流名称:构建 Docker - - +# 触发条件配置 on: push: - branches: [main] # 当推送到 main 分支时触发 + branches: [main] # 当推送到main分支时触发 release: - types: [created] # 仅在创建新版本时触发 - workflow_dispatch: # 启用手动触发 + types: [created] # 当创建新的release时触发 + +# 定义作业 +jobs: + # 第一个作业:更新Docker Hub描述 + docker_hub_description: + name: Docker Hub description # 作业名称 + runs-on: ubuntu-latest # 运行环境 + steps: + # 检出代码 + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: | # 只检出特定文件 + README.en.md # 仅检出英文README文件 + + # 更新Docker Hub仓库描述 + - name: Docker Hub Description + uses: peter-evans/dockerhub-description@v4 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub用户名 + password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub访问令牌 + repository: jsntwdj/zjai-web # 目标仓库 + # 简短描述(不超过100字符) + short-description: A third-party ChatGPT Web UI page, through the official OpenAI completion API. + readme-filepath: README.en.md # 使用的README文件路径 + enable-url-completion: true # 启用URL自动补全 + + # 第二个作业:构建多平台镜像 + build: + name: Build multi-platform images # 作业名称 + strategy: + fail-fast: false # 一个平台失败不影响其他平台 + matrix: + include: + - platform: linux/amd64 # AMD64架构 + os: ubuntu-latest # 使用的运行器 + - platform: linux/arm64 # ARM64架构 + os: ubuntu-24.04-arm # ARM架构专用运行器 + runs-on: ${{ matrix.os }} # 使用矩阵中定义的操作系统 + steps: + # 检出代码 + - name: Checkout + uses: actions/checkout@v4 + + # 准备环境变量 + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV # 将平台信息转换为环境变量格式 + + # 生成Docker元数据(标签等) + - name: Docker meta + id: meta # 步骤ID,用于后续引用 + uses: docker/metadata-action@v5 + with: + images: jsntwdj/zjai-web # 目标镜像名称 + + # 登录Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub用户名 + password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub访问令牌 + + # 设置Docker Buildx(多平台构建工具) + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # 构建并推送镜像 + - name: Build and push by digest + id: build # 步骤ID,用于后续引用 + uses: docker/build-push-action@v6 + with: + context: . # 构建上下文为当前目录 + platforms: ${{ matrix.platform }} # 使用矩阵中定义的平台 + labels: ${{ steps.meta.outputs.labels }} # 使用元数据步骤生成的标签 + build-args: | # 构建参数 + GIT_COMMIT_HASH=${{ github.sha }} # 注入Git提交哈希 + RELEASE_VERSION=${{ github.ref_name }} # 注入发布版本号 + outputs: type=image,name=jsntwdj/zjai-web,push-by-digest=true,name-canonical=true,push=true + + # 导出镜像摘要(digest) + - name: Export digest + run: | + mkdir -p ${{ runner.temp }}/digests # 创建临时目录 + digest="${{ steps.build.outputs.digest }}" # 获取构建步骤输出的摘要 + touch "${{ runner.temp }}/digests/${digest#sha256:}" # 保存摘要到文件 -jobs: # 定义作业 - build: # 作业名称 + # 上传摘要文件作为制品 + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} # 制品名称包含平台信息 + path: ${{ runner.temp }}/digests/* # 上传所有摘要文件 + if-no-files-found: error # 如果没有文件则报错 + retention-days: 1 # 制品保留1天 + # 第三个作业:合并多平台镜像 + merge: + name: Merge multi-platform images # 作业名称 + runs-on: ubuntu-latest # 运行环境 + needs: + - build # 依赖build作业完成 + steps: + # 下载之前上传的摘要制品 + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: ${{ runner.temp }}/digests # 下载路径 + pattern: digests-* # 匹配所有摘要制品 + merge-multiple: true # 合并多个制品 - runs-on: ubuntu-latest # 指定在最新的 Ubuntu 环境中运行作业 + # 登录Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub用户名 + password: ${{ secrets.DOCKERHUB_TOKEN }} # Docker Hub访问令牌 - steps: # 定义作业的步骤 - - name: Set up QEMU # 设置 QEMU - uses: docker/setup-qemu-action@v2 # 使用 docker/setup-qemu-action@v2 GitHub Action + # 设置Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - - name: Set up Docker Buildx # 设置 Docker Buildx - uses: docker/setup-buildx-action@v2 # 使用 docker/setup-buildx-action@v2 GitHub Action + # 生成Docker元数据 + - name: Docker meta + id: meta # 步骤ID,用于后续引用 + uses: docker/metadata-action@v5 + with: + images: jsntwdj/zjai-web # 目标镜像名称 - - name: Login to DockerHub # 登录到 DockerHub - uses: docker/login-action@v1 # 使用 docker/login-action@v1 GitHub Action - with: # 提供登录所需的凭据 - username: ${{ secrets.DOCKERHUB_USERNAME }} # DockerHub 用户名,从 GitHub Secrets 获取 - password: ${{ secrets.DOCKERHUB_TOKEN }} # DockerHub 密码,从 GitHub Secrets 获取 + # 创建多平台清单并推送 + - name: Create manifest list and push + working-directory: ${{ runner.temp }}/digests # 工作目录设置为摘要文件所在目录 + run: | + # 使用jq解析元数据生成标签,并创建多平台清单 + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'jsntwdj/zjai-web@sha256:%s ' *) - - name: Build and push # 构建并推送 Docker 镜像 - uses: docker/build-push-action@v4 # 使用 docker/build-push-action@v4 GitHub Action - env: # 设置环境变量 - DOCKER_BUILDKIT: "1" # 启用 Docker BuildKit - with: # 提供构建和推送所需的参数 - # file: mlc-llm-rk3588/Dockerfile-base # 指定 Dockerfile 的路径 - push: true # 构建完成后推送镜像 - platforms: linux/amd64,linux/arm64 # 支持的平台架构 - tags: jsntwdj/zjai-web:2.0 # latest # 指定镜像的标签 + # 检查生成的镜像 + - name: Inspect image + run: | + # 检查镜像详情,验证多平台支持 + docker buildx imagetools inspect jsntwdj/zjai-web:2.0 # 指定镜像的标签 From d0cef913c0f2081fbe1303dfd11c6cf4bffecc29 Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 20 Aug 2025 22:24:21 +0800 Subject: [PATCH 16/17] Update recommend.json Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- src/assets/recommend.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/recommend.json b/src/assets/recommend.json index 1046f722..92694489 100644 --- a/src/assets/recommend.json +++ b/src/assets/recommend.json @@ -1,6 +1,6 @@ [ { - + "title": "zje", "key": "造价e星球", "desc": "造价Ai 造价师专用调教指南", "downloadUrl": "https://raw.githubusercontent.com/wudingjian/zjai-web/main/prompts-zj.json", From c0d53e358d46c16ac9f7c2ba40bf977202bdb37f Mon Sep 17 00:00:00 2001 From: wudingjian <125175432+wudingjian@users.noreply.github.com> Date: Wed, 20 Aug 2025 22:39:17 +0800 Subject: [PATCH 17/17] Update build_docker.yml Signed-off-by: wudingjian <125175432+wudingjian@users.noreply.github.com> --- .github/workflows/build_docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 4370614d..def9398f 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -149,4 +149,4 @@ jobs: - name: Inspect image run: | # 检查镜像详情,验证多平台支持 - docker buildx imagetools inspect jsntwdj/zjai-web:2.0 # 指定镜像的标签 + docker buildx imagetools inspect jsntwdj/zjai-web:${{ steps.meta.outputs.version }}