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

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字

上一节实现了 LangChain 实现给动物取名字,
实际上每次给不同的动物取名字,还得修改源代码,这周就用模块化template来实现。

1. 添加promptTemplate

from langchain.llms import OpenAI  # 导入Langchain库中的OpenAI模块
from langchain.prompts import PromptTemplate  # 导入Langchain库中的PromptTemplate模块
from langchain.chains import LLMChain  # 导入Langchain库中的LLMChain模块
from dotenv import load_dotenv  # 导入dotenv库,用于加载环境变量load_dotenv()  # 加载.env文件中的环境变量def generate_pet_name(animal_type):llm = OpenAI(temperature=0.7)  # 创建OpenAI模型的实例,设置temperature参数为0.7以调整生成的多样性# 创建PromptTemplate实例,用于构造输入提示prompt_template_name = PromptTemplate(input_variables=['animal_type'],template="I have a {animal_type} pet and I want a cool name for it. Suggest me five cool names for my pet.")name_chain = LLMChain(llm=llm, prompt=prompt_template_name)  # 创建LLMChain实例,将OpenAI模型和PromptTemplate传入response = name_chain({'animal_type': animal_type})  # 使用LLMChain生成宠物名字return response  # 返回生成的名字# 当该脚本作为主程序运行时,执行以下代码
if __name__ == "__main__":print(generate_pet_name('cat'))  # 调用generate_pet_name函数,并打印返回的结果

运行和输出

$ python main.py
{'animal_type': 'cat', 'text': '\n\n1. Shadow \n2. Midnight \n3. Storm \n4. Luna \n5. Tiger'}
(.venv) zgpeace on zgpeaces-MBP in ~/Workspace/LLM/langchain-llm-app(1m|feature/prompt)
$ python main.py
{'animal_type': 'cow', 'text': '\n\n1. Milky\n2. Mooly\n3. Bessie\n4. Daisy\n5. Buttercup'}
(.venv) zgpeace on zgpeaces-MBP in ~/Workspace/LLM/langchain-llm-app(4m|feature/prompt*)

在这里插入图片描述

2. 添加新的参数pte_color

from langchain.llms import OpenAI  # 导入Langchain库中的OpenAI模块
from langchain.prompts import PromptTemplate  # 导入Langchain库中的PromptTemplate模块
from langchain.chains import LLMChain  # 导入Langchain库中的LLMChain模块
from dotenv import load_dotenv  # 导入dotenv库,用于加载环境变量load_dotenv()  # 加载.env文件中的环境变量def generate_pet_name(animal_type, pet_color):llm = OpenAI(temperature=0.7)  # 创建OpenAI模型的实例,设置temperature参数为0.7以调整生成的多样性# 创建PromptTemplate实例,用于构造输入提示prompt_template_name = PromptTemplate(input_variables=['animal_type', 'pet_color'],template="I have a {animal_type} pet and I want a cool name for it. Suggest me five cool names for my pet.")name_chain = LLMChain(llm=llm, prompt=prompt_template_name)  # 创建LLMChain实例,将OpenAI模型和PromptTemplate传入response = name_chain({'animal_type': animal_type, 'pet_color': pet_color})  # 使用LLMChain生成宠物名字return response  # 返回生成的名字# 当该脚本作为主程序运行时,执行以下代码
if __name__ == "__main__":print(generate_pet_name('cow', 'black'))  # 调用generate_pet_name函数,并打印返回的结果

运行结果

$ python main.py
{'animal_type': 'cow', 'pet_color': 'black', 'text': '\n\n1. Daisy\n2. Maverick\n3. Barnaby\n4. Bessie\n5. Bossy'}
(.venv) zgpeace on zgpeaces-MBP in ~/Workspace/LLM/langchain-llm-app(6m|feature/prompt*)

3. 重构代码

把逻辑放到langchain_helper.py, 清空main.py代码

4. 用Streamlit 生成网页

main.py 代码实现

import langchain_helper as lch
import streamlit as stst.title("Pets name generator")

add path environment in .zshrc

export PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin:$PATH"source .zshrc
zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/prompt) ✗ ❯ streamlit run main.py       👋 Welcome to Streamlit!If you’d like to receive helpful onboarding emails, news, offers, promotions,and the occasional swag, please enter your email address below. Otherwise,leave this field blank.Email:  You can find our privacy policy at https://streamlit.io/privacy-policySummary:- This open source library collects usage statistics.- We cannot see and do not store information contained inside Streamlit apps,such as text, charts, images, etc.- Telemetry data is stored in servers in the United States.- If you'd like to opt out, add the following to ~/.streamlit/config.toml,creating that file if necessary:[browser]gatherUsageStats = falseYou can now view your Streamlit app in your browser.Local URL: http://localhost:8501Network URL: http://192.168.50.10:8501For better performance, install the Watchdog module:$ xcode-select --install$ pip install watchdog

http://localhost:8501/
在这里插入图片描述

5. Streamlit 生成网页输入跟Langchain互动获取名字

main.py

import langchain_helper as lch  # 导入名为langchain_helper的模块,并使用别名lch
import streamlit as st  # 导入Streamlit库,并使用别名stst.title("Pets name generator")  # 在Streamlit应用中设置标题# 通过侧边栏选择宠物类型
animal_type = st.sidebar.selectbox("Select animal type", ["dog", "cat", "cow", "horse", "pig", "sheep"])# 根据宠物类型设置宠物颜色,使用侧边栏的文本区域输入
if animal_type in ['dog', 'cat', 'cow', 'horse', 'pig', 'sheep']:pet_color = st.sidebar.text_area(label=f"What color is your {animal_type}?", max_chars=15)
else:pet_color = st.sidebar.text_area(label="What color is your pet?", max_chars=15)# 如果有输入颜色,调用generate_pet_name函数生成宠物名字并显示
if pet_color:response = lch.generate_pet_name(animal_type, pet_color)st.text(response['pet_name'])

langchain_hepler.py 实现

from langchain.llms import OpenAI  # 导入Langchain库中的OpenAI模块
from langchain.prompts import PromptTemplate  # 导入Langchain库中的PromptTemplate模块
from langchain.chains import LLMChain  # 导入Langchain库中的LLMChain模块
from dotenv import load_dotenv  # 导入dotenv库,用于加载环境变量load_dotenv()  # 加载.env文件中的环境变量def generate_pet_name(animal_type, pet_color):llm = OpenAI(temperature=0.7)  # 创建OpenAI模型的实例,设置temperature参数为0.7以调整生成的多样性# 创建PromptTemplate实例,用于构造输入提示prompt_template_name = PromptTemplate(input_variables=['animal_type', 'pet_color'],template="I have a {animal_type} pet and I want a cool name for it. Suggest me five cool names for my pet.")name_chain = LLMChain(llm=llm, prompt=prompt_template_name, output_key='pet_name')  # 创建LLMChain实例,将OpenAI模型和PromptTemplate传入response = name_chain({'animal_type': animal_type, 'pet_color': pet_color})  # 使用LLMChain生成宠物名字return response  # 返回生成的名字# 当该脚本作为主程序运行时,执行以下代码
if __name__ == "__main__":print(generate_pet_name('cow', 'black'))  # 调用generate_pet_name函数,并打印返回的结果

在这里插入图片描述

参考

  • https://github.com/zgpeace/pets-name-langchain/tree/feature/prompt
  • https://youtu.be/lG7Uxts9SXs?si=H1CISGkoYiKRSF5V
  • Streamlit - https://streamlit.io
http://www.lryc.cn/news/237134.html

相关文章:

  • linux nas
  • 控制您的音乐、视频等媒体内容
  • xlua源码分析(三)C#访问lua的映射
  • 2023 极术通讯-汽车“新四化”路上,需要一片安全山海
  • Spring Boot接口设计规范
  • 美创科技与南京大数据安全技术有限公司达成战略合作
  • 2.4路由日志管理
  • 归并排序详解:递归实现+非递归实现(图文详解+代码)
  • DataBinding原理
  • docker更换国内源
  • 【咖啡品牌分析】Google Maps数据采集咖啡市场数据分析区域分析热度分布分析数据抓取瑞幸星巴克
  • 【Java】异常处理(一)
  • 【高级程序设计】Week2-4Week3-1 JavaScript
  • PHP笔记-->读取JSON数据以及获取读取到的JSON里边的数据
  • 【Spring Boot】如何集成Redis
  • Elasticsearch备份与还原:使用elasticdump
  • 给大伙讲个笑话:阿里云服务器开了安全组防火墙还是无法访问到服务
  • js:react使用zustand实现状态管理
  • vue3+vite+SQL.js 读取db3文件数据
  • 微信小程序 限制字数文本域框组件封装
  • 阿里国际站(直通车)
  • C# GC机制
  • wpf devexpress在未束缚模式中生成Tree
  • Python利器:os与chardet读取多编码文件
  • 微服务和注册中心
  • 吴恩达《机器学习》9-1-9-3:反向传播算法、反向传播算法的直观理解
  • Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
  • 【JS】Chapter13-构造函数数据常用函数
  • 06-流媒体-YUV数据在SDL控件显示
  • 对象和数据结构