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 gr
class Kimi(LLM):
# llm 属性可不定义
@property
def _llm_type(self) -> str:
"""Return type of LLM."""
return "kimillm"
# 必须定义_call方法
def _call(self, prompt: str, **kwargs: any) -> str:
try:
client = OpenAI(
# 此处请替换自己的api
api_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.content
except Exception as e:
logging.error(f"Error in Kimi _call: {e}", exc_info=True)
raise
def init_chatbot():
llm = Kimi()
global CHATGLM_CHATBOT
CHATGLM_CHATBOT = ConversationChain(
llm=llm,
verbose=True,
memory=ConversationBufferMemory()
) #ConversationChain 记录这个用户消息,作为历史。并在下一轮调用 .predict(input=message) 的时候,把上下文拼接成一个完整的 prompt,再传给你自定义的 LLM 的 _call() 方法。
return CHATGLM_CHATBOT
def chatglm_chat(message, history):
ai_message = CHATGLM_CHATBOT.predict(input=message)
return ai_message
def 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()