Files
vibe_data_ana/__pycache__/data_analysis_agent.cpython-311.pyc

181 lines
22 KiB
Plaintext
Raw Normal View History

<EFBFBD>
,%^i<>V<00><00><><00>dZddlZddlZddlZddlmZmZmZmZddl m
Z
ddl m Z ddl mZddlmZddlmZdd lmZdd
lmZdd lmZmZGd <0C>d <0A><00>ZdS)ux
简化的 Notebook 数据分析智能体
仅包含用户和助手两个角
2. 图片必须保存到指定的会话目录中输出绝对路径禁止使用plt.show()
3. 表格输出控制超过15行只显示前5行和后5行
4. 强制使用SimHei字体plt.rcParams['font.sans-serif'] = ['SimHei']
5. 输出格式严格使用YAML共享上下文的单轮对话模式
<EFBFBD>N)<04>Dict<63>Any<6E>List<73>Optional)<01>create_session_output_dir)<01>format_execution_result)<01>extract_code_from_response)<01>load_and_profile_data)<01> LLMHelper)<01> CodeExecutor)<01> LLMConfig)<02>data_analysis_system_prompt<70>final_report_system_promptc <00><><00>eZdZdZ ddededed efd
<EFBFBD>Zd ed e ee
ffd <0A>Z d ede ee
fd e ee
ffd<0F>Z d ede ee
fd e ee
ffd<10>Z d ede ee
fd e ee
ffd<11>Zddedeeded e ee
ffd<15>Zd efd<16>Zd e ee
ffd<17>Zdee ee
fd efd<19>Zd<1A>ZdS)<1D>DataAnalysisAgentu<74>
数据分析智能体
职责:
- 接收用户自然语言需求
- 生成Python分析代码
- 执行代码并收集结果
- 基于执行结果继续生成后续分析代码
N<>outputs<74>F<>
llm_config<EFBFBD>
output_dir<EFBFBD>
max_rounds<EFBFBD>force_max_roundsc<00><><00>|p t<00><00>|_t|j<00><00>|_||_||_||_g|_g|_d|_ d|_
d|_ d|_ dS)u<>
初始化智能体
Args:
config: LLM配置
output_dir: 输出目录
max_rounds: 最大对话轮数
force_max_rounds: 是否强制运行到最大轮数忽略AI的完成信号
rN<>) r <00>configr <00>llm<6C>base_output_dirrr<00>conversation_history<72>analysis_results<74> current_round<6E>session_output_dir<69>executor<6F> data_profile)<05>selfrrrrs <20>6d:\code\iov_data_analysis_agent\data_analysis_agent.py<70>__init__zDataAnalysisAgent.__init__$sq<00><00> !<21>/<2F>I<EFBFBD>K<EFBFBD>K<EFBFBD><04> <0B><1C>T<EFBFBD>[<5B>)<29>)<29><04><08>)<29><04><1C>$<24><04><0F> 0<><04><1D>$&<26><04>!<21> "<22><04><1D><1E><04><1A>"&<26><04><1F><1C><04> <0A><1E><04><19><19><19><00>response<73>returnc<00>x<00> |j<00>|<01><00>}|<02>dd<02><00>}td|<03><00><02><00>|dkr|<00>||<02><00>S|dkr|<00>||<02><00>S|dkr|<00>||<02><00>Std|<03>d<07><03><00>|<00>||<02><00>S#t$rn}tdt|<04><00><00>d <09><03><00>t|<01><00>}|r|<00>|d
|i<01><00>cYd }~S|<00>|i<00><00>cYd }~Sd }~wwxYw) u<>
统一处理LLM响应判断行动类型并执行相应操作
Args:
response: LLM的响应内容
Returns:
处理结果字典
<20>action<6F> generate_codeu🎯 检测到动作: <20>analysis_complete<74>collect_figuresu⚠️ 未知动作类型: u按generate_code处理u⚠️ 解析响应失败: u.尝试提取代码并按generate_code处理<E5A484>codeN)
r<00>parse_yaml_response<73>get<65>print<6E>_handle_analysis_complete<74>_handle_collect_figures<65>_handle_generate_code<64> Exception<6F>strr )r#r'<00> yaml_datar*<00>e<>extracted_codes r$<00>_process_responsez#DataAnalysisAgent._process_responseAs<00><00> <<3C><1C><08>4<>4<>X<EFBFBD>><3E>><3E>I<EFBFBD><1E>]<5D>]<5D>8<EFBFBD>_<EFBFBD>=<3D>=<3D>F<EFBFBD> <11>3<>6<EFBFBD>3<>3<> 4<> 4<> 4<><15>,<2C>,<2C>,<2C><1B>5<>5<>h<EFBFBD> <09>J<>J<>J<><17>,<2C>,<2C>,<2C><1B>3<>3<>H<EFBFBD>i<EFBFBD>H<>H<>H<><17>?<3F>*<2A>*<2A><1B>1<>1<>(<28>I<EFBFBD>F<>F<>F<><15>U<>F<EFBFBD>U<>U<>U<>V<>V<>V<><1B>1<>1<>(<28>I<EFBFBD>F<>F<>F<><46><18> <<3C> <<3C> <<3C> <11>f<><03>A<EFBFBD><06><06>f<>f<>f<> g<> g<> g<>7<><08>A<>A<>N<EFBFBD><1D> W<01><1C>2<>2<>8<EFBFBD>f<EFBFBD>n<EFBFBD>=U<>V<>V<>V<>V<>V<>V<>V<>V<><17>-<2D>-<2D>h<EFBFBD><02>;<3B>;<3B> ;<3B> ;<3B> ;<3B> ;<3B> ;<3B> ;<3B><><EFBFBD><EFBFBD><EFBFBD>  <<3C><><EFBFBD>s=<00>AC<00> C<00><C<00>(C<00>
D9<03> AD4<03>D9<03>D4<03>.D9<03>4D9r7c<00>Z<00>td<01><00>|<02>dd<03><00>}d||dd<06>S)u处理分析完成动作u✅ 分析任务完成<E5AE8C> final_reportu分析完成无最终报告r,F)r*r<r'<00>continue)r1r0)r#r'r7r<s r$r2z+DataAnalysisAgent._handle_analysis_completecsB<00><00> <0E>&<26>'<27>'<27>'<27> <20>}<7D>}<7D>^<5E>5U<35>V<>V<> <0C>)<29>(<28> <20><1D> 
<EFBFBD>
<EFBFBD>
r&c <00><00>td<01><00>|<02>dg<00><00>}g}|D<00>][}|<05>dd<04><00>}|dkrd|<06>d<06>}nd}|<05>d|<07><00>}|<05>d d
<EFBFBD><00>} |<05>d d
<EFBFBD><00>}
|<05>d d
<EFBFBD><00>} td |<06>d|<08><00><04><00>td| <09><00><02><00>td|
<EFBFBD><00><02><00>td| <0B><00><02><00>|<04>||| |
| d<12><05><00>| rNtj<00>| <09><00>r/td| <09><00><02><00>|<04>||| |
| d<12><05><00><00><01>6| rtd| <09><00><02><00><00><01>Ltd<15><00><00><01>]d||dd<18>S)u处理图片收集动作u📊 开始收集图片<E59BBE>figures_to_collect<63> figure_numberu未知<E69CAA>figure_z.pngzfigure_unknown.png<6E>filename<6D> file_pathr<00> description<6F>analysisu📈 收集图片 z: u 📂 路径: u 📝 描述: u 🔍 分析: )r@rBrCrDrEu ✅ 文件存在: u ⚠️ 文件不存在: u ⚠️ 未提供文件路径r-T)r*<00>collected_figuresr'r=)r1r0<00>append<6E>os<6F>path<74>exists) r#r'r7r?rF<00> figure_infor@<00>default_filenamerBrCrDrEs r$r3z)DataAnalysisAgent._handle_collect_figuresps<00><00> <0E>'<27>(<28>(<28>(<28>&<26>]<5D>]<5D>+?<3F><12>D<>D<><1A><1E><19>-<2D>. ><3E>. ><3E>K<EFBFBD>'<27>O<EFBFBD>O<EFBFBD>O<EFBFBD>X<EFBFBD>F<>F<>M<EFBFBD><1C><08>(<28>(<28>#@<40>]<5D>#@<40>#@<40>#@<40> <20> <20>#7<> <20>"<22><EFBFBD><EFBFBD>z<EFBFBD>3C<33>D<>D<>H<EFBFBD>#<23><0F><0F> <0B>R<EFBFBD>8<>8<>I<EFBFBD>%<25>/<2F>/<2F>-<2D><12><<3C><<3C>K<EFBFBD>"<22><EFBFBD><EFBFBD>z<EFBFBD>2<EFBFBD>6<>6<>H<EFBFBD> <11>B<>}<7D>B<>B<><08>B<>B<> C<> C<> C<> <11>0<>Y<EFBFBD>0<>0<> 1<> 1<> 1<> <11>2<>[<5B>2<>2<> 3<> 3<> 3<> <11>/<2F>X<EFBFBD>/<2F>/<2F> 0<> 0<> 0<> <1E> $<24> $<24>%2<> (<28>!*<2A>#.<2E> (<28> <12><12> <0E> <0E> <0E><19> ><3E>R<EFBFBD>W<EFBFBD>^<5E>^<5E>I<EFBFBD>6<>6<> ><3E><15>9<>i<EFBFBD>9<>9<>:<3A>:<3A>:<3A>!<21>(<28>(<28>)6<>$,<2C>%.<2E>'2<>$,<2C> <16><16><12><12><12><12><1D>><3E><19>C<> <09>C<>C<>D<>D<>D<>D<><19><<3C>=<3D>=<3D>=<3D>=<3D>(<28>!2<> <20><1C> 
<EFBFBD>
<EFBFBD>
r&c<00>,<00>|<02>dd<02><00>}|st|<01><00>}|ro|<03><00><00>}|<03>d<03><00>rFddl}|<04>dd|<03><00>}|<04>dd|<03><00>}|<03><00><00>}|ret d|<03><00><02><00>t d <09><00>|j<00>|<03><00>}t|<05><00>}t d
|<06><00><02><00>d ||||d d <0A>St d<0E><00>dd|d d<11>S)u!处理代码生成和执行动作r.rz```rNz^```[a-zA-Z]*\nz\n```$u🔧 执行代码:
z(----------------------------------------u📋 执行反馈:
r+T)r*r.<00>result<6C>feedbackr'r=uF⚠️ 未从响应中提取到可执行代码要求LLM重新生成<E7949F>invalid_responseu响应中缺少可执行代码)r*<00>errorr'r=)
r0r <00>strip<69>
startswith<EFBFBD>re<72>subr1r!<00> execute_coder)r#r'r7r.rTrNrOs r$r4z'DataAnalysisAgent._handle_generate_code<64>sP<00><00>
<19>}<7D>}<7D>V<EFBFBD>R<EFBFBD>(<28>(<28><04><14> 8<>-<2D>h<EFBFBD>7<>7<>D<EFBFBD> <10> $<24><17>:<3A>:<3A><<3C><<3C>D<EFBFBD><13><EFBFBD><EFBFBD>u<EFBFBD>%<25>%<25> $<24><19> <09> <09> <09><19>v<EFBFBD>v<EFBFBD>0<>"<22>d<EFBFBD>;<3B>;<3B><04><19>v<EFBFBD>v<EFBFBD>i<EFBFBD><12>T<EFBFBD>2<>2<><04><1B>z<EFBFBD>z<EFBFBD>|<7C>|<7C><04> <0F> <0E> <11>/<2F><14>/<2F>/<2F> 0<> 0<> 0<> <11>(<28>O<EFBFBD>O<EFBFBD>O<EFBFBD><1A>]<5D>/<2F>/<2F><04>5<>5<>F<EFBFBD>/<2F>v<EFBFBD>6<>6<>H<EFBFBD> <11>3<><18>3<>3<> 4<> 4<> 4<>*<2A><1C> <20>$<24>$<24> <20> <0E><0E> <0E> <12>Z<> [<5B> [<5B> [<5B>,<2C>9<>$<24> <20> <0E><0E> r&<00>
user_input<EFBFBD>filesr c<00><> <00>g|_g|_d|_d}|r||_nt |j|<01><00>|_t |j<00><00>|_|j<00>d|j<00><00>d}|r-td<04><00>t|<02><00>}td<05><00>||_ d|<01><00>}|r|dd<08> |<02><00><00><00>z }|r |d |<05>d
<EFBFBD>z }td <0B><00>td |<01><00><02><00>|r%td d<08> |<02><00><00><00><02><00>td|j<00><00><02><00>td|j <00><00><02><00>|jrtd|j <00>d<11><03><00>td<12><00>|j<00>d|d<14><02><00>|j|j k<00>r |xjdz c_td|j<00>d<17><03><00> |j<00><00><00>}t#j|<07><18><00>}td|dd<1B><00>d<1C><03><00>tdd|v<00><00><02><00>|j<00>|<00><00><00>|<08><1F><00>} td | <09><00><02><00>|<00>| <09><00>}
|
<EFBFBD>d!<21><00>d"kr0|dz }td#|<04>d$<24><03><00>|d%krtd&<26><00><00>n<>nd}|js'|
<EFBFBD>d'd(<28><00>std)<29><00><00>n<>|j<00>d*| d<14><02><00>|
d!d+kr<>|
<EFBFBD>d,d<03><00>} |j<00>dd-| <0B><00>d<14><02><00>|j<00>|j|
<EFBFBD>d.d<03><00>|
<EFBFBD>d/i<00><00>| d0<64><04><00>n<>|
d!d1kr<>|
<EFBFBD>d2g<00><00>} |
<EFBFBD>d3g<00><00>} d4t1| <0C><00><00>d5<64>} | r| d6| <0A><00>z } |j<00>dd7| <0B>d8<64>d<14><02><00>|j<00>|jd1| | | d9<64><05><00>n\#t2$rO}d:t5|<0E><00><00><00>}td;|<0F><00><02><00>|j<00>dd<|<0F>d=<3D>d<14><02><00>Yd}~nd}~wwxYw|j|j k<00><03> |j|j krtd>|j <00>d?<3F><03><00>|<00><00><00>S)@u 
开始分析流程
Args:
user_input: 用户的自然语言需求
files: 数据文件路径列表
session_output_dir: 指定的会话输出目录(可选)
Returns:
分析结果字典
rr ru 🔍 正在生成数据画像...u✅ 数据画像生成完毕u用户需求: u
数据文件: z, <20>
u<EFBFBD>
请根据上述【数据画像】中的统计信息如高频值、缺失率、数据范围来制定分析策略。如果发现明显的高频问题或异常分布请优先进行深度分析。u🚀 开始数据分析任务u📝 用户需求: u📁 数据文件: <20>📂 输出目录: u🔢 最大轮数: u⚡ 强制模式: 将运行满 u忽略AI完成信号z<============================================================<3D>user)<02>role<6C>content<6E>u
🔄 第 u
轮分析)<01>notebook_variablesu!🐛 [DEBUG] System Prompt Head:
Ni<EFBFBD>z ...
[...]u@🐛 [DEBUG] System Prompt Rules Check: 'stop_words' in prompt? <20>
stop_words)<02>prompt<70> system_promptu🤖 助手响应:
r*rPu⚠️ 连续失败次数: z/3<>uS❌ 连续3次无法获取有效响应分析终止。请检查网络或配置。r=Tu
✅ 分析完成<E68890> assistantr+rOu代码执行反馈:
r.rN)<04>roundr.rNr'r-rF<00>missing_figuresu
已收集 u 个有效图片及其分析。uR
⚠️ 以下图片未找到,请检查代码是否成功保存了这些图片: u图片收集反馈:
u
请继续下一步分析。)rfr*rFrgr'uLLM调用错误: u❌ u发生错误: u请重新生成代码。u
⚠️ 已达到最大轮数 (u),分析结束)rrrr rrr r!<00> set_variabler1r
r"<00>joinrrrG<00>get_environment_infor<00>formatr<00>call<6C>_build_conversation_promptr:r0<00>lenr5r6<00>_generate_final_report)r#rWrXr <00>consecutive_failuresr"<00>initial_promptr`<00>formatted_system_promptr'<00>process_resultrOrFrgr8<00> error_msgs r$<00>analyzezDataAnalysisAgent.analyze<7A>s<><00><00>%'<27><04>!<21> "<22><04><1D><1E><04><1A> <20><1C> <1E> <0E>'9<>T<EFBFBD> $<24> $<24>&?<3F><14>$<24>j<EFBFBD>'<0E>'<0E>D<EFBFBD> #<23> %<25>T<EFBFBD>%<<3C>=<3D>=<3D><04> <0A> <0A> <0A>"<22>"<22>#7<><14>9P<39>Q<>Q<>Q<><1A> <0C> <10> 2<> <11>4<> 5<> 5<> 5<>0<><15>7<>7<>L<EFBFBD> <11>0<> 1<> 1<> 1<>)<29><04><19>;<3B>J<EFBFBD>:<3A>:<3A><0E> <10> D<01> <1A>C<><14><19><19>5<EFBFBD>1A<31>1A<31>C<>C<> C<>N<EFBFBD> <17> A<04> <1A>A<04>\<5C>A<04>A<04>A<04> A<04>N<EFBFBD> <0A>.<2E>/<2F>/<2F>/<2F> <0A>0<>J<EFBFBD>0<>0<>1<>1<>1<> <10> <<3C> <11>:<3A><04> <09> <09>%<25>(8<>(8<>:<3A>:<3A> ;<3B> ;<3B> ;<3B> <0A>=<3D>D<EFBFBD>$;<3B>=<3D>=<3D>><3E>><3E>><3E> <0A>5<>D<EFBFBD>O<EFBFBD>5<>5<>6<>6<>6<> <0F> <20> e<01> <11>c<>D<EFBFBD>O<EFBFBD>c<>c<>c<> d<> d<> d<> <0A>h<EFBFBD><0F><0F><0F> <0C>!<21>(<28>(<28>&<26>^<5E>)T<>)T<>U<>U<>U<><12> <20>4<EFBFBD>?<3F>2<>2<> <10> <1E> <1E>!<21> #<23> <1E> <1E> <11>><3E><04> 2<>><3E>><3E>><3E> ?<3F> ?<3F> ?<3F>^ <12>%)<29>]<5D>%G<>%G<>%I<>%I<>"<22>+F<01>*L<>'9<>+<12>+<12>+<12>'<27><16>d<>;R<>SW<53>TW<54>SW<53>;X<>d<>d<>d<>e<>e<>e<><15>C<02>Ye<59>jA<02>ZA<02>C<02>C<02>D<02>D<02>D<02><1F>8<EFBFBD>=<3D>=<3D><1F>:<3A>:<3A><<3C><<3C>"9<>)<29><12><12><08>
<16>7<>X<EFBFBD>7<>7<>8<>8<>8<>"&<26>!7<>!7<><08>!A<>!A<><0E>"<22>%<25>%<25>h<EFBFBD>/<2F>/<2F>3E<33>E<>E<>(<28>A<EFBFBD>-<2D>(<28><19>P<>8L<38>P<>P<>P<>Q<>Q<>Q<>+<2B>q<EFBFBD>0<>0<><1D>t<>u<>u<>u<><1D>1<>,-<2D>(<28><1B>,<2C><1A>^<5E>5G<35>5G<35><1E><04>6<12>6<12><1A><1A>2<>3<>3<>3<><19><15>)<29>0<>0<>(<28>X<EFBFBD>><3E>><3E><12><12><12>
"<22>(<28>+<2B><EFBFBD>><3E>><3E>-<2D>1<>1<>*<2A>b<EFBFBD>A<>A<>H<EFBFBD><18>-<2D>4<>4<>!'<27>4V<34>H<EFBFBD>4V<34>4V<34>W<>W<><16><16><16>
<19>)<29>0<>0<>%)<29>%7<>$2<>$6<>$6<>v<EFBFBD>r<EFBFBD>$B<>$B<>&4<>&8<>&8<><18>2<EFBFBD>&F<>&F<>(0<> <1A><1A><16><16><16><16>$<24>H<EFBFBD>-<2D>1B<31>B<>B<>(6<>(:<3A>(:<3A>;N<>PR<50>(S<>(S<>%<25>&4<>&8<>&8<>9J<39>B<EFBFBD>&O<>&O<>O<EFBFBD>c<>C<EFBFBD>0A<30>,B<>,B<>c<>c<>c<>H<EFBFBD>&<26>L<02> <20>%L<02>{J<02>%L<02>%L<02>L<02><08><18>-<2D>4<>4<>$*<2A>'f<>x<EFBFBD>'f<>'f<>'f<><1A><1A><16><16><16><19>)<29>0<>0<>%)<29>%7<>&7<>1B<31>/><3E>(0<> <1A><1A> <16> <16> <16><><EFBFBD><1D> <12> <12> <12>8<><03>A<EFBFBD><06><06>8<>8<> <09><15>(<28>Y<EFBFBD>(<28>(<28>)<29>)<29>)<29><14>)<29>0<>0<> &<26>#Z<>I<EFBFBD>#Z<>#Z<>#Z<><16><16><12><12><12><12><12><12><12><12><><EFBFBD><EFBFBD><EFBFBD> <12><><EFBFBD><EFBFBD>u<13> <20>4<EFBFBD>?<3F>2<>2<>H <10> <1D><14><1F> 0<> 0<> <11>V<>T<EFBFBD>_<EFBFBD>V<>V<>V<> W<> W<> W<><13>*<2A>*<2A>,<2C>,<2C>,s'<00>C8Q<00>/Q<00>EQ<00>
R!<03>AR<03>R!c<00><><00>g}|jD]I}|d}|d}|dkr|<01>d|<04><00><02><00><00>1|<01>d|<04><00><02><00><00>Jd<06>|<01><00>S)u构建对话提示词r]r^r\u用户: u助手: rZ)rrGri)r#<00> prompt_parts<74>msgr]r^s r$rmz,DataAnalysisAgent._build_conversation_prompt<70>s<><00><00><19> <0C><17>,<2C> :<3A> :<3A>C<EFBFBD><16>v<EFBFBD>;<3B>D<EFBFBD><19>)<29>n<EFBFBD>G<EFBFBD><13>v<EFBFBD>~<7E>~<7E><1C>#<23>#<23>$8<>w<EFBFBD>$8<>$8<>9<>9<>9<>9<><1C>#<23>#<23>$8<>w<EFBFBD>$8<>$8<>9<>9<>9<>9<><15>{<7B>{<7B><<3C>(<28>(<28>(r&c<00>.<00>g}|jD]D}|<02>d<01><00>dkr)|<01>|<02>dg<00><00><00><00><00>Etd<04><00>td|j<00><00><02><00>td|j<00><00><02><00>tdt |<01><00><00>d<08><03><00>|<00>|<01><00>} |j<00> |d d
<EFBFBD> <0B><00>} |j<00>
|<04><00>}|<05>d<01><00>d kr|<05>d |<04><00>}nd|vsd|vrtd<10><00>|}nd}n,#t$r}td|<07>d<13><03><00>|}Yd}~nd}~wwxYwtd<15><00>nH#t$r;}tdt|<07><00><00><00><02><00>dt|<07><00><00><00>}Yd}~nd}~wwxYwtj<00>|jd<18><00>} t!|dd<1A><1B><00>5} | <09>|<06><00>ddd<14><00>n #1swxYwYtd|<08><00><02><00>n6#t$r)}tdt|<07><00><00><00><02><00>Yd}~nd}~wwxYw|j|j|j||j||d<1E>S)u生成最终分析报告r*r-rFu'
📊 开始生成最终分析报告...r[u🔢 总轮数: u📈 收集图片: u 个u<E4B8AA>你将会接收到一个数据分析任务的最终报告请求请根据提供的分析结果和图片信息生成完整的分析报告。i@)rbrc<00>
max_tokensr,r<z# z## uR⚠️ 未检测到标准YAML动作但内容疑似Markdown报告直接采纳uLLM未返回有效报告内容u⚠️ YAML解析失败 (u()直接使用原始响应作为报告Nu✅ 最终报告生成完成u!❌ 生成最终报告时出错: u报告生成失败: u最终分析报告.md<6D>wzutf-8)<01>encodingu📄 最终报告已保存至: u❌ 保存报告文件失败: )r <00> total_roundsrrFrr<<00>report_file_path)rr0<00>extendr1r rrn<00>_build_final_report_promptrrlr/r5r6rHrIri<00>open<65>writer)
r#<00> all_figuresrN<00>final_report_promptr'r7<00>final_report_contentr8r~<00>fs
r$roz(DataAnalysisAgent._generate_final_report<72>sz<00><00><19> <0B><1A>+<2B> H<01> H<01>F<EFBFBD><15>z<EFBFBD>z<EFBFBD>(<28>#<23>#<23>'8<>8<>8<><1B>"<22>"<22>6<EFBFBD>:<3A>:<3A>.A<>2<EFBFBD>#F<>#F<>G<>G<>G<><47> <0A>9<>:<3A>:<3A>:<3A> <0A>=<3D>D<EFBFBD>$;<3B>=<3D>=<3D>><3E>><3E>><3E> <0A>5<><14>!3<>5<>5<>6<>6<>6<> <0A>:<3A>C<EFBFBD> <0B>$4<>$4<>:<3A>:<3A>:<3A>;<3B>;<3B>;<3B>#<23>=<3D>=<3D>k<EFBFBD>J<>J<><1B>" C<01><1B>x<EFBFBD>}<7D>}<7D>*<2A>n<02> <20>%<25><0E><0E>H<EFBFBD> 0<> <20>H<EFBFBD>8<>8<><18>B<>B<> <09><1D>=<3D>=<3D><18>*<2A>*<2A>.A<>A<>A<>,5<>M<EFBFBD>M<EFBFBD>.<2E>(<28>,S<>,S<>)<29>)<29>
<1C>x<EFBFBD>'<27>'<27>5<EFBFBD>H<EFBFBD>+<<3C>+<<3C><1D>r<>s<>s<>s<>/7<>,<2C>,<2C>/O<>,<2C><><EFBFBD><1C> 0<> 0<> 0<><15>]<5D>!<21>]<5D>]<5D>]<5D>^<5E>^<5E>^<5E>'/<2F>$<24>$<24>$<24>$<24>$<24>$<24><><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>
<12>0<> 1<> 1<> 1<> 1<><31><18> C<01> C<01> C<01> <11>><3E>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F>#B<>#<23>a<EFBFBD>&<26>&<26>#B<>#B<> <20> <20> <20> <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD> C<01><><EFBFBD><EFBFBD>
<1E>7<EFBFBD><<3C><<3C><04>(?<3F>AX<41>Y<>Y<><18> =<3D><15>&<26><03>g<EFBFBD>><3E>><3E>><3E> .<2E>!<21><11><07><07>,<2C>-<2D>-<2D>-<2D> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E> .<2E><><EFBFBD><EFBFBD> .<2E> .<2E> .<2E> .<2E> <11>F<>4D<34>F<>F<> G<> G<> G<> G<><47><18> =<3D> =<3D> =<3D> <11>;<3B>3<EFBFBD>q<EFBFBD>6<EFBFBD>6<EFBFBD>;<3B>;<3B> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C><><EFBFBD><EFBFBD><EFBFBD> =<3D><><EFBFBD><EFBFBD>
#'<27>"9<> <20>.<2E> $<24> 5<>!,<2C>$(<28>$=<3D>0<> 0<>
<EFBFBD>
<EFBFBD>
s<00>F<00> A&E<00>F<00>
E0<03>E+<03>&F<00>+E0<03>0F<00>
G<03> 1G<03>G<03>1I<00>H%<03> I<00>%H)<07>)I<00>,H)<07>-I<00>
I6<03> I1<03>1I6r<>c<00><><00>d}|r<>d}t|d<03><00>D]n\}}|<04>dd<05><00>}d|<05><00>}||<03>d|<05>d<08>z }|d |<06>d<08>z }|d
|<04>d d <0C><00><00>d<08>z }|d |<04>dd<0F><00><00>d<10>z }<02>ond}d}d}|jD]<5D>} | <09>d<13><00>dkr<>| <09>d<15><00>rr| <09>di<00><00>}
|
<EFBFBD>d<17><00>rG|dz }|d|<08>d<19>z }|
<EFBFBD>d<1A><00>r$|d|
<EFBFBD>d<1A><00>dd<1C><00>d<10>z }<07><>tj|j|j|j||<07><1D><00>} | dz } | S)u*构建用于生成最终报告的提示词ru
生成的图片及分析:
r_rBu未知文件名z./z. <20>
u 相对路径: u 描述: rDu 无描述u 分析: rEu 无分析rZu
本次分析未生成图片。
rr*r-r.rN<00>successu
代码块 u: 执行成功
<EFBFBD>outputu输出: N)rr r"<00>figures_summary<72>code_results_summaryu7
📁 **图片路径使用说明**
报告和图片都在同一目录下,请在报告中使用相对路径引用图片:
- 格式:![图片描述](./图片文件名.png)
- 示例:![营业总收入趋势](./营业总收入趋势.png)
- 这样可以确保报告在不同环境下都能正确显示图片
)<08> enumerater0rrrkrr r") r#r<>r<><00>i<>figurerB<00> relative_pathr<68><00>success_code_countrN<00> exec_resultrbs r$r<>z,DataAnalysisAgent._build_final_report_prompt<70>s<><00><00><1D><0F> <16> C<01>=<3D>O<EFBFBD>&<26>{<7B>A<EFBFBD>6<>6<> [<01> [<01> <09><01>6<EFBFBD>!<21>:<3A>:<3A>j<EFBFBD>2C<32>D<>D<><08> /<2F>X<EFBFBD><0F><0F> <0A><1F>a<EFBFBD>#7<>#7<>8<EFBFBD>#7<>#7<>#7<>7<><0F><1F>#H<>}<7D>#H<>#H<>#H<>H<><0F><1F>#[<5B><16><1A><1A>M<EFBFBD>;<3B>1W<31>1W<31>#[<5B>#[<5B>#[<5B>[<5B><0F><1F>#Z<><16><1A><1A>J<EFBFBD> <0B>1T<31>1T<31>#Z<>#Z<>#Z<>Z<><0F><0F> [<01>C<01>O<EFBFBD> "<22><1C><1E><1A><1A>+<2B> <1A> <1A>F<EFBFBD><15>z<EFBFBD>z<EFBFBD>(<28>#<23>#<23>'8<>8<>8<>V<EFBFBD>Z<EFBFBD>Z<EFBFBD><06>=O<>=O<>8<>$<24>j<EFBFBD>j<EFBFBD><18>2<EFBFBD>6<>6<> <0B><1E>?<3F>?<3F>9<EFBFBD>-<2D>-<2D><1A>&<26>!<21>+<2B>&<26>(<28>,]<5D>9K<39>,]<5D>,]<5D>,]<5D>]<5D>(<28>"<22><EFBFBD><EFBFBD>x<EFBFBD>0<>0<><1A>,<2C>I<>{<7B><EFBFBD><EFBFBD>x<EFBFBD>'@<40>'@<40><11><11><11>'C<>I<>I<>I<><1A>,<2C><>
,<2C>2<><1E>,<2C>#<23>6<><1D>*<2A>+<2B>!5<> 
<EFBFBD>
<EFBFBD>
<EFBFBD><06> <0F><04> <04><06><16> r&c<00>b<00>g|_g|_d|_|j<00><00><00>dS)u重置智能体状态rN)rrrr!<00>reset_environment)r#s r$<00>resetzDataAnalysisAgent.resets4<00><00>$&<26><04>!<21> "<22><04><1D><1E><04><1A> <0C> <0A>'<27>'<27>)<29>)<29>)<29>)<29>)r&)NrrF)NN)<15>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r r6<00>int<6E>boolr%rrr:r2r3r4rrurmror<>r<><00>r&r$rrs <00><00><00><00><00><00><08><08>!%<25>#<23><1C>!&<26> <1F><1F><1D><1F><18><1F><18> <1F>
<1F> <1F><1F><1F><1F>: <<3C>#<23> <<3C>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E> <<3C> <<3C> <<3C> <<3C>D 
<EFBFBD><1B> 
<EFBFBD>(,<2C>S<EFBFBD>#<23>X<EFBFBD><0E> 
<EFBFBD> <0A>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD> 
<EFBFBD>>
<EFBFBD><1B>>
<EFBFBD>(,<2C>S<EFBFBD>#<23>X<EFBFBD><0E>>
<EFBFBD> <0A>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>>
<EFBFBD>>
<EFBFBD>>
<EFBFBD>>
<EFBFBD>@1<0E><1B>1<0E>(,<2C>S<EFBFBD>#<23>X<EFBFBD><0E>1<0E> <0A>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>1<0E>1<0E>1<0E>1<0E>ff-<2D>f-<2D>#<23>f-<2D>d<EFBFBD>3<EFBFBD>i<EFBFBD>f-<2D>TW<54>f-<2D>cg<63>hk<68>mp<6D>hp<68>cq<63>f-<2D>f-<2D>f-<2D>f-<2D>P )<29>C<EFBFBD> )<29> )<29> )<29> )<29>F
<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>F
<EFBFBD>F
<EFBFBD>F
<EFBFBD>F
<EFBFBD>P3<16>d<EFBFBD>4<EFBFBD><03>S<EFBFBD><08>><3E>6J<36>3<16>s<EFBFBD>3<16>3<16>3<16>3<16>j*<2A>*<2A>*<2A>*<2A>*r&r)r<>rH<00>json<6F>yaml<6D>typingrrrr<00>utils.create_session_dirr<00>utils.format_execution_resultr<00>utils.extract_coder <00>utils.data_loaderr
<00>utils.llm_helperr <00>utils.code_executorr <00>config.llm_configr <00>promptsrrrr<>r&r$<00><module>r<>s"<00><01><04><04>
<EFBFBD> <09> <09> <09> <0B> <0B> <0B> <0B> <0B> <0B> <0B> <0B>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>><3E>><3E>><3E>><3E>><3E>><3E>A<>A<>A<>A<>A<>A<>9<>9<>9<>9<>9<>9<>3<>3<>3<>3<>3<>3<>&<26>&<26>&<26>&<26>&<26>&<26>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>'<27>'<27>'<27>'<27>'<27>'<27>K<>K<>K<>K<>K<>K<>K<>K<>B*<2A>B*<2A>B*<2A>B*<2A>B*<2A>B*<2A>B*<2A>B*<2A>B*<2A>B*r&