LangChain 与大型语言模型集成及 Prompt 模板使用指南
LangChain 是连接大语言模型的框架,如何集成 OpenAI 和 Hugging Face 模型,并详细讲解了 Prompt 模板与小样本学习的使用方法。通过定义变量和示例,用户可以高效构建提示语,提升交互效率。文章包含代码示例,展示了从基础调用到复杂模板的应用流程,并提供了安全与最佳实践建议。

LangChain 是连接大语言模型的框架,如何集成 OpenAI 和 Hugging Face 模型,并详细讲解了 Prompt 模板与小样本学习的使用方法。通过定义变量和示例,用户可以高效构建提示语,提升交互效率。文章包含代码示例,展示了从基础调用到复杂模板的应用流程,并提供了安全与最佳实践建议。


大型语言模型(LLM)正在成为变革性技术,使开发人员能够构建以前无法实现的应用程序。然而,单独使用 LLM 往往不足以创建真正强大的应用,只有当 LLM 与其他资源介质如数据库、文档、知识库、PDF 电子书等相结合时,才能发挥其最大潜力。
LangChain 是连接大语言模型的接口框架,通过它可开发出更为强大和高效的 LLM 应用。LangChain 支持直接与 OpenAI 的 text-davinci-003、gpt-3.5-turbo 模型以及 Hugging Face 的各种开源语言模型(如 Google 的 flan-t5 系列)集成。
本文将详细介绍 LangChain 的基础知识,包括如何与 OpenAI、Google 的 LLM 集成,以及如何设计高效的 Prompt 模板。
我们通过两个简单示例来演示 LangChain 如何与 OpenAI 的 "text-davinci-003" 模型以及谷歌的 "flan-t5-xl" 模型进行集成。
首先安装必要的依赖包:
pip install openai langchain huggingface_hub
下面演示如何让 LangChain 集成 OpenAI 的 text-davinci-003 模型,并提问:"老鼠生病了能吃老鼠药吗?"
from langchain.llms import OpenAI
import os
# 设置环境变量,实际使用时请确保 API Key 安全存储
os.environ['OPENAI_API_KEY'] = 'your_openai_api_key'
os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'your_huggingface_api_token'
llm = OpenAI(
model_name='text-davinci-003',
temperature=0.9,
max_tokens=1024
)
text = "老鼠生病了能吃老鼠药吗?"
print(llm(text))

接下来演示集成谷歌的 flan-t5-xl 模型。由于该模型目前对中文支持有限,我们使用英语提问:"Who are you?"
from langchain.llms import HuggingFaceHub
llm_hf = HuggingFaceHub(
repo_id="google/flan-t5-xl",
model_kwargs={"temperature": 0.9}
)
text = "Who are you?"
print(llm_hf(text))

当用户与大型语言模型对话时,用户输入的内容即为 Prompt(提示语)。如果每次需要输入大量内容相似的 Prompt,我们可以使用 Prompt 模板来节省时间。
假设我们要让 LLM 担任新开餐馆命名的顾问。用户只需提供餐馆特点,LLM 返回 10 个名字。
from langchain import PromptTemplate
restaurant_template = """
我想让你成为一个给新开餐馆命名的顾问。
给我返回一个餐馆名字的名单。每个餐馆名字要简单、朗朗上口且容易记住。
它应该和你命名的餐馆类型有关。
关于{restaurant_description}这家餐馆好听名字有哪些?
"""
# 创建 Prompt 模板
prompt_template = PromptTemplate(
input_variables=["restaurant_description"],
template=restaurant_template
)
查看模板生成的内容:
description_03 = "一家能看到海景的烤肉店"
print(prompt_template.format(restaurant_description=description_03))

将模板与 LLM 结合使用,形成 Chain(链)。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt_template)
print(chain.run("一家以婚纱摄影为主题的汉堡店"))

print(chain.run("一家拉面店,营业员都穿着汉服"))

print(chain.run("一家能看到海景的烤肉店"))

通过上述示例,用户可以方便地创建 Prompt 模板,将重复内容定义在模板中,变化内容定义为变量,从而大幅提高交互效率。
有时我们需要给 LLM 少量学习样本,使其学习后能更准确地回答问题。这可以通过 Few-Shot Prompt 模板实现。
要求用户每输入一个短语,LLM 输出对应的反义词。
from langchain import PromptTemplate, FewShotPromptTemplate
examples = [
{"input": "高兴", "output": "悲伤"},
{"input": "高大", "output": "低矮"},
]
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="\n输入:{input}\n输出:{output}\n",
)
few_shot_prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
input_variables=["input"],
prefix="给出每个输入词语的反义词",
suffix="输入:{input}\n输出:",
example_separator="\n",
)
print(few_shot_prompt.format(input="快乐"))

from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=few_shot_prompt)
print(chain.run("快乐"))

尽管故意刁难 LLM 询问成语'东窗事发'的反义词,LLM 也能尝试生成符合格式的回答,证明了其对小样本的学习能力。
在使用 LangChain 和 Prompt 模板时,建议遵循以下最佳实践:
temperature 控制随机性。创造性任务可调高(如 0.7-0.9),事实性任务应调低(如 0.1-0.3)。本文学习了 LangChain 与 OpenAI 及 Google LLM 的集成方法,掌握了 Prompt 模板和小样本模板的使用技巧。通过定义变量和示例,用户可以高效构建提示语,显著提升与 LLM 交互的效率和质量。在实际开发中,结合安全规范与最佳实践,能够构建出更加稳健的智能应用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online