From 5eed794b71ca3eeb6d178136392bf34b56f9eda6 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Mon, 31 Mar 2025 10:19:43 +0800 Subject: [PATCH] 'commit' --- ...需要购买的物件清单V20250328.docx | Bin 7035192 -> 7036663 bytes AI/WxMini/Start.py | 21 ++--- AI/WxMini/Test/C1_Html.py | 58 ++++++++++++ AI/WxMini/Test/QVQ_1.py | 87 ++++++++++++++++++ AI/WxMini/__pycache__/Start.cpython-310.pyc | Bin 19042 -> 19280 bytes 5 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 AI/WxMini/Test/C1_Html.py create mode 100644 AI/WxMini/Test/QVQ_1.py diff --git a/AI/Doc/AI硬件研究需要购买的物件清单V20250328.docx b/AI/Doc/AI硬件研究需要购买的物件清单V20250328.docx index e22fa37da833b555b5bde510e9b4dc912aec9474..999e7f29e512a8b254660dc8d4235886ccc16ece 100644 GIT binary patch delta 14315 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 delta 12814 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 M@F%Eh0Kl*QUmbH$)&Kwi diff --git a/AI/WxMini/Start.py b/AI/WxMini/Start.py index 7d258179..d25bfe04 100644 --- a/AI/WxMini/Start.py +++ b/AI/WxMini/Start.py @@ -622,11 +622,10 @@ async def generate_upload_params(current_user: dict = Depends(get_current_user)) @app.get("/aichat/recognize_content") async def web_recognize_content(image_url: str, - # current_user: dict = Depends(get_current_user) + current_user: dict = Depends(get_current_user) ): - # logger.info(f"current_user:{current_user['login_name']}") - # person_id = current_user['person_id'] - person_id = '0F66D9C5-428C-FE03-67EE-E5BEE46CB495' + logger.info(f"current_user:{current_user['login_name']}") + person_id = current_user['person_id'] # 获取图片宽高 image_width, image_height = getImgWidthHeight(image_url) @@ -686,11 +685,10 @@ async def web_recognize_content(image_url: str, @app.get("/aichat/recognize_text") async def web_recognize_text(image_url: str, - # current_user: dict = Depends(get_current_user) + current_user: dict = Depends(get_current_user) ): - # logger.info(f"current_user:{current_user['login_name']}") - # person_id = current_user['person_id'] - person_id = '0F66D9C5-428C-FE03-67EE-E5BEE46CB495' + logger.info(f"current_user:{current_user['login_name']}") + person_id = current_user['person_id'] # 获取图片宽高 image_width, image_height = getImgWidthHeight(image_url) @@ -760,11 +758,10 @@ async def web_recognize_text(image_url: str, @app.get("/aichat/recognize_math") async def web_recognize_math(image_url: str, - # current_user: dict = Depends(get_current_user) + current_user: dict = Depends(get_current_user) ): - # logger.info(f"current_user:{current_user['login_name']}") - # person_id = current_user['person_id'] - person_id = '0F66D9C5-428C-FE03-67EE-E5BEE46CB495' + logger.info(f"current_user:{current_user['login_name']}") + person_id = current_user['person_id'] # 获取图片宽高 image_width, image_height = getImgWidthHeight(image_url) diff --git a/AI/WxMini/Test/C1_Html.py b/AI/WxMini/Test/C1_Html.py new file mode 100644 index 00000000..fe2f0717 --- /dev/null +++ b/AI/WxMini/Test/C1_Html.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +import argparse, sys, markdown + +TEMPLATE = """ + + + + + + + + + + Page Title + + + + + +
+{{content}} +
+ + +""" + + +def parse_args(args=None): + d = 'Make a complete, styled HTML document from a Markdown file.' + parser = argparse.ArgumentParser(description=d) + parser.add_argument('mdfile', type=argparse.FileType('r'), nargs='?', + default=sys.stdin, + help='File to convert. Defaults to stdin.') + parser.add_argument('-o', '--out', type=argparse.FileType('w'), + default=sys.stdout, + help='Output file name. Defaults to stdout.') + return parser.parse_args(args) + + +def main(args=None): + args = parse_args(args) + md = args.mdfile.read() + extensions = ['extra', 'smarty'] + html = markdown.markdown(md, extensions=extensions, output_format='html5') + doc = TEMPLATE.replace('{{content}}', html); + args.out.write(doc) + + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file diff --git a/AI/WxMini/Test/QVQ_1.py b/AI/WxMini/Test/QVQ_1.py new file mode 100644 index 00000000..576417ea --- /dev/null +++ b/AI/WxMini/Test/QVQ_1.py @@ -0,0 +1,87 @@ +from openai import OpenAI +from WxMini.Milvus.Config.MulvusConfig import * + +# 几何题,计算面积和体积 +image_url = "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" +# image_url = 'https://hzkc.oss-cn-beijing.aliyuncs.com/Upload/wuli.png' + +# 初始化OpenAI客户端 +client = OpenAI( + api_key=MODEL_API_KEY, + base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" +) + +reasoning_content = "" # 定义完整思考过程 +answer_content = "" # 定义完整回复 +is_answering = False # 判断是否结束思考过程并开始回复 + +prompt = """ +请以标准的 Markdown 格式返回答案,具体要求如下: +1. 标题使用 `#` 或 `##`。 +2. 列表使用 `-` 或 `*`,并确保缩进一致。 +3. 数学公式使用 `$...$` 表示行内公式。 +4. 数学公式使用 `$$...$$` 表示块级公式。 +5. 在 Markdown 文件中,使用 $$ 标记数学公式,并确保 align* 环境中的公式正确对齐。 +(1). 使用 $$ 包裹多行数学公式。 +(2). 在 align* 环境中,每行公式的开头使用 & 符号对齐。 +(3). 确保公式内容清晰、易读,并正确使用 LaTeX 语法。 + 示例: +markdown> ### 表面积> - **公式**:$S = 2(ab + ah + bh)$ > 其中 $a=4\,\text{cm}$(长)、$b=3\,\text{cm}$(宽)、$h=2\,\text{cm}$(高)。> > - **计算过程**:> $$> \begin{align*}> S &= 2(4 \times 3 + 4 \times 2 + 3 \times 2) \\> &= 2(12 + 8 + 6) \\> &= 2 \times 26 \\> &= 52\,\text{cm}^2> \end{align*}> $$> +注意事项: +- 确保 $$ 包裹的公式块独立成段,不与普通文本混排。 +- 在 align* 环境中,每行公式的开头使用 & 符号对齐,例如 S &= ...。 +- 使用 \text{} 包裹单位,例如 \text{cm}^2。 + +目标: +生成的 Markdown 文件应能够通过 pandoc 正确转换为 HTML,并使用 MathJax 渲染数学公式。 +""" + +# 创建聊天完成请求 +completion = client.chat.completions.create( + model="qvq-max", # 此处以 qvq-max 为例,可按需更换模型名称 + messages=[ + { + "role": "system", + "content": [{"type": "text", "text": "You are a helpful assistant."}], + }, + { + "role": "user", + "content": [ + { + "type": "image_url", + "image_url": { + "url": image_url + }, + }, + {"type": "text", "text": "这道题怎么解答?" + prompt}, + ], + }, + ], + stream=True, +) + +for chunk in completion: + # 如果chunk.choices为空,则打印usage + if not chunk.choices: + print("\nUsage:") + print(chunk.usage) + else: + delta = chunk.choices[0].delta + # 打印思考过程 + if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None: + print(delta.reasoning_content, end='', flush=True) + reasoning_content += delta.reasoning_content + else: + # 开始回复 + if delta.content != "" and is_answering is False: + print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n") + is_answering = True + # 打印回复过程 + print(delta.content, end='', flush=True) + answer_content += delta.content + +# 将完整回复保存到指定文件 +output_file = "c:/1.md" # 指定保存文件的路径 +with open(output_file, "w", encoding="utf-8") as file: + file.write(answer_content) +print(f"\n完整回复已保存到文件:{output_file}") \ No newline at end of file diff --git a/AI/WxMini/__pycache__/Start.cpython-310.pyc b/AI/WxMini/__pycache__/Start.cpython-310.pyc index c1f24b537d33717358e0cde2042e5aec6350577b..4cef6419b9eb8d1a87bf2117ad251f12b0400e0b 100644 GIT binary patch delta 3045 zcma)6du)@}6~FiMBZ=+!m4}^o2r(t(RRRei1OkMFq?AH=G@xyAU0=`GICgS)L#o7W@qIL!TX^Xr~YyVlhPF2NdxAl+x;ZB{{)Jok{ZL9ha8;_myIX0o2 zs`-i zr|CA~ns5raPsB|3x~sk?#!Y zF6n}GKzGkJ3irH6c;l7Q9j{u@7X3WZ!{3%pRwF&Ewgw~D0ab5M4d*TEi0+&q(-+Jn zBdTYvQKEY(nRUW3_*kR#7LH+p9EAPr-bcOD7xL>ddW=lJFxx8pg}$9Cq^yt?tf_|R zm9i2_^XQ&$PCxzm1WDGJGelI+(V3RJN@)IHB_u6(N`TNVw(JKQq;s+sJo7o4-p-a6 zsn#MDC{inm)IE8MKO|~0Y~?As*t9AL+a{}^SqWeH zWI@yYl0>Pb(6c`58PL80odL!V|FS5JTJ##R5+|1R9X8KV{wE0A#s>1TV(699SG4$t zVX*-$KvuNK59BIYQy52Mi?nSNW5*gz%0OMyHjjA^ls>X17oveel z4#`@;&C(CJ<-Ap|7v0PSJ`FhgvLSx2^c7OUop02ej61Pf*2~5PQ{f65J=!Yki)C76 zy^mz{W>H$0Wq1R8vRO8rvfkx1Y}D1%U10L{5{(xZ)s^`Mm%!`Y&Uj-HV*r;fi-X+aMhb6MS>z$iWco!krPmPp6yOZ)5 z!LMz5cDBJx9XVS#l}tv$B9=<3M;n*#`9y0>b_4&@wq=1?RSJtVRVjh~q+UWJG`dpZ*0;X^?Yn~dZO*kinY84 zG<*%Jt%+1Plt`=VEp1IX+pfKPgS+>PjE*13d7=?9J{g_B;A8oqEz7&uZ6_ zXo4m4fg)@`4-1b>C1ySXGF_`43-~&m%?@h5O&)W93@dfur`f2LI&NtejpA2&gJhg; zv{FA0j8eC{88}hvb)vxWFE_2E)wJ}acFSu)3I9Ui##Tm4<`m*wLv}+cc-PG|u)%Ydl?OH?MP@`SFJ2f;brq0<#N`w-@DLC&mH$uP@MK}yS z;ZI_QX8_ttAn;N*ZbjBa)jM6Q0!s=(2V*nlydGG?(MpxCyOrkDVE2$#LbH1J-zmMB zom}mq)S)sx57J+$-}gxRR`!84`>FLqjPtI#w6>Z4L0wt9&FaK(E>+pvR$q=}2N>jR zN2U^~5DT&x=MI#*)xq9}X{&m@ca%0N+IPVEDF$j$!M^phNV&Ov} z(aj^_R5TfzjRfJc2$&as4II>_b)WgiF(7irv|Q5oj=Uf{*1wt3i|X<94fK+_u>J}6 z`)JgO+Af3-)bKz%{i{k1RJn{{%tyi5R4)z$==ZZ%270K4UqQjE%d32qKtOyW*TWdW zn9QKsFxW&>>RW@os(-UzT^xLV#~5g5?bF91$=P1 zY(&@tvQfSlHTw|uBOF8sA{fPQKttTid+_L_`_yj->eNF+_xFd;;t_-}0z-%(d>0{# z5JNbOkU&`M#m-^BMMRE^SJYQSTPRmg4f@pX&2P{#<=OIPlW|tX&D?29{-WQn{<)=_ z;szVqrZDC-!Z((^%A|fX(4>C2^}de(vt+m-SBSc?bzSW>-1`m$2(z! ze$XSJgj{JbI2nTT36AnF)z#r$^i5U2Z9jcL@oi7i6G|J|+t`hznlKm+Sgs_IibnA< zdlyB2ROyjXxAB|LKbXHy8{_C+1P&)^ZGf$<`g8u~hFA$zUFmBf^q%0V| a1Oe{_pG3f;=U5-tm1X>Gx>j8sKl2|`3n!!i delta 2788 zcma)8drX_x6~FiM1LL=`0UHdYydh8slt)5%CE!75l#nzs+1fcC*EM#G4c8wb(EG(~ zXwv>@RMfjhlM0fVv@LY|Ba=62%{FcArnXu%DO!z-q)+KG%SJK_{*@k4A zs@d}IJNKM>e&=z|{ov*m{O7M?YrCnqtIG5wZNOYmsrTf+ep#K zMj%x5#7b2L z6%#9_KVijV=&@nN%*^6>NU^L|%a$~-q#Vo=E!mdxj#g%+UuPy#%B-Z!1Jvb0a;uVO zOV@`KlOHXvYmw|+`7uU{4Wm`7=$?yIFk7K}esoq;tJp5t7T0snWxR|QQ>*oIX`wUg z`G_gS&g`VpgA@mIh};~C_0z*I-t?n*g_^*f`x5Z}uLR<{y#xfWiBx@A60uCA8jfxQ zCsVbgCNI{KeY?^FyHf40RF{+J0lAFSuj72jN(5~KD-oUYY-ylB>MS)fQ=uEHwc^0a zWp~sQt%z32UeZLGNz0~0TFHK9N(sj{b?~&H3`?Y)Ja}0{I!Nc`!l5`t#V%2?C0ezC zR}xr^5k_j$55Pdm)uf9YAl;XxFNroYXS8NRqQ~J$j2;x-7k%Kr*Xdd@M=mwd)I-cw z$W#nX9qAERzm2vfrIevCW>_?>3z{Zm*FAEnSnI<$tW(P51{hb;bzZxH>2*QdNP2U+ zUFHVn+TC$O-O(p@2%V@ucjfZ)*u=^T!>HDXNxxcSv)qzy-A3Y8l*{{b(=Fsua!^hB zP$6kxQ{2ogx;nth1s-Ol0tdJBibrlECgD>7kyu5vow-D$lzK14-K|u-Y6=fB53AhP z6z;3qq#@?nO|ye}%8^oa-yL_cD(2n0rmDUJpUN6foIV{m zd1~A@IYWbBj|ga~rhbrT0KO?8Yn)BQ4xX^JK%VgJB~TcIvQGtt-LN2NiDzBSYB)ZEBAEC^2`>(O|hQu2>y73SA*^Zv$@9%jEDQl7waxfNH2!=yR zss&a8DgFxK#=yQlGW{+Disf0zkAbO!5R1%em(k9zju8~pb@V|tzF4b}6e z-WIIo)4ip74Je9utoIzQ2<}MqXikwib8rOLd<#f~0zI-LWi_EV$?6`DEhXpZFc?1O-#hfA z{bdmA!K(q_CO2Yj;98{KQ$t3 ztER=}P`v#@tUWPH={RfzzsQLAk0XLk+E9zOP$=A!`A9sl5V;tNC50Tkn3w4&PYpGg zk3g&=g5nW6p1C&Egiq~tg? z@*4w{d~D?5{?EaVM*$uK_&h)W;2b~@U=|<*5C+J1;gu0D{x*MoWRzbTbn~InpW+ez z$><9;>iO=Lu-6Lpxak=G!;ua=&aVx5Tj_bAivfIU#*G^O@<0ujj~;9LKeH9r=5fsb zezdPbJ-jKXeWuWWLIDF~Ui>bf8Jl*9KdLBe2n6PX;#dMc`WC-Fb^<@ojpJvqkDnWV z3SZ!FkDsn?gj6-a1Jjo+5-*N0yv<$&)vtKa=fhR}s;?D$Gq3ub5?0G;4Z)r1eybw2Y~$OMSgqoCEUrcAG`7&LW1E{