Files
AI_NovelGenerator/__pycache__/novel_generator.cpython-310.pyc
T

86 lines
8.9 KiB
Plaintext
Raw Normal View History

2025-01-29 20:33:20 +08:00
o
jšgØ/ã@svddlZddlmZddlmZddlmZmZmZddl m
Z
ddl m Z m
Z
mZmZddlmZmZmZmZmZmZmZmZmZddlmZdd lmZdd
lmZd Z Gd d
d
eƒZ!de"de"de"de"de"de#de#de"fddZ$de"de%e"defddZ&de"defddZ'de"de"fdd „Z(d-de"d"e"d#e#de"fd$d%„Z)d&e"d'e"de"de"d(e"d)e#de"de#d*e"de"fd+d,„Z*dS).éN)Ú TypedDict)Ú
ChatOpenAI)Ú
StateGraphÚSTARTÚEND)ÚDict)Ú read_fileÚappend_text_to_fileÚclear_file_contentÚsave_string_to_txt) Ú
set_promptÚcharacter_promptÚdark_lines_promptÚfinalize_setting_promptÚnovel_directory_promptÚsummary_promptÚupdate_character_state_promptÚchapter_outline_promptÚchapter_write_prompt)ÚOpenAIEmbeddings)ÚChroma©ÚDocumentÚ vectorstorec@sVeZdZUeed<eed<eed<eed<eed<eed<eed<eed<eed <d
S) Ú OverallStateÚtopicÚgenreÚnumber_of_chaptersÚ word_numberÚnovel_setting_baseÚcharacter_settingÚ
dark_linesÚfinal_novel_settingÚnovel_directoryN)Ú__name__Ú
__module__Ú __qualname__ÚstrÚ__annotations__Úint©r*r*ú;c:\Users\xieli\Desktop\AI_NovelGenerator\novel_generator.pyrs
 rÚapi_keyÚbase_urlÚ llm_modelrrrrÚfilepathct|||ddtffdd }dtffdd } dtffdd }
dtffd d
} dtffd d } ttƒ}
|
 d
|¡|
 d| ¡|
 d|
¡|
 d| ¡|
 d| ¡|
 td
¡|
 d
d¡|
 dd¡|
 dd¡|
 dd¡|
 dt¡|
 ¡}||||dœ}| |¡}|st dƒdS| 
dd¡}| 
dd¡}|r¢|s¨t dƒdSt j  
|d¡}t j  
|d¡}| dd¡ dd¡}| dd¡ dd¡}t||ƒt||ƒdS)uO
使用多步æµç¨‹ï¼Œç”Ÿæˆ Novel_setting.txt 与 Novel_directory.txt
)Úmodelr,r-ÚstatecsFtj|d|d|d|dd}ˆ |¡}|sddiSd|j ¡iS)Nrrrr©rrrrrÚ)r ÚformatÚinvokeÚcontentÚstrip©r1ÚpromptÚresponse©r0r*r+Úgenerate_base_setting8sü
z=Novel_novel_directory_generate.<locals>.generate_base_settingcó4tj|dd}ˆ |¡}|sddiSd|j ¡iS)Nr)Ú
novel_settingr r3)r
r4r5r6r7r8r;r*r+Úgenerate_character_settingDó

zBNovel_novel_directory_generate.<locals>.generate_character_settingcr=)Nr )Zcharacter_infor!r3)rr4r5r6r7r8r;r*r+Úgenerate_dark_linesKr@z;Novel_novel_directory_generate.<locals>.generate_dark_linescs@tj|d|d|dd}ˆ |¡}|sddiSd|j ¡iS)Nrr r!)rr r!r"r3)rr4r5r6r7r8r;r*r+Úfinalize_novel_settingRsý
z>Novel_novel_directory_generate.<locals>.finalize_novel_settingcs:tj|d|dd}ˆ |¡}|sddiSd|j ¡iS)Nr"r)r"rr#r3)rr4r5r6r7r8r;r*r+Úgenerate_novel_directory]sþ
z@Novel_novel_directory_generate.<locals>.generate_novel_directoryr<r?rArBrCr2u.âš ï¸ invoke() 结果为空,生æˆå¤±è´¥ã€‚Nr"r3r#uGâš ï¸ ç”Ÿæˆå¤±è´¥ï¼šç¼ºå°‘ final_novel_setting 或 novel_directory。zNovel_setting.txtzNovel_directory.txtú*)rrrZadd_nodeZadd_edgerrÚcompiler5ÚprintÚgetÚosÚpathÚjoinÚreplacer )r,r-r.rrrrr/r<r?rArBrCZgraphÚappZ input_paramsÚresultr"Zfinal_novel_directoryZ filename_setZfilename_novel_directoryZfinal_novel_setting_cleanedZfinal_novel_directory_cleanedr*r;r+ÚNovel_novel_directory_generate%sV
ý  
          ü
  
rOÚtextsÚreturncCs4t|d}dd|Dƒ}tj||td}| ¡|S)
åˆå§‹åŒ–并返回一个Chromaå‘é‡åº“,将传入的文本进行嵌入。
若需è¦å¯å¯¹ texts åšåˆ†å¥æˆ–分å—处ç†ï¼›è¿™é‡Œåªæ¼”示简å•用法。
©Zopenai_api_keycSsg|]}t|dqS)©Z page_contentr)Ú.0Útr*r*r+Ú
<listcomp>œsz%init_vector_store.<locals>.<listcomp>)Z embeddingÚpersist_directory)rrZfrom_documentsÚVECTOR_STORE_DIRÚpersist)r,rPÚ
embeddingsZ documentsrr*r*r+Úinit_vector_stores
r[cCs&tj t¡sdSt|d}tt|dS)uY
读å–已存在的å‘é‡åº“。若ä¸å­˜åœ¨åˆ™è¿”回None或新建一个空的。
NrR)rWZembedding_function)rIrJÚexistsrXrr)r,rZr*r*r+Úload_vector_store¡s 
 r]Ú new_chaptercCsHt|ƒ}|st||gƒ}dSt|d}t|d}| |g¡| ¡dS)u™
将最新章节文本æ’入到å‘é‡åº“里,用于åŽç»­æ£€ç´¢å‚考。
坿 ¹æ®å®žé™…需求åšåˆ†å—处ç†ã€‚此处仅作简å•示范。
NrRrS)r]r[rrZ
add_documentsrY)r,r^ÚstorerZZnew_docr*r*r+Úupdate_vector_store«s 

  r`éÚqueryÚkcCs6t|ƒ}|sdS|j||d}d dd|Dƒ¡}|S)
从å‘é‡åº“中检索与 query 最相关的 k æ¡æ–‡æœ¬ï¼Œæ‹¼æŽ¥åŽè¿”回。
用于在生æˆå¤§çº²æˆ–写正文时,为大模型æä¾›æ›´å¤šä¸Šä¸‹æ–‡ã€‚
r3©rcÚ
cSsg|]}|jqSr*rS)rTÚdr*r*r+rVÆsz:get_relevant_context_from_vector_store.<locals>.<listcomp>)r]Zsimilarity_searchrK)r,rbrcr_ZdocsZcombinedr*r*r+Ú&get_relevant_context_from_vector_store¼s rgÚnovel_settingsÚnovel_novel_directoryÚ
model_nameÚ novel_numberÚ lastchapterc t|||ddtj |d¡} tj |d¡}
tj |d¡} tj |d¡} t| ƒ}
t|
ƒ}dtdtd tffd
d }| ¡rC|||ƒ}n|}dtd td tffd
d }| ¡r\|||
ƒ}n|
}t|ddd}dtdtdtdtdtd tf fdd }||||||ƒ}dtdtdtdtdtdtd tffdd }|||||||ƒ}|rÅt || ƒt
| ƒt || ƒt
| ƒt || ƒt
|
ƒt ||
ƒt ||ƒ|S)u*
多步æµç¨‹: