上一节实现了 LangChain 实现给动物取名字,
实际上每次给不同的动物取名字,还得修改源代码,这周就用模块化template来实现。
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*)
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*)
把逻辑放到langchain_helper.py
, 清空main.py
代码
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
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函数,并打印返回的结果
参考