Files
vibe_data_ana/src/engines/__pycache__/requirement_understanding.cpython-311.pyc

163 lines
11 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>i)<00> <00>&<00>dZddlZddlmZmZmZmZddlmZddl m
Z
m Z ddl m Z  ddede d eed
e
fd <0B>Zdede d eed
efd <0C>Zd ed
eeeffd<0E>Zdede d eed
e
fd<0F>Zd ed
eeeffd<10>Zde
de d
eeeffd<12>ZdS)z8Requirement understanding engine for parsing user needs.<2E>N)<04>Dict<63>Any<6E>Optional<61>List)<01>OpenAI)<02>RequirementSpec<65>AnalysisObjective)<01> DataProfile<6C>
user_input<EFBFBD> data_profile<6C> template_path<74>returnc <00>F<00>tjd<01><00>}|st|||<02><00>St|<03><02><00>}t |||<02><00>} |jj<00>dddd<06>d|d<06>gdd <09>
<EFBFBD><00>}t|j d j
j <00><00>}d }|rt|<02><00>}d <0A>|dD<00><00>} t|| |||<07>dg<00><00>|<07>dg<00><00><00><11><00>S#t$r}
t|||<02><00>cYd }
~
Sd }
~
wwxYw)a<>
AI-driven requirement understanding.
Parses user's natural language requirement and converts abstract concepts
into concrete analysis objectives.
Args:
user_input: User's requirement in natural language
data_profile: Profile of the data to be analyzed
template_path: Optional path to analysis template
Returns:
RequirementSpec with parsed objectives and constraints
Requirements: FR-2.1, FR-2.2
<20>OPENAI_API_KEY)<01>api_keyzgpt-4<>systemzuYou are a data analysis expert who understands user requirements and converts them into concrete analysis objectives.)<02>role<6C>content<6E>usergffffff<66>?i<>)<04>model<65>messages<65> temperature<72>
max_tokensrNc <00><><00>g|]I}t|d|d|<01>dg<00><00>|<01>dd<04><00><00><05><00><00><02>JS)<06>name<6D> description<6F>metrics<63>priority<74><00>rrrr)r <00>get)<02>.0<EFBFBD>objs <20>LD:\code\iov_data_analysis_agent_old\src\engines\requirement_understanding.py<70>
<listcomp>z*understand_requirement.<locals>.<listcomp>@sj<00><00>
<EFBFBD>
<EFBFBD>
<EFBFBD><14> <1E><18><16>[<5B><1F> <0A>.<2E><1B><07><07> <09>2<EFBFBD>.<2E>.<2E><1C><17><17><1A>Q<EFBFBD>/<2F>/<2F>  <0E> <0E> <0E>
<EFBFBD>
<EFBFBD>
<EFBFBD><00>
objectives<EFBFBD> constraints<74>expected_outputs<74>r r'r <00>template_requirementsr(r))<10>os<6F>getenv<6E>#_fallback_requirement_understandingr<00>_build_requirement_prompt<70>chat<61> completions<6E>create<74>_parse_ai_response<73>choices<65>messager<00>parse_templaterr!<00> Exception) r r r r<00>client<6E>prompt<70>response<73> ai_analysisr+r'<00>es r$<00>understand_requirementr= s<><00><00>,<11>i<EFBFBD>(<28>)<29>)<29>G<EFBFBD> <12>\<01>2<>:<3A>|<7C>]<5D>[<5B>[<5B>[<5B> <13>G<EFBFBD> $<24> $<24> $<24>F<EFBFBD>'<27>z<EFBFBD><<3C><1D> O<> O<>F<EFBFBD>*\<01><19>;<3B>*<2A>1<>1<><19>!<21>/f<02>g<02>g<02><1F>F<EFBFBD>3<>3<><0E><1C><1B>2<>
<EFBFBD>
<EFBFBD><08>)<29><18>)9<>!<21>)<<3C>)D<>)L<>M<>M<> <0B>!%<25><1D> <18> B<01>$2<>=<3D>$A<>$A<> !<21>
<EFBFBD>
<EFBFBD>#<23><<3C>0<>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><1F>!<21>!<21>'<27>"7<>#<23><0F><0F> <0A>r<EFBFBD>:<3A>:<3A>(<28>_<EFBFBD>_<EFBFBD>-?<3F><12>D<>D<> 
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD><EFBFBD> <15>\<01>\<01>\<01>2<>:<3A>|<7C>]<5D>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B>[<5B><><EFBFBD><EFBFBD><EFBFBD>\<01><><EFBFBD>s<00>
B0C;<00>;
D <03>D<03>D <03>D c <00><><00>d<01>|jD<00><00>}d|<00>d|j<00>d|j<00>d|<03>d|j<00>d|j<00>d<08> }|r |d |<02>d
<EFBFBD>z }|S) z.Build prompt for AI requirement understanding.c<00><00>g|] }|j<00><02>
S<00>)r<00>r"<00>cols r$r%z-_build_requirement_prompt.<locals>.<listcomp>^s<00><00>=<3D>=<3D>=<3D><13>C<EFBFBD>H<EFBFBD>=<3D>=<3D>=r&zTAnalyze the following user requirement and data characteristics:
User Requirement: z
Data Characteristics:
- Type: z
- Key Fields: z
- Columns: z
- Row Count: z
- Quality Score: a#
Please answer in JSON format:
1. What type of analysis does the user want?
2. What specific metrics need to be calculated?
3. Does the data support these analyses?
4. If not supported, how to adjust?
Return JSON with this structure:
{
"objectives": [
{
"name": "objective name",
"description": "detailed description",
"metrics": ["metric1", "metric2"],
"priority": 5
}
],
"constraints": ["constraint1", "constraint2"],
"expected_outputs": ["output1", "output2"]
}
z
Template Path: zA
Note: Consider template requirements when generating objectives.)<05>columns<6E> inferred_type<70>
key_fields<EFBFBD> row_count<6E> quality_score)r r r <00> column_namesr9s r$r/r/Xs<><00><00> ><3E>=<3D> <0C>(<<3C>=<3D>=<3D>=<3D>L<EFBFBD><04><1D><04><04>
<16> #<23> <04><04> <1C>&<26> <04><04> <19><04><04><1B>$<24><04><04><1F>,<2C><04><04><04>F<EFBFBD>@<15>z<01><0E>y<> <0A>y<>y<>y<>y<><06> <11>Mr&<00> response_textc<00><><00>ddl}ddl}|<02>d||j<00><00>}|r8 |<01>|<03><00><00><00><00>S#|j$rYnwxYwgggd<04>S)z)Parse AI response into structured format.rNz\{.*\})r'r(r))<07>json<6F>re<72>search<63>DOTALL<4C>loads<64>group<75>JSONDecodeError)rIrKrL<00>
json_matchs r$r3r3<00>s<><00><00><0F>K<EFBFBD>K<EFBFBD>K<EFBFBD> <0A>I<EFBFBD>I<EFBFBD>I<EFBFBD><14><19><19>9<EFBFBD>m<EFBFBD>R<EFBFBD>Y<EFBFBD>?<3F>?<3F>J<EFBFBD><11><11> <11><17>:<3A>:<3A>j<EFBFBD>.<2E>.<2E>0<>0<>1<>1<> 1<><31><13>#<23> <11> <11> <11> <10>D<EFBFBD> <11><><EFBFBD><EFBFBD>
<19><19><1E> <06> <06>s<00>&A<00>
A<03>Ac <00><><00>g}|<00><00><00>}d|vsd|vr(|<03>tddgd<05>d<06><07><00><00><00>d|vsd |vr(|<03>td
d d d gd<0E><07><00><00><00>d|vsd|vr(|<03>tddddgd<0E><07><00><00><00>|s(|<03>tddddgd<19><07><00><00><00>d}|rt|<02><00>}t ||||gddg<02><1D><00>S)zk
Rule-based fallback for requirement understanding.
Used when AI is unavailable or fails.
u 健康度<E5BAB7>healthu健康度分析u!分析数据的整体健康状况)u 完成率u 处理效率u 积压情况<E68385>r u趋势<E8B68B>trendu 趋势分析u$分析数据随时间的变化趋势u 时间序列u 增长率<E995BF>u分布<E58886> distributionu 分布分析u分析数据的分布特征u 类别分布u 数值分布u 综合分析u对数据进行全面分析u 基础统计u 关键发现rNu 分析报告u可视化图表r*)<05>lower<65>appendr r6r)r r r r'<00>
user_lowerr+s r$r.r.<00>s<><00><00><14>J<EFBFBD><1C>!<21>!<21>#<23>#<23>J<EFBFBD><12>j<EFBFBD> <20> <20>H<EFBFBD>
<EFBFBD>$:<3A>$:<3A><12><19><19>+<2B>"<22>;<3B>A<>A<>A<><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><10>:<3A><1D><1D><17>J<EFBFBD>!6<>!6<><12><19><19>+<2B><1F>><3E>#<23>[<5B>1<><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><10>:<3A><1D><1D><1E>:<3A>!=<3D>!=<3D><12><19><19>+<2B><1F>5<>#<23>^<5E>4<><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B> <16> <0B><12><19><19>+<2B><1F>5<>#<23>^<5E>4<><16> 
<EFBFBD>
<EFBFBD>
<EFBFBD> <0B> <0B> <0B>!<21><19><14>><3E> .<2E>}<7D> =<3D> =<3D><1D> <1A><1D><1D>#<23>3<><16>(<28>*;<3B><<3C>  <06> <06> <06>r&c<00><><00>tj<00>|<00><00>sgggd<01>St|dd<03><04><00>5}|<01><00><00>}ddd<05><00>n #1swxYwYddl}|<03>d||j<00><00>}|<03>d||j<00><00>}|<03>d ||j<00><00>}|||d<01>S)
a
Parse analysis template file.
Extracts required metrics and charts from template structure.
Args:
template_path: Path to template markdown file
Returns:
Dictionary with template requirements
Requirements: FR-2.3
)<03>sections<6E>required_metrics<63>required_charts<74>rzutf-8)<01>encodingNrz ^#+\s+(.+)$u(?:指标|metric)[:]\s*(.+)u(?:图表|chart)[:]\s*(.+)) r,<00>path<74>exists<74>open<65>readrL<00>findall<6C> MULTILINE<4E>
IGNORECASE)r <00>frrLr]r<00>chartss r$r6r6<00>s<00><00> <0E>7<EFBFBD>><3E>><3E>-<2D> (<28> (<28>
<EFBFBD><1A> "<22>!<21>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<0E>m<EFBFBD>S<EFBFBD>7<EFBFBD> 3<> 3<> 3<><1B>q<EFBFBD><13>&<26>&<26>(<28>(<28><07><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><1B><><EFBFBD><EFBFBD><1B><1B><1B><1B><0E>I<EFBFBD>I<EFBFBD>I<EFBFBD><11>z<EFBFBD>z<EFBFBD>.<2E>'<27>2<EFBFBD><<3C>@<40>@<40>H<EFBFBD><11>j<EFBFBD>j<EFBFBD>:<3A>G<EFBFBD>R<EFBFBD>]<5D>S<>S<>G<EFBFBD><10>Z<EFBFBD>Z<EFBFBD>8<>'<27>2<EFBFBD>=<3D> Q<> Q<>F<EFBFBD><1D>#<23>!<21> <06> <06>s<00>A<03>A<07> A<07> requirementc<00><><00>d<01>|jD<00><00>}g}g}g}|jD<00>]
}d}g}|jD]<5D>} | <09><00><00>}
d|
vsd|
vr;t d<05>|jD<00><00><00><00>} | sd}|<08>d| <09>d<08><03><00>d |
vsd
|
vr#d
|vrd |vrd}|<08>d | <09>d<08><03><00>d |
vsd |
vr#d |vrd |vrd}|<08>d| <09>d<08><03><00><00><>|r|<04>|j<00><00><00><>|<05>|j<00><00>|<03>|<08><00><00><01> t|<05><00>dk||tt|<03><00><00><00>t|<04><00>dkd<10>S)aF
Check if data satisfies requirement.
Identifies missing fields or capabilities.
Args:
requirement: Parsed requirement specification
data_profile: Profile of available data
Returns:
Dictionary with match status and missing items
Requirements: FR-2.3
c<00>@<00>h|]}|j<00><00><00><00><02>Sr@)rrYrAs r$<00> <setcomp>z/check_data_requirement_match.<locals>.<setcomp>s$<00><00>E<>E<>E<><13>C<EFBFBD>H<EFBFBD>N<EFBFBD>N<EFBFBD>$<24>$<24>E<>E<>Er&Tu时间<E697B6>timec3<00>,K<00>|]}|jdkV<00><00>dS)<02>datetimeN)<01>dtyperAs r$<00> <genexpr>z/check_data_requirement_match.<locals>.<genexpr>#s)<00><00><00><00>W<>W<>3<EFBFBD>s<EFBFBD>y<EFBFBD>J<EFBFBD>6<>W<>W<>W<>W<>W<>Wr&Fu时间字段 (for <20>)u状态<E78AB6>statusu状态字段 (for u类型<E7B1BB>typeu类型字段 (for r)<05> all_satisfied<65>satisfied_objectives<65>unsatisfied_objectives<65>missing_fields<64> can_proceed) rCr'rrY<00>anyrZr<00>extend<6E>len<65>list<73>set) rkr rHrzrxry<00> objective<76> can_satisfy<66>missing_for_objective<76>metric<69> metric_lower<65>has_times r$<00>check_data_requirement_matchr<68>s<00><00>$F<01>E<> <0C>0D<30>E<>E<>E<>L<EFBFBD><17>N<EFBFBD><1D><18><1F><1A> <20>+<2B>9<>9<> <09><1A> <0B> "<22><1D><1F>'<27> Q<01> Q<01>F<EFBFBD>!<21><<3C><<3C>><3E>><3E>L<EFBFBD><18><<3C>'<27>'<27>6<EFBFBD>\<5C>+A<>+A<><1E>W<>W<>,<2C>BV<42>W<>W<>W<>W<>W<><08><1F>Q<01>"'<27>K<EFBFBD>)<29>0<>0<>1O<31>f<EFBFBD>1O<31>1O<31>1O<31>P<>P<>P<><17><<3C>'<27>'<27>8<EFBFBD>|<7C>+C<>+C<><1B><<3C>/<2F>/<2F>H<EFBFBD>L<EFBFBD>4P<34>4P<34>"'<27>K<EFBFBD>)<29>0<>0<>1O<31>f<EFBFBD>1O<31>1O<31>1O<31>P<>P<>P<><17><<3C>'<27>'<27>6<EFBFBD>\<5C>+A<>+A<><19><1C>-<2D>-<2D>(<28>,<2C>2N<32>2N<32>"'<27>K<EFBFBD>)<29>0<>0<>1O<31>f<EFBFBD>1O<31>1O<31>1O<31>P<>P<>P<><50> <16> 9<> <20> '<27> '<27> <09><0E> 7<> 7<> 7<> 7<> "<22> )<29> )<29>)<29>.<2E> 9<> 9<> 9<> <1A> !<21> !<21>"7<> 8<> 8<> 8<> 8<><1D>3<>4<>4<><01>9<> 4<>"8<><1E>s<EFBFBD>><3E>2<>2<>3<>3<><1A>/<2F>0<>0<>1<EFBFBD>4<>  <06> <06>r&)N)<15>__doc__r,<00>typingrrrr<00>openair<00>src.models.requirement_specrr <00>src.models.data_profiler
<00>strr=r/r3r.r6r<>r@r&r$<00><module>r<>s<><00><01>><3E>><3E> <09> <09> <09> <09>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C><19><19><19><19><19><19>J<>J<>J<>J<>J<>J<>J<>J<>/<2F>/<2F>/<2F>/<2F>/<2F>/<2F> $(<28>J\<01>J\<01><13>J\<01><1D>J\<01><1C>C<EFBFBD>=<3D>J\<01><15> J\<01>J\<01>J\<01>J\<01>Z+<12><13>+<12><1D>+<12><1C>C<EFBFBD>=<3D>+<12> <09> +<12>+<12>+<12>+<12>\<06>c<EFBFBD><06>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD><06><06><06><06>*;<06><13>;<06><1D>;<06><1C>C<EFBFBD>=<3D>;<06><15> ;<06>;<06>;<06>;<06>|&<06>#<23>&<06>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>&<06>&<06>&<06>&<06>R<<06> <20><<06><1D><<06>
<EFBFBD>#<23>s<EFBFBD>(<28>^<5E><<06><<06><<06><<06><<06><r&