| Id |
Title |
Content |
Published |
Framework Id |
User Id |
Created |
Modified |
Actions |
| 53 |
Langchain实现FewShot提示词模板 |
<div style="background-color: #0f111a; color: #c3cee3;">
<pre style="font-family: 'Source Code Pro',monospace; font-size: 12.0pt;"><span style="color: #c792ea; font-style: italic;">from </span>langchain_core<span style="color: #89ddff;">.</span>prompts <span style="color: #c792ea; font-style: italic;">import </span>PromptTemplate<span style="color: #89ddff;">, </span>FewShotPromptTemplate<br /><span style="color: #c792ea; font-style: italic;">from </span>langchain_community<span style="color: #89ddff;">.</span>llms<span style="color: #89ddff;">.</span>tongyi <span style="color: #c792ea; font-style: italic;">import </span>Tongyi<br /><span style="color: #c792ea; font-style: italic;">import </span>os<br /><span style="color: #c792ea; font-style: italic;">from </span>dotenv <span style="color: #c792ea; font-style: italic;">import </span>load_dotenv<br /><span style="color: #82aaff;">load_dotenv</span><span style="color: #89ddff;">()<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;">#</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">示例的模板<br /></span>example_template <span style="color: #89ddff;">= </span>PromptTemplate<span style="color: #89ddff;">.</span><span style="color: #82aaff;">from_template</span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">单词:</span><span style="color: #c3e88d;">{word}</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">,反义词:</span><span style="color: #c3e88d;">{antonym}"<br /></span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;">#</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">示例的数据动态注入<br /></span>example_data <span style="color: #89ddff;">= [<br /></span><span style="color: #89ddff;"> {</span><span style="color: #c3e88d;">"word"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">大</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"antonym"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">小</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">},<br /></span><span style="color: #89ddff;"> {</span><span style="color: #c3e88d;">"word"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">上</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"antonym"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">下</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">},<br /></span><span style="color: #89ddff;">]<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #89ddff;"><br /></span>few_shot_template <span style="color: #89ddff;">= </span><span style="color: #82aaff;">FewShotPromptTemplate</span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">提示词数据模板<br /></span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;"> </span><span style="color: #f78c6c;">example_prompt </span><span style="color: #89ddff;">= </span>example_template<span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">提示词的数据<br /></span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;"> </span><span style="color: #f78c6c;">examples </span><span style="color: #89ddff;">= </span>example_data<span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">示例之前的提示词<br /></span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;"> </span><span style="color: #f78c6c;">prefix </span><span style="color: #89ddff;">= </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">告知我单词的反义词,我提供如下的示例:</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">示例之后的提示词<br /></span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;"> </span><span style="color: #f78c6c;">suffix </span><span style="color: #89ddff;">= </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">基于前面的示例告诉我,</span><span style="color: #c3e88d;">{input_word}</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">的反义词是?</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">提示词的输入变量<br /></span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;"> </span><span style="color: #f78c6c;">input_variables </span><span style="color: #89ddff;">=[</span><span style="color: #c3e88d;">"input_word"</span><span style="color: #89ddff;">]<br /></span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span>prompt_text <span style="color: #89ddff;">= </span>few_shot_template<span style="color: #89ddff;">.</span><span style="color: #82aaff;">format</span><span style="color: #89ddff;">(</span><span style="color: #f78c6c;">input_word</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">左</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">)<br /></span><span style="color: #717cb4; font-style: italic;"># print(prompt_text)<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span>model <span style="color: #89ddff;">= </span><span style="color: #82aaff;">Tongyi</span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #f78c6c;">model</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">"qwen-max"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #82aaff; font-style: italic;">print</span><span style="color: #89ddff;">(</span>model<span style="color: #89ddff;">.</span><span style="color: #82aaff;">invoke</span><span style="color: #89ddff;">(</span><span style="color: #f78c6c;">input </span><span style="color: #89ddff;">= </span>prompt_text<span style="color: #89ddff;">))</span></pre>
</div> |
1 |
61 |
1 |
2/19/26, 6:30 AM |
2/19/26, 6:42 AM |
View Edit Delete |
| 54 |
Langchain调用通义千问的模型 |
<p>展示调用常用的3种模型</p>
<p>大语言模型、聊天模型、嵌入(向量)模型</p>
<p>1、大语言模型</p>
<div style="background-color: #0f111a; color: #c3cee3;">
<div>
<pre style="font-family: 'Source Code Pro',monospace; font-size: 12.0pt;"><span style="color: #c792ea; font-style: italic;">from </span>langchain_core<span style="color: #89ddff;">.</span>prompts <span style="color: #c792ea; font-style: italic;">import </span>PromptTemplate<br /><span style="color: #c792ea; font-style: italic;">from </span>langchain_community<span style="color: #89ddff;">.</span>llms<span style="color: #89ddff;">.</span>tongyi <span style="color: #c792ea; font-style: italic;">import </span>Tongyi<br /><span style="color: #c792ea; font-style: italic;">import </span>os<br /><span style="color: #c792ea; font-style: italic;">from </span>dotenv <span style="color: #c792ea; font-style: italic;">import </span>load_dotenv<br /><span style="color: #82aaff;">load_dotenv</span><span style="color: #89ddff;">()<br /></span><span style="color: #89ddff;"><br /></span>prompt_template <span style="color: #89ddff;">= </span>PromptTemplate<span style="color: #89ddff;">.</span><span style="color: #82aaff;">from_template</span><span style="color: #89ddff;">(</span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">我朋友姓</span><span style="color: #c3e88d;">{lastname},</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">生了个孩子,性别</span><span style="color: #c3e88d;">{gender},</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">你帮他起个名字</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span>prompt_text <span style="color: #89ddff;">= </span>prompt_template<span style="color: #89ddff;">.</span><span style="color: #82aaff;">format</span><span style="color: #89ddff;">(</span><span style="color: #f78c6c;">lastname </span><span style="color: #89ddff;">= </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">张</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">, </span><span style="color: #f78c6c;">gender </span><span style="color: #89ddff;">= </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">女</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">)<br /></span>model <span style="color: #89ddff;">= </span><span style="color: #82aaff;">Tongyi</span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># api_key=os.getenv("DASHSCOPE_API_KEY"),<br /></span><span style="color: #717cb4; font-style: italic;"> </span><span style="color: #f78c6c;">model</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">"qwen-max"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #89ddff;"><br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">一次性返回结果<br /></span><span style="color: #717cb4; font-style: italic;"># res = model.invoke(input="</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">你是谁呀能做什么?</span><span style="color: #717cb4; font-style: italic;">")<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span><span style="color: #717cb4; font-style: italic;"># langchain</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">一次性返回结果方式输出<br /></span><span style="color: #717cb4; font-style: italic;"># chain = prompt_template | model<br /></span><span style="color: #717cb4; font-style: italic;"># print(chain.invoke({"lastname": "</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">张</span><span style="color: #717cb4; font-style: italic;">", "gender": "</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">女</span><span style="color: #717cb4; font-style: italic;">"}))<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">流式输出<br /></span><span style="color: #717cb4; font-style: italic;"># for res in model.stream(input=prompt_text):<br /></span><span style="color: #717cb4; font-style: italic;"># for chunk in res:<br /></span><span style="color: #717cb4; font-style: italic;"># print(chunk, end="",flush=True)<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span><span style="color: #717cb4; font-style: italic;"># langchain </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">流式返回结果方式输出<br /></span>chain <span style="color: #89ddff;">= </span>prompt_template <span style="color: #89ddff;">| </span>model<br /><span style="color: #c792ea; font-style: italic;">for </span>res <span style="color: #c792ea; font-style: italic;">in </span>chain<span style="color: #89ddff;">.</span><span style="color: #82aaff;">stream</span><span style="color: #89ddff;">({</span><span style="color: #c3e88d;">"lastname"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">张</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"gender"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">女</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">}):<br /></span><span style="color: #89ddff;"> </span><span style="color: #c792ea; font-style: italic;">for </span>chunk <span style="color: #c792ea; font-style: italic;">in </span>res<span style="color: #89ddff;">:<br /></span><span style="color: #89ddff;"> </span><span style="color: #82aaff; font-style: italic;">print</span><span style="color: #89ddff;">(</span>chunk<span style="color: #89ddff;">, </span><span style="color: #f78c6c;">end</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">""</span><span style="color: #89ddff;">,</span><span style="color: #f78c6c;">flush</span><span style="color: #89ddff;">=</span><span style="color: #c792ea; font-style: italic;">True</span><span style="color: #89ddff;">)</span></pre>
</div>
</div>
<p> </p>
<p>2、聊天模型</p>
<div style="background-color: #0f111a; color: #c3cee3;">
<div>
<pre style="font-family: 'Source Code Pro',monospace; font-size: 12.0pt;"><span style="color: #c792ea; font-style: italic;">from </span>langchain_community<span style="color: #89ddff;">.</span>chat_models<span style="color: #89ddff;">.</span>tongyi <span style="color: #c792ea; font-style: italic;">import </span>ChatTongyi<br /><span style="color: #c792ea; font-style: italic;">from </span>langchain_core<span style="color: #89ddff;">.</span>messages <span style="color: #c792ea; font-style: italic;">import </span>HumanMessage<span style="color: #89ddff;">,</span>SystemMessage<span style="color: #89ddff;">,</span>AIMessage<br /><br /><span style="color: #c792ea; font-style: italic;">import </span>os<br /><span style="color: #c792ea; font-style: italic;">from </span>dotenv <span style="color: #c792ea; font-style: italic;">import </span>load_dotenv<br /><span style="color: #82aaff;">load_dotenv</span><span style="color: #89ddff;">()<br /></span><span style="color: #89ddff;"><br /></span>model <span style="color: #89ddff;">= </span><span style="color: #82aaff;">ChatTongyi</span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #717cb4; font-style: italic;"># api_key=os.getenv("DASHSCOPE_API_KEY"),<br /></span><span style="color: #717cb4; font-style: italic;"> </span><span style="color: #f78c6c;">model</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">"qwen3-max"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;">#</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">准备消息列表<br /></span><span style="color: #717cb4; font-style: italic;"># messages = [<br /></span><span style="color: #717cb4; font-style: italic;"># SystemMessage(content="</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">你是一个边塞诗人。</span><span style="color: #717cb4; font-style: italic;">"),<br /></span><span style="color: #717cb4; font-style: italic;"># HumanMessage(content="</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">写一首唐诗</span><span style="color: #717cb4; font-style: italic;">"),<br /></span><span style="color: #717cb4; font-style: italic;"># AIMessage(content="</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">《杜侍御送贡物戏》 铜柱朱崖道路难,伏波横海旧登坛。越人自贡珊瑚树,汉使何劳獬豸冠。疲马山中愁日晚,孤舟江上畏春寒。由来此货称难得,多恐君王不忍看。</span><span style="color: #717cb4; font-style: italic;">"),<br /></span><span style="color: #717cb4; font-style: italic;"># HumanMessage(content="</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">请继续按照上面的格式写诗</span><span style="color: #717cb4; font-style: italic;">"),<br /></span><span style="color: #717cb4; font-style: italic;"># ]<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span><span style="color: #717cb4; font-style: italic;">#</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">简写方式,可避免导包,可在呢内容用</span><span style="color: #717cb4; font-style: italic;">{</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">变量</span><span style="color: #717cb4; font-style: italic;">}</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">占位<br /></span>messages <span style="color: #89ddff;">= [(<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"system"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">你是一个边塞诗人。</span><span style="color: #c3e88d;">"<br /></span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"human"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">写一首唐诗</span><span style="color: #c3e88d;">"<br /></span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"ai"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">《杜侍御送贡物戏》 铜柱朱崖道路难,伏波横海旧登坛。越人自贡珊瑚树,汉使何劳獬豸冠。疲马山中愁日晚,孤舟江上畏春寒。由来此货称难得,多恐君王不忍看。</span><span style="color: #c3e88d;">"<br /></span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"human"</span><span style="color: #89ddff;">,<br /></span><span style="color: #89ddff;"> </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">请继续按照上面的格式写诗</span><span style="color: #c3e88d;">"<br /></span><span style="color: #89ddff;">)]<br /></span><span style="color: #89ddff;"><br /></span>res <span style="color: #89ddff;">= </span>model<span style="color: #89ddff;">.</span><span style="color: #82aaff;">stream</span><span style="color: #89ddff;">(</span><span style="color: #f78c6c;">input</span><span style="color: #89ddff;">=</span>messages<span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">流式输出<br /></span><span style="color: #c792ea; font-style: italic;">for </span>chunk <span style="color: #c792ea; font-style: italic;">in </span>res<span style="color: #89ddff;">:<br /></span><span style="color: #89ddff;"> </span><span style="color: #82aaff; font-style: italic;">print</span><span style="color: #89ddff;">(</span>chunk<span style="color: #89ddff;">.</span>content<span style="color: #89ddff;">, </span><span style="color: #f78c6c;">end</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">""</span><span style="color: #89ddff;">,</span><span style="color: #f78c6c;">flush</span><span style="color: #89ddff;">=</span><span style="color: #c792ea; font-style: italic;">True</span><span style="color: #89ddff;">)</span></pre>
</div>
</div>
<p> </p>
<p>3、嵌入模型</p>
<div style="background-color: #0f111a; color: #c3cee3;">
<pre style="font-family: 'Source Code Pro',monospace; font-size: 12.0pt;"><span style="color: #c792ea; font-style: italic;">from </span>langchain_community<span style="color: #89ddff;">.</span>embeddings <span style="color: #c792ea; font-style: italic;">import </span>DashScopeEmbeddings<br /><br /><span style="color: #c792ea; font-style: italic;">import </span>os<br /><span style="color: #c792ea; font-style: italic;">from </span>dotenv <span style="color: #c792ea; font-style: italic;">import </span>load_dotenv<br /><span style="color: #82aaff;">load_dotenv</span><span style="color: #89ddff;">()<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">创建模型对象 不传</span><span style="color: #717cb4; font-style: italic;">model</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">默认用的是</span><span style="color: #717cb4; font-style: italic;"> text-embeddings-v1<br /></span>model <span style="color: #89ddff;">= </span><span style="color: #82aaff;">DashScopeEmbeddings</span><span style="color: #89ddff;">()<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #82aaff; font-style: italic;">print</span><span style="color: #89ddff;">(</span>model<span style="color: #89ddff;">.</span><span style="color: #82aaff;">embed_query</span><span style="color: #89ddff;">(</span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">我喜欢你</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">))<br /></span><span style="color: #82aaff; font-style: italic;">print</span><span style="color: #89ddff;">(</span>model<span style="color: #89ddff;">.</span><span style="color: #82aaff;">embed_documents</span><span style="color: #89ddff;">([</span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">我喜欢你</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">你喜欢我</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">]))</span></pre>
</div>
<p> </p> |
1 |
61 |
1 |
2/19/26, 6:38 AM |
2/19/26, 12:07 PM |
View Edit Delete |
| 55 |
Langchain的ChatPromptTemplate结合chain的基本案例 |
<div style="background-color: #0f111a; color: #c3cee3;">
<div>
<pre style="font-family: 'Source Code Pro',monospace; font-size: 12.0pt;"><span style="color: #c792ea; font-style: italic;">from </span>langchain_core<span style="color: #89ddff;">.</span>output_parsers <span style="color: #c792ea; font-style: italic;">import </span>StrOutputParser<span style="color: #89ddff;">, </span>JsonOutputParser<br /><span style="color: #c792ea; font-style: italic;">from </span>langchain_core<span style="color: #89ddff;">.</span>prompts <span style="color: #c792ea; font-style: italic;">import </span>ChatPromptTemplate<span style="color: #89ddff;">, </span>MessagesPlaceholder<br /><span style="color: #c792ea; font-style: italic;">from </span>langchain_community<span style="color: #89ddff;">.</span>chat_models<span style="color: #89ddff;">.</span>tongyi <span style="color: #c792ea; font-style: italic;">import </span>ChatTongyi<br /><br /><span style="color: #c792ea; font-style: italic;">from </span>dotenv <span style="color: #c792ea; font-style: italic;">import </span>load_dotenv<br /><span style="color: #c792ea; font-style: italic;">from </span>langchain_core<span style="color: #89ddff;">.</span>runnables <span style="color: #c792ea; font-style: italic;">import </span>RunnableLambda<br /><br /><span style="color: #82aaff;">load_dotenv</span><span style="color: #89ddff;">()<br /></span><span style="color: #89ddff;"><br /></span>history_data <span style="color: #89ddff;">= [<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"human"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">你来写一首诗?</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"ai"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">归园田居(其三) 种豆南山下,草盛豆苗稀。晨兴理荒秽,带月荷锄归。道狭草木长,夕露沾我衣。衣沾不足惜,但使愿无违。</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"human"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">好诗,再来一首</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"ai"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">饮酒(其五) 结庐在人境,而无车马喧。问君何能尔,心远地自偏。采菊东篱下,悠然见南山。山气日夕佳,飞鸟相与还。此中有真意,欲辨已忘言。</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;">]<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;"># first_prompt_template = ChatPromptTemplate.from_messages([<br /></span><span style="color: #717cb4; font-style: italic;"># ("system", "</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">你是一个世外高人,不予世俗同流合污,以作诗表达心中所想</span><span style="color: #717cb4; font-style: italic;">,</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">并封装成</span><span style="color: #717cb4; font-style: italic;">JSON</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">格式返回给我。要求</span><span style="color: #717cb4; font-style: italic;">key</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">是</span><span style="color: #717cb4; font-style: italic;">poetry</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">,</span><span style="color: #717cb4; font-style: italic;">value</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">是你作的诗</span><span style="color: #717cb4; font-style: italic;">"),<br /></span><span style="color: #717cb4; font-style: italic;"># MessagesPlaceholder(variable_name="chat_history"),<br /></span><span style="color: #717cb4; font-style: italic;"># ("human", "{input}"),<br /></span><span style="color: #717cb4; font-style: italic;"># ])<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span>first_prompt_template <span style="color: #89ddff;">= </span>ChatPromptTemplate<span style="color: #89ddff;">.</span><span style="color: #82aaff;">from_messages</span><span style="color: #89ddff;">([<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"system"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">你是一个世外高人,不予世俗同流合污,以作诗表达心中所感。</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;"> </span><span style="color: #82aaff;">MessagesPlaceholder</span><span style="color: #89ddff;">(</span><span style="color: #f78c6c;">variable_name</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">"chat_history"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"human"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"{input}"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;">])<br /></span><span style="color: #89ddff;"><br /></span>second_prompt_template <span style="color: #89ddff;">= </span>ChatPromptTemplate<span style="color: #89ddff;">.</span><span style="color: #82aaff;">from_messages</span><span style="color: #89ddff;">([<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"ai"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">上一首诗是:</span><span style="color: #c3e88d;">{poetry}"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;"> (</span><span style="color: #c3e88d;">"human"</span><span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">帮我解释一下诗名和每一句诗的意思</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">),<br /></span><span style="color: #89ddff;">])<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">自定义函数<br /></span>myfun <span style="color: #89ddff;">= </span><span style="color: #82aaff;">RunnableLambda</span><span style="color: #89ddff;">(</span><span style="color: #c792ea; font-style: italic;">lambda </span>ai_msg<span style="color: #89ddff;">:{</span><span style="color: #c3e88d;">"poetry" </span><span style="color: #89ddff;">: </span>ai_msg<span style="color: #89ddff;">.</span>content<span style="color: #89ddff;">}) </span><span style="color: #717cb4; font-style: italic;">#type: ignore<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span>model <span style="color: #89ddff;">= </span><span style="color: #82aaff;">ChatTongyi</span><span style="color: #89ddff;">(<br /></span><span style="color: #89ddff;"> </span><span style="color: #f78c6c;">model </span><span style="color: #89ddff;">= </span><span style="color: #c3e88d;">"qwen3-max"<br /></span><span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span>str_parser <span style="color: #89ddff;">= </span><span style="color: #82aaff;">StrOutputParser</span><span style="color: #89ddff;">()<br /></span>json_parser <span style="color: #89ddff;">= </span><span style="color: #82aaff;">JsonOutputParser</span><span style="color: #89ddff;">()<br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">前一个输出等于下一个输入,必须是</span><span style="color: #717cb4; font-style: italic;">Runnable</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">接口的子类,自定义函数入链需要遵守这个规则<br /></span>chain <span style="color: #89ddff;">= (</span>first_prompt_template <span style="color: #89ddff;">| </span>model<br /> <span style="color: #717cb4; font-style: italic;"># json_parser<br /></span><span style="color: #717cb4; font-style: italic;"> </span><span style="color: #89ddff;">| </span>myfun<br /> <span style="color: #89ddff;">| </span>second_prompt_template <span style="color: #89ddff;">| </span>model <span style="color: #89ddff;">| </span>str_parser<span style="color: #89ddff;">)<br /></span><span style="color: #89ddff;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">直接输出<br /></span><span style="color: #717cb4; font-style: italic;"># print(chain.invoke({"chat_history":history_data, "input": "</span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">再来一首诗</span><span style="color: #717cb4; font-style: italic;">"}).content)<br /></span><span style="color: #717cb4; font-style: italic;"><br /></span><span style="color: #717cb4; font-style: italic;"># </span><span style="color: #717cb4; font-style: italic; font-family: 'Courier New',monospace;">流式输出<br /></span><span style="color: #c792ea; font-style: italic;">for </span>chunk <span style="color: #c792ea; font-style: italic;">in </span>chain<span style="color: #89ddff;">.</span><span style="color: #82aaff;">stream</span><span style="color: #89ddff;">({</span><span style="color: #c3e88d;">"chat_history"</span><span style="color: #89ddff;">:</span>history_data<span style="color: #89ddff;">, </span><span style="color: #c3e88d;">"input"</span><span style="color: #89ddff;">: </span><span style="color: #c3e88d;">"</span><span style="color: #c3e88d; font-family: 'Courier New',monospace;">再来一首诗</span><span style="color: #c3e88d;">"</span><span style="color: #89ddff;">}):<br /></span><span style="color: #89ddff;"> </span><span style="color: #82aaff; font-style: italic;">print</span><span style="color: #89ddff;">(</span>chunk<span style="color: #89ddff;">, </span><span style="color: #f78c6c;">end</span><span style="color: #89ddff;">=</span><span style="color: #c3e88d;">""</span><span style="color: #89ddff;">, </span><span style="color: #f78c6c;">flush</span><span style="color: #89ddff;">=</span><span style="color: #c792ea; font-style: italic;">True</span><span style="color: #89ddff;">)</span></pre>
</div>
</div> |
1 |
61 |
1 |
2/19/26, 7:43 AM |
2/19/26, 3:32 PM |
View Edit Delete |
| 72 |
LangChain内置中间件 |
<p>节点式钩子</p>
<p>1、before_agent: agent执行前拦截</p>
<p>2、after_agent:agent执行后拦截</p>
<p>3、before_model:model执行前拦截</p>
<p>4、after_model:model执行后拦截</p>
<p> </p>
<p>针对工具和模型的包装式钩子:</p>
<p>1、wrap_model_call:每个模型调用时拦截</p>
<p>2、wrap_tool_call:每个工具调用时拦截</p> |
1 |
61 |
1 |
3/23/26, 8:36 PM |
3/23/26, 8:36 PM |
View Edit Delete |