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

上一节实现了 LangChain 实现给动物取名字

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

1. 添加promptTemplate

python 复制代码
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函数,并打印返回的结果

运行和输出

shell 复制代码
$ 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

python 复制代码
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函数,并打印返回的结果

运行结果

shell 复制代码
$ 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 代码实现

python 复制代码
import langchain_helper as lch
import streamlit as st

st.title("Pets name generator")

add path environment in .zshrc

shell 复制代码
export PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin:$PATH"

source .zshrc
shell 复制代码
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-policy

  Summary:
  - 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 = false


  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8501
  Network URL: http://192.168.50.10:8501

  For better performance, install the Watchdog module:

  $ xcode-select --install
  $ pip install watchdog

http://localhost:8501/

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

main.py

python 复制代码
import langchain_helper as lch  # 导入名为langchain_helper的模块,并使用别名lch
import streamlit as st  # 导入Streamlit库,并使用别名st

st.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 实现

python 复制代码
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函数,并打印返回的结果

参考

相关推荐
Esaka_Forever几秒前
LangChain RunnableSequence 获取中间输出的几种方案(替代SequentialChain获取中间结果)
langchain
名字还没想好☜2 分钟前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
NWU_LK7 分钟前
【WebFlux】第六篇 —— 全链路响应式与数据库交互
java·数据库
叶总没有会14 分钟前
3.2 构建AI智能体项目扩展知识
java·数据库·人工智能·spring·ai
早点睡啊Y2 小时前
深入学LangChain官方文档(二十二):Frontend 高级形态——Headless Tools、Time Travel 与 Generative UI
ui·langchain·状态模式
YOU OU8 小时前
Redis基础常识与命令
数据库·redis·缓存
smartfish_liu10 小时前
LLM.deepseek: 2026-7-24工作总结
llm·agent
大郭鹏宇10 小时前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
小林ixn11 小时前
大模型的“高考成绩单”:读懂Benchmark,选对真·生产力模型
人工智能·llm·测试
Database_Cool_11 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云