模型,位于LangChain框架的最底层,它是基于语言模型构建的应用核心元素,因为所谓LangChain应用开发,就是以LangChain作为框架,通过API调用大模型来解决具体问题的过程。
而整个LangChain框架的逻辑都是由LLM这个发动机来驱动的。没有模型,LangChain这个框架也就失去了它存在的意义。
一、MOdel I/O
我们在使用过程中是可以将模型拆解成三块,分别是输入提示(Format)、调用模型(Predict)、输出解析(Parse)。由于这三块形成一个整体,因此在LangChain中,这个过程被统称为Model I/O(Input/Output)
在模型I/O的每个环节,LangChain都提供了模板和工具,能快捷地形成调用各种语言模型的接口
二、提示模板
语言模型就是一个无穷无尽的宝藏,封装了人类的知识和智慧,像一个“魔合”,但怎么才能顺利,便捷解锁其中奥秘,需要我们深研,探索。所以“提示工程”这个词特别流行,所谓Prompt Engineering,就是专门研究对大语言模型的提示构建。
好的提示总能让调用语言模型做到事半功倍
约定了一个原则,不妨先作为工作中的标准,然后在实践加以考究和调整。
1、给予模型清晰明确的提示
2、让模型慢慢地思考
那好吧,下面让我们实践一下:从创建一个简单的LangChain提示模板开始
# 导入LangChain中的提示模板
from langchain.prompts import PromptTemplate
# 创建原始模板
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)
实际应用可以这样写
input_variables = ['flower_name','price'] #输入的变量
output_parser = None
partial_variables = {
}
# 创建原始模板
template = '/\n 您是一位专业的鲜花店文案撰写员。\n对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?'
template_format = 'f-string'
validate_template = True
该模板就是一段描述某鲜花的文本格式,它是一个f-string,其中有两个变量{cake_name}和{price}表示鲜花的名称和价格,这两个值是模板里面的占位符,在实际使用模板生成提示时会被具体的值替换。
**# 根据原始模板创建LangChain提示模板**
prompt = PromptTemplate.from_template(template)`
三、语言模型
LangChain中支持的模型有三大类:
1、大语言模型(LLM),也叫Text Model,这些模型将文本字符串作为输入,并返回文本字符串作为输出。Open AI的text-davinci-003,Facebook的LLaMA、ANTHROPIC的Claude,例如:deepseek的例子
import requests
from public import comm
API_URL = "https://api.deepseek.com/v1/chat/completions"
#API_KEY = "your_api_key_here"
API_KEY = comm.api_key
headers = {
"Authorization": f"Bearer {
API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek-chat", # 或其他可用模型
"messages": [
{
"role": "system", "content": "你是一个有帮助的助手"},
{
"role": "user", "content": "你好!"}
],
"temperature": 0.7
}
response = requests.post(API_URL, headers=headers, json=data)
print(response.json())
,都是典型的LLM。
2、聊天模型(Chat Mode),主要代表Open AI的ChatGPT系统模型。这些模型通常由语言模型支持,但它们的API更加结构化。具体来说,这些模型将聊天消息列表作为输入,并返回消息。如deepseek的例子:
import requests
from public import comm
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
#API_KEY = "your_api_key_here" # 替换为你的实际API密钥
API_KEY = comm.api_key
headers = {
"Authorization": f"Bearer {
API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek-chat", # 指定使用DeepSeek Chat模型
"messages": [
{
"role": "system", "content": "你是一个有帮助的AI助手"},
{
"role": "user", "content": "请解释一下机器学习的基本概念"}
],
"temperature": 0.7, # 控制生成文本的随机性
"max_tokens": 1024 # 限制生成的最大token数量
}
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data)
if response.status_code == 200:
print(response.json()["choices"][0]["message"]["content"])
else:
print(f"请求失败,状态码: {
response.status_code}")
3、文本嵌入模型(Embedding Model),这些模型将文本作为输入并返回浮点数列表,也就是Embedding。而文本嵌入模型如OpenAI的text-embedding-ada-002,文本嵌入模型负责把文档存入向量数据库,各当前探讨的提示工程关系不大。
再看下面一个例子: