LangChain: Multi-User Conversation(follow-up)
Use Cohere’s documents
and a special field in additional_kwargs
feature to enhance the organization of information in multi-user conversation.
· Intro
· Cohere command-r model
∘ OpenAI pre-request
∘ Cohere pre-request
· Code adjustments
∘ method 1
∘ method 2
∘ More to colab
· One more thing
Intro
This is an additional article about how to make users aware of the history of “multi-user” interaction in human-messages. A previous article has solved this problem through several different methods, but this article will provide a more “elegant” way, using the natural support for RAG features of Cohere’s command-r
model to achieve this goal.
In addition, it is also mentioned how to look at the source code of langchain
to help find a possible special field in additional_kwargs
to carry user identification, using OpenAI’s model as an example.
Cohere command-r
model
Unlike other models, instead of just sending a message request to the model, all conversation history is sent as a list along with the current content as one message. In contrast, cohere
incorporates the history as an attribute of the current message being submitted, and each message also has a documents
attribute that accepts a list of dictionaries.
OpenAI pre-request
Look, all the messages are packaged and sent out as a list.
Cohere pre-request
The previous requests are saved as chat_history
, and the current content is placed in the message
.
However, if we consider chat_history
as our touchdown goal, then we will be back to the dilemma in the previous article. Obviously, we cannot input different users’ identifiers into chat_history. Luckily, we have the documents
attribute. Based on the langchain
source code, we can infer that it accepts a list of dictionaries (everything happens before submitting the request).
Code adjustments
method 1
Rewrite the statically defined prompt template to be dynamic, meaning use a lambda function to dynamically generate the prompt (LCEL powered). Remove the history placeholder and instead pass the cxt_dict
(conversation history in the form of a list of dictionaries) to documents
.
method 2
Static configuration prompt, directly pass the cxt_dict
to documents
. Although it simplifies the invoke()
, it doesn’t go through LCEL, so cxt_dict
will be treated as a string. Here, the dumpd
helper function is used to convert it to an object. Actually, I was also confused here for a long time, but langsmith
helped me see everything. There’s no reason for such details, only through langsmith
debugging can these be discovered.
More to colab
You can check the section and subsection “Failed approach: Convert all history into a list of dictionaries: `cxt_dict`” in the notebook to see the differences in output.
One more thing
When I was exploring the langchain
code, I found that when submitting the OpenAI model, the additional_kwargs
can carry the function_call outside, and it can also carry the name
, so the model can see the name
, allowing us to put all user identification of the message into the name
.
As a supplement to the previous article, it is recommended to refer to the source code of langchain
pre-request information (a special field in additional_kwargs
) to the model to find out the properties that the model can see.
Check the section and subsection of code Failed approach: Directly use the history of `ConversationBufferMemory`: `cxt_history`.
Thank you for reading. 👍