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
相关文章:
LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
上一节实现了 LangChain 实现给动物取名字, 实际上每次给不同的动物取名字,还得修改源代码,这周就用模块化template来实现。 1. 添加promptTemplate from langchain.llms import OpenAI # 导入Langchain库中的OpenAI模块 from langchain.p…...
linux nas
挂载到本地 mkdir -p /mnt/mountnasdir mount -t nfs 192.168.62:/cnas_id10086_vol10010_dev/ /mnt/mountnasdir...
控制您的音乐、视频等媒体内容
跨多个 Chrome 标签页播放音乐或声音 在计算机上打开 Chrome 。在标签页中播放音乐、视频或其他任何有声内容。您可以停留在该标签页上,也可以转到别处。要控制声音,请在右上角点击“媒体控件”图标 。您可暂停播放、转到下一首歌曲/下一个视频…...
xlua源码分析(三)C#访问lua的映射
xlua源码分析(三)C#访问lua的映射 上一节我们主要分析了lua call C#的无wrap实现。同时我们在第一节里提到过,C#使用LuaTable类持有lua层的table,以及使用Action委托持有lua层的function。而在xlua的官方文档中,推荐使…...
2023 极术通讯-汽车“新四化”路上,需要一片安全山海
导读:极术社区推出极术通讯,引入行业媒体和技术社区、咨询机构优质内容,定期分享产业技术趋势与市场应用热点。 芯方向 【Armv9】-动态TrustZone技术的介绍 动态 TrustZone 是提供多租户安全媒体 pipeline 的绝佳工具。完全不受操作系统、虚…...
Spring Boot接口设计规范
接口参数处理及统一结果响应 1、接口参数处理 1、普通参数接收 这种参数接收方式是比较常见的,由于是GET请求方式,所以在传参时直接在路径后拼接参数和参数值即可。 例如:localhost:8080/api/product/list?key1value1&key2value2 /…...
美创科技与南京大数据安全技术有限公司达成战略合作
近日,美创科技与南京大数据安全技术有限公司正式签署战略合作协议,优势力量共享、共拓共创共赢。 美创科技CEO柳遵梁、副总裁罗亮亮、副总裁王利强,南京大数据安全技术有限公司总经理潘杰、市场总监刘莉莎、销售总监王皓月、技术总监薛松等出…...
2.4路由日志管理
2.4路由/日志管理 一、静态路由和动态路由 路由器在转发数据时,需要现在路由表中查找相应的路由,有三种途径 (1)直连路由:路由器自动添加和自己直连的路由 (2)静态路由:管理员手动…...
归并排序详解:递归实现+非递归实现(图文详解+代码)
文章目录 归并排序1.递归实现2.非递归实现3.海量数据的排序问题 归并排序 时间复杂度:O ( N * logzN ) 每一层都是N,有log2N层空间复杂度:O(N),每个区间都会申请内存,最后申请的数组大小和array大小相同稳定…...
DataBinding原理
1、MainActivity首先使用DataBindingUtil.setContentView设置布局文件activity_main.xml。 2、随后,经过一系列函数调用,ActivityMainBindingImpl对象最终会实例化,并与activity_main.xml进行绑定。 3、实例化后的ActivityMainBindingImpl对象…...
docker更换国内源
docker更换国内源 1、编辑Docker配置文件 在终端中执行以下命令,编辑Docker配置文件: vi /etc/docker/daemon.json2、添加更新源 在打开的配置文件中,添加以下内容: {"registry-mirrors": ["https://hub-mirror…...
【咖啡品牌分析】Google Maps数据采集咖啡市场数据分析区域分析热度分布分析数据抓取瑞幸星巴克
引言 咖啡作为一种受欢迎的饮品,已经成为我们生活中不可或缺的一部分。随着国内外咖啡品牌的涌入,新加坡咖啡市场愈加多元化和竞争激烈。 本文对新加坡咖啡市场进行了全面的品牌门店数占比分析,聚焦于热门品牌的地理分布、投资价值等。通过…...
【Java】异常处理(一)
🌺个人主页:Dawn黎明开始 🎀系列专栏:Java ⭐每日一句:什么都不做,才会来不及 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 📋前…...
【高级程序设计】Week2-4Week3-1 JavaScript
一、Javascript 1. What is JS 定义A scripting language used for client-side web development.作用 an implementation of the ECMAScript standard defines the syntax/characteristics of the language and a basic set of commonly used objects such as Number, Date …...
PHP笔记-->读取JSON数据以及获取读取到的JSON里边的数据
由于我以前是写C#的,现在学一下PHP, 在读取json数据的时候被以前的思维卡住了。 以前用C#读取的时候,是先定义一个数组,将反序列化的json存到数组里面,在从数组里面获取jaon中的“data”数据。 其实PHP的思路也是一样…...
【Spring Boot】如何集成Redis
在pom.xml文件中导入spring data redis的maven坐标。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 在application.yml文件中加入redis相关配置。 spr…...
Elasticsearch备份与还原:使用elasticdump
在数据管理的世界里,备份和还原数据是重中之重的日常工作,特别是对于Elasticsearch这样的强大而复杂的搜索引擎。备份不仅可以用于灾难恢复,还可以在数据迁移、测试或者升级等场景中发挥重要作用。 在本博客中,我们将会重点介绍如…...
给大伙讲个笑话:阿里云服务器开了安全组防火墙还是无法访问到服务
铺垫: 某天我在阿里云上买了一个服务器,买完我就通过MobaXterm进行了ssh(这个软件是会保存登录信息的) 故事开始: 过了n天之后我想用这个服务器来部署流媒体服务,咔咔两下就部署好了流媒体服务器&#x…...
js:react使用zustand实现状态管理
文档 https://www.npmjs.com/package/zustandhttps://github.com/pmndrs/zustandhttps://docs.pmnd.rs/zustand/getting-started/introduction 安装 npm install zustand示例 定义store store/index.js import { create } from "zustand";export const useCount…...
vue3+vite+SQL.js 读取db3文件数据
前言:好久没写博客了,最近一直在忙,没时间梳理。最近遇到一个需求是读取本地SQLite文件,还是花费了点时间才实现,没怎么看到vite方面写这个的文章,现在分享出来完整流程。 1.pnpm下载SQL.js(什么都可以下)…...
华为OD面试官最爱问的10个Python八股文,我这样答拿到了Offer
华为OD Python面试实战指南:10个高频问题的深度解析与应答策略 面试开场:如何用技术叙事打动面试官 去年冬天,我坐在华为OD的会议室里,手指不自觉地敲击着桌面。面试官推了推眼镜,抛出了第一个Python问题。那一刻我突然…...
知识获取受限?5款开源工具助你合法解锁付费内容
知识获取受限?5款开源工具助你合法解锁付费内容 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾在学术研究关键时刻被期刊付费墙阻挡?是否因新闻网站的…...
SpringBoot项目实战:用Java海康SDK搞定摄像头录像与门禁人脸下发(附完整代码)
SpringBoot企业级实战:海康威视SDK深度集成与智能安防系统开发 1. 企业级安防系统架构设计 在智能园区和现代化办公环境中,视频监控与门禁管理的无缝集成已成为刚需。海康威视作为全球领先的安防解决方案提供商,其设备SDK的深度集成能够为Jav…...
Java外部函数接口不是“能用就行”——从内存泄漏、线程崩溃到ABI不兼容,这9类致命缺陷正在 silently 摧毁你的微服务
第一章:Java外部函数接口(JEP 454)核心原理与演进脉络Java外部函数接口(Foreign Function & Memory API,JEP 454)标志着Java平台原生互操作能力的根本性重构。它取代了长期受限且易出错的JNI࿰…...
从用户视角优化:让QGC地面站的盘旋半径显示更直观的3个实用技巧
从用户视角优化:让QGC地面站的盘旋半径显示更直观的3个实用技巧 在无人机飞行任务规划中,盘旋半径的准确显示直接关系到飞行安全和任务执行效率。QGroundControl(QGC)作为业界领先的开源地面站软件,其功能强大但某些细…...
Llama-3.2V-11B-cotGPU算力优化:双卡4090自动拆分模型实测报告
Llama-3.2V-11B-cot GPU算力优化:双卡4090自动拆分模型实测报告 1. 项目概述 Llama-3.2V-11B-cot是基于Meta最新多模态大模型开发的高性能视觉推理工具,专为双卡RTX 4090环境深度优化。作为一款11B参数规模的视觉推理工具,它解决了传统大模…...
广告发光字全科普
广告发光字全科普:从原理到类型,一篇看懂门头招牌的发光逻辑走在城市街头,从连锁品牌门头到商场导视、楼宇标识,随处可见夜晚自动亮起的广告发光字。它早已不是简单的霓虹灯,而是融合材料、工艺、光学与工程的成熟标识…...
Enformer深度学习模型:基因序列预测的混合架构革命
Enformer深度学习模型:基因序列预测的混合架构革命 【免费下载链接】enformer-pytorch Implementation of Enformer, Deepminds attention network for predicting gene expression, in Pytorch 项目地址: https://gitcode.com/gh_mirrors/en/enformer-pytorch …...
牙齿龋齿检测数据集 YOLO模型如何训练牙齿病害数据集 权重识别龋齿
牙齿龋齿检测数据集,2554张,提供yolo和voc两种标注方式 1类,标注数量: caries: 6946 image num: 2554 🦷 龋齿检测数据集 (Dental Caries Detection Dataset) 属性详细描述数据集名称齿科龋齿目标检测数据集图像总数2…...
LFM2.5-1.2B-Thinking多场景落地:Ollama支持下的技术博客写作、论文摘要生成案例
LFM2.5-1.2B-Thinking多场景落地:Ollama支持下的技术博客写作、论文摘要生成案例 你是不是也遇到过这样的烦恼:想写一篇技术博客,对着空白的文档发呆半天,不知道从何下笔;或者面对一篇几十页的学术论文,需…...
