• 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函数,并打印返回的结果
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    运行和输出

    $ 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*)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    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函数,并打印返回的结果
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    运行结果

    $ 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*)
    
    • 1
    • 2
    • 3

    3. 重构代码

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

    4. 用Streamlit 生成网页

    main.py 代码实现

    import langchain_helper as lch
    import streamlit as st
    
    st.title("Pets name generator")
    
    • 1
    • 2
    • 3
    • 4

    add path environment in .zshrc

    export PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin:$PATH"
    
    source .zshrc
    
    • 1
    • 2
    • 3
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

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

    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'])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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函数,并打印返回的结果
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    参考

    • https://github.com/zgpeace/pets-name-langchain/tree/feature/prompt
    • https://youtu.be/lG7Uxts9SXs?si=H1CISGkoYiKRSF5V
    • Streamlit - https://streamlit.io
  • 相关阅读:
    JVM(十七)—— 垃圾回收(三)
    QT sqlite BLOB类型 写入数组
    Shell脚本相互调用并指定返回值
    安宝特分享 | AR技术引领:跨国工业远程协作创新模式
    [CISCN 2019 初赛]Love Math
    【ARIMA时序预测】基于支持向量机结合ARIMA-SVM实现风电功率预测附matlab代码
    数据链路层
    ffmpeg安装及使用
    大数据——Hadoop3.1.3安装与配置
    第六季完美童模 代言人段沫如 全球赛个人风采展示
  • 原文地址:https://blog.csdn.net/zgpeace/article/details/134479597