openai function calling vs langchain agent