From b6910ee15b4b5d644ea1310bef3b44e78f8b6da0 Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Fri, 11 Jul 2025 16:23:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E9=80=89=E9=A2=98ap?= =?UTF-8?q?i=E7=9A=84=E8=B0=83=E5=BA=A6=EF=BC=8C=E9=80=89=E9=A2=98api?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E5=BA=A6=E5=AD=98=E5=9C=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/models/__init__.py | 2 +- .../__pycache__/__init__.cpython-312.pyc | Bin 183 -> 183 bytes api/routers/__pycache__/tweet.cpython-312.pyc | Bin 8117 -> 8096 bytes api/routers/tweet.py | 1 - api/services/__init__.py | 2 +- .../__pycache__/__init__.cpython-312.pyc | Bin 185 -> 185 bytes .../__pycache__/tweet.cpython-312.pyc | Bin 10947 -> 11678 bytes api/services/tweet.py | 28 ++++++++++++++---- 8 files changed, 25 insertions(+), 8 deletions(-) diff --git a/api/models/__init__.py b/api/models/__init__.py index bb7c2f6..28c2b2f 100644 --- a/api/models/__init__.py +++ b/api/models/__init__.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- - + """ API模型模块 """ \ No newline at end of file diff --git a/api/models/__pycache__/__init__.cpython-312.pyc b/api/models/__pycache__/__init__.cpython-312.pyc index 65a69862eb8c9c6e16210f341c2b13b0032b80f7..f2a8207178ca77b1364da425f9848c53a1948278 100644 GIT binary patch delta 21 bcmdnaxSf&rG%qg~0}wnsUXbBAk#`jUK^F#o delta 21 bcmdnaxSf&rG%qg~0}xzn&Cl?d$h!&vKEDPk diff --git a/api/routers/__pycache__/tweet.cpython-312.pyc b/api/routers/__pycache__/tweet.cpython-312.pyc index 6c1922d0fd5c94dba4d089015e3f513f77278066..2dfc3caf1613838050d0fcc338bd211289c64b95 100644 GIT binary patch delta 872 zcmdmLzrbGoG%qg~0}${XFUZ&_$-wX!#DM`eDC2Y1MD?=*>5M5nDZD9snT(l?Yxq|) zO=e@1XBSB2O%YrpG+BpHl3O^HCq*PxG>s)ibaDWrGP_tRe~LItuHhSw^PKxg6oljMkHna$5>m02LKkf(RQBVLO?RM~uq_!~_xMoAr3=nHX&* zuj4b}wgZVefC$IQZ~2shT|rDY5aA9YI6;IVkXXr9gl4KYNXiF9cmRoFP#`LRL6IIv z&=*F8ZcgHtU}p51TrFgVV%;7g3kzJ<75QN^GXP{Jh{)TlBfOD`4`jQaCJV%u-jiR8 z+GZm82Pmn@d5brzG$lPXJ~=WH746qA-vVf*^u; z2ik&^hl7X+5CL&uB!~$jmT%rJeUDKC6tlP3it@l7Zndhyw%cP{!w+iRx!#Qh3rCQ+QMOQus3&Ga1(i ztY(HtN6DwkXF0<3Am|jqRNfS!HNr4;Obn@BD7}COcN21%vd2fC$gY^9+w9Dj-4?M1+F~K@dT_<3O=n6agY4K?FGLL0N2a zyBIH56i5g}tk}F%`W~YOC?apM73G(fq!!&`DabD_fg}TPSZ}1CEh+W`)LB!w!pWzpF7A~d+whw%pz2w3e0V=J(a{vGU diff --git a/api/routers/tweet.py b/api/routers/tweet.py index 958f8e0..2fe8913 100644 --- a/api/routers/tweet.py +++ b/api/routers/tweet.py @@ -47,7 +47,6 @@ class ContentWithPromptRequest(BaseModel): logger = logging.getLogger(__name__) router = APIRouter( - prefix="/tweet", tags=["tweet"], responses={404: {"description": "Not found"}}, ) diff --git a/api/services/__init__.py b/api/services/__init__.py index dee1c83..e38a495 100644 --- a/api/services/__init__.py +++ b/api/services/__init__.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- - + """ API服务模块 """ \ No newline at end of file diff --git a/api/services/__pycache__/__init__.cpython-312.pyc b/api/services/__pycache__/__init__.cpython-312.pyc index 0e6de6cd4323f773f43456550e962818ab3e5352..95178cbf213a5f5bded0fa3f0a7c640b71e316f9 100644 GIT binary patch delta 21 bcmdnVxRa6hG%qg~0}wnsUXbBAk#`LML1_kr delta 21 bcmdnVxRa6hG%qg~0}xzp&Cl?d$h!srKOqJ( diff --git a/api/services/__pycache__/tweet.cpython-312.pyc b/api/services/__pycache__/tweet.cpython-312.pyc index 1529e19ce99d941fc05d5734a0ead487b796556e..7838a586a14ec2ac149736a459d740eba7d4e5ac 100644 GIT binary patch delta 3174 zcma)8eQaA-6~EVh@A*5!w`BcDmpDxrU9*a;Ei_wAYQLm5iJji} zvJUk{nbftwrD}H6OnGv+$dy^;U!{;jM@SStfb5Eym$}(Oz;XdZZ z2zcwbXTp2Ti;)hAIMc-(HaF2Xj|-Y(4LUS{Qnr^+s$yPO)cL=xi`jqni2=uASgk!o zaubts?^Jp`C6XbLJeN+2ptlwDMaAO3u~Uchw3<8LCfAf^Q*@jCmq^ewbqOigkr*e`wKDucL zl}`vhFqUMxPdF6%jnVswfc&j6Pz)vO7g35oqetl5y6@;;=6N)2RE*M2 znSN03bEbq+a4?d+C2xAf*hJqq8tI_XU^B?Ul0Fln_iSDqp(Cyum$Bq|9;HkV`2N1y zVlsQsdGtCrZKB7${@oVE1a>+(S{h3!^M9QyjfIh7QjDXzA=HV^UV2l18po`QdrYTr zMNCJ+;H&ZzxvYGWzG*&DRjUf)xv?>ks9ZWbnj=mcu+;a3n3X;|H9=Ug)oLvz2{|{J zP9_SeBW~8=9TT%68Ii?8pOiSAmQNNf=&+@u*-RS1j+#;EmbFONN~CKo za$qHL;Fc?RtJ<08QPY$7KGHXtSB#-q+pA~tR#aEN=GwC2+Op;vSaA*9u-!a*V%3#g zt4h+-)^nXH{4a?efv@!X_FM2fe!Snry%Xqd0fFoQeXUdqKs7*y zWHBobs>ULhAgwS9X=9|FF4_0C*;M_QD3h&BvyBlAHnj!Vl)Q?-@z9&K(V<<;YBwXD zjIi299s?3H6cEGWt6B;WNoP~y^Q4=Z>| zaBwAZ@P>Hv@bT41qL_R-@A#H?OWcc>+i={?Ew}fyg0L~k;t#6c)(L%Vru{TsyM3k~ z*g^6crYPGz6Q5w@vp`}Na)9w0Vel~VAR|Ub{+~^6EP)I%pW&6iM#ZS)V$t-PQJ8O)GHTU=JV zA!Ynj+yxyEM;eqZ`b(D)8|kSEf5fU70c|!#541ut0OrbyrD6osLy@JXy8o0yZFToq z%Hm6h-Oc-1Y^N%LvjHr^zIw4?Fz(f4+gxvTxF(GV`8aXdFfBxb*YCY zz_fw7Ld3P$uR~6?XoIB^sS$aEd=8dUz@G`Y&9#XfrhboKI13%pJ=*6fhaoFQH}>Bg zI<^`aF2PXt%vZL=x8dbh9B=2A+j@2JZFH+Qj9*(E@*cvbN8y$-E9Q&?l2S{T>h0J? zKdx_eJ_D(qHo(uKz_sv-eGg1{wu?6Sp1^K);w$^mvtLArrTMG&X^ZTo-}H52pO)I& zJ`Wu+*61=pYHgT_I^deP2LJXjl3AhFS|cLS=?b|dqKtN7EnaKT>w?XoRZWxWNpU=# z70ar@AZdrLsVH4Adnp&JEG5+woNHu9X)uPhgvIo#u6>(|WewsILv0}N0-WHx!9Dob zG#vVHS54U|`k!Zq^ny2mFrfk#o}%4hkHD^BNX7B6cjjRi5IM?hSQ#l)vd4j2FL9Dq z;58_y_G0dfbxa~hm?ahqi)Xl8hd_aOyl_id$y7EmN&guR2|ofO={^lKzFik;S_^fq zggP(ttD)|-`tDZ_&i2fndNoS_(RfGa+eg(%|BMwc@5TMq+;VqM)qoXWwc~z=aJ90h z3xsPXf4^IItr_>bgljPq<97r>f8Bu@bz#t4cbf)G{PmD;fa9<4<3ax}$AjiwlOFh( z{?9zDXK*mak&_zJA9JY2L?SyfAtn;4nSQ@%yAXgL(n){Y6q?Z@{1lT}DO0%YeJ`O8IDek2rx;$sfWl ze%oB%Ld`;Qq3+UP9=YgyQ6CS={0{n;Xfo*L<9M!iF1gS#ck)t09x-{TaY?!nUwVGI z9b}qoZW5R_|0q4*e8sEni0va5Ami{+4eXVa&W@2TD#fnMctmJZ=I X+H)H{LNBz`+WYi)@81!ln&*E3b7b#3 delta 2574 zcmai0YiwK99lz(k?CVF|CQkg0Z(^sZ^J>}@TADaCk0q)gUQkP=l?@Z@8)G-I({pd2 zg&U;;glN}&C`UX**N#pIIYOYcnYL~dB2m|ev@clw;BtAWUjXrCGcaw^5Q6`?j=Pkp z+mY_?{$Ka_p5Om*eeRLV57+(G>9jGh9{J1M6TE!7&Wo;}Za+Q1G78G|QpcT3@x6_z zmP3A)8E4Y==b5zQZFb!jIL5}DD-L8qD+6p3i(V)D`7>lxxayQ}1H@oAg+}5L$J{aA z;8kU2`VPk#F)0QhMxA`gGD$ScL;OM5n|vD@AcFN>@^{JF`W%zypWzth74}u`1wmjI zL|s&OYSlLY%r%l0si8%vy(nTdPtB?MYEsTmz7P9JL2@CHl%y@>yzC|)x?PQTk9GMa zJD-;P%o*k^zhEJ#Iox2=EoYcCt3_)2>LQ8TJew`LIL+>7b}^@x-r=4?G5d;QJA$~x zyq6r01PJRGeX!mTX9}5&f(<^KpDvix7`BX}B~yj`bT)%&UJOAi%wARV#$a z>kHEi;B5dT<7^hYK~P!pOXs6*Z?Np?EO|Q1p8k@j|Ar@C-W(^Lb*Jwg{I^Q;`|MEv zXbi2z(P%rrHaOe?3Z{>z)(ZqghOxl)99-WVC8xYyBo}Vq|r5e9>-j zz%%ZkmQD&@0KlM_BWC#0?9H|~C?R7*P)f{lFP z?nid=*rxV2hc1G}sdIpJx&Q?t)*_)mM4f{o5lF`WU5$-gVAQ^W0`kYe*2TT>9`l<3 zy5!H^J^%R|m%jKj`TX3k_sIXv2^}JaGdG{kD72+$js2ej*+`Sg3uVZ#n_Hxl=_ze$ z7(W1}yYMvuuBZJ6o>CNTzk;94rj(vLetiM_YKdG6_7Q)m7`BgWMr%$q;^NophFMSy zn|e4qmo%SAi6+;@m4AjNku<aX% zcHOQ^CtR=xb83)hbOAThp-7By6a`?s#!!gFg=2$Jh&80S?3^-_%_|%FIROp*Or*D#*9(ziloosf#tyCH z7-z6Oy#~_Eic~o;$?|b%zJ=%jS|xvqetf@sL#_YMCO79Hrk})Wi_npQhsg(Rev#G# zo*!@E{)1fH^1e4HmxDV>!5!t`L@79NUAYlFP;NT#;y5|cev9)wjL6}w zV~h24V2^oWU=Ibx>(ON&8ViV*{X;uJx#9|sh1n}TXe=aN*(OnWcMI6B1`x#%0?XB~ zH0~0vZVipwglmET_G>l)EZ1Bd$T99qI`^$_g|S$pVNE9UQ?p7kY1l|_Y`Yi) z58h5PvDQWU-N8Shun)lCA1@SUFzo=G1XyBlh|11Z6_5Q)nroS-_l_)ceM$pZ^T{q)HUkS3%T8vZ}xLxXln^$PP8R;yJoR3#H zu-)puXF0X>i;5rT1Qp%I z)N)_(iKXTWL-p0@s(O87_2^m;=r46{5vj4#OS(GW3z!F@$A|@S8g7P#{xQhrGk6E# zyWWdS@UeQ({HuVcz+J6a^XwU_-sZ!w4$KzP^E1jIJ^~H|mzp5M-F=Z;lK(|dS@M@8 X|7*K%NYUfszeJ5i@vj+*<_ Tuple[str, List[Dict[str, Any]]]: @@ -64,8 +70,14 @@ class TweetService: topic_config.topic.date = date topic_config.topic.num = num_topics - # 生成选题 - topics = await self.topic_generator.generate_topics() + # 使用PromptBuilderService构建提示词 + system_prompt, user_prompt = self.prompt_builder.build_topic_prompt( + num_topics=num_topics, + month=date + ) + + # 使用预构建的提示词生成选题 + topics = await self.topic_generator.generate_topics_with_prompt(system_prompt, user_prompt) if not topics: logger.error("未能生成任何选题") return str(uuid.uuid4()), [] @@ -89,8 +101,11 @@ class TweetService: topic_index = topic.get('index', 'unknown') logger.info(f"开始为选题 {topic_index} 生成内容") - # 生成内容 - content = await self.content_generator.generate_content_for_topic(topic) + # 使用PromptBuilderService构建提示词 + system_prompt, user_prompt = self.prompt_builder.build_content_prompt(topic, "content") + + # 使用预构建的提示词生成内容 + content = await self.content_generator.generate_content_with_prompt(topic, system_prompt, user_prompt) # 生成请求ID request_id = f"content_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{str(uuid.uuid4())[:8]}" @@ -136,6 +151,9 @@ class TweetService: topic_index = topic.get('index', 'unknown') logger.info(f"开始审核选题 {topic_index} 的内容") + # 使用PromptBuilderService构建提示词 + system_prompt, user_prompt = self.prompt_builder.build_judge_prompt(topic, content) + # 审核内容 judged_data = await self.content_judger.judge_content(content, topic) judge_success = judged_data.get('judge_success', False) @@ -178,7 +196,7 @@ class TweetService: contents = {} for topic in topics: topic_index = topic.get('index', 'unknown') - content = await self.content_generator.generate_content_for_topic(topic) + _, _, content = await self.generate_content(topic) contents[topic_index] = content # 如果跳过审核,直接返回结果