langchain 是一个框架, 用于连接大语言模型的框架, 它提供了一整套工具、组件和接口,简化上层应用与大语言模型,聊天模型的的过程,可轻松管理与模型的交互,以及跟多组件链接起来。
在 LangChain 中 提供 5 大模块助力于引用的开发
以上内容引用于LangChain ️ 中文网
前期准备内容
Python 环境 version>=3.0
OPENAI_API_KEY 自行准备,用于体验与语言模型交互
安装 LangChain依赖
pip install langchain openai
from langchain import OpenAI
llm = OpenAI(
temperature=0,
openai_api_key='' ,
model_name="gpt-3.5-turbo-16k"
)
# --------- 不具备上下文理解能的调用方式
while True:
print("输入问题")
ls = input()
print("\n-----\n")
print(track_tokens_usage(llm, ls))
print("\n 回答结束 \n")
具体的使用结果
从以上简单的示例中可以看出,在每次简单调用的时候, 不具备理解上下文的内容, 这个使用我们需要结合使用memory模型了,
以上两个类都是在调用接口的时候使用内存存储上下文内容, 但是存在本质上的区别
区别 | ConversationBufferMemory | ConversationSummaryMemory |
---|---|---|
存储形式 | 使用原始内容进行记录 | 会调用接口生成摘要 |
token消耗 | 与聊天内容成正比 | 整体为正比关系,但是后期消耗 token 比前期少 |
请求次数 | 只有一次请求 | 有两次请求, 其中一次会回去全部聊天内容的摘要 |
from langchain.memory import ConversationBufferMemory, ConversationSummaryMemory
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
# 定义 LLM 模型
llm = OpenAI(
temperature=0,
openai_api_key='' ,
model_name="gpt-3.5-turbo-16k"
)
# 定义 memory 对象
conversation = ConversationChain(llm=llm, memory=ConversationBufferMemory())
# conversation = ConversationChain(llm=llm, memory=ConversationSummaryMemory(llm=llm))
while True:
print("输入问题")
ls = input()
print("\n-----\n")
# 这里可以去掉空格,标点
print(chain_tokens_usage(conversation, ls))
print("*********************** 打印具体的保存内容 *************************")
print(conversation.memory.buffer)
print("*********************** 打印具体的保存内容 *************************")
print("\n 回答结束 \n")
上图是采用ConversationSummaryMemory 模式进行的问答,从上图中可以看出已经具备一定的上下文理解能力。 采用 ConversationBufferMemory 模式的可以自己尝试一下
具体代码如下
from langchain.callbacks import get_openai_callback
def track_tokens_usage(llm, query):
"""直接使用大模型进行调用openai 接口"""
with get_openai_callback() as cb:
result = llm(query)
# 以下为打印真实的消耗和具体费用
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Successful Requests: {cb.successful_requests}")
print(f"Total Cost (USD): ${cb.total_cost}")
return result
def chain_tokens_usage(chain, query):
"""使用 chain 调用 openai 接口"""
with get_openai_callback() as cb:
result = chain.run(query)
# 以下为打印真实的消耗和具体费用
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Successful Requests: {cb.successful_requests}")
print(f"Total Cost (USD): ${cb.total_cost}")
return result
github源码