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*)

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字_第1张图片

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 st

st.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-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/
LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字_第2张图片

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

main.py

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

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函数,并打印返回的结果

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字_第3张图片

参考

  • https://github.com/zgpeace/pets-name-langchain/tree/feature/prompt
  • https://youtu.be/lG7Uxts9SXs?si=H1CISGkoYiKRSF5V
  • Streamlit - https://streamlit.io

你可能感兴趣的:(LLM-Large,Language,Models,langchain,prompt,数据库,chatgpt,LLM)