LangChain Model I/O 使用示例
环境
- Anaconda:v25.5.1
- Python:v3.13.9
- LangChain:v1.0.3
- langchain-openai:v1.0.2
- langchain-community:v0.4.1
- Streamlit:v1.51.0
- wikipedia:v1.4.0
修改 pip 下载源地址命令:
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
【示例一】视频脚本一键生成器
本节我们主要实现一个视频脚本生成器的项目,界面如下:

左侧提供 OpenAI API Key 的输入框,并且提供获取 OpenAI API Key 的文档地址,右侧内容区域提供视频主题和视频时长的内容输入框,同时提供控制模型创造力的滑动输入组件,用户在填写完相应的内容后点击【生成脚本】按钮,模型即可按照我们输入的内容去输出相应的视频脚本,接下来我们逐步来实现这个小项目。
1、创建项目及安装依赖项
在 PyCharm 中新建一个项目目录,取名为“project-video-script-generator”(项目名称自定义即可),因为毕竟是一个小项目,所以我们新建一个干净的目录来进行接下来的操作。
从本文的结尾位置找到 requirements.txt 文件,然后在刚才新建的空目录下新建一个同名文件,将本文 requirements.txt 文件里面的内容拷贝到刚才新建的同名文件中,然后在 PyCharm 终端运行以下命令安装 requirements.txt 文件中的所有依赖:
pip install -r requirements.txt
此时我们在这个空目录下就已经安装了接下来我们所需要的所有依赖,其实本节我们主要使用的依赖只有以下五个,大家开发过程中按需安装也可以:
- streamlit
- langchain
- langchain-openai
- langchain-community
- wikipedia
pip install streamlit
pip install langchain
pip install langchain-openai
pip install langchain-community
pip install wikipedia
2、创建 AI 请求
在空目录下新建 utils.py 文件,然后将下面代码拷贝:
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_community.utilities import WikipediaAPIWrapperimport osdef generate_script(subject, video_length, creativity, api_key):title_template = ChatPromptTemplate.from_messages([("human", "请为'{subject}'这个主题的视频想一个吸引人的标题")])script_template = ChatPromptTemplate.from_messages([("human", """你是一位短视频频道的博主。根据以下标题和相关信息,为短视频频道写一个视频脚本。视频标题:{title},视频时长:{duration}分钟,生成的脚本的长度尽量遵循视频时长的要求。要求开头抓住限球,中间提供干货内容,结尾有惊喜,脚本格式也请按照【开头、中间,结尾】分隔。整体内容的表达方式要尽量轻松有趣,吸引年轻人。脚本内容可以结合以下维基百科搜索出的信息,但仅作为参考,只结合相关的即可,对不相关的进行忽略:{wikipedia_search}""")])model = ChatOpenAI(model="gpt-4o-mini", api_key=api_key, temperature=creativity)title_chain = title_template | modelscript_chain = script_template | modeltitle = title_chain.invoke({"subject": subject}).contentsearch = WikipediaAPIWrapper(lang="zh")search_result = search.run(subject)script = script_chain.invoke({"title": title,"duration": video_length,"wikipedia_search": search_result}).contentreturn search_result, title, scriptresult = generate_script("LLM介绍", 1, 0.7, os.getenv("OPENAI_API_KEY"))
print(result)
上述代码中我们定义了一个 generate_script() 方法,此方法接收四个参数:用户输入的标题、时长、模型创造力的值和 OpenAI API Key。有个这四个参数之后我们首先通过 ChatPromptTemplate API 分别创建了标题提示模板和脚本提示模板,然后创建了模型,通过 LangChain 的链将标题提示模板和模型以及脚本提示模板和模型进行连接并传参,在将脚本提示模板和模型连接并传参之前使用 WikipediaAPIWrapper 结合用户输入的标题进行 wiki 搜索,将得到的搜索结果作为参数传入脚本提示模板,最后通过 content 属性拿到相应的模型生成结果并返回。最后模型输出如下:
('Page: 大型语言模型\nSummary: 大型语言模型(英語:large language model,LLM),也称大语言模型,简称大模型,是由具有大量参数(通常数十亿至万亿级,如GPT-3含1750亿参数)的人工神经网络组成的一类语言模型,使用自监督学习或半监督学习对大量未标记文本进行训练。大语言模型在2018年左右出现,并在各种任务中表现出色。 \n尽管这个术语没有正式的定义,但它通常指的是参数数量在数十亿或更多数量级的深度学习模型。大语言模型是通用模型,在广泛的任务中表现出色,而不是针对一项特定任务(例如情感分析、命名实体识别或数学推理)进行训练。\n尽管大语言模型仅在预测句子中的下一个单词等简单任务上接受过训练,但具有足够训练和参数计数的神经语言模型可以捕获人类语言的大部分句法和语义。 此外大语言模型还展示了相当多的关于世界的常识,并且能够在训练期间“记住”大量事实。\n虽然ChatGPT等大语言模型在生成类人文本方面表现出了卓越的能力,但它们很容易继承和放大训练数据中存在的偏差。这可能表现为对不同人口统计数据的歪曲表述或不公平待遇,例如基于种族、性别、语言和文化群体的不同观点与态度。\n\nPage: Gemini (聊天機器人)\nSummary: Gemini(前稱Bard)是由Google開發的生成式AI聊天機器人,架構基于同名大型语言模型。Gemini是为了應對OpenAI公司開發的ChatGPT聊天機器人的崛起而開發的。其在2023年3月以有限的規模推出,2023年5月擴展到更多個國家。2024年2月8日從Bard更名为Gemini。\n最初基於LaMDA系列大型語言模型(LLM),後來基于PaLM2(LLM),现基于Gemini系列大型语言模型。\n\nPage: 清华大学工程物理系\nSummary: 清华大学工程物理系,简称工物系,是清华大学直属的一个系,主要研究核技术,设有工程物理、工程物理(能源实验班)、工程物理(定向物院)和核工程与核技术(定向中核)专业。', '《揭开LLM的神秘面纱:智能时代的语言革命》', '**视频脚本:《揭开LLM的神秘面纱:智能时代的语言革命》**\n\n**【开头】** \n(镜头快速切换,背景音乐轻快) \n大家好,欢迎来到我的频道!今天,我们要揭开一个神秘面纱——大型语言模型,简称LLM!你有没有想过,为什么现在的AI能像人类一样流利地交流?是因为它们背后有着数十亿甚至数万亿个参数的支持!这可不是普通的计算机哦,这是一场语言革命的开始!\n\n**【中间】** \n(画面切换到动画,展示LLM的工作原理) \nLLM是什么?简单来说,它是一种用人工神经网络构建的语言模型。它通过自监督学习,分析海量文本,像海绵一样吸收知识。比如,GPT-3就有整整1750亿个参数,简直是个“语言巨人”!而且,LLM不止于记住单词,它能够理解句子的语法和语义,甚至能在对话中展现出常识。\n\n(背景音乐变得神秘) \n不过,LLM也有它的“隐患”。因为它是根据训练数据学习的,所以如果数据中存在偏见,LLM也可能会放大这些偏见。这就像你跟朋友聊天,如果朋友说的话有误,你也可能会误解同样的事情。所以,使用LLM时,我们也要保持警惕哦!\n\n**【结尾】** \n(镜头再次切换,轻松的背景音乐回归) \n那么,LLM的未来是什么样的呢?其实,像Google的Gemini这样的新型AI聊天机器人正在不断进化,不断提升与人类的互动能力。想象一下,未来的LLM可以帮助我们解决更多问题,甚至在创作上给我们带来灵感!\n\n(神秘一笑) \n如果你觉得这个话题有趣,记得点赞关注哦!我们下期再见,带你探索更多智能时代的奥秘!再见!')
3、创建网站界面
在项目目录下新建 main.py 文件,将下面代码拷贝进去:
import streamlit as st
from utils import generate_scriptst.title("视频脚本生成器")with st.sidebar:openai_api_key = st.text_input("请输入 OpenAI API 密钥", type="password")st.markdown("[获取 OpenAI API 密钥](https://platform.openai.com/)")subject = st.text_input("请输入视频主题")
video_length = st.number_input("请输入视频大致时长", min_value=0.1, step=0.1)
creativity = st.slider("请输入视频脚本的创造力(数字越小说明更严谨,数字越大说明更多样)", min_value=0.0, max_value=1.0, value=0.2, step=0.1)submit = st.button("生成脚本")if submit and not openai_api_key:st.info("请输入你的 OpenAI API 密钥")st.stop()if submit and not subject:st.info("请输入视频的主题")st.stop()if submit and not video_length >= 0.1:st.info("视频时长需要大于或等于 0.1")st.stop()if submit:with st.spinner("AI 正在思考中……"):search_result, title, script = generate_script(subject, video_length, creativity, openai_api_key)st.success("视频脚本已生成!")st.subheader("标题:")st.write(title)st.subheader("视频脚本:")st.write(script)with st.expander("wiki 搜索结果:"):st.info(search_result)
上述代码主要使用 streamlit 开发了一个网站界面,具体语法可查看 streamlit 官网学习,网站中添加了我们上述介绍的输入框以及滑动条,并且添加了相应关键字的判断,最后调用 generate_script() 方法得到最终结果并展示。
在终端运行以下命令即可在浏览器看到我们写的界面,填入相应值后可得到模型生成的结果:
streamlit run main.py

上述代码如果运行报错的话,可能是缺少了 socksio 依赖导致,通过下述命令安装即可:
pip install "httpx[socks]"
【示例二】爆款小红书文案生成器
本节我们主要实现一个爆款小红书文案生成器的项目,界面如下:

左侧提供 OpenAI API Key 的输入框,并且提供获取 OpenAI API Key 的文档地址,右侧内容区域较上个示例来说更加简洁,只有一个主题输入框和一个【开始写作】按钮,用户输入主题后点击【开始写作】按钮,模型会按照主题生成符合小红书风格的标题及相应文案内容,接下来我们逐步来实现这个小项目。
1、创建项目及安装依赖项
此示例用到的依赖跟上个示例的依赖基本一致,所以可以直接使用上个示例的依赖,如果想重新生成一个干净的项目工程的话,也可以将上述流程重新操作一遍。
在 PyCharm 中新建一个项目目录,取名为“project-xiaohongshu-text-generator”(项目名称自定义即可),因为毕竟是一个小项目,所以我们新建一个干净的目录来进行接下来的操作。
从本文的结尾位置找到 requirements.txt 文件,然后在刚才新建的空目录下新建一个同名文件,将本文 requirements.txt 文件里面的内容拷贝到刚才新建的同名文件中,然后在 PyCharm 终端运行以下命令安装 requirements.txt 文件中的所有依赖:
pip install -r requirements.txt
此时我们在这个空目录下就已经安装了接下来我们所需要的所有依赖,其实本节我们主要使用的依赖只有以下五个,大家开发过程中按需安装也可以:
- streamlit
- langchain
- langchain-openai
- langchain-community
- wikipedia(此示例不用,可以不安装)
pip install streamlit
pip install langchain
pip install langchain-openai
pip install langchain-community
pip install wikipedia
2、创建 AI 请求
在空目录下新建 utils.py 文件,然后将下面代码拷贝:
from prompt_template import system_template_text, user_template_text
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import PydanticOutputParser
from xiaohongshu_model import XiaohongshuTextimport osdef generator_xiaohongshu_text(theme, openai_api_key):prompt = ChatPromptTemplate.from_messages([("system", system_template_text),("user", user_template_text)])model = ChatOpenAI(model="gpt-4o-mini", api_key=openai_api_key)output_parser = PydanticOutputParser(pydantic_object=XiaohongshuText)chain = prompt | model | output_parserresult = chain.invoke({"parser_instructions": output_parser.get_format_instructions(),"theme": theme,})return resultresult = generator_xiaohongshu_text("LLM介绍", os.getenv("OPENAI_API_KEY"))
print(result)
上述代码中我们定义了一个 generator_xiaohongshu_text() 方法,该方法接收两个参数:用户输入的主题和 OpenAI API Key。有了这俩参数之后我们首先使用 ChatPromptTemplate API 定义了提示模板,此处为了代码的简洁性,我们将提示模板中的系统提示内容和用户提示内容单独存放在了一个叫作 prompt_template.py 的文件中,然后使用 ChatOpenAI API 创建了模型,再使用 PydanticOutputParser API 定义了一个 JSON 输出解析器,代表着模型的输出结果我们按 JSON 格式去处理,同样的,此处为了代码简洁性,我们也是将输出格式的定义单独放在了一个叫作 xiaohongshu_model.py 的文件中,最后我们定义了一个链,然后传入了提示模板中所需的两个参数。最后调用函数后输出结果如下:
titles=['💡 你不懂LLM绝对会后悔!快来看看!', '🚀 1秒掌握LLM,轻松开挂行业!', '📊 LLM对话模型揭秘,绝对是宝藏!', '🤖 你真的了解LLM吗?知道它的作用吗?', '✨ 学习LLM的正确姿势,打破成长瓶颈!'] content='大家好,今天给大家聊聊LLM(大语言模型),你知道它究竟是什么吗?🤔 近几年来,LLM在自然语言处理领域大放异彩,成为了各大科技公司的宠儿!但它的魔力是什么呢?让我们一起探讨一下。 \n\n首先,LLM是一种通过深度学习技术训练的模型,它能够理解和生成自然语言文本。💬 这意味着我们可以用更自然的方式与计算机进行对话,甚至让机器产生看似由人类创作的优质内容!想象一下,写作剧本、编纂新闻、甚至生成各种文案,LLM都能轻松搞定。 \n\n根据数据,LLM从文本中学习,可以模拟出各种语言风格。📚 这就像打游戏一样,越玩越熟练,而这个过程也让它在多领域应用中展现出巨大的潜力!你想过在营销、教育、科研等方面,LLM能为我们带来的变革吗? \n\n如今,不少公司已经将LLM应用于实际业务中,提供更智能的客户服务和个性化推荐,简直就是“神器”。🛠️ 例如,ChatGPT就是基于LLM的一个典型实例。它能够与用户进行高效的互动,甚至在某些情况下让人类用户感到惊艳! \n\n有些人可能会担心,LLM会否对我们的工作产生威胁?🚨 这确实是一个值得思考的问题。但我想说的是,任何技术的发明都是为了辅助我们而存在的。抱着开放的心态,去探索LLM带来的机遇,总会发现意想不到的收获!💪 \n\n最后,我希望你们对LLM有了更深入的理解,未来的职场中,掌握这一技术绝对是“打工人”的一项必备技能。✊ \n\n标签:#LLM #大语言模型 #前沿科技 #自然语言处理 #工作技能提升'
此处用到的 prompt_template.py 文件内容如下:
system_template_text = """你是小红书爆款写作专家,请你遵循以下步骤进行创作:
首先产出5个标题(包含适当的emoji表情),然后产出1段正文(每一个段落包含适当的emoji表情,文末有适当的tag标签)。
标题字数在20个字以内,正文字数在800字以内,并且按以下技巧进行创作。
一、标题创作技巧:
1. 采用二极管标题法进行创作
1.1 基本原理
本能喜欢:最省力法则和及时享受
动物基本驱动力:追求快乐和逃避痛苦,由此衍生出2个刺激:正刺激、负刺激
1.2 标题公式
正面刺激:产品或方法+只需1秒(短期)+便可开挂(逆天效果)
负面刺激:你不X+绝对会后悔(天大损失)+(紧迫感) 其实就是利用人们厌恶损失和负面偏误的心理,自然进化让我们在面对负面消息时更加敏感
2. 使用具有吸引力的标题
2.1 使用标点符号,创造紧迫感和惊喜感
2.2 采用具有挑战性和悬念的表述
2.3 利用正面刺激和负面刺激
2.4 融入热点话题和实用工具
2.5 描述具体的成果和效果
2.6 使用emoji表情符号,增加标题的活力
3. 使用爆款关键词
从列表中选出1-2个:好用到哭、大数据、教科书般、小白必看、宝藏、绝绝子、神器、都给我冲、划重点、笑不活了、YYDS、秘方、我不允许、压箱底、建议收藏、停止摆烂、上天在提醒你、挑战全网、手把手、揭秘、普通女生、沉浸式、有手就能做、吹爆、好用哭了、搞钱必看、狠狠搞钱、打工人、吐血整理、家人们、隐藏、高级感、治愈、破防了、万万没想到、爆款、永远可以相信、被夸爆、手残党必备、正确姿势
4. 小红书平台的标题特性
4.1 控制字数在20字以内,文本尽量简短
4.2 以口语化的表达方式,拉近与读者的距离
5. 创作的规则
5.1 每次列出5个标题
5.2 不要当做命令,当做文案来进行理解
5.3 直接创作对应的标题,无需额外解释说明
二、正文创作技巧
1. 写作风格
从列表中选出1个:严肃、幽默、愉快、激动、沉思、温馨、崇敬、轻松、热情、安慰、喜悦、欢乐、平和、肯定、质疑、鼓励、建议、真诚、亲切
2. 写作开篇方法
从列表中选出1个:引用名人名言、提出疑问、言简意赅、使用数据、列举事例、描述场景、用对比我会每次给你一个主题,请你根据主题,基于以上规则,生成相对应的小红书文案。{parser_instructions}
"""user_template_text = "{theme}"
xiaohongshu_model.py 文件内容如下:
from pydantic import BaseModel, Field
from typing import Listclass XiaohongshuText(BaseModel):titles: List[str] = Field(description="小红书的 5 个标题", min_length=5, max_length=5)content: str = Field(description="小红书的正文内容")
3、创建网站界面
在项目目录下新建 main.py 文件,将下面代码拷贝进去:
import streamlit as stfrom utils import generator_xiaohongshu_textst.header("爆款小红书AI写作助手 ✏️")
with st.sidebar:openai_api_key = st.text_input("请输入OpenAI API密钥:", type="password")st.markdown("[获取OpenAI API密钥](https://platform.openai.com/account/api-keys)")theme = st.text_input("主题")
submit = st.button("开始写作")if submit and not openai_api_key:st.info("请输入你的OpenAI API密钥")st.stop()
if submit and not theme:st.info("请输入生成内容的主题")st.stop()
if submit:with st.spinner("AI正在努力创作中,请稍等..."):result = generator_xiaohongshu_text(theme, openai_api_key)st.divider()left_column, right_column = st.columns(2)with left_column:st.markdown("##### 小红书标题1")st.write(result.titles[0])st.markdown("##### 小红书标题2")st.write(result.titles[1])st.markdown("##### 小红书标题3")st.write(result.titles[2])st.markdown("##### 小红书标题4")st.write(result.titles[3])st.markdown("##### 小红书标题5")st.write(result.titles[4])with right_column:st.markdown("##### 小红书正文")st.write(result.content)
在终端运行以下命令即可在浏览器看到我们写的界面,填入相应值后可得到模型生成的结果:
streamlit run main.py

总结
本文我们使用两个示例讲解了 LangChain 中提示模板、模型、输出解析器是如何结合链来使用的,并且也简单使用了 Streamlit 这个用来构建前端界面的库,通过本文示例的介绍,相信大家对 LangChain Model I/O 的整个流程有了一个基础的认知,下一篇文章我们主要介绍如何给模型增加记忆功能。
附:
requirements.txt 文件
aiohappyeyeballs==2.6.1
aiohttp==3.13.2
aiosignal==1.4.0
altair==5.5.0
annotated-types==0.7.0
anyio==4.11.0
attrs==25.4.0
beautifulsoup4==4.14.2
blinker==1.9.0
cachetools==6.2.1
certifi==2025.10.5
charset-normalizer==3.4.4
click==8.3.0
dataclasses-json==0.6.7
distro==1.9.0
frozenlist==1.8.0
gitdb==4.0.12
GitPython==3.1.45
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
httpx-sse==0.4.3
idna==3.11
Jinja2==3.1.6
jiter==0.11.1
jsonpatch==1.33
jsonpointer==3.0.0
jsonschema==4.25.1
jsonschema-specifications==2025.9.1
langchain==1.0.3
langchain-classic==1.0.0
langchain-community==0.4.1
langchain-core==1.0.3
langchain-openai==1.0.2
langchain-text-splitters==1.0.0
langgraph==1.0.2
langgraph-checkpoint==3.0.1
langgraph-prebuilt==1.0.2
langgraph-sdk==0.2.9
langsmith==0.4.41
MarkupSafe==3.0.3
marshmallow==3.26.1
multidict==6.7.0
mypy_extensions==1.1.0
narwhals==2.11.0
numpy==2.3.4
openai==2.6.1
orjson==3.11.4
ormsgpack==1.12.0
packaging==25.0
pandas==2.3.3
pillow==12.0.0
propcache==0.4.1
protobuf==6.33.0
pyarrow==21.0.0
pydantic==2.12.3
pydantic-settings==2.12.0
pydantic_core==2.41.4
pydeck==0.9.1
python-dateutil==2.9.0.post0
python-dotenv==1.2.1
pytz==2025.2
PyYAML==6.0.3
referencing==0.37.0
regex==2025.10.23
requests==2.32.5
requests-toolbelt==1.0.0
rpds-py==0.28.0
setuptools==80.9.0
six==1.17.0
smmap==5.0.2
sniffio==1.3.1
socksio==1.0.0
soupsieve==2.8
SQLAlchemy==2.0.44
streamlit==1.51.0
tenacity==9.1.2
tiktoken==0.12.0
toml==0.10.2
tornado==6.5.2
tqdm==4.67.1
typing-inspect==0.9.0
typing-inspection==0.4.2
typing_extensions==4.15.0
tzdata==2025.2
urllib3==2.5.0
wheel==0.45.1
wikipedia==1.4.0
xxhash==3.6.0
yarl==1.22.0
zstandard==0.25.0
