湖北 网站 备案 时间,怎么在百度上推广产品,服务营销案例100例,电商网站是什么意思初始化模型
# Step 4. 初始化模型, 该行初始化与 智谱 的 GLM - 4 模型进行连接#xff0c;将其设置为处理和生成响应。
chat ChatZhipuAI(modelglm-4,temperature0.8,
)
此提示告诉模型接收聊天历史记录和用户的最新问题#xff0c;然后重新表述问题#x…
初始化模型
# Step 4. 初始化模型, 该行初始化与 智谱 的 GLM - 4 模型进行连接将其设置为处理和生成响应。
chat ChatZhipuAI(modelglm-4,temperature0.8,
)
此提示告诉模型接收聊天历史记录和用户的最新问题然后重新表述问题以便可以独立于聊天历史记录来理解问题。明确指示模型不要回答问题而是在必要时重新表述问题。
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder# 此提示告诉模型接收聊天历史记录和用户的最新问题然后重新表述问题以便可以独立于聊天历史记录来理解问题。明确指示模型不要回答问题而是在必要时重新表述问题。contextualize_q_system_prompt Given a chat history and the latest user question \
which might reference context in the chat history, formulate a standalone question \
which can be understood without the chat history. Do NOT answer the question, \
just reformulate it if needed and otherwise return it as is.# Step 3. 创建提示模板来构建模型的交互
# 该模板包括带有说明的系统消息、聊天历史记录的占位符 ( MessagesPlaceholder ) 以及由 {input} 标记的最新用户问题。
contextualize_q_prompt ChatPromptTemplate.from_messages([(system, contextualize_q_system_prompt),MessagesPlaceholder(chat_history),(human, {input}),]
)
... 中间省略加载文档并切分文档
# Step 9. 使用 Chroma VectorStore 创建检索器
retriever chroma_store.as_retriever()# Step 10. 设置历史信息感知检索器
# create_history_aware_retriever 函数旨在接受输入和“chat_history”的键用于创建集成聊天历史记录以进行上下文感知处理的检索器。
# 官方文档https://python.langchain.com/v0.1/docs/modules/chains/
from langchain.chains import create_history_aware_retriever如果历史记录存在它会构建一个有效组合提示、大型语言模型 (LLM) 和结构化输出解析器 ( StrOutputParser ) 的序列后跟检索器。此顺序可确保最新问题在累积的历史数据中得到体现。# 他会结合历史信息重构子问题他不实际回答问题
history_aware_retriever create_history_aware_retriever(chat,retriever,contextualize_q_prompt
) # Step 12. 定义 QA 系统的提示模板指定系统应如何根据检索到的上下文响应输入。
# 该字符串设置语言模型的指令指示它使用提供的上下文来简洁地回答问题。如果答案未知则指示模型明确说明这一点。MessagesPlaceholder(variable_namechat_history) 是一个占位符用于在对话模型或系统中插入动态的聊天记录chat_history。
在提示结构中合并了一个名为“chat_history”的变量它充当历史消息的占位符。通过使用“chat_history”输入键我们可以将以前的消息列表无缝地注入到提示中。
qa_system_prompt You are an assistant for question-answering tasks. \
Use the following pieces of retrieved context to answer the question. \
If you dont know the answer, just say that you dont know. \
Use three sentences maximum and keep the answer concise.\{context}
# 在提示结构中合并了一个名为“chat_history”的变量它充当历史消息的占位符。通过使用“chat_history”输入键我们可以将以前的消息列表无缝地注入到提示中。
qa_prompt ChatPromptTemplate.from_messages([(system, qa_system_prompt),MessagesPlaceholder(chat_history),(human, {input}),]
) # 此函数用于创建一个将文档处理与其他流程相结合的链通常涉及文档检索和在问答等任务中的使用。
from langchain.chains.combine_documents import create_stuff_documents_chain# Step 13 构建问答链question_answer_chain 是使用 create_stuff_documents_chain 函数创建的该函数利用语言模型 ( llm ) 和定义的提示 ( qa_prompt )。
# 官方文档链接https://python.langchain.com/v0.1/docs/modules/chains/
question_answer_chain create_stuff_documents_chain(chat, qa_prompt) # Step 14. 组装 RAG 链条该链代表完整的工作流程其中历史感知检索器首先处理查询以合并任何相关的历史上下文然后由 question_answer_chain 处理处理后的查询以生成最终答案。
rag_chain create_retrieval_chain(history_aware_retriever, question_answer_chain) 手动构建 历史聊天信息
# 以下代码演示了如何使用 RAG 链来处理一系列问题并能够引用之前的交互。该代码模拟聊天交互其中用户提出问题收到答案然后提出可以利用初始交流上下文的后续问题。以下是包含代码片段的详细说明
from langchain_core.messages import HumanMessage# 聊天历史记录被初始化为空列表。该列表将存储会话期间交换的消息以维护上下文。
chat_history []# 第一个问题和响应定义一个问题并使用该问题和当前空聊天历史记录调用 RAG 链。
question What is Task Decomposition?
ai_msg_1 rag_chain.invoke({input: question, chat_history: chat_history})
# print(First ans: %s % ai_msg_1[answer])# 然后用户的问题和 AI 生成的答案分别作为 HumanMessage 实例和响应对象添加到聊天历史记录中。
chat_history.extend([HumanMessage(contentquestion), ai_msg_1[answer]])# 第二个问题和响应利用现在包含第一次交流上下文的更新的聊天历史记录提出后续问题。
second_question What are common ways of doing it?
ai_msg_2 rag_chain.invoke({input: second_question, chat_history: chat_history})自动化构聊天记录
# Step 9. 使用基本字典结构管理聊天历史记录
store {}def get_session_history(session_id: str) - BaseChatMessageHistory:if session_id not in store:store[session_id] ChatMessageHistory()return store[session_id]# 官方Docshttps://python.langchain.com/v0.2/docs/how_to/message_history/
conversational_rag_chain RunnableWithMessageHistory(rag_chain,get_session_history,input_messages_keyinput,history_messages_keychat_history,output_messages_keyanswer,
)# 现在我们问第一个问题
first_ans conversational_rag_chain.invoke({input: What is Task Decomposition?},config{configurable: {session_id: abc123}},
)[answer]secone_ans conversational_rag_chain.invoke({input: What are common ways of doing it?},config{configurable: {session_id: abc123}},
)[answer]print(ffirst_ans:{first_ans})
print(fsecone_ans:{secone_ans})