Langchain、RAG、Agent相关
ChatBot-销售型机器人
优化点:把相似度低于10条的请求Query打印出来。
RAG
类型:RAG、Latent RAG(产生一个回答,再用回答进行召回)、Logit RAG、Speculative RAG
个人感觉RAG召回可以分成3种:一种是query相关、另一回事回答这个query所需要的内容、根据query类型较好的回答示例。
文档转成内存db。
同时做Embedding+SQL查询的结果当做 context。 sql识别多个字段的关系的关键。text2sql:
Langchain有没有什么问题 有啥缺陷。
Conversation window buffer memory。直接存储原始的历史聊天记录最近k个。
conversation summary memory ,对聊天及时进行总结
Langchain
主要技术点:Langchain、LLamaindex、AutoGen
- LangChain 是python版本、LangChain4j 是java版本。
- SpringAI适用于,我有个Spring项目,我要接入AI服务;LangChain4j适用于我要构建一个复杂的LLM驱动的智能系统。
- chatBot:把用户历史对话进行改写(当完成一次调节后悔重置历史对话起点),成一个需求走一套处理流程。
- Retrievers 可以按照MMR、cos进行召回。
- Memory的本质就是相当于History。
- Chain和Agent区别:chain是workflow,agent是根据任务自行决定。
- 调取官方的tool,也可以自定义function为tool。
LangChain多轮对话-点餐机器人[实战7]
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
import logging
from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate
from langchain_core.language_models import LLM
from openai import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
import gradio as grclass Kimi(LLM):# llm 属性可不定义@propertydef _llm_type(self) -> str:"""Return type of LLM."""return "kimillm"# 必须定义_call方法def _call(self, prompt: str, **kwargs: any) -> str:try:client = OpenAI(# 此处请替换自己的apiapi_key="sk-IfM9SFhekY2FJhNkQu9ieDyzrVIulWEHl0p481QAFTaBQLVSB",base_url="https://api.moonshot.cn/v1",)completion = client.chat.completions.create(model="moonshot-v1-8k",messages=[# 系统消息,定义了Kimi的角色和行为准则。{"role": "system","content": "你是 Kimi,你现在是一名肯德基的服务生。",},{"role": "user", "content": prompt},],temperature=0.5,stream=False,)return completion.choices[0].message.contentexcept Exception as e:logging.error(f"Error in Kimi _call: {e}", exc_info=True)raisedef init_chatbot():llm = Kimi()global CHATGLM_CHATBOTCHATGLM_CHATBOT = ConversationChain(llm=llm,verbose=True,memory=ConversationBufferMemory()) #ConversationChain 记录这个用户消息,作为历史。并在下一轮调用 .predict(input=message) 的时候,把上下文拼接成一个完整的 prompt,再传给你自定义的 LLM 的 _call() 方法。return CHATGLM_CHATBOTdef chatglm_chat(message, history):ai_message = CHATGLM_CHATBOT.predict(input=message)return ai_messagedef launch_gradio():demo = gr.ChatInterface(fn=chatglm_chat,title="ChatBot周四点单服务员",chatbot=gr.Chatbot(height=600),)demo.launch(share=True, server_name="127.0.0.1")
if __name__ == "__main__":# 初始化聊天机器人init_chatbot()# 启动 Gradio 服务launch_gradio()