From 14b4aeb570ea9a74ab9c0a1227fd41a8bec16c29 Mon Sep 17 00:00:00 2001 From: xjs Date: Tue, 1 Apr 2025 16:28:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=88=91=E7=9A=84?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/base.ts | 4 +- src/assets/img/myInput.png | Bin 0 -> 2869 bytes src/assets/img/rightBlue.png | Bin 0 -> 206 bytes src/config/common.ts | 6 ++- src/config/config.ts | 8 +-- .../Antechamber/HeaderGroup/index.module.less | 10 +++- .../Antechamber/HeaderGroup/index.tsx | 31 +++++++---- .../InvokeButton/index.module.less | 48 +++++++++--------- .../Antechamber/MyInput/index.module.less | 28 ++++++++++ .../MainArea/Antechamber/MyInput/index.tsx | 43 ++++++++++++++++ .../MainArea/Antechamber/index.module.less | 4 -- .../MainPage/MainArea/Antechamber/index.tsx | 3 ++ .../MainArea/Room/AudioController.tsx | 3 +- .../MainPage/MainArea/Room/index.module.less | 4 +- 14 files changed, 143 insertions(+), 49 deletions(-) create mode 100644 src/assets/img/myInput.png create mode 100644 src/assets/img/rightBlue.png create mode 100644 src/pages/MainPage/MainArea/Antechamber/MyInput/index.module.less create mode 100644 src/pages/MainPage/MainArea/Antechamber/MyInput/index.tsx diff --git a/src/app/base.ts b/src/app/base.ts index 2ad8372..162ff26 100644 --- a/src/app/base.ts +++ b/src/app/base.ts @@ -13,9 +13,9 @@ type Headers = Record; * @param apiName * @param headers */ -export const requestGetMethod = (apiBasicParams: string, headers = {}) => { +export const requestGetMethod = (apiBasicParams: string, hasPrefix:boolean = false, headers = {}) => { return async (params: Record = {}) => { - const url = `${AIGC_PROXY_HOST}${apiBasicParams}&${Object.keys(params) + const url = `${hasPrefix ? '':AIGC_PROXY_HOST}${apiBasicParams}&${Object.keys(params) .map((key) => `${key}=${params[key]}`) .join('&')}`; const res = await fetch(url, { diff --git a/src/assets/img/myInput.png b/src/assets/img/myInput.png new file mode 100644 index 0000000000000000000000000000000000000000..59c0e0abe6c6c8993c1d50bd613c1727779d16cd GIT binary patch literal 2869 zcmV-53(E9~P)Px4&u!M(kUSiz`7l*C}glv<{c2=NgWP!x??YDCK*7!}lr@|wH5fCzi{-kFozeP=Fr zc_mh*|C*le=|1!Ich31vOWNodgl3d__R<7YVGVFy*2vqtoocj8uL6CkVxS6xRT(O9 zBrq@(Ca2&6lr!RQS4Gg|!NqZZb717c%5~F5O>y5$@-B+Fw53@dwEZ5_bWm-?2Pk6u z3QuJ-j73B{*><(orW<%vpw_;Rs<@)1K;X0Ee-$1Fj&a`!%TdM%M7EoU_Dx1MxiO=j z5B~xN#e2*RjQqeidOmRZ-tbc>h;MWQ&}(lKE5{Vx%o-WKyZL@bXChqdOir2*qO=uY zv==eT^SCz#r&S}a^E@7kr)~|5bhppxUuk#tVG=M|l>Opyjg*_jBP=NMtKkp8>B%;Q zkdf6jthfC_NUqh$=gF9FG_cFY`}RdRr%0|@iJc-;RUDcvy72ZN=5aHDL-E>Xy zy!$-jNUwCLwte{j16%Dmld2CHoJ#Rt8Ep7X7H+ovUT~1YYBwgRC?mJm@PX@gpj(Wz z+UNQvy)30X5U;UCVXnZ$J%DfBy&b5l@Tdm^BbVCwJ&e}Zz&e2%l$M~CzV$u%rswf2 zo&&V2Ky`(^Um~Rtg3=LoVNlymvN>&Zi3q23I$%Lnc_;qfhD*d_gw9A;e4(3o-jt>|sGFxvUZv+8Ne1 zLq7AH^Z}I1+-qfNRRupx)?^lyDj_(}Gm=h%Z8q z3sTAmQSOM>%K;xb%Sv`wuk}lhtjV@8$a>{|Mu%0y_lsn2EdQHuQK&4hf+dzq3K}Z? z+nVGv2e#3<2t!cTM^#)_3HFQX@z|cg_9ASY{vpbHL6f*stZaUxPQl~WJ$?T_yw3$I z=)pYlzTs_zqvCI7M6kevH{yPz!ksZNbc4oEjkNnlx5ezXr+vZ(Bd@28J})qOr@a>{ zw8)OcoKtu|0b3$$OiyyyD}j+w$@hMfPC?86xV=5cfwkSJk-YQPI<@&!xD8=zOq7&k zJ49iDgpe>-cl(sGig>;^p88U10z>efW5=xV9oYwj;qUaxWJ451DVEu z9k4&jr8v8~z&KAhIS&_=B~isrzR^V$Dq(#9eR~xc5D7iA(_~q?NpC2-u+S1@B%Pk7 zgEiukmW)j8cbC@XwqRMBw2y$EiEE?0rYROlL{q}_cIe$jSdZeE1a!BF);{<~Un>La zadNg%UaC|SHr^{GG9=$72{3}6wHW!Gdp}Q8{z?a`W4e`cfK9yf1+IvRu?FSuC62I3 zmBC5kRF7jT!^jeqvNG7^pgfPon&&V)P88vKlqG?YL^GG>Pt8|`r_r9((6%S0C@zHjSzuW*r=X0g@_0E;UZD?N zR~m7O!Z&Iqpv^T_GY_y{nKo*}h^s5q<{6>vsiIu(luN07H!!lWzEMx}JZ1?T!VV>3 z$E`O#35<`|%G(1F2*qQZMoh75pnN4Y46FqEGlX|{`AKC}m(5Js){_fU%ABHGzNKKZ zZ7OTT8s<*DekFrFVU)n#XsLjR0ks)>lfXsR@coVU58;!Y_K706x5db{>B)Mi)Rq(q zLQV<{k5c?2Q4A`4FZ&74`2*Nip$sfo&h=eVTfqSSBB292qni-+wa+y*q&qsuA#6mQ zda?8WEmBI-s#J?`V6v{~F>FJlEKeJ~L*Rx=n-%^j@arND(~5*j!lt#uYH%wmw^%Xc zwh(R!GBSOyVZ<7eFEF~Mij#`$xIb1JR+#@bYvkw2=Dm#`5yA4^uyJ|O-KGk>5M=nO zzKOmmM7b;ZR^j(aLPObCgv*m~6bfgyW@J%AqmC2L9nPPe zgtQ127@NISp7f2rQq<<(jt_3E!0o``3ZoVTE0|ypzY^?qBpSGM;_ZbzS5#Fy=`=^| zua

lUX%R0f+P@lBSuX@^vbJCy=TTNV zyWz)3qbw^|njXhy8)ccF(T@=Z*g2uc5uS3oln&D(wk}i-Yc*n7 zPGuN*L*uOK3G0Ilv;1bRCUPIT#G~*;)>d9d%H?d#pql>RZG*EE<|pP>3jDOu#|6fs zWMd{J8UMo^oSh1(Ynvv^eWTB~I9J+mG2(!HCpJC|GLlqpWmM7`-7Hd490g%aTSlHv zH|fR2qQokrA<0CA6*X{t4)@-v5$9QT{FLoZ?Ie})(=~A4T3al|q-to?OOmSvtEVG4 z$c75fh9R54h3$D|NHy3h+TESlBw8flF&mBivlG~rN36^)SI9A#AST+1;t&vJew&Rb-YpP)=cY4A#6&E^hX6?pFxS6H3Tq7>_ zHW>Ym*IC=P2Q~~GKyTNq%rLsl1TH-8$K?)rbG9s8J??~((%?drlYDeXMM!i1JCESW^=vMUFPGqoBxAS$Y1=QPz5snao)@cK*K2_56L?JD< zF0jw(W+ZF~?K|i-v2g|d!$-4glEHj*s TmXj>{00000NkvXXu0mjf>iB#g literal 0 HcmV?d00001 diff --git a/src/assets/img/rightBlue.png b/src/assets/img/rightBlue.png new file mode 100644 index 0000000000000000000000000000000000000000..28eee5cd762e07d9c4a8d99230b850dd82b50cda GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>>F{)M4ABTq zPEimtICO>6^w0Ffw3Lqe*z-5KeDz}%7M!lnTxQR+{GYMGoZ7<&1dd!d@Pj>)IY!YV zV8b7Kdv5i^XaE0~lq;-B+E9P#{14e>60V978y?zsYcL-!Zu`$8ze7^8MBc>U9|Py( zuoDM9G|pyhcUrVY?UwO_2Z;$D6?YHZXfm(hXtieeU}etT)qGbR=q3hFS3j3^P6> = { */ export const LLM_BOT_ID: Partial> = { // ... 可根据所开通的模型进行扩充 + [AI_MODEL.DOUBAO_PRO_32K]: '7456409430717480998' }; export enum SCENE { @@ -134,7 +136,7 @@ export const Name = { * @brief 智能体启动后的欢迎词。 */ export const Welcome = { - [SCENE.CUSTOM]: 'Hey,我是您的六纬AI小助手', + [SCENE.CUSTOM]: '你好,我是你的六纬AI志愿填报师, 有什么升学选择或者高考志愿填报问题都可以问我', }; export const Model = { @@ -142,7 +144,7 @@ export const Model = { }; export const Voice = { - [SCENE.CUSTOM]: VOICE_TYPE.通用女声, + [SCENE.CUSTOM]: VOICE_TYPE.邻家女孩, }; export const Questions = { diff --git a/src/config/config.ts b/src/config/config.ts index eed40fc..184d2ca 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -12,7 +12,7 @@ import { Welcome, Model, Voice, - // LLM_BOT_ID, + LLM_BOT_ID, AI_MODEL, AI_MODE_MAP, AI_MODEL_MODE, @@ -114,13 +114,13 @@ export class ConfigFactory { /** * @brief 是否为打断模式 */ - InterruptMode = true; + InterruptMode = false; - get LLMConfig() { + get LLMConfig() { const params: Record = { Mode: AI_MODE_MAP[this.Model || ''] || AI_MODEL_MODE.CUSTOM, EndPointId: ARK_V3_MODEL_ID[this.Model], - // BotId: LLM_BOT_ID[this.Model], + BotId: LLM_BOT_ID[this.Model], MaxTokens: 1024, Temperature: 0.1, TopP: 0.3, diff --git a/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.module.less b/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.module.less index e9afd54..d530b8a 100644 --- a/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.module.less +++ b/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.module.less @@ -1,5 +1,11 @@ +.headerWrapper{ + margin-top: 65px; + width: 100%; + padding: 0 16px; + box-sizing: border-box; +} + .wrapper { - width: 343px; height: 105px; background: rgba(176, 228, 255, 0.8); border-radius: 50px 13px 13px 13px; @@ -50,6 +56,8 @@ position: relative; z-index: 1; backdrop-filter:blur(10px); + min-height: 213px; + box-sizing: border-box; } .main { diff --git a/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.tsx b/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.tsx index d2cdc66..5f2b0fb 100644 --- a/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.tsx +++ b/src/pages/MainPage/MainArea/Antechamber/HeaderGroup/index.tsx @@ -5,10 +5,10 @@ import style from './index.module.less'; import WhatsThing from '@/assets/img/whatsThing.png'; import CircleIcon from '@/assets/img/circle.png'; import RightIcon from '@/assets/img/right.png'; -import { Questions } from '@/config'; import { setInitMsg } from '@/store/slices/room'; +import { requestGetMethod } from '@/app/base'; type Props = { @@ -18,26 +18,39 @@ type Props = { export default function HeaderGroup({toRoom}:Props) { const [isRotating, setIsRotating] = useState(false); const [displayQuestions, setDisplayQuestions] = useState([]); + const [allQuestions,setAllQuestions] = useState([]) // 随机获取4个问题的函数 const getRandomQuestions = () => { - const allQuestions = [...Questions.CUSTOM]; + const _allQuestions = Array.from(allQuestions) const result: string[] = []; - const questionCount = Math.min(4, allQuestions.length); + const questionCount = Math.min(4, _allQuestions.length); for (let i = 0; i < questionCount; i++) { - const randomIndex = Math.floor(Math.random() * allQuestions.length); - result.push(allQuestions.splice(randomIndex, 1)[0]); + const randomIndex = Math.floor(Math.random() * _allQuestions.length); + result.push(_allQuestions.splice(randomIndex, 1)[0]); } return result; }; - + const getQuestion = async() => { + const queryData = await requestGetMethod(`https://api.v3.ycymedu.com/api/zhiYuan/aigcquestionswords?`,true)() + const res = await queryData?.json(); + if(res.code === 200){ + setAllQuestions(res.result) + + } + } + + useEffect(() => { + setDisplayQuestions(getRandomQuestions()); + },[allQuestions]) // 组件初始化时获取随机问题 useEffect(() => { - setDisplayQuestions(getRandomQuestions()); + getQuestion(); + }, []); const handleClick = () => { @@ -55,7 +68,7 @@ export default function HeaderGroup({toRoom}:Props) { const dispatch = useDispatch(); const handleQuestion = async(question: string) => { await toRoom(); - + dispatch( setInitMsg(question) ); @@ -63,7 +76,7 @@ export default function HeaderGroup({toRoom}:Props) { }; return ( -

+
hello
Hey,我是您的六纬AI小助手
diff --git a/src/pages/MainPage/MainArea/Antechamber/InvokeButton/index.module.less b/src/pages/MainPage/MainArea/Antechamber/InvokeButton/index.module.less index dee4bf7..a2b77da 100644 --- a/src/pages/MainPage/MainArea/Antechamber/InvokeButton/index.module.less +++ b/src/pages/MainPage/MainArea/Antechamber/InvokeButton/index.module.less @@ -8,28 +8,30 @@ align-items: center; border-radius: 50%; position: relative; + margin-top: auto; + margin-bottom: 80px; } -.wrapper::before{ - position: absolute; - content: ""; - left: 0; - bottom: 0; - width: 26px; - height: 26px; - background: radial-gradient(farthest-corner at 100% 0%, #7BDCF0, #fff); - filter: blur(14px); +.wrapper::before { + position: absolute; + content: ''; + left: 0; + bottom: 0; + width: 26px; + height: 26px; + background: radial-gradient(farthest-corner at 100% 0%, #7bdcf0, #fff); + filter: blur(14px); } -.wrapper::after{ - position: absolute; - content: ""; - left: 20%; - top: 0; - width: 26px; - height: 26px; - background: radial-gradient(farthest-corner at 100% 0%, #7BDCF0, #a4dbe6); - filter: blur(14px); +.wrapper::after { + position: absolute; + content: ''; + left: 20%; + top: 0; + width: 26px; + height: 26px; + background: radial-gradient(farthest-corner at 100% 0%, #7bdcf0, #a4dbe6); + filter: blur(14px); } .text { @@ -38,9 +40,9 @@ font-size: 13px; } -.call{ - width: 32px; - height: 32px; - object-fit: contain; - margin-bottom: 4px; +.call { + width: 32px; + height: 32px; + object-fit: contain; + margin-bottom: 4px; } diff --git a/src/pages/MainPage/MainArea/Antechamber/MyInput/index.module.less b/src/pages/MainPage/MainArea/Antechamber/MyInput/index.module.less new file mode 100644 index 0000000..093ee9a --- /dev/null +++ b/src/pages/MainPage/MainArea/Antechamber/MyInput/index.module.less @@ -0,0 +1,28 @@ +.scoreWrapper { + padding: 15px; + width: 100%; + box-sizing: border-box; +} + +.innerWrapper { + padding: 15px; + width: 100%; + background: rgba(255, 255, 255, 0.7); + border-radius: 13px; + border: 1px solid #f4f6fa; + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; +} + +.detail { + display: flex; + align-items: center; + gap: 10px; + margin-top: 10px; +} + +.right{ + color: #1580FF; +} diff --git a/src/pages/MainPage/MainArea/Antechamber/MyInput/index.tsx b/src/pages/MainPage/MainArea/Antechamber/MyInput/index.tsx new file mode 100644 index 0000000..6667951 --- /dev/null +++ b/src/pages/MainPage/MainArea/Antechamber/MyInput/index.tsx @@ -0,0 +1,43 @@ +import { useDispatch } from 'react-redux'; +import { useSearchParams } from 'react-router-dom'; +import { setInitMsg } from '@/store/slices/room'; +import MyInputIcon from '@/assets/img/myInput.png'; +import RightBlueIcon from '@/assets/img/rightBlue.png'; +import style from './index.module.less'; + +type Props = { + toRoom: () => Promise; +}; + +export default function MyInput({ toRoom }: Props) { + const dispatch = useDispatch(); + const [searchParams] = useSearchParams() + + const provinceName = searchParams.get('provinceName') || '山东省' + const subjectGroup = searchParams.get('subjectGroup') || '物/化/史' + const expectedScore = searchParams.get('expectedScore') || 500 + + const handleQuestion = async () => { + await toRoom(); + dispatch(setInitMsg(`我的高考地点在${provinceName},我选择的科目是${subjectGroup},我的高考分数为${expectedScore}分。我适合哪些学校和专业`)); + }; + + return ( +
+
+
+ input-ico +
+
{provinceName}
+
{(subjectGroup as string).split(',').join('/') }
+
{expectedScore}分
+
+
+
+ 智能分析 + right +
+
+
+ ); +} diff --git a/src/pages/MainPage/MainArea/Antechamber/index.module.less b/src/pages/MainPage/MainArea/Antechamber/index.module.less index 999dcf1..1e8fad4 100644 --- a/src/pages/MainPage/MainArea/Antechamber/index.module.less +++ b/src/pages/MainPage/MainArea/Antechamber/index.module.less @@ -49,8 +49,4 @@ margin-top: 4px; } - .invoke-btn { - position: absolute; - bottom: 120px; - } } \ No newline at end of file diff --git a/src/pages/MainPage/MainArea/Antechamber/index.tsx b/src/pages/MainPage/MainArea/Antechamber/index.tsx index 50309fe..596c46a 100644 --- a/src/pages/MainPage/MainArea/Antechamber/index.tsx +++ b/src/pages/MainPage/MainArea/Antechamber/index.tsx @@ -8,6 +8,8 @@ import { useSearchParams } from 'react-router-dom'; import InvokeButton from '@/pages/MainPage/MainArea/Antechamber/InvokeButton'; import HeaderGroup from '@/pages/MainPage/MainArea/Antechamber/HeaderGroup'; +import MyInput from '@/pages/MainPage/MainArea/Antechamber/MyInput'; + import { useJoin } from '@/lib/useCommon'; import style from './index.module.less'; import { updateAIConfig } from '@/store/slices/room'; @@ -55,6 +57,7 @@ function Antechamber() { return (
+
); diff --git a/src/pages/MainPage/MainArea/Room/AudioController.tsx b/src/pages/MainPage/MainArea/Room/AudioController.tsx index 6d09bf9..bea26e8 100644 --- a/src/pages/MainPage/MainArea/Room/AudioController.tsx +++ b/src/pages/MainPage/MainArea/Room/AudioController.tsx @@ -23,7 +23,8 @@ function AudioController(props: React.HTMLAttributes) { const room = useSelector((state: RootState) => state.room); const volume = room.localUser.audioPropertiesInfo?.linearVolume || 0; const { isAudioPublished,switchMic } = useDeviceState(); - const isAITalking = room.isAITalking; + + const { isAITalking} = useSelector((state: RootState) => state.room); const isLoading = volume >= THRESHOLD_VOLUME && isAudioPublished; const leaveRoom = useLeave(); diff --git a/src/pages/MainPage/MainArea/Room/index.module.less b/src/pages/MainPage/MainArea/Room/index.module.less index e233a3c..d4b049b 100644 --- a/src/pages/MainPage/MainArea/Room/index.module.less +++ b/src/pages/MainPage/MainArea/Room/index.module.less @@ -48,9 +48,7 @@ width: max-content; border: 0px solid; align-self: flex-end; - margin-top: 12px; - margin-bottom: 12px; - margin-right: 15px; + padding: 15px; .content{ border-radius: 30px 30px 0 30px;