首页 » 软件优化 » LangChain开发示例:故事创作者-写评论(故事生成标题评论链式)

LangChain开发示例:故事创作者-写评论(故事生成标题评论链式)

雨夜梧桐 2024-11-04 23:27:48 0

扫一扫用手机浏览

文章目录 [+]

一、完整示例代码

下面这段示例代码是一个基于Streamlit和OpenAI模型开发的故事创作工具。

# 设置系统环境变量,配置HTTP和HTTPS代理服务器地址import osos.environ['HTTP_PROXY'] = 'http://127.0.0.1:8001'os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:8001'# 导入所需的库import streamlit as stfrom langchain import OpenAI # 导入封装OpenAI模型的模块from langchain.prompts import PromptTemplate # 导入用于构建提示模板的模块from langchain.schema import StrOutputParser # 导入用于输出字符串解析的模块from langchain_core.runnables import RunnablePassthrough # 导入用于任务连接和数据传输的模块# 初始化OpenAI模型model = OpenAI()# 设置Streamlit应用的标题为“故事创作者”st.title("故事创作者")# 创建一个文本输入框,让用户输入要创作故事的主题topic = st.text_input("请选择一个主题来创作一个故事")# 创建用于生成故事标题的提示模板title_prompt = PromptTemplate.from_template("为关于{topic}的故事撰写一个精彩的标题")# 创建用于生成故事正文的提示模板story_prompt = PromptTemplate.from_template( """ 你是一位才情横溢的作家,当给定一个故事标题时,你需要为之编写相应的故事内容。
标题:{title} """)# 创建用于生成故事评论的提示模板review_prompt = PromptTemplate.from_template( """ 你是一位公正无私的评论家,当给定一个故事及其内容时,你需要为其撰写一篇客观的评论。
标题:{title} 故事:{story} """)# 设置用于生成标题、故事正文和评论的链式流程,其中包含模型运算和输出格式化title_generation_chain = title_prompt | model | StrOutputParser()story_generation_chain = story_prompt | model | StrOutputParser()review_generation_chain = review_prompt | model | StrOutputParser()# 将标题、故事和评论生成的链式流程组合在一起chain = ( {"title": title_generation_chain} # 链接标题生成 | RunnablePassthrough.assign(story=story_generation_chain) # 添加故事生成至链中 | RunnablePassthrough.assign(review=review_generation_chain) # 添加评论生成至链中)# 如果用户输入了主题,则执行生成链if topic: # 显示加载动画,表示正在生成内容 with st.spinner("正在生成故事标题、故事正文和评论..."): # 执行链并将用户输入的主题作为参数 result = chain.invoke({"topic": topic}) # 展示生成的结果 st.header(result["title"]) # 显示生成的故事标题 st.write(result["story"]) # 显示生成的故事正文 st.write(result["review"]) # 显示生成的故事评论

LangChain开发示例:故事创作者-写评论(故事生成标题评论链式) 软件优化
(图片来自网络侵删)
二、运行应用

运行代码:streamlit run 2_story_creator.py

运行界面:

三、代码说明

前面的文章已经解释过大部分代码了,这里只解释部分新增的代码。

创建生成任务的提示模板(PromptTemplate),分别创建用于生成故事标题、故事正文和故事评论的三个PromptTemplate对象。
每个模板都包含了占位符(如{topic}、{title}、{story}),在实际生成过程中会被替换为相应的值。

接着构建生成任务链:

# 设置用于生成标题、故事正文和评论的链式流程,其中包含模型运算和输出格式化title_generation_chain = title_prompt | model | StrOutputParser()story_generation_chain = story_prompt | model | StrOutputParser()review_generation_chain = review_prompt | model | StrOutputParser()

为每个生成任务(标题、故事正文、评论)创建一个处理链,包括从PromptTemplate到OpenAI模型的执行,再到StrOutputParser的输出解析。

使用RunnablePassthrough将这三个单独的任务链串联起来,形成了一个综合的链式结构,以便一次性生成所有内容。

当用户输入了故事主题后,显示加载动画。

调用chain.invoke({"topic": topic})方法执行整个生成链,将用户输入的主题作为参数传递给模型。

从执行结果中提取生成的故事标题、故事正文和故事评论,并在Streamlit应用界面上分别显示出来。

#春日生活打卡季#

标签:

相关文章