当前位置: 首页 > news >正文

LangChain表达式(LCEL)实操案例1

案例1:写一篇短文,然后对这篇短文进行打分

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory, RunnableLambda
from langchain_openai import ChatOpenAIllm_zhipu = ChatOpenAI(temperature=0.9,model='glm-4-air-0111',api_key='****',base_url='https://open.bigmodel.cn/api/paas/v4/'
)parser = StrOutputParser()prompt1 = ChatPromptTemplate.from_template('给我写一篇关于{key_word}的{type},字数不超过{count}。')
prompt2 = ChatPromptTemplate.from_template('请简单评价一下这篇短文,如果总分是10分,请给这篇短文打分:{text_context}。')chain1 = prompt1 | llm_zhipu | StrOutputParser()
#这样组装,不会输出chain1的内容
# chain2 = {'text_context':chain1} | prompt2 | llm_zhipu | StrOutputParser()def print_chain1(input):print(input)print('*'*30)return {'text_context':input}
chain2 = chain1 | RunnableLambda(print_chain1) | prompt2 | llm_zhipu | parserprint(chain2.invoke({'key_word': '请写一篇关于春天的文章', 'type': '散文', 'count': 500}))

输出:

案例2:根据用户输入的点餐偏好,推荐2-3家餐厅,并给出推荐理由

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory, RunnableLambda
from langchain_openai import ChatOpenAIllm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='****',base_url='https://dashscope.aliyuncs.com/compatible-mode/v1'
)parser = StrOutputParser()
user_preperences_prompt = ChatPromptTemplate.from_template('用户输入了一些餐厅偏好:\n{user_input}\n,请将用户的偏好总结为清晰的需求:')recommend_preperences_prompt = ChatPromptTemplate.from_template('基于用户的需求:\n{recommend_input}\n,请推荐3家适合的餐厅,并说明推荐的理由:')summarize_preperences_prompt = ChatPromptTemplate.from_template('以下是餐厅推荐和推荐的理由:\n{summarize_input}\n,请总结成2-3句话,供用户参考:')chain = user_preperences_prompt | llm | recommend_preperences_prompt | llm | summarize_preperences_prompt | llm | parser
print(chain.invoke({'user_input': '我喜欢吃辣,环境要安静点的餐厅,价格要实惠,又好吃的菜'}))

输出:

案例3:用户会问到各个领域的问题,根据不同的领域定义不同的提示词模板,动态的选择合适的任务模板去完成

from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory, RunnableLambda, RouterRunnable, RunnableSequence
from langchain_openai import ChatOpenAIllm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='*****',base_url='https://dashscope.aliyuncs.com/compatible-mode/v1'
)#用户会问到各个领域的问题,根据不同的领域定义不同的提示词模板,动态的选择合适的任务模板去完成
parser = StrOutputParser()math_prompt = ChatPromptTemplate.from_template('你是一位数学家,擅长分步骤解决各种数学问题,以下是问题的内容:{input}')
physics_prompt = ChatPromptTemplate.from_template('你是一位物理教授,擅长用通俗易懂的语言回答各种物理问题,以下是问题的内容:{input}')
history_prompt = ChatPromptTemplate.from_template('你是一位历史研究学家,对历史事件和背景很精通,以下是问题的内容:{input}')
computer_prompt = ChatPromptTemplate.from_template('你是一位非常自身的计算机科学家,擅长算法,大数据,编程问题,以下是问题的内容:{input}')
default_prompt = ChatPromptTemplate.from_template('输入内容无法归类,请直接回答:{input}')default_chain = default_prompt | llm
computer_chain = computer_prompt | llm
history_chain = history_prompt | llm
physics_chain = physics_prompt | llm
math_chain = math_prompt | llmdef route(input):"""根据大模型第一次处理的值输出来,动态判断各种领域的任务:param input::return:"""if '物理' in input['type']:print('1号路由')return {'key':'physics','input':input['input']}elif '数学' in input['type']:print('2号路由')return {'key':'math','input':input['input']}elif '历史' in input['type']:print('3号路由')return {'key':'history','input':input['input']}elif '计算机' in input['type']:print('4号路由')return {'key':'computer','input':input['input']}else :print('5号路由')return {'key':'default','input':input['input']}#创建一个路由的节点
route_runnable = RunnableLambda(route)
router = RouterRunnable(runnables={'physics':physics_chain,'math':math_chain,'history': history_chain,'computer': computer_chain,'default': default_chain
})#第一个提示词模板:
first_prompt = ChatPromptTemplate.from_template('不要回答下面用户的问题,只要根据用主呢的输入来判断分类,一共有【物理、历顺、计算机、数学、其他】5种类别\n\n\用户的输入:{input}\n\n\最后的输出包含分类的类别和用户输入的内容,输出的格式为json,其中类别的key为type,用户输入内容的key为input'
)chain1 = first_prompt | llm | JsonOutputParser()
chain2 = RunnableSequence(chain1,route_runnable,router) # chain1 | route_runnable | routerinputs = [{'input':'什么是黑体辐射?'},{'input':'1+1真的等于2吗?'},{'input':'介绍一下第一次世界大战的背景?'},{'input':'如何快速实现冒泡算法?'}
]for inp in inputs:result = chain2.invoke(inp)print(f'问题:{inp}\n 回答:{result.content}\n')

输出:

相关文章:

  • MathWorks无法注册,显示no healthy upstream(已解决)
  • PyQt6基础_QCharts绘制饼状图
  • 【nn.GroupNorm】
  • MQTT协议,EMQX部署,MQTTX安装学习
  • 苹果签名工具
  • 每天掌握一个Linux命令 - curl
  • 代码随想录算法训练营第60期第五十二天打卡
  • SpringBoot+Vue+微信小程序校园自助打印系统
  • [SWPUCTF 2023 秋季新生赛]Classical Cipher203分古典密码Base家族栅栏密码
  • 【xmb】内部文档148344596
  • RAG中的chunk以及评测方法
  • 辅助脚本-通用开发工作区目录结构生成脚本解析与实践指南
  • 5G 核心网 NGAP UE-TNL 偶联和绑定
  • C++学习-入门到精通【10】面向对象编程:多态性
  • 论坛系统(4)
  • C++核心编程_赋值运算符重载
  • 多线程(3)
  • 带sdf 的post sim 小结
  • azure web app创建分步指南系列之一
  • CMP401GSZ-REEL混合电压接口中的23ns延迟与±6V输入范围设计实现
  • 做中学数学教案有哪些好的网站/小型项目外包网站
  • 有公司如何制作网站/唐山百度提升优化
  • 网站优化排名的方法/推广软件赚钱
  • 四川成都今天公布疫情新情况/做seo需要哪些知识
  • 部队网站建设/品牌推广软文200字
  • 成都网站建设哪家/百度推广登录入口官网网