书接上文,本文继续介绍自己的LLM学习之路,构建一个简单的chatbot!本文直接介绍项目流程,不再说明api和环境等问题,想了解可以看之前的文章。使用 LCEL 构建简单的LLM应用程序-CSDN博客
直接开始可能还是略显复杂,本文参照LangChain官网一步一步说明。
第一步
当然是创建chat实例。仍然以讯飞星火大模型为例。
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
SPARKAI_DOMAIN = 'generalv3.5'
model = ChatSparkLLM(
spark_app_id=SPARKAI_APP_ID, spark_api_key=SPARKAI_API_KEY, spark_api_secret=SPARKAI_API_SECRET
)
# 三个例子表明没有session_id时只会处理一句输入不会理解上下文
model.invoke([HumanMessage(content="Hi! I'm Bob")])
print(model.invoke([HumanMessage(content="Hi! I'm Bob")]))
model.invoke([HumanMessage(content="What's my name?")])
print(model.invoke([HumanMessage(content="What's my name?")]))
print(model.invoke([HumanMessage(content="你可以做什么")]))
给了三个例子说明,如果没有后续的处理我们使用大模型回答我们的问题只是一句一句的,不会读取历史信息。
第二步
定义config给session_id赋值,这样就可以找到对应任务的上文。
# 如何处理上下文的信息呢?
store = {}
# 至关重要的get_session_history
def get_session_history(session_id: str) -> BaseChatMessageHistory:
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
print(session_id) # 我自己加的打印便于说明session_id
return store[session_id]
with_message_history = RunnableWithMessageHistory(model, get_session_history)
# 定义不同的config来表示不同的任务id
config = {"configurable": {"session_id": "abc2"}}
config1 = {"configurable": {"session_id": "abc3"}}
response = with_message_history.invoke(
[HumanMessage(content="Hi! I'm Bob")],
config=config,
)
response = with_message_history.invoke(
[HumanMessage(content="What&